Уведомления в Telegram из FreeSWITCH и Asterisk

Уведомления о пропущенных вызовах в Telegram для FreeSWITCH и Asterisk. Передача данных из FreeSwitch или Asterisk в Telegram при помощи Telegram Bot Api.

telegram botfather

@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"

curl telegram

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=Ваши данные.

Ссылки по теме

https://tlgrm.ru/docs/bots

https://tlgrm.ru/docs/bots/api

stackoverflow.com/bot-chat-id

  • freeswitch/telegram-notifications.txt
  • Последние изменения: 2018/10/09