Часть сотрудников нашей компании работает вне офиса: выезды к клиентам, работа в домашних условиях. Для связи с такими сотрудниками мы используем GSM шлюз, подключенный к нашей АТС Askozia. Любой вызов, поступивший от клиета, может быть переадресован на сотрудника “в поле”.
В таких условиях возникает не удобная ситуация: сотрудник, при входящем вызове видит номер SIM карты, а не номер клиента. Нет возможности оперативно перезвонить на пропущенный вызов.
Мы решили использовать Telegram для оповещения о звонках. Получилась интересная связка программных продуктов Askozia + Telegram + 1C: Предприятие.
Как все работает
Сотрудник обращается к сервису через Telegram. Написав боту, можно подписаться на уведомления.
Формат приветствия — “Я <НомерТелефона>”:
Бот сохраняет номер телефона, и с этого момента знает в какой чат отправлять оповещения.
Если кто либо пытается позвонить или переадресовать вызов на номер сотрудника, в чат приходят сообщения:
Обратите внимание, отображается информация о имени звонящего и его номер телефона. Представление (имя) звонящего может быть взято из 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/”
Продолжаем работу через 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
{
"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_host — если скрипт запускается локально, то адрес 127.0.0.1
- ami_port — значение по умолчанию 5038
- ami_username — значение по умолчанию admin
- ami_secret — значение по умолчанию askozia
Создайте новый диалог c контактом «BotFather» в telegram
- Отправьте команду "/newbot"
- На втором шаге введите имя нового бота
- На третем шаге введите «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 интерфейсе:
- Перейдите на вкладку "Configuration Files"
- Выберите файл "crontabs"
- Добавьте строчку запуска скрипта как на изображении выше
*/5 * * * * /bin/sh /storage/usbdisk1/askoziapbx/astlogs/asterisk/telegram/starter.sh
Итоги внедрения
Сотрудники получили полезный сервис оповещения о входящих звонках:
- Оповещение приходит до поступления звонка
- Сотрудник видит, кто ему звонит
- При использовании функции «перезвонить», вызов идет через АТС, а значит разговор записывается
Полезные материалы
- Askozia — IP ATC на базе Asterisk
- За основу telegram bot был взят проект “php-telegram-bot”.
- За основу AMI клиента был взят проект “PAMI”.
- Сервис обратного звонка для Askozia неплохо описан в статье jorikfon.
- Кроме того, помогла статья о запуске PHP скриптов в “фоне”.
- Взаимодействие с 1С (SOAP сервис) описано в статье jorikfon.
Автор: boffart