Опыт внедрения таблицы коммуникации с клиентами

Данная статья основана на опыте внедрения подобной таблицы в нашей корпоративной CRM-системе.

Итак начнем. В вашей организации может быть огромное количество различных источников коммуникации с клиентами:

  • Звонки
  • Email рассылки
  • Смс рассылки
  • Viber рассылки
  • PUSH
  • Call-back формы
  • и т.д.

Для осуществления всех этих коммуникаций используются различные технологии и сервисы, которые хранят данные в различных таблицах, форматах. Т.е. все данные разорганизованные и обособленные.

Для того, чтобы нормализовать это все, вам нужно всего лишь завести одну таблицу в вашей БД и складывать туда все коммуникации.

Все данные в эту таблицу вы можете ложить самым удобным для вас способом:

  1. Синхронизация данных
  2. В момент совершения коммуникации
  3. Пост-фактум после коммуникации
  4. Вебхуки (если это email рассылки)

Следует отметить, что для каждого типа коммуникаций в таблице будет свой type_id, а также будут использоваться различные колонки для хранения данных.

Немного практики.

Для начала нужно создать несколько таблиц:
1. Таблицу с перечнем типов данных: communications_type
2. Таблицу коммуниникаций: communications

-- Дамп структуры для таблица communications
CREATE TABLE `communications` (
	`id` BIGINT(20) NOT NULL AUTO_INCREMENT,
	`type_id` TINYINT(1) NOT NULL DEFAULT '1',
	`contact_id` INT(11) NULL DEFAULT NULL,
	`manager_id` INT(11) NULL DEFAULT NULL,
	PRIMARY KEY (`id`, `type_id`),
	INDEX `contact_id` (`contact_id`),
	INDEX `manager_id` (`manager_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

-- Дамп структуры для таблица communications_type
CREATE TABLE `communications_type` (
	`id` TINYINT(3) NOT NULL AUTO_INCREMENT,
	`caption` CHAR(50) NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=COMPACT
AUTO_INCREMENT=5
;
-- Дамп данных таблицы communications_type: ~4 rows (приблизительно)
INSERT INTO `communications_type` (`id`, `caption`) VALUES
(1, 'Calls'),
(2, 'Emails'),
(3, 'SMS'),
(4, 'Push');

По мере того, как вы будете интегрировать новый тип коммуникации в вашу таблицу communications, она будет расширяться новыми колонками и новые типы будут попадать в таблицу communications_type.

Если вам нужно добавить данные для звонков (type_id=1), можно использовать:

  • src
  • dst
  • start
  • answer
  • end
  • duration
  • billsec
  • disposition
  • uniqueid /это уникальное поле в таблице звонков, чтобы можно было позже найти необходимую информацию по, скажем телефонному разговору/

Если email (type_id=2):

  • email
  • date_send
  • date_receiving
  • newsletter_id /поле связи с рассылкой, может быть вы получаете статус: доставлен, прочитан и прочие/

Резюме, таблица коммуникаций будет просто ОГРОМНОЙ, но хранить все необходимые данные по коммуникациям.

Небольшая подсказка:

  1. Так как данные из таблиц будут постоянно извлекаться, используйте интексы
  2. Документация наше все, опишите все процессы которые складывают данные в таблицу, когда они работают и где. Какие технологии используются

Поверьте, вам это поможет. Стоит это сделать! Удачи.