Часть сотрудников нашей компании работает вне офиса: выезды к клиентам, работа в домашних условиях. Для связи с такими сотрудниками мы используем GSM шлюз, подключенный к нашей АТС Askozia. Любой вызов, поступивший от клиета, может быть переадресован на сотрудника “в поле”.
В таких условиях возникает не удобная ситуация: сотрудник, при входящем вызове видит номер SIM карты, а не номер клиента. Нет возможности оперативно перезвонить на пропущенный вызов.
Мы решили использовать Telegram для оповещения о звонках. Получилась интересная связка программных продуктов Askozia + Telegram + 1C: Предприятие.
Сотрудник обращается к сервису через Telegram. Написав боту, можно подписаться на уведомления.
Формат приветствия — “Я <НомерТелефона>”:
Бот сохраняет номер телефона, и с этого момента знает в какой чат отправлять оповещения.
Если кто либо пытается позвонить или переадресовать вызов на номер сотрудника, в чат приходят сообщения:
Обратите внимание, отображается информация о имени звонящего и его номер телефона. Представление (имя) звонящего может быть взято из 1С:CRM, если это необходимо. В данном примере, callerid(name) был установлен после получения информации из 1C:CRM, пример реализации был описан jorikfon в его статье (см. раздел «полезные материалы»).
Дополнительно, отображается гиперссылка “(перезвонить)”. Гиперссылка инициирует callback на мобильный номер сотрудника. Как только вызов на мобильном будет принят, начнется набор абоненту, вызов которого поступал ранее.
Интересная и неожиданная фича — оповещение о звонке приходит быстрее, чем звонок на мобильный. Набор номера через GSM линию происходит с задержкой 4-5 секунд. Уведомление в Telegram приходит намного быстрее.
Используются Telegram API, AMI Asterisk, SOAP web сервисы 1С: Предприятие. Все сервисы реализовали на PHP 5.
Подключаемся к АТС по SSH:
Подключаемся к АТС по SFTP
Скачиваем дистрибутив по ссылке. Копируем скрипты из дистрибутива в директорию: “/storage/usbdisk1/askoziapbx/astlogs/asterisk/telegram/”
Продолжаем работу через SSH
Определим настройки в файле settings.json
Необходимо открыть «консоль интегратора», нажав “ESC” в web интерфейсе:
Сотрудники получили полезный сервис оповещения о входящих звонках:
В таких условиях возникает не удобная ситуация: сотрудник, при входящем вызове видит номер 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
Пример 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
В ответ бот пришлет сообщение с ключом
Создайте новый диалог 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.
Комментарии (4)
fforp
03.03.2016 17:32Я правильно понимаю, что зная номер моб.телефона сотрудника, я смогу зайти к боту и подписаться на уведомления о его звонках?
А если я конкурент, то и слить базу контактов (постепенно конечно)boffart
03.03.2016 21:02Чисто теоретически — возможно. В текущей реализации не предусмотрено какой либо авторизации.
Необходимо только знать имя бота и мобильный номер телефона сотрудника.
Согласен, что более безопасной реализацией будет несколько усложнить процесс подписки на уведомления, к примеру спросив пароль.
Z5M
Я у себя реализовал нечто подобное. Тоже смотрел в сторону telegram, но в итоге остановился на whatsapp (к тому же он уже был установлен у сотрудников, в отличии от telegram).
boffart
А что взяли за основу интеграции с whatsapp? Порекомендуйте пожалуйста))