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

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

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

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

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

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

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

Дополнительно, отображается гиперссылка “(перезвонить)”. Гиперссылка инициирует "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/

Файлы сервиса telegram и PAMI

Продолжаем работу через SSH

Создадим символическую ссылку на скрипт обратного звонка.

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

Настройки хранятся в формате JSON.

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

Его следует попросить у “BotFather”:

  • Создайте новый диалог контактом «BotFather» в telegram
  • Напишите команду "/newbot"
  • На втором шаге введите имя нового бота
  • На третем шаге введите «username» бота, оно должно содержать строку «bot»

В ответ бот пришлет сообщение с ключом:

Use this token to access the HTTP API: 171119299:AAHo-y2Ps4-ZTblLRHbjBHG5pG-0cpN

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

Процедура необходима для работы сервисов в "фоне". Необходимо открыть «консоль интегратора», нажав “ESC” в web интерфейсе: Запуск скриптов в фоне. Панель интегратора Askozia

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

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

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

Сотрудники получили полезный сервис оповещения о входящих звонках:

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