IP АТС Askozia и Push уведомления в Telegram

    Часть сотрудников нашей компании работает вне офиса: выезды к клиентам, работа в домашних условиях. Для связи с такими сотрудниками мы используем 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
    


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


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


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


    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 4
    • 0
      Я у себя реализовал нечто подобное. Тоже смотрел в сторону telegram, но в итоге остановился на whatsapp (к тому же он уже был установлен у сотрудников, в отличии от telegram).
      • 0
        А что взяли за основу интеграции с whatsapp? Порекомендуйте пожалуйста))
      • 0
        Я правильно понимаю, что зная номер моб.телефона сотрудника, я смогу зайти к боту и подписаться на уведомления о его звонках?
        А если я конкурент, то и слить базу контактов (постепенно конечно)
        • 0
          Чисто теоретически — возможно. В текущей реализации не предусмотрено какой либо авторизации.
          Необходимо только знать имя бота и мобильный номер телефона сотрудника.

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

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.