Home Assistant Telegram bot set_message_reaction 动作详解:为 Telegram 消息自动添加表情回应
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
本篇以 Home Assistant 官方文档中的telegram_bot.set_message_reaction动作为核心,完整讲解该动作的功能定位、UI 与 YAML 两种调用方式、全部参数含义,以及如何获取并传递消息 ID(Message ID)、Chat ID 等定位信息。读完本文,你可以在自动化中让 Telegram 机器人像手动点表情一样对指定消息添加表情回应(Reaction),并掌握与telegram_sent事件实体联动的完整实战方案。
动作概述
telegram_bot.set_message_reaction用于让机器人对一条消息添加表情回应,效果等同于在 Telegram 应用里长按消息后点选一个表情。该动作属于telegram_bot域,是 Telegram bot 集成(source/_integrations/telegram_bot.markdown)提供的一组消息管理动作之一,官方文档中明确将其与edit_message、delete_message等动作并列,说明它专门用于“对之前已发送的消息进行后续操作”(source/_integrations/telegram_bot.markdown#L416)。
使用前提:
- 已正确配置Telegram bot集成(支持 Broadcast、Polling、Webhooks 三种平台);
- 目标聊天已在集成中通过Add allowed chat ID子条目(Subentry)完成 Chat ID 白名单授权——Chat ID 是用户(正数)或群组(负数)的唯一数值标识,未授权聊天的消息无法被机器人操作;
- 你能确定要回应的那条消息的 ID。
在用户界面中使用该动作
如果你习惯可视化编排,可以在自动化编辑器中按以下步骤完成(对应 source/_actions/telegram_bot.set_message_reaction.markdown#L12-L20):
- 进入Settings > Automations & scenes(设置 > 自动化与场景);
- 打开已有的自动化/脚本,或选择Create automation > Create new automation;
- 新建自动化时先在When部分添加触发条件。脚本不需要触发器——它由其他调用方启动;
- 在Then do部分点击Add action;
- 在搜索框中搜索并选择Telegram bot: Set message reaction;
- 填写Message ID和Reaction,以及可选参数;
- 选择消息所在位置(定位方式见下节),点击Save。
UI 中的参数说明
| 参数 | 说明 | 是否必填 |
|---|---|---|
| Message ID | 要添加回应消息的 ID,也可以使用last指向最近一条已发送的消息 | 是 |
| Reaction | 要使用的表情(emoji) | 是 |
| Large animation | 为表情回应播放更大的动画 | 否 |
| Config entry ID | 要使用的 Telegram bot,配置多个 bot 时必填 | 否 |
| Chat ID | 消息所在聊天已授权的 Chat ID,默认为该 bot 的第一个允许聊天 | 否 |
消息定位方式:不使用标准 target
与light.turn_on这类动作不同,set_message_reaction不使用标准 target(entity_id)。它通过以下两种方式定位消息(source/_actions/telegram_bot.set_message_reaction.markdown#L22-L25):
- 方式一:同时提供Config entry ID(指定用哪个 bot 配置条目)与Chat ID(指定消息所在的已授权聊天);
- 方式二:只配置了单个 bot 且两者都不提供时,默认使用该 bot 的第一个聊天(first allowed chat)。
这意味着多 bot 场景下config_entry_id与chat_id必须成对提供,否则会操作到错误的机器人或聊天。
在 YAML 中使用该动作
在 YAML 中,该动作的完整名称为telegram_bot.set_message_reaction。官方给出的最简示例(source/_actions/telegram_bot.set_message_reaction.markdown#L48-L54):
action: | action: telegram_bot.set_message_reaction data: message_id: last reaction: 👍这个示例演示了message_id: last的用法:机器人会对自己最近发送的那条消息添加 👍 回应,无需事先知道具体消息 ID。
YAML 参数完整参考
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
message_id | integer/string | 是 | — | 要添加回应消息的 ID;也可使用字符串last指向最近发送的消息 |
reaction | string | 是 | — | 要使用的表情(emoji) |
is_big | boolean | 否 | false | 为表情回应播放更大的动画(对应 UI 中的 “Large animation”) |
config_entry_id | string | 否 | — | 要使用的 Telegram bot,配置多个 bot 时必填 |
chat_id | integer | 否 | 该 bot 的第一个允许聊天 | 消息所在聊天的已授权 Chat ID |
注意message_id同时接受整数和字符串两种类型,这正是last这个特殊取值能够生效的原因。is_big对应 Telegram 的“大动画表情”行为,例如对 👍 播放放大动画,适合用于需要强调的场景。
Message ID 从哪里来
这是使用该动作最关键的实战问题。仓库文档给出了三类来源:
1. 使用last指向最近消息
对“机器人刚发完一条消息后立即加表情回应”的场景最简单,例如发送任务完成通知后追加一个确认表情:
actions: - action: telegram_bot.send_message data: message: "Backup finished." - action: telegram_bot.set_message_reaction data: message_id: last reaction: "✅"2. 从事件实体的telegram_sent事件中读取
Telegram bot 集成为每条收发消息维护一个事件实体(event entity),其中telegram_sent事件在机器人发出任意类型消息时触发,其属性中包含id(消息 ID)与chat_id(source/_integrations/telegram_bot.markdown#L413-L456)。官方文档特别提示:
The
message_idattribute can be used with the edit, delete andset_message_reactionactions to interact with a previously sent message.
也就是说,事件属性直接可以填进set_message_reaction的data中:
actions: - action: telegram_bot.set_message_reaction data: message_id: "{{ trigger.to_state.attributes.id }}" chat_id: "{{ trigger.to_state.attributes.chat_id }}" reaction: "👍"3. 用 input 实体持久化最近消息的 ID
官方文档提供了一个将最近发送消息的chat_id与message_id存入input_number实体的示例自动化(source/_integrations/telegram_bot.markdown#L583-L610),这些值随后可被set_message_reaction等动作复用:
alias: Notifications about messages sent by Telegram bot triggers: - trigger: state entity_id: - event.bot_update_event # Replace with your telegram bot event entity conditions: - condition: state entity_id: event.bot_update_event attribute: event_type state: telegram_sent actions: - action: input_number.set_value data_template: value: "{{ trigger.to_state.attributes.chat_id }}" target: entity_id: input_number.chat_id # Replace with your input entity - action: input_number.set_value data_template: value: "{{ trigger.to_state.attributes.message_id }}" target: entity_id: input_number.message_id # Replace with your input entity随后在任意其他自动化中即可用保存的值执行回应:
actions: - action: telegram_bot.set_message_reaction data: message_id: "{{ states('input_number.message_id') | int }}" chat_id: "{{ states('input_number.chat_id') | int }}" reaction: "🙏" is_big: true快速验证:不写 YAML 先试一遍
按照文档“Try it yourself”一节的做法(source/_actions/telegram_bot.set_message_reaction.markdown#L82):打开Settings > Tools > Actions(开发者工具 > 动作),搜索set_message_reaction,填入字段后点击Perform action,即可在不编写 YAML 的情况下在真实聊天中验证效果。
排查思路建议:
- 先确认目标 Chat ID 已加入集成的白名单(子条目),否则机器人无权操作该聊天的消息;
- 多 bot 场景检查
config_entry_id是否与消息实际所属的 bot 条目一致; - 若使用
last却回应对了“意料之外的消息”,说明期间有其他发送动作介入了,建议改用事件属性或 input 实体显式保存的message_id。
相关动作
set_message_reaction属于 Telegram bot 消息管理动作家族,同一域下可配合使用的文档还包括:
- 删除消息:
telegram_bot.delete_message,同样支持message_id: last与chat_id定位; - 编辑消息:
telegram_bot.edit_message; - 编辑消息媒体、编辑回复键盘、编辑说明文字;
- 回复回调查询:
telegram_bot.answer_callback_query,配合内联键盘按钮使用; - 发送消息:
telegram_bot.send_message,其response_variable返回值包含chats[].message_id与chats[].chat_id,可直接喂给本动作; - Telegram bot 集成总览:平台选型、Chat ID 白名单、事件实体与大量示例自动化。
这套组合可以覆盖“发送消息 → 记录 ID → 编辑/加表情/删除”的完整消息生命周期管理,是构建 Telegram 通知与交互机器人的基础积木。
【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考