...

понедельник, 22 мая 2017 г.

Интеграция CRM и телефонии, уроки разработки сложного продукта


История о том, как разработка интеграции телефонии Sipuni и нескольких CRM стала для нас лабораторией и повлияла не только на технологии, которые мы используем, но и на процессы внутри компании.


Зачем нужна интеграция телефонии и CRM


Интеграция телефонии и CRM упрощает работу, например, отделов продаж. При входящих или исходящих звонках автоматически создаются контакты и сделки. В контактах сразу заполняется номер клиента, и новая сделка появляется на первом шаге воронки.



Автоматические сделки. Содержат название магазина и номер клиента. В тэгах источник клиента из коллтрекинга.


У менеджера появляется уведомление, в котором видно, кто звонит, на какую линию и ссылки на контакт и сделку в CRM.



Уведомление о входящем звонке


Для пропущенных звонков автоматически создается задача о том, что надо перезвонить такому-то клиенту.


При подключенном коллтрекинге видно по какой рекламе звонит клиент. А UTM метки попадают в поля контакта.


Если контакт уже существует в CRM то при входящем звонке АТС направляет звонок на менеджера, ответственного за контакт.


Сложности разработки интеграции для большого количества CRM


У нас уже была интеграция c amoCRM. Но она была тесно связана с кодом АТС и это затрудняло подключение новых интеграций. Поэтому решили создать отдельный сервис интеграций.


Сначала я хотел создать универсальный API для нескольких CRM. Но мы отказались от этой идеи. Потому что у каждой CRM свои понятия, например, у amoCRM — контакты и сделки, у RetailCRM — клиенты. Создание универсального API привело бы к подмене понятий и ограничении функционала у разных CRM.


Нашли такое решение: для каждой CRM свой модуль, который принимает события от АТС и поступает с ними согласно своей логики, создает контакты, лиды или клиентов. Это позволило единообразно работать с этими модулями и при этом не идти на компромиссы с функциональностью конкретной CRM.


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


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


В результате, мы разработали фрэймворк, в который легко подключать новые CRM. Это получилось не сразу, пришлось полностью переделать фрэймворк три раза, прежде чем он стал удобным.


Технологии, которые повлияли на качество продукта


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


Для непрерывной интеграции используем Buildkite.com. Jenkins не осилили, ни у кого не хватило времени вдумчиво с ним разобраться. Buildkite оказался простым и все было готово за один день.



Интерфейс Buildkite.com


Непрерывная интеграция поменяла наше отношение к юнит-тестам. Они показали как много ошибок выявляют. Теперь мы пишем их не потому что так принято или надо, а потому что они дают уверенность, что код рабочий.


Первые проблемы и новый процесс работы с техподдержкой


Когда клиенты начали использовать новую интеграцию появились первые ошибки. Пошел шквал замечаний и предложений. Коллеги из техподдержки просто передавали разработчикам ошибки клиентов. Разработка остановилась, потому что программисты только анализировали логи и разбирались с ошибками. Многие ошибки были похожими, но время на них все равно тратили.


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


Для записи ошибок начали использовать Asana вместо Jira. Нужен был простой инструмент, где ребята из техподдержки могут быстро создавать задачи и получать уведомления о готовности.



Пример списка ошибок в Asana


Затем, мы предоставили коллегам доступ к логам. На этом проекте мы начали использовать GrayLog, он показывает логи в вебинтерфейсе и быстро находит нужные записи.


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


Теперь коллеги из техподдержки прежде чем передать ошибку программистам сначала сами смотрят логи и большинство проблем решают без участия разработчиков.


Тестирование продукта, снова выручают технологии


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


Узнал, что это называется Test Case Management Tools. Из нескольких кандидатов остановился на testlodge.com. Теперь проверка продукта стало удобнее и полезной оказалась возможность назначить тестирование разных CRM на разных людей.



Карточка теста, на ней видно что сделать и ожидаемый результат. Остается проверить и нажать на одну из кнопок снизу.



Сводка выполнения тестов


Долги программирования


Как в любом проекте, иногда требуется что-то сделать быстро. Появляются места в проекте, которыми недовольны разработчики: неоптимальный либо неудобный код. Это ухудшает не только поддержку проекта, но и мотивацию команды.


Чтобы решить эту проблему договорились с директором, что один день в неделю мы можем посвятить рефакторингу. Программисты стали относится к коду как хозяева, а не как подрядчики. Если что-то сделано плохо, просто переделываем и не беспокоимся, что есть другие задачи. Этот день для наведения порядка.


Заключение


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


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

Комментарии (0)

    Let's block ads! (Why?)

    Комментариев нет:

    Отправить комментарий