Telegram机器人(Bot)是平台生态中最强大的功能之一,而驾驭它的核心就在于API(应用程序接口)。无论你是想构建一个自动回复助手、群管工具,还是复杂的业务系统,掌握Telegram机器人API的调用规范都是必经之路。本文将从零开始,带你完成Token鉴权、方法调用、参数构造到异常处理的完整闭环,并分享一些封装技巧,让你的代码更健壮、更易维护。
一、准备工作:获取机器人的Token
在调用任何API之前,你必须有合法的凭据。Telegram机器人的Token通过@BotFather获取。与Telegram官方互动,输入/newbot,按照提示设置机器人名称和用户名。创建成功后,BotFather会返回一个形如110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw的Token。这个Token是你调用所有API的唯一钥匙,务必妥善保管,切勿泄露到公开仓库或客户端代码中。
二、API基础:Base URL与请求格式
Telegram Bot API的Base URL很简单:
https://api.telegram.org/bot<token>/METHOD_NAME
其中<token>替换为你实际的Token,METHOD_NAME是具体的方法名,例如getMe、sendMessage。所有请求均为HTTPS协议,支持GET或POST方式,但建议使用POST来传递复杂参数。请求和响应均为JSON格式,需要注意UTF-8编码。
三、验证身份:调用getMe确认连接
拿到Token后,第一时间调用最简单的getMe方法,以验证API是否可用、Token是否正确。下面是一个Python示例:
import requests
TOKEN = "110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw"
url = f"https://api.telegram.org/bot/getMe"
response = requests.get(url)
print(response.json())
如果一切正常,你会得到类似这样的返回:{"ok":true,"result":{"id":123456,"is_bot":true,"first_name":"MyBot","username":"MyBot"}}。ok字段为true表示请求成功,result中携带机器人基本信息。如果ok为false,description字段会给出错误原因,例如Not Found大多因为Token拼写错误。
四、核心方法详解:sendMessage与更多
在开发中,最常用的方法莫过于sendMessage,它用于向指定聊天发送消息。其最重要的参数有:
chat_id:必填,接收者的聊天ID(用户ID、群组ID或频道ID)。text:必填,消息文本,支持部分HTML或Markdown格式。parse_mode:可选,指定文本格式,如HTML或MarkdownV2。disable_notification:可选,设为true可静默发送。
除sendMessage外,发送图片用sendPhoto,发送文件用sendDocument,编辑消息用editMessageText,删除消息用deleteMessage。这些方法的使用模式高度一致,掌握一个即可举一反三。
五、实战示例:封装一个简单Bot
为了提升开发效率,我们通常会将API调用封装为函数或类。下面是一个可复用的Python封装片段:
import requests
class TelegramBot:
def __init__(self, token):
self.base_url = f"https://api.telegram.org/bot"
def _call(self, method, **kwargs):
url = f"{self.base_url}/"
response = requests.post(url, json=kwargs)
data = response.json()
if not data.get("ok"):
raise Exception(f"API error: {data.get('description')}")
return data["result"]
def send_message(self, chat_id, text, **kwargs):
params = {"chat_id": chat_id, "text": text}
params.update(kwargs)
return self._call("sendMessage", **params)
bot = TelegramBot(TOKEN)
bot.send_message(chat_id=123456789, text="Hello from Python!", parse_mode="HTML")
通过这种封装,你无需每次重复编写URL拼接和响应检查代码,也让后续调用变得简洁安全。注意,parse_mode使用HTML时,特殊实体(如<、>、&)必须转义,否则会报错。
六、错误处理与重试策略
API调用不可能永远成功,网络波动、频率限制、参数非法都会导致报错。常见的HTTP状态码和错误码:
401:Token无效,请检查Token是否完整。429:请求过于频繁,触发限流。此时应等待retry_after秒后再试。400:参数错误,仔细核对description中的提示。404:方法名不存在或Token错误。
建议在调用层加入重试机制,对网络异常或429错误进行指数退避重试。例如,第一次失败等1秒,第二次等2秒,第三次等4秒,最多重试5次。同时设置合理的超时时间(如30秒),避免卡死。
七、进阶技巧:Webhook模式与长轮询
机器人需要实时接收用户消息,有两种实现方式:
- 长轮询(Long Polling):使用
getUpdates方法主动拉取更新,offset参数用于确认已读。适合开发环境。 - Webhook:通过
setWebhook设置一个HTTPS回调URL,Telegram服务器会把新消息推送到你的服务器。适合生产环境,效率更高。
Webhook的回调地址必须是HTTPS且端口为443/80/88之一,证书需有效。一个常见误区是忘记调用deleteWebhook清空旧的Webhook,导致getUpdates失效。切换模式时务必先清理。
八、总结
Telegram机器人API并不复杂,核心就是掌握Token鉴权、方法调用和响应解析。通过今天的学习,你已经能够独立完成一个机器人从注册到收发消息的全部流程。建议你先从sendMessage入手,逐步尝试发送图片、按钮回调(Inline Keyboard)和群组管理功能。在实际开发中,保持参数校验和错误处理的好习惯,你的机器人就会越来越稳定。如果想深入了解某个方法,官方文档永远是第一参考,链接:https://core.telegram.org/bots/api。