Интеграция с виртуальными АТС

Суть интеграции amoCRM и виртуальной АТС (телефонии) заключается в том, что по определенным событяим и раз в определенный период времени происходит обмен данными. Таких мест всего несколько, и дальше мы рассмотрим каждое подробнее.

Click To Call (C2C)

Функционал позволяющий рядом с каждым номером телефона в списках или карточке вывести иконку трубки, при нажатии на которую происходит отправка запроса в виртуальную АТС на коммутацию вызова. При поступлении запроса АТС звонит сначала на указанный в настройках виджета внутренний номер сотрудника, а потом на телефон звонок по которому должен быть произведен (в некоторых АТС последовательность обратная).

Для того, чтобы легче реализовать данную функцию в собственном виджете, можно воспользоваться готовым JS-объектом C2C.

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

Определитель номера

Непосредственно в момент поступления звонка на телефон сотрудника, виртуальная АТС имеет возможность запросить через API amoCRM информацию о звонящем контакте и передать ее на телефон сотруднику. У сотрудника звонит телефон и при этом на экране телефона выводится имя (компания) найденного контакта в amoCRM и менеджер при поднятии трубки знает с кем будет разговаривать.

Для осуществление поиска необходимо использовать метод contacts/list, передавая в поле query телефонный номер. При этом, как и все методы API, данный метод вызывается из-под авторизованного пользователя, а соответственно учитываются права пользователя на доступ к контактам. Т.е. для определения номера данный контакт должен быть в базе amoCRM и у соответствующего пользователя должны быть права на просмотр нужной карточки контакта.

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

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

Умная переадресация

При поступлении звонка, если используется описанная выше функция определителя номера, кроме информации об имени звонящего, мы также можем получить ID (email) пользователя amoCRM, ответственного за карточку звонящего контакта. Из настроек мы можем получить внутренний номер ответственного сотрудника и произвести переадресацию вызова именно работающему с контактом человеку.

Входящая карточка

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

Для удобного вывода уведомления предусмотрен JS-объект.

Самое сложное - доставить информацию о входящем звонке до JS-скрипта на стороне клиента. Для этого обычно используются технологии web-sockets (к примеру, в телефонии onlinePBX или Oktell), когда между клиентом и сервером устанавливается полстоянное соединение и подписка на события. Можно использовать технологию периодических обращений через JS на сторонний сервер (таким образом реализован виджет Asterisk). Для этого раз в несколько секунд на стороне клиента подгружается JS-файл с целевого сервера, где определяется массив с состоянием канала (есть вызов, нет вызова для конкретного внутреннего телефона сотрудника).

Выбор метода зависит от технической возможности на стороне виртуальной АТС поддерживать web-sockets соединение. При этом необходимо учитывать внутренние номера сотрудников и их соответствие авторизованным в amoCRM пользователям, просматривающим интерфейс.

Логирование звонков

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

Для добавления записей в события необходимо использовать метод calls/add. При этом события добавляются только к уже существующему и найденному по номеру телефона контакту. Поэтому мы помечаем в базе отправленные и не отправленные записи звонков и не отправленные (карточки по которым еще не были созданы) еще раз пытаемся добавить в течении 18 часов.

Пример вызова метода на добавление события:

  1. {
  2.     "request": {
  3.         "add": [
  4.             {
  5.                 "uuid": "b7095fb33b368c7103626d3943d9e61c14697",
  6.                 "caller": 173,
  7.                 "to": "79493786247",
  8.                 "date": 1414655130,
  9.                 "billsec": 49,
  10.                 "type": "inbound",
  11.                 "link": "http://www.example.net/call_66cadef07c67a314389a824fd8fa0cd1.mp3"
  12.                 "account_id": 1111111
  13.             },
  14.             {
  15.                 "caller": 153,
  16.                 "to": "77287777119",
  17.                 "date": 1414655724,
  18.                 "billsec": 10,
  19.                 "type": "outbound",
  20.                 "link": "http://www.example.net/call_75a9bae5e41149a06b26733032ec0d76.mp3"
  21.                 "account_id": 1111111
  22.             },
  23.             {
  24.                 "uuid": "b8b49f89f4c9b6fde609ad741e640dd946234",
  25.                 "caller": 227,
  26.                 "to": "77582958055",
  27.                 "date": 1414654166,
  28.                 "billsec": 13,
  29.                 "type": "outbound",
  30.                 "link": "http://www.example.net/call_cad4f62342b44466451dc77d1d02e783.mp3"
  31.                 "account_id": 1111111
  32.             }
  33.         ]
  34.     }
  35. }

Описание основных параметров можно посмотреть в соответствующем методе.

Обработка ошибок

При полноценной работе с телефонией у каждого пользователя в фоне происходит постоянный обмен данными для определения статуса его линии. Проблема в том, что для фоновых процессов, а не вызываемых самим пользователем, негде вывести ошибку. Зачастую пользователь не может понять почему у него не работает телефония даже, если он не верно ввел логин/пароль к АТС.

Именно для того, чтобы оповещать пользователя о проблемах, возникающих в фоновых процессах, необходимо воспользоваться отдельным JS-объектом, который при вызове выведет пользователю уведомление об ошибке, к примеру, о неудавшемся подключении к серверу. Подробнее читайте в документации по уведомлениям об ошибках.

Тестовый скрипт Asterisk

Если перед вами стоит задача просто познакомиться с функциональностью системы телефонии, либо необходимо подключить стороннюю АТС для своего аккаунта, то вы можете скачать специальный скрипт-заглушку на PHP, имитирующий работу Asterisk.

Скачать

После загрузки вам необходимо подключить виджет Asterisk в аккаунте и указать адрес тестового скрипта. Далее вы можете заменить заглушки каждого PHP-метода на реальное получение данных из вашей АТС и интеграция будет работать.