电报可以按ID聊天,不能按@name聊天:找不到聊天

时间:2019-08-22 02:48:15

标签: telegram telegram-bot python-telegram-bot

因此,我使用@BotFather制作了一个漫游器,并通过我的帐户向其发送了消息。然后,我使用@userinfobot找出了我的帐户ID,并发送了以下请求:

https://api.telegram.org/botTOKEN/sendMessage?chat_id=id&text=test 并且可以正常运行ok:true

但是,如果我尝试使用我的@username而不是id:

https://api.telegram.org/botTOKENg/sendMessage?chat_id=@username&text=test

我得到一个错误:

{
    "ok": false,
    "error_code": 400,
    "description": "Bad Request: chat not found"
}

看看我过去的代码,@方法曾经为我工作过。事情变了吗?

2 个答案:

答案 0 :(得分:0)

您必须使用ID,而不能使用用户名。

将用户名设置为参数仅适用于公共频道。

看看Telegram Bot API documentation

  

说明
  目标聊天记录或目标频道的用户名的唯一标识符(格式为@channelusername

答案 1 :(得分:0)

您不能使用用户名发送邮件,而应该使用机器人更新并获取from_user或Effective_user,然后才能访问ID(chat_id)

  • 您不能向从未使用过您的漫游器的用户发送消息。

用户在您的漫游器中执行某些操作后,您现在可以找到并发送所需的所有内容

import requests
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters

def pure_api(chat_id, text):
    # don't forget to set bot + TOKEN
    r = requests.get(f"https://api.telegram.org/botTOKEN/sendMessage?chat_id={chat_id}&text={text}")
    print(r.json())

def start(bot, update):
    user_id = update.effective_user.id
    print(user_id)
    bot.send_message(user_id, "any message you want")
    # or 
    update.message.reply_text("any message you want")
    pure_api(user_id, "any message you want")


def main():
    """Start the bot."""
    updater = Updater(TOKEN)
    dp = updater.dispatcher
    dp.add_handler(CommandHandler("start", start))
    updater.start_polling()
    updater.idle()


if __name__ == '__main__':
    main()