Контакты в CRM: наводим порядок
Article title

Хаос в контактах

18 октября 2016
~ 10 минут на чтение
Александр Куц
Аналитик корпоративных систем
CRM-система упрощает работу сотрудников, совершенствует качество сервиса и помогает больше продавать. С ее помощью вы можете сформировать и вести базу клиентов, быстро оформлять сделки, оценивать эффективность коммерческого отдела. Основное назначение системы — автоматизировать процессы. Но иногда это не удается по очень простой причине.
Все дело — в контактах, которые нужно привести в порядок. CRM постоянно пополняется городскими и мобильными номерами клиентов — одни из них вводят менеджеры, другие подгружаются из форм на сайтах, третьи попадают в систему из писем, приходящих на почту. Выглядят они абсолютно по-разному: со скобками, дефисами, пробелами, плюсами, кодами, запятыми и т. п. — чтобы разобраться, где мобильный, а где городской номер, часто приходится тратить уйму времени. Особенно, когда клиенты из разных регионов. А если один и тот же номер дублируется дважды, но в разной форме? Какая с такими проблемами автоматизация?

Мы поняли, что пока не приведешь номера к единому формату, автоматизировать ничего не получится. Поэтому разработали бизнес-процесс (здорово, что в «Битрикс24» есть такая возможность!). Приведение номеров к единому формату снижает вероятность ошибки менеджера при наборе телефона клиента и делает возможным автоматический звонок по клику из CRM.

Суть бизнес-процесса — в исправлении новых и ранее введенных номеров. Как мы это сделали, делимся с вами.

Как работает бизнес-процесс

Вы вводите новый номер или изменяете тот, что уже есть в системе → CRM автоматически производит посимвольный разбор введенного номера и приводит его к виду +7 (ХХХ) ХХХ-ХХ-Х

Исключение составляют короткие и добавочные номера. Короткий номер (меньше 11 цифр) отражается таким, как есть. Добавочный указывается в скобках после основного номера, например, +7 (ХХХ) ХХХ-ХХ-ХХ (2315).

Сложность реализации

1. Определение префикса номера

Первая сложность состоит в том, что нужно однозначно определить, какие цифры являются префиксом номера. Если префикс отсутствует, система должна это заметить и дополнить номер.

Рассмотрим пример. Цифра 8, с которой начинается номер, может быть как префиксом (вместо +7), так и частью кода города (например, 8352). В первом случае цифру нужно заменить, во втором — добавить. Еще один важный момент: нужно учитывать, что у разных стран разные префиксы в телефонных номерах. Если менеджер вводит номер с российским кодом, например, 495… или 937…, CRM должна добавить префикс +7. Однако если номер украинский, нужно добавить другой префикс — 37.

2. Определение добавочного номера

Еще больше усложняют задачу добавочные номера, которые могут быть представлены самым разным образом. Система должна определить, где кончается основной номер и начинается добавочный.

Особенность реализации бизнес-процесса в «Битрикс24» — в том, что по запросу телефона из полей «Лид» или «Контакт» при наличии нескольких номеров процедура извлекает сплошную текстовую строку с разделителями в виде запятой. Но дело в том, что добавочный номер тоже может быть введен через запятую. Поэтому от универсального разделения необходимо было отказаться.

Для получения, а также последующей записи каждого номера пришлось использовать php-процедуру прямого доступа к таблице хранения данных по их ID.

Алгоритм бизнес-процесса

Алгоритм бизнес-процесса включает 3 блок-схемы.

