Telegram Bot "чат не найден"

У меня есть следующий код в Python, чтобы отправить себе сообщение от бота.

import requests

token = '320835125:AAFUUC-fdo_EFzsCjvmxu8HBk7qVzZXXXXX'
method = 'sendMessage'
myuserid = 1949275XX
response = requests.post(
    url='https://api.telegram.org/bot{0}/{1}'.format(token, method),
    data={'chat_id': myuserid, 'text': 'hello friend'}
).json()
print(response)

но это возвращается {'description': 'Bad Request: chat not found', 'error_code': 400, 'ok': False}

Что я делаю неправильно? я получил myuserid отправив /getid в @myidbot и я получил свой токен от @BotFather

11 ответов

Решение

Как указал @maak, вам нужно сначала отправить сообщение боту, прежде чем бот сможет отправлять вам сообщения.

Я использовал префикс @ перед значением chat_id, как это предлагалось повсюду. Я удалил его, и он начал работать. Примечание: если ваш идентификатор чата - 12345678, вам нужно добавить к нему префикс -100, чтобы он был -10012345678. Пример звонка почтальону:

      /sendMessage?chat_id=-10012345678&text=Let's get together

Если вы пытаетесь отправлять сообщения группе, вы должны добавить "-" перед своим идентификатором чата. Например:

TELEGRAM_REG_CHAT_ID="1949275XX"

должно быть

TELEGRAM_REG_CHAT_ID="-1949275XX"

Для меня это сработало только с @ префикс перед идентификатором канала

Боты Telegram не могут отправлять сообщения пользователю, если этот пользователь еще не начал общение с ботом или бот не присутствует в чате (если это групповой чат). Эта проблема не связана с библиотекой, это просто ограничение Telegram, чтобы боты не могли спамить пользователей без их разрешения.

вам нужно сначала отправить сообщение боту, прежде чем бот сможет отправлять сообщения вам.

У меня были некоторые проблемы с этим после обновления до супергруппы. Chat_id был обновлен, и найти этот новый идентификатор стало немного сложнее.

В конце концов я решил это, следуя этому комментарию: /questions/37120593/kak-poluchat-soobscheniya-v-gruppovyih-chatah-s-pomoschyu-telegram-bot-api/55147573#55147573

Если вы хотите использовать сообщение бота для канала, вы можете обратиться к шагу здесь

Шаги:

  1. Создайте общедоступный канал Telegram
  2. Создайте Telegram BOT (например) через BotFather
  3. Установить x_botкак администратор вашего канала

идентификатор чата @x_bot, это часть https://t.me/x_botэто не добавляет название вашего канала.

Есть способ отправки уведомлений на сообщения в telegram. Это немного сложно, но учебник великолепен!

http://bernaerts.dyndns.org/linux/75-debian/351-debian-send-telegram-notification

Я только что отправил сообщение о своем состоянии Apache в частный канал. Работает также на публичном канале, но это не то, что я хочу. Когда вы вызываете скрипт (bash), вы можете подготовить параметры на любом языке скрипта.

Надеюсь, это поможет.

Если вы используете имя пользователя, оно не требует префикса. Это означает, что следующее неверно:https://t.me/vahid_esmaily_ie , t.me/vahid_esmaily_ie

И это правильный случай: vahid_esmaily_ie

использование user_id в форме int() помогло мне

Убедитесь, что вы используете идентификатор пользователя вместо имени пользователя , если отправляете сообщение пользователю.

Из документов :

Чтобы получить идентификатор чата программным способом, ознакомьтесь со способами получения объекта JSON в разделе Получение обновлений .Например, когда пользователь отправляет сообщение,Updateобъект будет иметьMessageобъект внутри него, который имеетChatобъект, в котором есть чатid. Оказывается, идентификатор чата совпадает с идентификатором пользователя.

Другие вопросы по тегам