В предыдущей статье рассматривался частный случай отправки номера телефона звонящего сотруднику, у которого включена переадресация. Но что же делать, если у вас нет gsm-шлюза? В этом случае более общим решением будет отправка сообщения о номере телефона в группу Telegram.
В первую очередь на нужно создать бота, который будет отвечать за передачу данных от Aterisk в группу Telegram. Для этого в поиске введите следующее имя:
@BotFather

Далее нужно последовательно выполнить (написать в строку сообщений и отправить боту) несколько команд:
/newbot
Отправка данной команды активирует процедуру создания нового бота. После ввода команды будет запрошено имя для вашего нового бота. В моем случае он будет называться:
it-crowd_bot
Далее необходимо ввести имя пользователя для нашего бота (оно должно оканчиваться на _bot). В случае если имя уже занято, система попросит придумать другое.
itcrowdby_bot
После этого мы получим приветственное сообщение, в котором будет указана ссылка на профиль нашего бота (1) и токен (2), который мы будем использовать ниже.

Для открытия чата с нашим ботом, переходим по ссылке 1 (рис. 2) и пишем в чат команду для его активации:
/start
Теперь необходимо создать групповой чат и добавить в него нашего бота. Для этого в левом верхнем углу открываем меню, выбираем пункт «Создать группу» и придумываем для нее название. В моем случае это «It-crowd.by». После создания группы откроется окно добавления в нее участников, в окне поиска вводим имя пользователя нашего бота и добавляем знак @ в начале.
Кликаем по найденному боту, жмем кнопку «Создать». Поздравляю, группа создана. Теперь необходимо выдать разрешение боту на отправку сообщений в группу. Для этого открываем меню группы, выбираем «Manage group», кликаем по строчке «Administrator» и добавляем бота в администраторы. Если вы все правильно сделали, в списке участников под именем бота появится надпись «имеет доступ к сообщениям». После этого напишите любое сообщение в группу, это нам понадобится ниже.
Далее получаем id нашей группы. Для этого в браузере необходимо открыть следующий адрес:
https://api.telegram.org/botXXXXXXXXXXXXX/getUpdates
Где XXXXXXXXXXXXX — это токен, который мы получили при создании бота (пункт 2 рис.2).
В моем случае получилась следующая ссылка:
https://api.telegram.org/bot1246868601:AAFnUHUdUcQLwWTKEQz3YuM9Z2jmkA-IcFM/getUpdates
В итоге в браузере вы получите ответ следующего вида:
Где:
-411842652
и есть id нашей группы.
Далее приступаем к настройке скрипта в Asterisk. Для этого в блокноте создаем новый файл со следующим содержимым:
#!/usr/bin/php -q <?php require('phpagi.php'); $agi = new AGI(); $cid = $agi->request['agi_callerid']; $phoneFieldset = "Входящий звонок с номера: "; $token = "Введите здесь ваш token"; $chat_id = "Введите здесь id вашего группового чата"; $arr = array( $phoneFieldset => $cid, ); foreach($arr as $key => $value) { $txt .= "".$key." ".$value."%0A"; }; fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r"); ?>
Вставляем в соответствующие поля ваши token и id, сохраняем файл под именем telegram.txt, меняем расширение на php и копируем на сервер телефонии в директорию var/lib/asterisk/agi-bin/
Теперь необходимо дать права на исполнение скрипта и преобразовать его в unix формат:
chmod 755 /var/lib/asterisk/agi-bin/telegram.php
chown asterisk:asterisk /var/lib/asterisk/agi-bin/telegram.php
dos2unix /var/lib/asterisk/agi-bin/telegram.php
Заходим по SSH в FreePBX и редактируем файл /etc/asterisk/extensions_override_freepbx.conf
Добавляем:
[from-internal]
exten = _375291234567,1,AGI(telegram.php)
Где:
_375291234567 – отслеживаемый номер, при звонке на который необходимо отправлять сообщение в группу, указывается в соответствии с планом набора;
В случае необходимости отправки на несколько номеров, добавляем еще строчку с новыми параметрами назначения. Не забудьте добавить пользователей этих номеров в группу в телеграме.
Перезагружаем диалпдан в Asterisk cli:
dialplan reload
Проверяем пришло ли сообщение в группе:
Для отслеживания пропущенных по внутренним номерам:
[ext-local]
exten => h,1,ExecIf($[$[«${CDR(disposition)}»=»NO ANSWER»] & $[${DEXTEN}=333]])?AGI(telegram.php)
exten => h,n,Macro(hangupcall,)
Где 333 — внутренний номер, по которому отслеживаются пропущенные вызовы.