如何向 Telegram bot API 发送请求?

Posted

技术标签:

【中文标题】如何向 Telegram bot API 发送请求?【英文标题】:How to send request to Telegram bot API? 【发布时间】:2015-09-20 18:07:49 【问题描述】:

创建电报机器人并获得机器人令牌后,我想向机器人 API 发送请求。

This link 说我们必须像这样发送 HTTP 请求: https://api.telegram.org/bot<token>/METHOD_NAME 并提供了没有任何输入参数的最简单方法“getme”的示例。

假设我想发送一些消息。我应该使用sendMessage 方法,它有两个必需的输入参数:chat_ID 和文本。

现在我的问题开始了:

    如何以上述请求格式编写此 sendMessage 方法及其参数?我试过sendMessage(param1,param2) 并收到未找到方法的消息。

    什么是chat_id?如果我想给联系人发消息,我怎么知道他的chat_id

我在互联网上搜索了很多,GitHub 上有很多专门为此目的的项目,老实说,它们都没有任何意义。 看在上帝的份上,请有人帮助我。我迷路了。

问候。

【问题讨论】:

【参考方案1】:

您只需发送一个 POST 请求到:

https://api.telegram.org/bottoken/method

例如:

https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendMessage

在请求的正文中,您对参数进行 URL 编码:

chat_id=12345&text=hello%20friend

例如,在 Python 中使用 requests 模块:

import requests
    
response = requests.post(
        url='https://api.telegram.org/bot0/1'.format(token, method),
        data='chat_id': 12345, 'text': 'hello friend'
    ).json()

当用户与您的机器人聊天时,您会收到一个 Message object,其中包含一个聊天 ID(和一个用户 ID,您可以用它代替聊天 ID)。除非您已经知道他们的用户 ID,否则无法启动与用户的聊天,因此您必须等待用户与您交谈。您可以通过使用deep linking 并让用户点击一个链接来简化这一过程,当他们点击“开始”按钮时,该链接会发送一条预制消息。

编辑:对于那些努力寻找 chat_id 的人来说,这是一种方法:

1.- 创建机器人:在 Telegram 的搜索中查找 @BotFather。点击开始,写 /newbot,给它一个名字和一个用户名。您应该获得一个令牌来访问 HTTP API。保存此令牌。

2.- 使用其用户名在 Telegram 上找到您的机器人。给它写一些东西,例如'测试'。这稍后会派上用场。

3.- 打印 chat_id。在运行此功能之前,请确保您至少已在 Telegram 上向您的机器人写了一条消息(第 2 步)

javascript 代码:

var token = "123456:kioASDdjicOljd_ijsdf"; // Fill this in with your token
var telegramUrl = "https://api.telegram.org/bot" + token;

function getChat_id()
    var res = UrlFetchApp.fetch(telegramUrl+"/getUpdates").getContentText();
    var res = JSON.parse(res);
    Logger.log(res.result[0].message.chat.id.toString());

【讨论】:

感谢您的好回答,关于接收消息,用户如何与我的机器人聊天,我的意思是他们应该只向我的电报帐户发送消息,我可以获得他们的 chat_id 吗? @AliCrash:用户要么通过名称 (@YourBot) 找到您的机器人,要么点击链接 (https://telegram.me/YourBot?start=something),这将打开一个 Telegram 窗口,并且消息输入框被替换为一个巨大的“开始”按钮,可将\start something 发送到您的机器人。 啊哈,现在我知道机器人是如何工作的了,再次感谢,但我如何才能接收我的 Telegram 帐户收件箱中的消息并将其存储到本地数据库中?我想做一个桌面应用来做这样的事情。 以及一般关于电报api方法,我们是否必须在http请求的主体中编写方法名称并将其发送到我们api应用程序的DC ip?你能给我举一个http请求中的一种api方法的例子吗?比如说 auth.checkPhone 我们使用 get request 还是 post 。问候 @AliCrash:Telegram API 与 Telegram Bot API 无关。它甚至不是通过 HTTP,而是一个自定义协议。【参考方案2】:

试试这个

https://api.telegram.org/bottoken/sendMessage?chat_id=<chat_id>&text=<Enter your text here>

例子

https://api.telegram.org/bot449123456:AAHSAnSGDm8PW2Z-1ZiwdVDmgv7sM3NMTxg/sendMessage?chat_id=311911234&text=Hi+Everyone

【讨论】:

以上是关于如何向 Telegram bot API 发送请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Telegram Bot API 在消息中发送嵌入图像和文本

如何使用 Telegram Bot API 发送表情符号?

Telegram Bot 收到“错误请求:消息文本为空”

找出我自己的用户 ID 以使用 Telegram API 发送消息

Excel VBA 使用 Telegram bot api 发送图像

如何使用 Telegram API 接收图像?