Telegram机器人发送贴纸与动态表情完全指南:从file_id到上传自制贴纸

想为Telegram机器人添加贴纸和动态表情功能?本文手把手教你使用Bot API发送静态贴纸、动态贴纸与GIF动画,并详解如何获取file_id、上传自定义贴纸以及常见调试技巧,助你快速打造趣味交互体验。

阅读提示涉及账号和安全设置时,请边阅读边核对当前设备界面。

在Telegram的生态中,贴纸和动态表情(动画贴纸、GIF)是用户表达情绪的重要方式。如果你的机器人能够发送这些生动的内容,无疑会极大提升交互趣味性。本文面向机器人开发者,详解如何通过Bot API让机器人发送贴纸和动态表情,从最基本的file_id复用,到上传自定义贴纸包,全程附带可运行的代码示例。

一、认识Telegram贴纸与动态表情

Telegram的贴纸分为静态贴纸(WebP格式)和动态贴纸(Lottie动画,以.tgs格式存储),而“动态表情”常指用户通过贴纸商店下载的动画贴纸或GIF格式的动画(在Bot API中使用Animation类型表示)。在Bot API中,发送贴纸使用sendSticker方法,发送GIF或视频动画则使用sendAnimation方法。值得注意的是,普通表情符号(Emoji)本身不是贴纸,机器人可以直接在文本中发送;但如果你想发送的是“动态emoji”类似Telegram Premium的动画表情,那属于贴纸范畴,需通过贴纸file_id来发送。

二、前提准备:获取机器人Token与文件ID

开始前,请确保你的机器人已通过@BotFather创建并获得Token。要发送贴纸或动画,两种常见路径:

  1. 直接使用已知的file_id:任何贴纸或GIF都有唯一的file_id,机器人可以将其保存并反复使用,无需重新上传。
  2. 通过文件路径上传:将本地贴纸或GIF作为multipart表单发送。

获取file_id的简单方法:在任意聊天中向机器人发送一个贴纸或GIF,然后通过getUpdates方法监听消息,从消息对象中提取sticker.file_idanimation.file_id。下面是一个Python示例:

import requests

TOKEN = "你的机器人Token"
URL = f"https://api.telegram.org/bot/getUpdates"

updates = requests.get(URL).json()
for update in updates["result"]:
    if "sticker" in update.get("message", {}):
        print(update["message"]["sticker"]["file_id"])
    if "animation" in update.get("message", {}):
        print(update["message"]["animation"]["file_id"])

三、使用sendSticker发送静态或动态贴纸

无论静态还是动态贴纸,均使用sendSticker方法。只需提供chat_idsticker(可以是file_id或HTTP URL)。下面为Python示例:

import requests

TOKEN = "你的机器人Token"
chat_id = "@目标群组或用户ID"
sticker_file_id = "CAACAgQAAxkBAAEJZ...(你的file_id)"

url = f"https://api.telegram.org/bot/sendSticker"
payload = {
    "chat_id": chat_id,
    "sticker": sticker_file_id
}
response = requests.post(url, json=payload)
print(response.json())

注意:动态贴纸(.tgs)的file_id同样直接传给sticker参数,客户端会自动播放动画。

四、发送动态表情(动画贴纸和GIF)

如果你想发送GIF或MP4动画,使用sendAnimation方法。Telegram中的“动态表情”常以GIF形式存在,机器人发送时需传入animation参数(file_id或URL)。示例:

url = f"https://api.telegram.org/bot/sendAnimation"
payload = {
    "chat_id": chat_id,
    "animation": "CgACAgQAAxkBAAEJZ...(动画file_id)"
}
requests.post(url, json=payload)

此外,可通过sendDocument发送GIF文件,但Telegram客户端可能将其显示为文件而不是动画。为了获得内嵌动画效果,推荐使用sendAnimation。若你的动态表情是Lottie动画贴纸,请使用sendSticker;若是视频循环动画(如MP4),则用sendAnimation

五、进阶:为机器人创建并上传自定义贴纸

如果你想机器人拥有专属贴纸,可以通过createNewStickerSetaddStickerToSet方法上传。上传静态贴纸需WebP(≤512KB),动态贴纸需TGS格式(≤64KB)。完整流程如下:

  1. 准备贴纸图片文件(PNG转换为WebP,或设计TGS动画)。
  2. 使用createNewStickerSet创建贴纸包,要求user_id为机器人管理员用户ID,name必须以“_by_机器人用户名”结尾。
  3. 使用addStickerToSet持续添加更多贴纸。

由于涉及文件上传需使用multipart/form-data,以下为简化示例(使用Python requests):

import requests

TOKEN = "你的机器人Token"
URL = f"https://api.telegram.org/bot/createNewStickerSet"

files = {"png_sticker": ("sticker.png", open("sticker.webp", "rb"), "image/webp")}
data = {
    "user_id": 12345678,
    "name": "my_cool_stickers_by_MyBot",
    "title": "我的机器人贴纸包",
    "sticker_emoji": "😀"
}
response = requests.post(URL, data=data, files=files)
print(response.json())

若要上传动态贴纸(TGS),使用类似方法,但将参数改为tgs_sticker

六、常见错误与调试

  • 400 Bad Request: STICKER_PNG_NGS_DIMENSIONS:贴纸尺寸不符合要求(静态需512×512,动态需100×100)。
  • file_id无效:确保file_id来自同一机器人,且尚未过期(一般长期有效)。
  • 未设置Bot权限:向群组发送贴纸前,机器人需在群组中被添加为管理员或至少允许发送媒体消息。
  • TGS文件损坏:确保Lottie动画格式正确,并通过官方工具验证。

建议在测试环境中先用getStickerSet获取已有贴纸包的file_id进行测试,避免频繁上传。

总结

通过本文,你已掌握Telegram机器人发送贴纸和动态表情的两种主要方式:复用已有file_id和上传自定义贴纸包。sendStickersendAnimation是高频接口,而file_id的获取技巧是提升效率的关键。建议继续探索Telegram Bot API官方文档中关于StickerSet的进阶玩法,结合内联键盘打造更丰富的交互场景。

FAQ

下载与安装

常见问题