@bobrui4anin

Как получить ошибку от telegram bot (webHook)?

Имеется телеграмм бот на php, есть метод sendRequest('method', [params]). Ситуация такая, у меня в базе есть пользователи (их t.id) которые авторизовались у бота, я получаю их и в цикле отправляю сообщение, дак вот собственно вопрос, как мне узнать, получили все пользователи сообщение или нет (к примеру, кто то удалил бота). Попытки перехвата try catch ни к чему не привели. Как получить ответ ошибки (есть метод getWebHookInfo и в нем есть опциональный параметр last_error_message), но я не смог смоделировать ситуацию. Буду благодарен за любой ответ.
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
makag
@makag
при рассылке в ответ на каждый запрос с отправкой сообщения пользователю телеграм отдаёт ответ:

в случае успеха
5e016985201b5886834009.png
в случае неудачи (если пользователь заблочил бота):
5e016c01bbce7920187161.png

Вы можете увидеть это наглядно, просто открыв в браузере адрес, меняя параметры на свои:
https://api.telegram.org/bot[токен_бота]/sendMessage?chat_id=[айди_пользователя_собеседника]&text=123


обрабатывайте эти ответы и помечайте неактивных пользователей в базе.

в дальнейшем таким пользователям можно просто не рассылать сообщения, будет небольшая экономия времени при рассылке...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pembrock
Не уверен, работает ли это в одиночном чате пользователя с ботом, но в общем чате с несколькими пользователями и ботом точно работает.
Попробуйте метод getChatMember.
В общем чате это работает так: если пользователь есть в чате, то метод вернет объект ChatMember. Соответственно, если в ответе что то другое, значит пользователя нет в чате.
Ответ написан
@hacksocto
В описании на telegram.org last_error_message это поле объекта WebhookInfo, которое на самом деле означает сообщение о последней ошибке при доставке входящих событий на ваш сервер, если вы используете метод WebHook и указали URL, на который к вам приходят JSON-ы событий.
А вообще можно только гарантировать, что сервера Telegram обработали запрос, например, на отправку сообщения. Однако нет возможности проверить, не заблокировал ли вашего бота какой-то пользователь.
Точно так же, если вы добавляете в черный список какого-то пользователя в Telegram, он может отправлять вам сообщения, но вы их не увидите, пока не удалите его из списка. В свою же очередь пользователь может отправить вам сообщение, но оно будет помечено как непрочитанное.
Если я правильно понимаю, это работает только так.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы