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

В первую очередь на нужно создать бота, который будет отвечать за передачу данных от Aterisk в группу Telegram. Для этого в поиске введите следующее имя:

@BotFather

рис.1

Далее нужно последовательно выполнить (написать в строку сообщений и отправить боту) несколько команд:

/newbot

Отправка данной команды активирует процедуру создания нового бота. После ввода команды будет запрошено имя для вашего нового бота. В моем случае он будет называться:

it-crowd_bot

Далее необходимо ввести имя пользователя для нашего бота (оно должно оканчиваться на _bot). В случае если имя уже занято, система попросит придумать другое.

itcrowdby_bot

После этого мы получим приветственное сообщение, в котором будет указана ссылка на профиль нашего бота (1) и токен (2), который мы будем использовать ниже.

рис.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 — внутренний номер, по которому отслеживаются пропущенные вызовы.

Сообщение в Telegram с номером звонящего при переадресации