ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Home Assistant 中 telegram_bot.delete_message 动作实战:删除 Telegram 机器人已发送的消息

2026/9/17 10:19:14 拓冰建站 浏览量
Home Assistant 中 telegram_bot.delete_message 动作实战:删除 Telegram 机器人已发送的消息 Home Assistant 中 telegram_bot.delete_message 动作实战删除 Telegram 机器人已发送的消息【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io本文以 Home Assistant 官方文档仓库中的动作参考文档为核心完整讲解telegram_bot.delete_message动作的用途、UI 与 YAML 两种配置方式、消息定位机制Notify 实体、Config entry ID Chat ID、单机器人默认行为以及message_id的获取与last快捷写法并结合 Telegram bot 集成文档中的“发送后延迟删除”完整示例帮助你在自动化中实现通知消息的自动清理。一、动作定位与适用场景telegram_bot.delete_message是 Telegram bot 集成telegram_bot域提供的一个动作其官方定义是“Deletes a message a Telegram bot sent earlier”删除 Telegram 机器人之前发送的一条消息见 动作参考文档。它解决的核心场景是机器人之前发出过一条消息报警通知、临时提醒、进度播报等在任务结束后需要从聊天中抹掉这条消息而不是只发一条新的“撤回”文本。与telegram_bot.edit_message改写消息文本不同delete_message只接受消息标识、不接受新内容。使用该动作需要满足两个前提已按 Telegram bot 集成文档 完成集成配置Broadcast / Polling / Webhooks 三种平台之一并通过子条目Subentries的 “Add allowed chat ID” 把目标聊天加入白名单——文档明确说明“必须先允许列表化 chat ID机器人才能与该聊天收发消息”。知道要删除消息的Message ID。消息 ID 的来源主要有两条路径下文“获取 Message ID”一节详述。二、通过用户界面配置如果偏好可视化编排可按 动作参考文档 的步骤操作打开SettingsAutomations scenes打开一个现有自动化或脚本或选择Create automationCreate new automation如果是新建自动化在When区域添加触发条件脚本不需要触发条件它由其他动作调用在Then do区域选择Add action在搜索框中搜索并选择Telegram bot: Delete message填入Message ID选择消息所在的目标位置然后选择Save。UI 选项说明文档中“Options in the UI”部分定义了以下字段选项是否必填说明Notify target否一个或多个指向“机器人 持有该消息的聊天”的 Telegram notify 实体Message ID是要删除的消息 ID也可以填last表示最近一条发送的消息Config entry ID多机器人时必填指定使用哪个 Telegram 机器人Chat ID否消息所在的已授权聊天 ID默认为机器人白名单中的第一个聊天消息目标解析机制不使用标准 target该文档明确指出delete_message不使用标准的 target 段而是通过以下三种方式之一指向要删除的消息选择指向机器人和目标聊天的Notify target实体同时提供Config entry ID指定机器人与Chat ID指定聊天若只配置了一个机器人且两者都不提供则默认使用该机器人的第一个聊天。这一机制与同域的send_message、edit_message保持一致从 Send message 文档 和 Edit message 文档 中可以看到完全相同的三选一描述说明这是telegram_bot域动作的通用定位方式。三、YAML 配置在 YAML 中该动作写作telegram_bot.delete_message。文档给出的最小示例action: | action: telegram_bot.delete_message data: message_id: lastYAML 参数完整表“Options in YAML”部分定义的字段如下字段类型必填说明entity_idstring 或 list否一个或多个指向“机器人 持有该消息的聊天”的 Telegram notify 实体message_idinteger 或 string是要删除的消息 ID可用字符串last指向最近一条发送的消息config_entry_idstring否指定使用哪个机器人配置多个机器人时必填chat_idinteger否消息所在的已授权聊天 ID默认为机器人白名单中的第一个聊天注意message_id的类型是[integer, string]二合一正常传整数消息 ID也可以传字符串last。chat_id只能是整数这是 Telegram 聊天 ID 的本质私聊为正数、群聊为负数见 集成文档 中 “Allowlisting chat IDs via Subentries” 一节。四、获取 Message ID 的两种方式方式一response_variable捕获发送结果推荐telegram_bot.send_message的动作文档Send message 参考中有专门的“Response data”章节消息发出后动作返回一个chats列表每一项包含chat_id、message_id、entity_id三个字段。示例响应chats: - chat_id: 1234567890 message_id: 100 entity_id: notify.telegram_bot_chat因此只要在send_message上声明response_variable就能拿到“哪个聊天”的“哪条消息”的 ID再交给delete_message使用。方式二telegram_sent事件集成文档 的 “Event: Message sent” 章节说明机器人发送任意类型消息都会触发telegram_sent事件事件属性中含chat_id与id消息 ID文档还特别提示该属性“可以与 edit、delete 和set_message_reaction动作配合用于操作之前发送的消息”。集成文档甚至给出了一个把chat_id、message_id存进input_number实体以供后续动作使用的示例自动化。五、实战示例发送消息并在 5 秒后删除Telegram bot 集成文档 中的 “Example: automation to send a message and delete after a delay” 小节给出了一个完整的官方示例它把前面所有机制串了起来先用response_variable捕获发送结果delay5 秒再用repeat遍历response.chats逐项删除——因为一条send_message可能同时投递到多个聊天每个聊天各产生一条独立消息必须按chats列表逐条删除alias: telegram send message and delete actions: - action: telegram_bot.send_message data: message: testing response_variable: response - delay: seconds: 5 - repeat: sequence: - action: telegram_bot.delete_message data: message_id: {{ repeat.item.message_id }} chat_id: {{ repeat.item.chat_id }} for_each: {{ response.chats }}几点解读response.chats是列表for_each逐元素迭代repeat.item.message_id/repeat.item.chat_id分别取自上一节所述的响应结构删除动作通过chat_id显式定位聊天属于“三选一”机制中的第二种未使用 notify 实体也未依赖默认第一个聊天同一文档的 “send_message then edit it after a delay” 示例中edit_message直接使用response.chats[0].message_id与response.chats[0].chat_id访问首个聊天——说明在只向单个聊天发送的场景下可以不引入repeat直接用索引取值即可。last快捷写法的适用边界message_id: last表示“最近一条发送的消息”。这在“发送完立即删最后一条”或脚本顺序执行、中间没有其他消息干扰的场景非常简洁但如果两个自动化可能并发发送、或者“最后一条”被别的动作覆盖就应该改用显式message_idchat_id否则存在误删风险。六、测试与排障直接测试参考文档内嵌的“Try it yourself”模板模板文件打开SettingsToolsActions搜索该动作填入message_id等字段后选择Perform action即可在真实环境验证效果无需编写任何 YAML。常见问题排查删除失败 / 提示无权限确认目标chat_id已在集成设置中通过 “Add allowed chat ID” 加入白名单集成文档Telegram bot 只能操作其被授权的聊天。多机器人环境报歧义配置了多个机器人而未指定config_entry_id时需显式填写该字段“defaults to the bots first allowed chat” 的默认行为仅在单机器人场景生效。last删错了消息按第五节说明改用send_message的response_variable捕获的精确 ID。旧版notify.telegram平台的用户Telegram 通知平台文档 已将该平台标记为 legacy 并建议改用 notifiersdelete_message属于telegram_bot域动作应基于telegram_bot集成notifiers / actions 路径使用。七、相关动作Send message发送文本提供本动作所需message_id的主要来源Edit message与delete_message参数结构最接近同样支持message_id: last用于改写而非删除Edit reply markup、Edit caption分别修改消息的键盘与媒体说明Telegram bot 集成总览平台选择、白名单管理、事件实体与全部官方示例。综上telegram_bot.delete_message本身参数很少但它的价值在于与send_message的响应数据或telegram_sent事件精确对接构成“发送 → 跟踪 → 删除”的完整消息生命周期管理闭环在需要“临时通知、阅后即焚”的自动化场景中如进度播报、一次性提醒按官方示例捕获response.chats后逐项删除是最稳妥的落地方式。【免费下载链接】home-assistant.io:blue_book: Home Assistant User documentation项目地址: https://gitcode.com/GitHub_Trending/ho/home-assistant.io创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考