Telegram的Bot API为开发者提供了强大的自动化能力,其中最基础也最常用的功能就是通过机器人发送消息。无论是搭建服务器监控提醒、实现客户自动回复,还是构建简单的消息通知工具,掌握调用Bot API发送消息都是必备技能。本教程将带你从零开始,完整走通整个流程,并解决你可能遇到的各种问题。
一、Telegram Bot API是什么?
Telegram Bot API是一套基于HTTP的接口,允许开发者通过简单的请求来控制Telegram机器人。每个机器人都有一个独一无二的Token,相当于它的身份凭证。通过调用API,你可以实现发送消息、管理群组、处理用户输入等操作。发送消息最核心的接口是sendMessage,它负责将文本内容推送给指定的用户或群组。
二、准备工作:获取Token和Chat ID
1. 获取Bot Token
如果你还没有机器人,需要先通过@BotFather创建并获取Token。具体方法可以参考我们之前的《Telegram创建Bot并获取Token完整指南》。简单来说,与@BotFather对话,发送/newbot,按提示命名,最后你会收到一串形如123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11的Token,请妥善保管。
2. 获取Chat ID
要发送消息,必须知道接收方的Chat ID。Chat ID可以是用户ID、群组ID或频道ID。获取方法通常有两种:
- 方法一:使用getUpdates。给机器人发一条消息(或把机器人拉入群组并发言),然后访问以下URL(替换你的Token):
https://api.telegram.org/bot<你的Token>/getUpdates
在返回的JSON中,找到chat对象下的id字段,这就是你要的Chat ID。注意:私聊时ID为正数,群组ID通常为负数。
- 方法二:使用@userinfobot。将
@userinfobot加入对话或群组,私聊它并转发目标用户的消息,它会显示对应用户的ID。
三、调用sendMessage接口发送消息
1. 官方接口说明
发送消息的URL格式为:
https://api.telegram.org/bot<你的Token>/sendMessage
支持GET或POST请求,常用参数如下:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| chat_id | Integer或String | 是 | 接收方的Chat ID |
| text | String | 是 | 要发送的文本内容 |
| parse_mode | String | 否 | HTML或Markdown,用于富文本 |
| disable_notification | Boolean | 否 | 设为true则静默发送 |
2. 通过浏览器直接发送
如果你只想快速测试,可以把下面的URL复制到浏览器地址栏(替换Token和Chat ID):
https://api.telegram.org/bot123456:ABC-DEF1234ghIkl/ sendMessage?chat_id=987654321&text=你好,这是测试消息
注意:如果文本包含中文等特殊字符,建议使用URL编码。成功后会返回消息的JSON数据。
3. 使用curl发送POST请求
在终端中执行以下命令(Windows可使用PowerShell或WSL):
curl -X POST "https://api.telegram.org/bot<你的Token>/sendMessage" -H "Content-Type: application/json" -d '{"chat_id":"987654321","text":"这是curl发送的消息"}'
四、常用编程语言调用示例
1. Python(使用requests库)
安装依赖:pip install requests
import requests
import json
TOKEN = "你的Token"
CHAT_ID = "你的Chat_ID"
url = f"https://api.telegram.org/bot/sendMessage"
payload = {
"chat_id": CHAT_ID,
"text": "Hello from Python!"
}
response = requests.post(url, json=payload)
print(response.json())
2. JavaScript(Node.js)
const axios = require('axios');
const token = '你的Token';
const chatId = '你的Chat_ID';
const url = `https://api.telegram.org/bot$/sendMessage`;
axios.post(url, { chat_id: chatId, text: 'Hello from Node.js!' })
.then(res => console.log(res.data))
.catch(err => console.error(err));
3. 通用HTTP请求
任何支持HTTP的语言都可以实现,只需按接口规范发送POST或GET请求即可。
五、常见错误与排查方法
1. 404 Not Found
确认Token是否正确,注意Token结构是数字:字符串,且URL中必须写成bot<Token>,不要漏掉bot前缀。
2. 400 Bad Request
通常是因为参数格式不对。检查chat_id是否为整数(不要加引号)或正确的字符串(如@频道用户名),text是否为空或超过4096字符。
3. 403 Forbidden
机器人没有权限向该用户或群组发送消息。可能原因:用户从未主动接触过机器人;群组不允许匿名发送;或机器人已被移出。
4. 401 Unauthorized
Token错误或已被撤销。重新获取Token并更新代码。
5. 消息明明发送成功却在目标处看不到?
检查Chat ID是否对应目标。群组ID通常是负数,频道ID可能是@频道用户名,务必对应准确。
六、高级应用:发送富文本与内联键盘
1. 使用HTML或Markdown格式化
将parse_mode设为HTML,就可以用<b>加粗</b>、<i>斜体</i>等标签美化文本。比如:
{
"chat_id": 123,
"text": "<b>注意</b>:系统出现异常",
"parse_mode": "HTML"
}
2. 添加内联按钮
通过reply_markup参数传入一个JSON描述按钮。如下所示:
{
"chat_id": 123,
"text": "请选择操作:",
"reply_markup": {
"inline_keyboard": [
[{"text": "确认", "callback_data": "confirm"}],
[{"text": "取消", "callback_data": "cancel"}]
]
}
}
七、总结
通过Bot API发送消息并不复杂,核心步骤就三步:获取Token、获取Chat ID、调用sendMessage接口。掌握基础用法后,你可以进一步扩展,比如定时发送、自动回复、集成第三方服务等。建议将常用调用封装成函数,方便复用。如果在实际操作中遇到问题,记得先查看API返回的错误信息,绝大多数情况都能通过官方文档解决。