ambleloft

发布与更新业务消息

先在本机验证消息的发布、去重、更新和撤回,再连接外部事件源。

实践指南

完成后:发布消息,并核对更新、撤回及返回结果。

前置条件:按本页具体步骤准备所需文件与工具;学习路线中的上一页不自动构成依赖。

本页内容

01获取预览消息 API

预览能力 · SDK 0.1.0-alpha.9

仅在扩展后端通过 getMessages(context) 获取。旧宿主不支持时会抛出 UNSUPPORTED;不能静默伪造发布成功。下面函数可从已注册的业务操作中调用;不要直接放进浏览器页面。

src/notifications.ts · backend helper
import type { ExtensionContext } from '@ambleloft/extension-sdk';
import { getMessages } from '@ambleloft/extension-sdk/messages-preview';

export async function notifyReady(context: ExtensionContext) {
  const messages = getMessages(context);
  return messages.publish({
    eventKey: 'report:quarterly:ready',
    title: 'Report ready',
    body: 'Your quarterly report is ready to review.',
    category: 'notice',
    severity: 'info',
    actions: []
  });
}

02处理发布返回值

eventKey 使用稳定业务事件标识。重复事件不要随机生成新键;重复发布不等于更新正文。结果包含 published、duplicate、dismissed 或 rejected,只有 published 返回 revision 与 remind。

查看 PublishResult 与消息字段

03更新与撤回

先获取当前消息 revision,再执行乐观并发更新;冲突后重读并决定,不盲目覆盖。消息偏好由用户控制,getPreferences 返回 receive 与 muted。

Inside a backend function with messages initialized
const message = await messages.getByEventKey('report:quarterly:ready');
if (message) {
  await messages.update(message.id, { body: 'Report reviewed.' }, message.revision);
}
// To withdraw, read the current revision again:
const current = await messages.getByEventKey('report:quarterly:ready');
if (current) await messages.withdraw(current.id, current.revision);

04可运行案例与验收

运行 local-messages 案例。用同一 eventKey 发布两次,检查不会产生第二条新提醒;更新正文、撤回并检查状态。该 API 写入宿主本地消息中心,不自动发送邮件、移动推送或订阅 Agent 任务。

打开完整可运行案例

检查结果与排错

发布消息,并核对更新、撤回及返回结果。

按本页的验证步骤核对实际结果。涉及业务服务时,分别检查界面提交、工具回执与服务端记录。

打开错误代码与排错 →
SDK / CLI 0.1.0-alpha.9 · 接口基线 兼容性与预览说明 · 案例源码