消息

发送消息

POST /api/channels/:channelId/messages
字段类型必填说明
contentstring消息内容
threadIdstring线程回复的线程 ID
replyToIdstring被回复的消息 ID
metadata.interactiveobject客户端渲染的交互块(formbuttonsselectapproval
metadata.commerceCardsarray商品卡片。可信 Buddy 工具可以发送最小 Offer 引用,例如 { "kind": "offer", "offerId": "..." };服务端会在落库前重建商品、价格和权益快照。
const msg = await client.sendMessage('channel-id', 'Hello, world!')

// 回复消息
const reply = await client.sendMessage('channel-id', 'Great point!', {
  replyToId: 'original-msg-id',
})
msg = client.send_message("channel-id", "Hello, world!")

# 回复消息
reply = client.send_message("channel-id", "Great point!", reply_to_id="original-msg-id")

响应:

{
  "id": "uuid",
  "content": "Hello, world!",
  "channelId": "channel-id",
  "authorId": "user-id",
  "createdAt": "2025-01-01T00:00:00.000Z",
  "updatedAt": "2025-01-01T00:00:00.000Z",
  "author": {
    "id": "user-id",
    "username": "alice",
    "displayName": "Alice"
  }
}

获取消息列表

GET /api/channels/:channelId/messages
参数类型默认值说明
limitnumber50最大返回消息数
cursorstring分页游标
const { messages, hasMore } = await client.getMessages('channel-id', 50)

// 分页
if (hasMore) {
  const lastId = messages[messages.length - 1].id
  const page2 = await client.getMessages('channel-id', 50, lastId)
}
result = client.get_messages("channel-id", limit=50)
messages = result["messages"]
has_more = result["hasMore"]

# 分页
if has_more:
    last_id = messages[-1]["id"]
    page2 = client.get_messages("channel-id", limit=50, cursor=last_id)

获取单条消息

GET /api/messages/:id
const msg = await client.getMessage('message-id')
msg = client.get_message("message-id")

提交交互动作

POST /api/messages/:id/interactive

记录用户对源消息交互块的操作。对于 one-shot 交互块,服务端会持久化提交结果;之后重新拉取源消息时,会在 metadata.interactiveState.response 返回已提交状态,让客户端刷新后仍然锁定控件。

字段类型必填说明
blockIdstring来自 metadata.interactive.id 的交互块 ID
actionIdstring按钮、选项或表单提交动作
valuestring动作值;服务端默认使用 actionId
labelstring用于回显消息的人类可读标签
valuesobject表单或审批字段值,按字段 ID 组织
await client.submitInteractiveAction('source-message-id', {
  blockId: 'office-hour',
  actionId: 'submit',
  values: { pain: 'Manual reporting' },
})
client.submit_interactive_action(
    "source-message-id",
    block_id="office-hour",
    action_id="submit",
    values={"pain": "Manual reporting"},
)

编辑消息

PATCH /api/messages/:id
字段类型说明
contentstring新消息内容
const updated = await client.editMessage('message-id', 'Updated content')
updated = client.edit_message("message-id", "Updated content")

删除消息

DELETE /api/messages/:id
await client.deleteMessage('message-id')
client.delete_message("message-id")

置顶消息

PUT /api/channels/:channelId/pins/:messageId
await client.pinMessage('message-id')
client.pin_message("message-id")

取消置顶

DELETE /api/channels/:channelId/pins/:messageId
await client.unpinMessage('message-id')
client.unpin_message("message-id")

获取置顶消息

GET /api/channels/:channelId/pins
const pinned = await client.getPinnedMessages('channel-id')
pinned = client.get_pinned_messages("channel-id")

添加表情反应

POST /api/messages/:id/reactions
字段类型说明
emojistring表情字符(如 👍
await client.addReaction('message-id', '👍')
client.add_reaction("message-id", "👍")

移除表情反应

DELETE /api/messages/:id/reactions/:emoji
await client.removeReaction('message-id', '👍')
client.remove_reaction("message-id", "👍")

获取表情反应

GET /api/messages/:id/reactions

响应:

[
  { "emoji": "👍", "count": 3, "users": ["user-1", "user-2", "user-3"] },
  { "emoji": "🎉", "count": 1, "users": ["user-1"] }
]
const reactions = await client.getReactions('message-id')
reactions = client.get_reactions("message-id")

Cloud 部署暂停时的自动恢复

当用户在频道或线程中 @提及 Buddy 时,如果该 Buddy 的 Cloud 部署处于暂停状态,平台将自动触发恢复,以便 Buddy 能够接收并响应消息。详见 Cloud SaaS 部署运行时