javascript

Телеграм: отправка сообщений на номер мобильного в чат с ботом

  • среда, 11 октября 2017 г. в 03:13:41
https://habrahabr.ru/post/339704/
  • Системы обмена сообщениями
  • Разработка систем связи
  • Node.JS
  • JavaScript
  • Asterisk


Как и многие использую астериск для организации телефонной связи. У абонентов кроме их внутреннего номера есть также номер мобильного, куда совершаются переадресации, а также рассылаются смс в случае пропущенного вызова.


Традиционно уведомления о пропущенных звонках отправлялись или на емейл, или на мобильный в виде смс. С появлением Телеграм стало возможным отправлять сообщения в мессенджер. Одна незадача: мы не можем отправить сообщение именно на номер мобильного.


А нам это удобнее, т.к. номера мобильных у нас уже есть (у нас есть сотни абонентов, желающих получать уведомления :), а chat id еще найти надо, да еще и для каждого свой.


Решение: небольшой чат-бот.


Чат-бот принимает пользователя и спрашивает у него номер телефона. Затем полученный номер и соответсвующий chat id сохраняет на сервер. Теперь мы можем отправлять уведомление на номер на наш сервиса, а бот, привязанный к сервису, будет будет пересылать это уведомление соответствующему пользователю в телеграм. Получается и дешево (мы теперь не платим за смс), и сердито.


Два момента


  1. пока пользователь не подключится к боту, мы не можем отправлять ему сообщения.
  2. идентификатор пользователя отправившего номер и идентификатор пользователя имеющего отправленный номер сравниваются, в случае расхождения пользователь не будет ассоциирован с указанным номером

Приложение маленькое, но крайне полезное. Отправлять можно любое сообщения (которое ранее отправлялось через смс или емейл) — уведомления о звонках, ошибках, падениях серверов и т.д.


Немного деталей


Отправка происходит путем отправки http-запроса на локально запущенный веб-сервер, который по совместительству реализует чат бота. Сервер производит поиск соответствия в БД mongo и затем отправляет данные в Телеграм. Все просто.


Веб-сервер написан на nodejs, для взаимодействия с Телеграмом используется замечательная библиотека telegraf.


Как создать бота и получить токен уже есть инструкция.


Как отправить сообщение?


POST-запрос с json сообщением


Например:


curl -X POST \
  http://localhost:3030/send/<number> \
  -H 'content-type: application/json' \
  -d '{"text": "Ahtung!!"}'

Как это работает у меня? После завершения вызова астериск вызывает небольшой скрипт, который смотрит статус вызова и отправляет по необходимости сообщение. Вот и все.


Исходники на гитхабе: telegram-alert
Установка описана в репозитории.
Для желающих быстрого старта есть docker-compose.yml
Видео использования


Предложения? Вопросы?