当您使用Telegram机器人时,是否遇到过等待响应却没有反馈的情况?通过发送聊天动作(Chat Action),机器人可以向用户实时显示“正在输入”或“上传文件”等状态,大幅提升交互体验。本文将详解Telegram Bot API中的sendChatAction方法,助您快速实现状态反馈。
什么是聊天动作(Chat Action)?
聊天动作是Telegram机器人向用户展示当前处理状态的一种机制。机器人通过调用sendChatAction方法,告知Telegram服务器正在执行何种操作,Telegram会在用户界面中显示对应的提示。
官方支持的动作类型包括:typing(正在输入)、upload_photo(上传照片)、record_video(录制视频)、upload_video(上传视频)、record_voice(录制语音)、upload_voice(上传语音)、upload_document(上传文件)、find_location(查找位置)、record_video_note(录制视频消息)、upload_video_note(上传视频消息)等。
sendChatAction方法详解
调用sendChatAction只需两个必填参数:
chat_id:目标会话的标识,可以是用户ID或群组ID。action:要发送的动作类型,如typing。
可选参数business_connection_id用于商业连接场景,本文不展开。
示例请求(HTTP):
GET https://api.telegram.org/bot<token>/sendChatAction?chat_id=123456&action=typing响应为简单JSON,成功时返回{"ok":true,"result":true}。
实战:发送“正在输入”和“上传文件”状态
发送“正在输入”
在机器人生成响应前,先发送typing动作,告知用户正在准备回复。以下为Python示例(使用requests):
import requests
TOKEN = "YOUR_BOT_TOKEN"
CHAT_ID = 123456
url = f"https://api.telegram.org/bot/sendChatAction"
data = {"chat_id": CHAT_ID, "action": "typing"}
requests.post(url, data=data)若使用python-telegram-bot库,可以这样写:
from telegram import Bot
bot = Bot(token="YOUR_BOT_TOKEN")
bot.send_chat_action(chat_id=CHAT_ID, action="typing")发送“上传文件”状态
当机器人准备发送文档前,可先发送upload_document动作,再发送文件。示例:
# 先发送上传状态
bot.send_chat_action(chat_id=CHAT_ID, action="upload_document")
# 然后发送文档
bot.send_document(chat_id=CHAT_ID, document=open("report.pdf","rb"))注意事项与最佳实践
- 频率限制:官方建议每秒最多发送一个聊天动作,频繁发送可能导致限流。
- 动作超时:聊天动作状态不会持续太久,如需持续反馈,应定期重复发送(例如每3-4秒)。
- 匹配动作:动作类型应与实际任务一致,否则用户会感到困惑。
- 上传大文件时:先发送
upload_document,发送过程中可再次发送以维持状态。
完整示例
以下是一个简单机器人:收到/start命令后发送typing,随后发送帮助文档。
import time
from telegram import Bot
from telegram.ext import Updater, CommandHandler
BOT_TOKEN = "YOUR_BOT_TOKEN"
bot = Bot(token=BOT_TOKEN)
def start(update, context):
chat_id = update.effective_chat.id
bot.send_chat_action(chat_id=chat_id, action="typing")
time.sleep(2) # 模拟处理
bot.send_message(chat_id=chat_id, text="你好!我是机器人。")
updater = Updater(token=BOT_TOKEN, use_context=True)
updater.dispatcher.add_handler(CommandHandler("start", start))
updater.start_polling()
updater.idle()总结
聊天动作是提升Telegram机器人用户体验的利器。通过sendChatAction,您可以用最小的代价让用户明确当前状态。无论是“正在输入”还是“上传文件”,均能有效缓解等待焦虑。掌握上述方法与最佳实践,您的机器人将更具“人情味”。