Уведомления в Telegram из FreeSWITCH и Asterisk
Уведомления о пропущенных вызовах в Telegram для FreeSWITCH и Asterisk. Передача данных из FreeSwitch или Asterisk в Telegram при помощи Telegram Bot Api.
@BotFather: /newbot
Сперва создадим бота, который будет уведомлять нас о пропущенных вызовах (или любых других данных поступающих от FreeSwitch, на ваше усмотрение). Для этого найдем в поиске @botfather и дадим ему команду /newbot.
В ответ он предложит выбрать имя бота. После того, как имя задано, будет предложено задать username. В отличии от имени, username должно быть уникальным, т.к. служит для идентификации бота.
Username должно заканчиваться словом bot. Например myname_bot или mynamebot.
Когда уникальный username задан, папа бот сообщит токен:
Use this token to access the HTTP API:
xxxx:yyyy
Теперь наш бот создан, увидеть список ботов можно при помощи команды /mybots.
Найдите бота по заданному username и пошлите ему команду /start.
Осталось, только, получить chat_id, уникальный для каждого пользователя Telegram, который обращается к боту: https://api.telegram.org/bot<token>/getupdates, где <token> полученное ранее значение xxxx:yyyy.
Сделать это можно из командной строки linux при помощи curl, или из адресной строки браузера:
# curl https://api.telegram.org/bot<xxxx:yyyy>/getupdates
в ответ мы получим 8-ми значный уникальный id нашего пользователя Telegram для данного чата:
..."chat":{"id":XXXXXXXX,"first_name":"<telegram first name>","last_name":"<telegram last name>"...
Если в ответ приходит только: {«ok»:true,«result»:[]}, пошлите повторно боту команду /start и попробуйте еще раз.
Отправим тестовое сообщение в чат:
curl -X POST "https://api.telegram.org/bot<xxxx:yyyy>/SendMessage" -d "chat_id=<XXXXXXXX>&text=test text"
FreeSwitch cURL > Telegram
Теперь настроим FS для отправки уведомлений о пропущенных вызовах.
В данном примере используется приложение диалплана FreeSwitch - mod_curl, но вы можете обращаться к боту любым удобным для вас способом, подходящим для решения ваших задач. Например вызывать bash script приложением диалплана system или написать приложение на lua.
Конфигурация FS сводится к вызову из диалплана приложения cURL с требуемыми параметрами.
Простейший пример вызова абонента c уведомлением:
<extension name="local.2XXX"> <condition field="destination_number" expression="^(2\d{3})$"> <action application="set" data="call_timeout=15"/> <action application="set" data="continue_on_fail=NO_ANSWER"/> <action application="bridge" data="user/$1@${domain_name}"/> <action application="set" data="chatid=${user_data($1@${domain_name} var chat_id)}"/> <action application="curl" data="https://api.telegram.org/bot<token>/sendMessage?chat_id=${chatid}&text=${effective_caller_id_number}-${effective_caller_id_name}"/> </condition> </extension>
- call_timeout=15 - вызывать абонента в течении 15 секунд.
- continue_on_fail=NO_ANSWER - продолжить выполнение диалплана, если на вызов не ответили в течении 15 секунд.
- chatid=${user_data($1@${domain_name} var chat_id)} - получить telegram chat_id абонента, заданный в directory и сохранить его в переменную chatid.
- <action application=«curl»…> - передать номер и имя вызывающего абонента в чат вызываемого абонента.
Socks 5
curl --socks5 SOCKSIP:PORT "https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat_id>&text=text"
Пример настроек directory с заданной переменной chat_id:
<include> <user id="2666"> <params> <param name="password" value="$${default_password}"/> <param name="vm-password" value="2666"/> </params> <variables> <variable name="accountcode" value="2666"/> <variable name="user_context" value="default"/> <variable name="effective_caller_id_name" value="IT Dwarf"/> <variable name="effective_caller_id_number" value="2666"/> <variable name="chat_id" value="XXXXXXXX"/> </variables> </user> </include>
где <variable name=«chat_id» value=«XXXXXXXX»/> - уникальный Telegram chat_id абонента.
Asterisk System > cURL > Telegram
Сделаем тоже самое для Asterisk используя приложение Asterisk - system и приложение Linux - curl.
exten => _666,1,noop() exten => _666,n,system(curl "https://api.telegram.org/bot<token>/sendMessage?chat_id=<chatid>&text=${URIENCODE(съешь этих мягких французких булочек)}") exten => _666,n,hangup
где ..&text=Ваши данные.