Как и многие использую астериск для организации телефонной связи. У абонентов кроме их внутреннего номера есть также номер мобильного, куда совершаются переадресации, а также рассылаются смс в случае пропущенного вызова.
Традиционно уведомления о пропущенных звонках отправлялись или на емейл, или на мобильный в виде смс. С появлением Телеграм стало возможным отправлять сообщения в мессенджер. Одна незадача: мы не можем отправить сообщение именно на номер мобильного.
А нам это удобнее, т.к. номера мобильных у нас уже есть (у нас есть сотни абонентов, желающих получать уведомления :), а chat id еще найти надо, да еще и для каждого свой.
Решение: небольшой чат-бот.
Чат-бот принимает пользователя и спрашивает у него номер телефона. Затем полученный номер и соответсвующий chat id сохраняет на сервер. Теперь мы можем отправлять уведомление на номер на наш сервиса, а бот, привязанный к сервису, будет будет пересылать это уведомление соответствующему пользователю в телеграм. Получается и дешево (мы теперь не платим за смс), и сердито.
Два момента
- пока пользователь не подключится к боту, мы не можем отправлять ему сообщения.
- идентификатор пользователя отправившего номер и идентификатор пользователя имеющего отправленный номер сравниваются, в случае расхождения пользователь не будет ассоциирован с указанным номером
Приложение маленькое, но крайне полезное. Отправлять можно любое сообщения (которое ранее отправлялось через смс или емейл) — уведомления о звонках, ошибках, падениях серверов и т.д.
Немного деталей
Отправка происходит путем отправки 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
Видео использования (50 секунд)
Предложения? Вопросы?