Уведомления в 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=Ваши данные.