因此,我使用@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"
}
看看我过去的代码,@
方法曾经为我工作过。事情变了吗?
答案 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()