ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Home Assistant telegram_bot.edit_message 实操指南:编辑 Telegram Bot 已发送的消息

Home Assistant telegram_bot.edit_message 实操指南:编辑 Telegram Bot 已发送的消息 Home Assistant telegram_bot.edit_message 实操指南编辑 Telegram Bot 已发送的消息【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.ioHome Assistant 的Telegram bot集成提供了telegram_bot.edit_message服务动作用于修改机器人此前已发送的某条消息的正文并可顺带更新标题、行内键盘等。本文基于官方动作文档 source/_actions/telegram_bot.edit_message.markdown结合 Telegram bot 集成文档中的完整示例系统讲解该动作的定位机制、全部参数、UI/YAML 两种配置方式以及发送后延时编辑、回调按钮触发编辑等实战用法。读完后你可以准确理解该动作如何定位要编辑的那条消息message_id bot chat 三要素掌握从telegram_sent事件或send_message响应中获取message_id的两种途径直接复制可运行的 YAML 自动化实现状态更新提示、进度草稿、按钮回调编辑等常见场景。1. 动作概述它能做什么telegram_bot.edit_message的作用是改变机器人自己之前发出去的消息文本。它不是发新消息而是对已有消息做就地修改典型用途包括消息发送后补充信息或修正内容例如正在开门…… → 门已关好更新带进度语义的消息第 1/3 步完成 → 第 2/3 步完成通过修改inline_keyboard更新按钮例如移除某个按钮、改变按钮文案。编辑一条消息需要两个前提消息 IDmessage_id目标消息的 ID。文档同时支持特殊值last表示该机器人最近发送的一条消息消息所在位置的定位方式即由哪个 bot、在哪个 chat 中发送的。该动作不使用标准 target而是通过下面三种方式之一指向目标位置选择一个或多个Notify targetentity_id通知实体——它们已经指向具体的 bot 与 chat提供Config entry IDconfig_entry_id加上该 chat 的Chat IDchat_id如果你只配置了一个 bot 且两者都不提供则默认使用该 bot 的第一个已授权 chat。2. message_id 从哪里来编辑操作的核心难点往往不是怎么编辑而是怎么拿到那条消息的 ID。结合集成文档 source/_integrations/telegram_bot.markdown 与发送消息动作文档 source/_actions/telegram_bot.send_message.markdown仓库官方文档给出了三条获取路径2.1 方式一使用last关键字最简单的方式。当你要编辑的就是机器人最后发出的那条消息时直接把message_id设为字符串last即可action: | action: telegram_bot.edit_message data: message_id: last message: The garage door has been closed again.这是动作文档给出的最小示例。注意last是相对定位——如果在这之后又发了新消息last就会指向别处因此只适合刚发完就改的场景。2.2 方式二从send_message的响应变量中读取telegram_bot.send_message动作执行成功后会返回一个chats列表每一项包含chat_id消息发送到的 chatmessage_id这条消息的 ID——官方文档明确指出它就是后续 edit / delete 操作要用的 IDentity_id执行发送的通知实体。响应形如chats: - chat_id: 1234567890 message_id: 100 entity_id: notify.telegram_bot_chat把send_message配置response_variable: response即可在后续步骤中用response.chats[0].message_id精确定位这是多目标场景下最稳妥的做法见第 5 节的完整示例。2.3 方式三监听telegram_sent事件当机器人发出任何类型的消息时会触发telegram_sent事件。集成文档提示该事件的message_id属性可以配合 edit、delete 和set_message_reaction动作去操作已发送的消息。事件属性示例bot: config_entry_id: config entry id of the bot first_name: first name of the bot id: id of the bot last_name: last name of the bot username: username of the bot chat_id: origin chat id from_first: first name of the sender from_last: last name of the sender id: message id message_thread_id: message thread id user_id: id of the sender集成文档还给出了一个现成套路在自动化中监听事件实体event.bot_update_event的event_type状态变为telegram_sent然后把chat_id和message_id写入两个input_number实体供其它 Telegram bot 动作随时引用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 # Replace with your telegram bot event entity 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这条路径适合跨自动化共享同一消息 ID的复杂系统发送方自动化只管发消息编辑方自动化从持久化的 input 实体中取 ID 执行编辑。3. UI 配置步骤按动作文档的引导在可视化编辑器中启用该动作的步骤如下打开Settings Automations scenes打开一个已有自动化或脚本或选择Create automation Create new automation新建自动化时先在When部分添加触发器脚本无需触发器它由其它机制调用在Then do部分点击Add action在搜索框中搜索并选择Telegram bot: Edit message填入Message ID与新的Message可选填其它选项选择消息所在位置目标然后Save。4. 参数完整说明UI 与 YAML 对照以下是该动作的全部字段UI 字段名与 YAML 字段名略有差异如 UI 的 Notify target 对应 YAML 的entity_idUI 字段YAML 字段必填类型说明Notify targetentity_id否string / list一个或多个指向持有该消息的 bot 与 chat的 Telegram 通知实体Message IDmessage_id是integer / string要编辑的消息 ID可用字符串last指代最近发送的消息Messagemessage是string消息的新正文Titletitle否string显示在消息上方的可选标题Parse modeparse_mode否string消息文本的格式解释方式html、markdown、markdownv2或plain_textDisable web page previewdisable_web_page_preview否boolean默认false关闭消息中链接的网页预览卡片Inline keyboardinline_keyboard否list消息下方的按钮行每个按钮绑定回调数据或外部 URLConfig entry IDconfig_entry_id否string指定使用哪个 Telegram bot配置了多个 bot 时必填Chat IDchat_id否integer消息所在的已授权 chat ID默认为该 bot 的第一个允许 chat几个实操要点message_id是唯一硬性必填项与message一起其余全部可选定位 bot/chat 的三个字段entity_id/config_entry_id/chat_id按三选一组合的规则生效单 bot 场景可全部省略。parse_mode决定标题与正文中格式符号的解释方式。例如设置parse_mode: markdown时*Message edit*会渲染为粗体注意markdownv2对下划线等字符有转义要求集成文档的示例中使用了|replace(_, \_)处理回调数据。编辑消息时可以同时更换inline_keyboard这是按钮回调后更新界面类交互的基础见第 6 节示例。与send_message相比本动作没有disable_notification、keyboard、message_tag、reply_to_message_id、message_thread_id等字段——编辑针对的是已存在消息这些发送期选项不适用。5. 实战示例一发送后延时编辑官方完整示例集成文档给出了一个发送 → 延时 5 秒 → 编辑的完整动作序列展示了如何用response_variable把发送结果传给编辑动作actions: - action: telegram_bot.send_message data: message: testing response_variable: response - delay: seconds: 5 - action: telegram_bot.edit_message data: message: done testing chat_id: {{ response.chats[0].chat_id }} message_id: {{ response.chats[0].message_id }}这个模式正是进度提示类自动化的骨架先发正在执行……任务完成后再用edit_message把同一条消息改成结果状态避免消息刷屏。多目标时同理——遍历response.chats即可对每条消息分别编辑与 source/_actions/telegram_bot.delete_message.markdown 文档中批量删除的repeatfor_each: {{ response.chats }}写法一致。6. 实战示例二按钮回调触发编辑inline keyboard 联动集成文档的Sample automations with inline keyboards and callback queries章节演示了一组更复杂的交互机器人先发送一条带三个按钮/edit_msg、/do_nothing、/remove_button的消息用户点击按钮产生telegram_callback回调事件自动化据此编辑原消息的正文与按钮。其中编辑消息正文的完整自动化如下alias: Telegram bot that edits the last sent message description: 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 # Replace with your telegram bot event entity attribute: event_type state: telegram_callback - condition: state entity_id: event.bot_update_event # Replace with your telegram bot event entity attribute: command state: /edit_msg actions: - action: telegram_bot.answer_callback_query data: show_alert: true message: Editing the message! callback_query_id: {{ trigger.to_state.attributes.id }} - action: telegram_bot.edit_message data: inline_keyboard: - Edit message:/edit_msg, Dont:/do_nothing - Remove this button:/remove_button message_id: {{ trigger.to_state.attributes.message.message_id }} chat_id: {{ trigger.to_state.attributes.chat_id }} title: *Message edit* message: - Callback received from {{ trigger.to_state.attributes.from_first }}. Message id: {{ trigger.to_state.attributes.message.message_id }}. Data: {{ trigger.to_state.attributes.data|replace(_, \_) }}该示例同时印证了几个关键事实回调事件telegram_callback中带有message.message_id与chat_id可直接作为edit_message的定位参数——即点击按钮的那条消息天然知道如何编辑自己edit_message中再次传入inline_keyboard表示同步更新按钮布局配合answer_callback_query先响应用户点击给出 alert再执行编辑是官方推荐的回调处理顺序只改按钮不改正文时可改用姊妹动作telegram_bot.edit_replymarkup该文档示例中用message_id: last移除一个按钮。7. 调试与排错动作文档附带了两个通用辅助入口手动试跑打开Settings Tools ActionsDeveloper Tools搜索telegram_bot.edit_message填好字段后点击Perform action即可在不写任何 YAML 的情况下直接观察真实效果获取社区支持官方建议遇到卡壳时在 Home Assistant 社区论坛、Discord 或 /r/homeassistant 发帖说明你调用的动作与预期现象也可以使用 AI 助手辅助挑选合适的动作。相关同类动作还包括 Delete message、Edit caption、Edit message media、Edit replymarkup、Set message reaction 等共同构成对已发送消息的完整操作集。排查编辑失败时优先核对三点message_id是否真的指向目标消息用telegram_sent事件回显确认多 bot 环境下是否遗漏了config_entry_id目标 chat 是否已在集成中完成授权chat_id必须是已预授权的 chat否则默认回落到 bot 的第一个允许 chat可能改错地方。8. 小结telegram_bot.edit_message是 Home Assistant Telegram bot 集成中实现消息就地更新的核心动作必填message_id支持last与message通过 Notify 实体、config_entry_idchat_id或单 bot 默认 chat 三种方式定位目标位置并可附带更新title、parse_mode、disable_web_page_preview与inline_keyboard。配合send_message的response_variable、telegram_sent事件监听与回调按钮自动化它覆盖了从简单进度提示到交互式按钮界面的完整消息生命周期管理。参考文档动作官方文档source/_actions/telegram_bot.edit_message.markdown集成文档含全部实战示例source/_integrations/telegram_bot.markdown相关动作source/_actions/telegram_bot.send_message.markdown、source/_actions/telegram_bot.delete_message.markdown【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表