Часть сотрудников нашей компании работает вне офиса: выезжают к клиентам, работают в домашних условиях. Для связи с такими сотрудниками мы используем GSM шлюз, подключенный к нашей АТС Askozia. Любой вызов, поступивший от клиета, может быть переадресован на сотрудника “в поле”.
В таких условиях возникает не удобная ситуация: сотрудник, при входящем вызове видит номер SIM карты, а не номер клиента. Нет возможности оперативно перезвонить на пропущенный вызов.
Мы решили использовать telegram для оповещения о звонках. Получилась интересная связка программных продуктов Askozia + 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/
Продолжаем работу через 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йlsdst_context
— чтобы получить этот контекст необходимо открыть одну из учетных записей типа «Телефон» и в адресной строке браузера скопировать идентификатор вида "SIP-PROVIDER-196627525951ab38268552a", это и будет контекст
Запуск скриптов в cron
Процедура необходима для работы сервисов в "фоне". Необходимо открыть «консоль интегратора», нажав “ESC” в web интерфейсе:
- Перейдите на вкладку "Configuration Files"
- Выберите файл "crontabs"
- Добавьте строчку запуска скрипта как на изображении выше
*/5 * * * * /bin/sh /storage/usbdisk1/askoziapbx/astlogs/asterisk/telegram/starter.sh
Итоги внедрения
Сотрудники получили полезный сервис оповещения о входящих звонках:
- Оповещение приходит до поступления звонка
- Сотрудник видит, кто ему звонит
- При использовании функции «перезвонить», вызов идет через АТС, а значит разговор записывается
Полезные материалы
- Оригинал текущей статьи на habrhabr.ru
- Askozia — IP ATC на базе Asterisk
- За основу telegram bot был взят проект “php-telegram-bot”
- За основу AMI клиента был взят проект “PAMI”
- Сервис обратного звонка для Askozia неплохо описан в статье @jorikfon
- Кроме того, помогла статья о запуске PHP скриптов в “фоне”
- Взаимодействие с 1С (SOAP сервис) описано в статье @jorikfon