Зачем нужна интеграция собственной CRM/ERP/Desk с АТС
В большинстве систем автоматизации бизнеса (CRM/ERP/Desk и т.д.) автоматизируется общение с клиентами и/или партнерами. Пока значимая часть общения происходит по телефону, систему просто необходимо интегрировать с IP-телефонией.
Специально для разработчиков CRM/Desk и других систем автоматизации, мы предлагаем инструкцию по интеграции вашей системы с IP-телефонией Zadarma.
Преимущества интеграции с Zadarma:
- большая клиентская база Zadarma (более 2 млн ) получит доступ к вашим сервисам;
- ваши клиенты смогут интегрировать телефонию без затрат (АТС, API, интеграции - бесплатны);
- всемирное покрытие услуг, ваши клиенты могут быть где угодно (поддержка 5 языков, дата-центры на трех континентах, виртуальные номера в 100 странах мира).
Также после интеграции, если посещаемость вашего сайта превышает 30 000 пользователей в месяц, мы готовы протестировать вашу интеграцию, разместить инструкцию на нашем сайте и интеграцию в личном кабинете (что даст вашей системе дополнительный поток лояльных клиентов от одного из самых популярных VoIP операторов в СНГ и Европе).
В личном кабинете по этой ссылке доступны прямые интеграции (разработанные нами) с различными системами, также в разделе Помощь - Инструкции по настройке услуг вы можете найти примеры настройки интеграции со сторонними системами, разработанные без нашего участия. Открытый API позволяет самостоятельно реализовать полноценную интеграцию с виртуальной АТС Zadarma, с этой задачей справится любой разработчик по причине невысокой степени сложности. Для удобства будем рассматривать интеграцию виртуальной АТС Zadarma и сторонней CRM
Основные функции:
- Звонки в один клик из интерфейса CRM.
- Всплывающие уведомления о входящих/исходящих звонках с информацией о звонящем, ссылкой на карточку клиента.
- Статистика звонков, аудиозаписи звонков в карточке клиента.
- Автоматическое создание контактов/лидов/сделок при звонке от нового клиента.
- Автонаправление входящего звонка от существующего клиента на ответственного менеджера.
- Отображение имени клиента на вашем IP-телефоне при входящем звонке.
- Напоминания о пропущенных звонках.
- Использование собственного черного списка для входящих звонков.
- Добавление интеграции в личный кабинет Zadarma.
Взаимодействие с API можно условно разделить на две части:
1. Запросы (POST, GET) со стороны CRM к API Zadarma
2. Система уведомлений о звонках (webhook), POST-запросы с информацией о звонках отправляемые нашим API в сторону CRM
Полная документация по API находится тут
1. Настройка интеграции со стороны Zadarma.
Условия необходимые для начала настройки интеграции:
В личном кабинете Zadarma:
1. Сгенерированы ключи авторизации API (Key и Secret)
2. Создана виртуальная АТС и пройден Мастер настройки (внутренние номера АТС с записью разговоров по количеству пользователей CRM, сценарий входящих звонков)
У вас есть аккаунт Zadarma и некая CRM у которой должен быть URL адрес на модуль телефонии, например:
https://mybestcrm.com/zadarma
или
https://id12345678.mybestcrm.com/zadarma
Далее в качестве примера будет использоваться ссылка https://mybestcrm.com/zadarma (У вас должна быть ссылка указывающая на вашу CRM)
В личном кабинете Zadarma в разделе Настройки - Интеграции и API необходимо нажать на блок "Notifications" в столбце “События, по которым необходимо отправлять данные:” должны быть включены все типы уведомлений. В секции “Уведомления о звонках в АТС” в поле “Ссылка вашего ресурса” введите URL вашей CRM, на этот адрес будут отправляться уведомления о звонках.
Для того, чтобы система приняла ссылку, необходимо добавить проверочный код вначале скрипта.
Пример на PHP:
<?php if (isset($_GET['zd_echo'])) exit($_GET['zd_echo']); ?>
Валидация ссылки происходит после нажатия кнопки “Добавить”, на ссылку отправляется произвольный набор символов, например 1234567, согласно вышеуказанному коду ссылка должна вернуть отправляемое значение, без дополнительных символов, пробелов, BOM-последовательностей и т.д. Если валидация ссылки не проходит проверьте какое значение возвращает ссылка, отправьте curl запрос на вашу ссылку добавив к ней ?zd_echo=1234567
curl https://mybestcrm.com/zadarma?zd_echo=1234567
В ответ ссылка должна вернуть отправляемое значение 1234567
Если там пусто или другое значение отличное от 1234567 - валидация не пройдет.
Для увеличения безопасности, рекомендуем разрешить доступ к вашей ссылке только с IP 185.45.152.42 В каждом запросе на Вашу ссылку будет приходить дополнительный заголовок "Signature", по которому также сможете сверять целостность и подлинность данных. Подробнее тут
2. Настройка интеграции со стороны CRM.
В личном кабинете Zadarma уже подтверждена ссылка, указывающая на CRM, на которую будут отправляться уведомления о звонках, созданы ключи авторизации, теперь эти ключи необходимо сохранить в CRM. На стороне CRM нужна страница для настройки интеграции, назовем её “Настройки телефонии”, на этой странице обязательно должны быть следующие основные параметры:
- Поля для ввода ключей авторизации (Key и Secret).
- Ссылка на модуль телефонии в CRM которую мы подтверждали ранее https://mybestcrm.com/zadarma.
- Список пользователей с возможностью назначить каждому свой собственный, уникальный внутренний номер атс.
Список внутренних номеров можно получить методом GET /v1/pbx/internal/
Из полученного списка внутренних номеров формируем контекстное меню для назначения внутреннего номера каждому пользователю CRM Если внутренний номер уже назначен одному пользователю, этот внутренний номер больше не должен быть доступен для выбора и назначения другому пользователю.
Рекомендуем одного из пользователей назначать ответственным по умолчанию, создав соответствующий чекбокс на странице настроек телефонии. Ответственный по умолчанию - это сотрудник, который будет назначаться ответственным по событиям у которых нет явного ответственного. Например: Входящий звонок от нового клиента направлен одновременно на 5 внутренних номеров (5 пользователей CRM ) и никто из них не снял трубку, потенциального клиента не хотелось бы терять, для этого в CRM можно создать событие, задачу или лид “Пропущенный звонок с номера”, но на кого из пользователей его назначить, если назначить на всех пятерых пользователей, то клиенту могут перезвонить 5 раз, что не очень хорошо, в этом случае можно назначать событие на сотрудника ответственного по умолчанию (Например руководитель отдела продаж). Если у вас в CRM есть пул неразобранных лидов и пользователи сами берут оттуда лиды или они назначаются пользователям автоматически, согласно внутреннему алгоритму, опцию ответственного по умолчанию можно не использовать.
Настройки телефонии в CRM обычно доступны только пользователю с правами администратора/руководителя. Для call-центров может быть полезным отображение баланса из личного кабинета Zadarma на странице настроек телефонии в CRM. Получить баланс можно методом GET /v1/info/balance/
3. Исходящие звонки из интерфейса CRM ▾
3.1 Виджет на WebRTC для звонков из браузера.
Если ваша CRM использует https вы можете встроить наш виджет. Внимание: Не размещайте виджет в открытом доступе в сети, иначе через ваш аккаунт сможет позвонить любой желающий. При каждой загрузке страницы со стороны серверного кода вам необходимо генерировать ключ для webrtc, полученный с помощью метода GET /v1/webrtc/get_key нашего API (Время жизни ключа - 72 часа).
В личном кабинете на странице Настройки - Интеграции и API в секции "Интеграция WebRTC виджета" необходимо ввести домен вашей CRM и выбрать настройки внешнего вида и расположения виджета. Далее используйте полученный код для интеграции в вашу CRM. Вместо YOUR_KEY подставьте сгенерированный через API ключ; вместо YOUR_SIP подставьте ваш SIP-номер или полный логин внутреннего номера АТС, с которого будут совершаться звонки.
Пример кода:
<script src="https://my.zadarma.com/webphoneWebRTCWidget/v8/js/loader-phone-lib.js?v=17"></script>
<script src="https://my.zadarma.com/webphoneWebRTCWidget/v8/js/loader-phone-fn.js?v=17"></script>
<script>
if (window.addEventListener) {
window.addEventListener('load', function() {
zadarmaWidgetFn('YOUR_KEY', 'YOUR_SIP', 'square' /*square|rounded*/, 'en' /*ru, en, es, fr, de, pl, ua*/, true, "{right:'10px',bottom:'5px'}");
}, false);
} else if (window.attachEvent) {
window.attachEvent('onload', function(){
zadarmaWidgetFn('YOUR_KEY', 'YOUR_SIP', 'square' /*square|rounded*/, 'en' /*ru, en, es, fr, de, pl, ua*/, true, "{right:'10px',bottom:'5px'}");
});
}
</script>
Виджет в скрытом состоянии:
Виджет в развернутом положении:
3.2 Звонки с помощью обратного звонка (Callback)
В интерфейсе CRM возле каждого номера телефона добавляем иконку/кнопку для инициации звонка на этот номер телефона, также рекомендуем реализовать веб-телефон с номеронабирателем для звонка на новый номер, ранее не сохраненный в CRM. Исходящие звонки осуществляются по принципу Callback. На внутреннем номере виртуальной атс должен быть настроен IP телефон или софтфон для приема и совершения звонков. Пользователь в CRM кликает на иконку рядом с номером телефона или на кнопку звонка в веб-телефоне, со стороны CRM отправляется Callback.
Метод GET /v1/request/callback/
Параметры:
- from – трехзначный внутренний номер АТС который назначен пользователю.
- to – номер телефона, на который хочет позвонить пользователь.
Пользователь получает входящий звонок на свой софтфон, снимает трубку и ожидает соединения с номером, на который он хочет позвонить.
Пример реализации:
4. Всплывающие уведомления о звонках в интерфейсе CRM ▾
Когда внутренний номер атс получает или совершает звонок, необходимо чтобы в CRM отображалось соответствующее уведомление. Уведомление должно быть показано только у того пользователя, внутренний номер которого участвует в звонке. В уведомлении о звонке может отображаться следующая информация:
- Номер телефона
- Имя контакта/компании/лида если номер телефона ранее сохранен в CRM, имя является ссылкой для перехода непосредственно к сущности (контакт/компания/лид)
- Если звонок от нового клиента - кнопка создания контакта/компании/лида
- Имя ответственного сотрудника, если звонок от существующего клиента
- Виртуальный номер, на который поступил входящий звонок(Номер подключенный в Zadarma)
Триггером для появления всплывающего уведомления является событие NOTIFY_INTERNAL (начало входящего звонка на внутренний номер АТС.) либо событие NOTIFY_OUT_START (начало исходящего звонка с АТС.)
Когда снимут трубку и начнется разговор, в CRM будет отправлено уведомление NOTIFY_ANSWER (ответ при звонке на внутренний или на внешний номер.) которое в свою очередь является триггером для всплывающего уведомления, при получении NOTIFY_ANSWER в уведомлении может запуститься отсчет времени показывающий длительность звонка в реальном времени, также например заголовок уведомления “Звонок от 442037691880” может быть заменен на “Разговор с 442037691880”
Когда звонок завершен, будет отправлено уведомление NOTIFY_END (конец входящего звонка на внутренний номер АТС.) или NOTIFY_OUT_END (конец исходящего звонка с АТС.)
После получения NOTIFY_END или NOTIFY_OUT_END всплывающее уведомление должно закрыться.
Пример реализации:
5. Аудиозаписи и статистика звонков ▾
Для подгрузки аудиозаписей из Zadarma в CRM необходимо чтобы в настройках внутреннего номера АТС была включена запись звонков в облако. После завершения звонка, когда аудиозапись будет готова для скачивания, в CRM будет отправлено уведомление NOTIFY_RECORD (запись звонка готова для скачивания.)
В параметре call_id_with_rec содержится идентификатор используя который можно получить запись звонка, для этого используем метод GET /v1/pbx/record/request/. В ответе будет содержаться ссылка на файл с записью звонка, если в вашей CRM есть собственное облако для хранения файлов, запись может автоматически загружаться в облако CRM. Если своего хранилища нет, можно реализовать кнопку play для воспроизведения аудиозаписи по полученной ссылке. Кнопку воспроизведения записи звонка можно размещать рядом с информацией о звонке, например в ленте лида/контакта/сделки и в общей статистике звонков.
Для формирования общей статистики звонков в CRM необходимо использовать информацию о звонках полученную из уведомлений NOTIFY_END и NOTIFY_OUT_END.
6. Автоматическое создание контактов/лидов/сделок при звонке от нового клиента ▾
Автоматическое создание сущностей или событий в CRM при входящих звонках с неизвестных номеров или исходящих звонках на неизвестные номера. При поступлении входящего звонка или инициации исходящего звонка, номер телефона сверяется с базой данных из CRM и если номер не найден, можно создавать новый контакт/лид/сделку/заявку и назначать эту сущность пользователю который совершал звонок. Рекомендуем делать отдельные опции автосоздания событий для входящих и исходящих звонков. Для исходящего звонка создавать сущность можно: когда звонок инициирован (уведомление NOTIFY_OUT_START), когда звонок отвечен (уведомление NOTIFY_ANSWER), по завершению звонка (уведомление NOTIFY_OUT_END). Номер телефона, на который совершается звонок передается в параметре destination
Для входящего звонка создавать сущность можно когда звонок поступил на внутренний номер пользователя CRM (уведомление NOTIFY_INTERNAL, номер звонящего передается в параметре caller_id) для того чтобы во время разговора пользователь уже мог открыть только что созданную карточку звонящего клиента, редактировать её, вносить пометки и т.д. По завершению входящего звонка будет отправлено уведомление NOTIFY_END в котором в параметре internal будет передан внутренний номер АТС, который принял этот звонок, сопоставив этот номер с списком пользователей CRM, система поймет какого пользователя назначить ответственным. Либо можно создавать сущность по завершению входящего звонка после получения NOTIFY_END. Некоторые CRM системы вообще не используют автоматическое создание сущностей, давая возможность менеджеру принявшему звонок определить целевой звонок или нет и вручную создать лид/контакт/задачу.
7. Автонаправление входящего звонка на ответственного сотрудника ▾
При входящем звонке от существующего клиента (Его номер телефона уже сохранен в CRM) звонок автоматически направляется на пользователя ответственного по этому клиенту, звонящий при каждом звонке к вам не слушает голосовое приветствие и затем не просит соединить с его персональным менеджером с которым он разговаривал минуту назад, его звонок автоматически будет направлен на телефон ответственного менеджера, пользователя CRM. Реализуется с помощью уведомления NOTIFY_START
В параметре caller_id передается номер звонящего, если этот номер ранее сохранен в CRM например как контактный номер одного из клиентов и по этому клиенту есть ответственный, можно выполнить направление входящего звонка на внутренний номер ответственного. Также можно указать длительность дозвона до ответственного пользователя, например 15 секунд, если ответственный отлучился и не может снять трубку, через 15 секунд входящий звонок от его клиента будет возвращен на голосовое меню и далее звонок пойдет по сценарию атс. Реализуется с помощью ответа на POST запрос NOTIFY_START
{
"redirect": “101”,
"return_timeout": “15”
}
где,
- redirect - внутренний номер АТС (трехзначный номер).
- return_timeout - Значение в секундах >= 3 - продолжительность звонка внутреннего номера, прежде чем звонок вернется на меню, рекомендуемое значение 15 или 20.
8. Отображение имени клиента в ip-телефоне/софтфоне ▾
Опция позволяет передавать имя клиента из CRM на ip-телефон или софтфон пользователя в котором он принимает входящий звонок. Реализуется с помощью уведомления NOTIFY_START и ответа на него, в уведомлении в параметре caller_id передается номер звонящего, если номер уже сохранен в CRM и закреплен за клиентом/контактом/лидом, в ответе на NOTIFY_START можно передать латиницей имя клиента:
{
"caller_name": "IBM"
}
где,
- caller_name - имя клиента/компании из CRM.
9. Напоминания о пропущенных звонках ▾
При входящем звонке от клиента при получении уведомления NOTIFY_END из параметра caller_id можно получить номер звонящего и найти клиента/контакт/лид с этим номером и менеджера ответственного по этому клиенту. Если звонок не был отвечен, статус звонка не answered в параметре disposition, ответственному менеджеру можно создать задачу/напоминание/уведомление о том что был пропущенный звонок от клиента.
10. Черный список в CRM ▾
Вы можете создать список номеров звонки с которых будут отклоняется, вносить номера в список можно на странице настроек телефонии, либо сделать для каждого пользователя кнопку добавления номера в черный список. Реализуется также на основе уведомления NOTIFY_START и ответа на него, если номер звонящего из параметра caller_id находится в черном списке CRM в ответе на NOTIFY_START передаем:
{
"redirect": "blacklist"
}
11. Добавление интеграции в личный кабинет Zadarma ▾
После успешного выполнения предыдущих шагов и успешном тестировании на уровне отдельного пользователя можно подать заявку на добавление интеграции в маркетплейс Zadarma (если ежемесячная посещаемость сайта вашей системы превышает 30 000 пользователей). Это позволит пользоваться данной интеграцией любому пользователю Zadarma, имеющему активированный аккаунт и настроенную АТС. Также это позволит конечному пользователю быстро и удобно сохранять все необходимые настройки. Заявки необходимо отправлять на электронный адрес integration@zadarma.com с пометкой "Запрос на добавление интеграции c системой [Имя вашей СRM] в маркетплейс Zadarma". Заявка должна содержать следующие дополнительные данные:
URL-адрес в Вашей CRM для включения интеграции
На данный адрес будет отправляться информации о пользователе Zadarma, который пытается осуществить интеграцию телефонии и Вашей СRM. В выбранном формате передачи данных (GET, POST) Вам будет передан уникальный идентификатор пользователя в формате строки md5 hash. В ответ вы должны отправить случайно сгенерированный ключ, который будет привязан к данному пользователю. В дальнейшем при каждом запросе к Вашей CRM системе идентификатор пользователя и отправленный вами хэш будут использоваться как подтверждающие данные с использованием заголовка:
Authorization: Bearer [userId . hash]
Также идентификатор пользователя будет передаваться в каждом уведомлении о звонке в поле zdUserId. Необходимы примеры возможных ответов.
URL-адрес в Вашей CRM для отключения интеграции
На данный адрес будет отправляться запрос при попытке отключения пользователем интеграции. Используется стандартная авторизация Bearer
URL-адрес в Вашей CRM для получения уведомлений о звонках
Передаются уведомления о звонках для всех интегрированных пользователей. Определить пользователя можно используя поле zdUserId. Формат уведомлений можно найти на странице описания API. Используется стандартная авторизация Bearer.
URL-адрес в Вашей CRM, при обращении на который можно получить имя клиента по номеру телефона
Необходимо для использования функции "Отображение имени клиента на софтфоне". Необходим пример запроса и возможных ответов. Используется стандартная авторизация Bearer.
(Опционально) URL-адрес в Вашей CRM, при обращении на который можно получить список менеджеров
Необходимо для использования функции "Привязка менеджеров ко внутренним номерам АТС". Это позволит пользователю сразу из личного кабинета Zadarma сопоставить менеджеров CRM и внутренние номера АТС Zadarma. В случае необходимости синхронизации этих данных с Вашей CRM необходимо также указать URL адрес, на который можно отправить эти данные в JSON-формате. Необходим пример запроса и возможных ответов. Используется стандартная авторизация Bearer.
Отображаемое имя автора интеграции (можно отправить название Вашей компании и ссылку на главную страницу)
Логотип интеграции в формате PNG, на прозрачном фоне и с размерами 500 x 150px
Функционал из пунктов 6-10 рекомендуем делать опциональным, чтобы конечный пользователь мог включить/выключить необходимые ему функции на странице "Настройки телефонии" в CRM
Напоминаем, что если посещаемость вашего сайта превышает 30 000 пользователей в месяц, мы готовы протестировать вашу интеграцию, разместить инструкцию на нашем сайте и интеграцию в личном кабинете. По всем вопросам, связанным с интеграцией вашей системы и телефонии Zadarma пишите на нашу почту integration@zadarma.com.