Управление данными

  • С помощью PHP-процедуры выполняется запрос к базе лидов или контактов.
  • PHP-код получает из базы лидов и контактов номера телефонов и их идентификаторы. Для их разделения мы решили использовать квадратные скобки — [ и ]. Это нужно, чтобы при обработке система понимала, где номер, а где его идентификатор.
    Пример: +7 (495) 332-16-98[1215]909-723-4167[1217]
  • Каждому номеру присваивается тип (num_type) — work, mobile и др., а также длина (num_len).
  • Запускаем цикл посимвольного перебора полученной строки номеров. Переменная «Счетчик цикла» (i) меньше длины строки номеров (num_len).
  • Очередной i-ый символ номера телефона (sumb1) считываем в блоке действия «Чтение следующего символа». Проверяем, не является ли он специальным символом разделения номеров.
  • Если очередной символ — [, значит мы дошли до конца номера телефона. Изменим значение управляющего переключателя (flag) с 0 на 1, добавим 1 к счетчику цикла (i) и прочитаем следующий символ после [. Символы, считываемые после открывающей квадратной скобки, будут относиться к идентификатору номера. Если очередной символ — ], значит мы дошли до конца идентификатора номера. Изменим значение управляющего переключателя с 1 на 0 и добавим 1 к счетчику цикла.
  • Поскольку мы определили и номер, и идентификатор, можно провести окончательное формирование и запись очередного номера телефона в таблицы базы данных контактов и лидов. Если в номере меньше 11 символов, оставляем его без изменений. Для этого проверяем позицию последнего символа в номере (pos). Если pos меньше 11, запись номера в таблицу контактов и лидов пропускается. Если в номере больше 11 символов (есть добавочный номер), то добавляем закрывающую скобку — ). В итоге формируется номер такого вида: 7ХХХХХХХХХХ (ХХХХ).
  • Чтобы привести номер к единому виду — +7 (ХХХ) ХХХ-ХХ-ХХ (ХХХХ), разбиваем его на 4 сегмента функцией substr. Получаем строковые переменные: kod, part1, part2 и part3. Собираем их в строку номера, добавляем +, скобки и дефисы. Порядок сборки можно поменять и получить любой другой шаблон номера.
  • После этого определяем тип номера. Для этого из строки «Тип номера» (num_type) считываем сначала первый символ, который отражает длину номера, записываем его в переменные «Длина типа» (len_type) и «Записать тип номера» (num_value_type). Затем прочитываем тип нужной длины, а переменную «Записать комплексную строку типа» (num_complex_type) формируем, добавляя к началу «PHONE_». Получаем PHONE_WORK, PHONE_MOBILE и т.п. Все эти действия необходимо проделать, чтобы записанный в таблицу номер имел конкретный тип.
  • Заносим данные в нужную ячейку таблицы согласно идентификатору номера и параметрам записи.
  • Считываем символ, следующий после ]. Затем очищаем содержание переменных «Номер телефона» (number_tel), «ID телефона» (id_tel) и «Позиция символа в номере» (pos). Если очередной символ не является разделителем, ничего не делаем и переходим к посимвольному разбору.

Посимвольный разбор строки

