Home Assistant Telegram bot set_message_reaction 动作详解:为 Telegram 消息自动添加表情回应
2026/9/17 3:50:30 网站建设 项目流程

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_messagedelete_message等动作并列,说明它专门用于“对之前已发送的消息进行后续操作”(source/_integrations/telegram_bot.markdown#L416)。

使用前提:

  1. 已正确配置Telegram bot集成(支持 Broadcast、Polling、Webhooks 三种平台);
  2. 目标聊天已在集成中通过Add allowed chat ID子条目(Subentry)完成 Chat ID 白名单授权——Chat ID 是用户(正数)或群组(负数)的唯一数值标识,未授权聊天的消息无法被机器人操作;
  3. 你能确定要回应的那条消息的 ID。

在用户界面中使用该动作

如果你习惯可视化编排,可以在自动化编辑器中按以下步骤完成(对应 source/_actions/telegram_bot.set_message_reaction.markdown#L12-L20):

  1. 进入Settings > Automations & scenes(设置 > 自动化与场景);
  2. 打开已有的自动化/脚本,或选择Create automation > Create new automation
  3. 新建自动化时先在When部分添加触发条件。脚本不需要触发器——它由其他调用方启动;
  4. Then do部分点击Add action
  5. 在搜索框中搜索并选择Telegram bot: Set message reaction
  6. 填写Message IDReaction,以及可选参数;
  7. 选择消息所在位置(定位方式见下节),点击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_idchat_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_idinteger/string要添加回应消息的 ID;也可使用字符串last指向最近发送的消息
reactionstring要使用的表情(emoji)
is_bigbooleanfalse为表情回应播放更大的动画(对应 UI 中的 “Large animation”)
config_entry_idstring要使用的 Telegram bot,配置多个 bot 时必填
chat_idinteger该 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)。官方文档特别提示:

Themessage_idattribute can be used with the edit, delete andset_message_reactionactions to interact with a previously sent message.

也就是说,事件属性直接可以填进set_message_reactiondata中:

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_idmessage_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: lastchat_id定位;
  • 编辑消息:telegram_bot.edit_message
  • 编辑消息媒体、编辑回复键盘、编辑说明文字;
  • 回复回调查询:telegram_bot.answer_callback_query,配合内联键盘按钮使用;
  • 发送消息:telegram_bot.send_message,其response_variable返回值包含chats[].message_idchats[].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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询