Часть сотрудников нашей компании работает вне офиса: выезды к клиентам, работа в домашних условиях. Для связи с такими сотрудниками мы используем GSM шлюз, подключенный к нашей АТС Askozia. Любой вызов, поступивший от клиета, может быть переадресован на сотрудника “в поле”.

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

Мы решили использовать Telegram для оповещения о звонках. Получилась интересная связка программных продуктов Askozia + Telegram + 1C: Предприятие.


Как все работает


Сотрудник обращается к сервису через Telegram. Написав боту, можно подписаться на уведомления.
Формат приветствия — “Я <НомерТелефона>”:
image

Бот сохраняет номер телефона, и с этого момента знает в какой чат отправлять оповещения.
Если кто либо пытается позвонить или переадресовать вызов на номер сотрудника, в чат приходят сообщения:
image

Обратите внимание, отображается информация о имени звонящего и его номер телефона. Представление (имя) звонящего может быть взято из 1С:CRM, если это необходимо. В данном примере, callerid(name) был установлен после получения информации из 1C:CRM, пример реализации был описан jorikfon в его статье (см. раздел «полезные материалы»).

Дополнительно, отображается гиперссылка “(перезвонить)”. Гиперссылка инициирует callback на мобильный номер сотрудника. Как только вызов на мобильном будет принят, начнется набор абоненту, вызов которого поступал ранее.

Интересная и неожиданная фича — оповещение о звонке приходит быстрее, чем звонок на мобильный. Набор номера через GSM линию происходит с задержкой 4-5 секунд. Уведомление в Telegram приходит намного быстрее.

Установка сервиса на IP АТС Askozia


Используются Telegram API, AMI Asterisk, SOAP web сервисы 1С: Предприятие. Все сервисы реализовали на PHP 5.

Подключаемся к АТС по SSH:
# Смонтируем раздел, разрешим запись. 
mount -o remount,rw /offload;

# Создадим директорию, где будет храниться ссылка на скрипт обратного звонка. 
mkdir /offload/rootfs/usr/www_provisioning/telegram/;

# Создадим директорию, где будут храниться скрипты.
mkdir /storage/usbdisk1/askoziapbx/astlogs/asterisk/telegram/;


Подключаемся к АТС по SFTP
Скачиваем дистрибутив по ссылке. Копируем скрипты из дистрибутива в директорию: “/storage/usbdisk1/askoziapbx/astlogs/asterisk/telegram/
image

Продолжаем работу через SSH
# Создадим символическую ссылку на скрипт обратного звонка:
# Скрипт будет доступен по URL "http://HOST:56080/telegram/miko_callback.php"
ln -s /storage/usbdisk1/askoziapbx/astlogs/asterisk/telegram/miko_callback.php /offload/rootfs/usr/www_provisioning/telegram/miko_callback.php

# Создадим файл, где будут храниться текущие подписки на оповещения в telegram 
echo  >> /storage/usbdisk1/askoziapbx/astlogs/asterisk/telegram/subscription.db
# Смонтируем раздел в исходное состояние "Только чтение". 
mount -o remount,ro /offload;


Определим настройки в файле settings.json

Пример settings.json
{
  "ami_host": "127.0.0.1",
  "ami_port": 5038,
  "ami_username": "1cami",
  "ami_secret": "PASSWORD1cami",
  "telegram_API_key": "171119210:AAHo-000000000000000000000",
  "subscription_file": "subscription.db",
  "dst_context": "SIP-PHONE-0000000000feaad021c",
  "res_callback": "http://HOST:56080/telegram/miko_callback.php",
  "local_context": "localchannels"
}



  • ami_host, ami_port, ami_username, ami_secret” — параметры подключения к AMI
  • telegram_API_key” — API ключ телеграм бота
  • subscription_file” — имя файла, где будут храниться подписки на оповещения
  • dst_context” — контекст, через который возможен набор номера назначения
  • local_context” — контекст, через который возможен набор внутренних номеров
  • res_callback” — URL, где опубликова скрипт обратного звонка, ”HOST” — адрес askozia

Как получить параметры подключения к AMI
  • ami_host — если скрипт запускается локально, то адрес 127.0.0.1
  • ami_port — значение по умолчанию 5038
  • ami_username — значение по умолчанию admin
  • ami_secret — значение по умолчанию askozia


Как получить Telegram API key
Его следует попросить у “BotFather”:
Создайте новый диалог c контактом «BotFather» в telegram
  1. Отправьте команду "/newbot"
  2. На втором шаге введите имя нового бота
  3. На третем шаге введите «username» бота, оно должно содержать строку «bot»

В ответ бот пришлет сообщение с ключом
Use this token to access the HTTP API:
171119299:AAHo-y2Ps4-ZTblLRHbjBHG5pG-0cpN


Настройка контекстов
  • local_context — это контекст, где определены внутренние номера, и мобильные наших сотрудников, по умолчанию «localchannels»
  • dst_context — чтобы получить этот контекст необходимо открыть одну из учетных записей типа «Телефон» и в адресной строке браузера скопировать идентификатор вида "SIP-PROVIDER-196627525951ab38268552a", это и будет контекст



Запуск скриптов в cron


Необходимо открыть «консоль интегратора», нажав “ESC” в web интерфейсе:
image

  1. Перейдите на вкладку "Configuration Files"
  2. Выберите файл "crontabs"
  3. Добавьте строчку запуска скрипта как на изображении выше

*/5 * * * * /bin/sh /storage/usbdisk1/askoziapbx/astlogs/asterisk/telegram/starter.sh


Итоги внедрения


Сотрудники получили полезный сервис оповещения о входящих звонках:
  • Оповещение приходит до поступления звонка
  • Сотрудник видит, кто ему звонит
  • При использовании функции «перезвонить», вызов идет через АТС, а значит разговор записывается


Полезные материалы


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


  1. Z5M
    26.02.2016 00:28

    Я у себя реализовал нечто подобное. Тоже смотрел в сторону telegram, но в итоге остановился на whatsapp (к тому же он уже был установлен у сотрудников, в отличии от telegram).


    1. boffart
      26.02.2016 07:49

      А что взяли за основу интеграции с whatsapp? Порекомендуйте пожалуйста))


  1. fforp
    03.03.2016 17:32

    Я правильно понимаю, что зная номер моб.телефона сотрудника, я смогу зайти к боту и подписаться на уведомления о его звонках?
    А если я конкурент, то и слить базу контактов (постепенно конечно)


    1. boffart
      03.03.2016 21:02

      Чисто теоретически — возможно. В текущей реализации не предусмотрено какой либо авторизации.
      Необходимо только знать имя бота и мобильный номер телефона сотрудника.

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