Так выглядит алгоритм удаления лишних, ничего не значащих символов — +, (,), — и других.
  • По значению переменной «Переключатель» (flag) определяем, с чем сейчас работаем — с номером или с идентификатором.
  • Если работаем с номером, ведем подсчет позиции символа (pos). Номер не должен превышать 11 символов (все, что свыше, — это добавочный номер, его мы не трогаем). Если в телефонной строке меньше 11 символов, определяем тип символа номера (sumb1). Если это цифра, добавляем ее в строковую переменную «Номер телефона» (number_tel). После этого прибавляем 1 к позиции символа в номере (pos).
  • Если позиция символа в номере (pos) равна 11, то после номера ставим пробел и открывающую скобку. Цифры, указанные после скобки, оформляются как добавочный номер, пока не встретится символ [, обозначающий конец телефона. Исключение в данном случае составляет запятая. Если она встречается не на первой позиции, то также добавляется в номер как разделитель для двух и более добавочных номеров.
  • Если мы работаем с идентификатором, считываем символ номера телефона (sumb1) и добавляем его в переменную «ID_телефона» (id_tel) в конец.

Определение начала номера

Как мы писали выше, самое сложное — определить, что делать с началом номера. Телефон может начинаться с +7, 8, 37, (909) и других подобных комбинаций. При этом 8 может быть как префиксом, заменяющим +7, так и самостоятельной значащей цифрой кода города, например (8352). То есть только по цифре 8 на первой позиции мы не можем однозначно решить, что делать: менять ее на 7 или добавлять 7 перед 8. Кроме того в нашей CRM фигурируют украинские номера, которые начинаются с 37.

Для определения начала номера мы разработали алгоритм:
  • Если номер начинается с +7 или 7, убираем +, оставляем только цифру.
  • Если номер начинается с 3, оставляем его без изменений.
  • Если номер начинается с 8 или с (8), проводим дополнительную проверку, чтобы выяснить, что это за цифра — префикс или часть кода города. Если первые две цифры — 89 или 88, заменяем 8 на 7. Если вторая цифра не 8 и не 9, добавляем 7 перед 8.
  • Если номер начинается с любой другой цифры, добавляем вперед 7 и увеличиваем счетчик символов номера на 1.
Блок-схема получилась объемной. Показываем на двух скриншотах. На первом — начало алгоритма, на втором — конец.
Алгоритм используется, когда уже прочитаны и очищены от незначащих символов первые цифры номера, поскольку необходимо понять их комбинации.

Вариант 1

Если счетчик символов равен 3, начинаем проверку:

Считываем первый символ номера. В зависимости от его значения выбираем продолжение:
  • 8 — проводим дополнительную проверку.
  • 7 — оставляем номер без изменений.
  • 3 — оставляем номер без изменений.
  • Другой символ — добавляем 7 к началу номера.
Вариант 2

Если первый символ — 8, считываем уже не один, а два первых символа и проверяем:
  • 89 или 88 — меняем 8 на 7.
  • Другой символ — добавляем 7 перед 8.
В результате получаем сформированную 11-символьную строку (если номер не короткий) без лишних символов и пробелов. Номер начинается или с 7, или с 37.

Когда все преобразования очередного символа выполнены, увеличиваем счетчик цикла (i) на 1 и переходим к началу цикла.
Пока алгоритм несовершенный, поскольку не учитывает некоторые редкие сочетания, например, 84 и 83. В дальнейшем мы планируем это исправить, а также добавить дополнительный анализ исходного номера на наличие скобок и пробелов. Скажем, в комбинации «8(495)» 8 можно будет заменять на +7, а в комбинации «(849)» перед 8 добавлять 7.

Сейчас бизнес-процесс запущен только в нашей корпоративной CRM, мы плотно продолжаем над ним работать. Однако совсем скоро мы планируем выпустить полезное дополнение к «Битрикс24» в свет. Хотите сделать подарок вашему коммерческому отделу и повысить клиентский сервис? Закажите автоматизацию бизнеса с приведением телефонных номеров к единому формату. Избавьтесь от хаоса :)
Читайте по теме
Александр Куц
5745
Оцените статью
(3.77)

Поделитесь материалом с друзьями и коллегами:

Комментарии к статье

Другие статьи в блоге
Статьи ~ 20 минут на чтение

G Suite: 33 полезные функции для бизнеса

742
24 апреля 2020
Статьи ~ 5 минут на чтение

Как работать из дома эффективно: лайфхаки от удаленщиков Uplab

868
31 марта 2020
Статьи ~ 20 минут на чтение

Как продвинуть интернет-магазин с помощью коммерческих факторов

1234
27 марта 2020
Статьи ~ 15 минут на чтение

Work From Home: полезные сервисы для удаленной работы

1155
24 марта 2020
Статьи ~ 30 минут на чтение

Теория ограничений систем Голдратта: как повысить эффективность бизнеса

2453
16 марта 2020
Статьи ~ 10 минут на чтение

Сайты электротехнической отрасли: разбираем лучшие практики

752
28 февраля 2020
Статьи ~ 15 минут на чтение

Как сделать качественный сайт электротехнической компании. Чек-лист

1163
27 февраля 2020
Статьи ~ 30 минут на чтение

30 сервисов, чтобы создать онлайн-курс и заработать на нем

10682
18 февраля 2020
Статьи ~ 15 минут на чтение

Наполнение сайта контентом без ошибок: чек-лист

2565
31 января 2020
Статьи ~ 20 минут на чтение

Как в Uplab разрабатывают сайты. Финальный этап

1200
24 января 2020
новое
Мы сделали постер
«Набор инструментов для организации работы компании в online»
Получить бесплатно
Закрыть
Спасибо
за обращение
Мы ответим вам
в ближайшее время.
Получить постер