知识维护 · 内容更新 · 长期阅读ARTICLE MAINTENANCE JOURNAL

Telegram调用Bot API发送消息教程:从Token到自动通知的完整指南

本文手把手教你如何通过Telegram Bot API发送消息,涵盖获取Chat ID、调用sendMessage接口、Python和curl实战示例,以及常见错误排查方法,助你快速实现自动化通知功能。

阅读提示建议先浏览文章结构,再按需深入阅读具体段落。

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_idInteger或String接收方的Chat ID
textString要发送的文本内容
parse_modeStringHTML或Markdown,用于富文本
disable_notificationBoolean设为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返回的错误信息,绝大多数情况都能通过官方文档解决。

FAQ

最新版本下载

常见问题

如何获取用户的Chat ID?

给机器人发送任意消息,然后访问 https://api.telegram.org/bot<你的Token>/getUpdates,在返回的JSON中查找chat对象的id字段。或者使用@userinfobot这类工具提取ID。

机器人可以在没有用户先发消息的情况下主动发消息吗?

可以,只要你知道用户的Chat ID,且用户之前与机器人有过至少一次交互(例如点击过/start按钮)。如果用户从未互动过,机器人无法主动发起对话,这是Telegram的安全限制。

发送的消息长度有限制吗?

sendMessage接口的text参数最多支持4096个UTF-8字符。如果超出,需要分割成多条消息或使用其他方式(如更长文本的接口)。

为什么我的群组机器人发送消息会失败?

可能原因有:机器人被移出群组、群组设置了禁止机器人发言、机器人权限不足(需要提升为管理员),或者Chat ID填写错误(群组ID为负数)。逐一排查即可。

能否用Bot API发送Markdown格式的消息?

可以,在sendMessage请求中设置parse_mode为"MarkdownV2"或"Markdown"即可。注意MarkdownV2语法更严谨,你需要正确转义特殊字符。