跳到主要内容

积分 (Credits)

工作区可以给成员发放积分,成员用这些积分为自己发起的对话付费。 发放从工作区所有者的账户里扣除,并且用幂等键保证同一笔发放无论重试多少次都只记一次。

先确认你需不需要发积分:默认情况下,和 Agent 对话的费用记在 Agent 所有者头上,成员余额为 0 也能正常聊天——网站客服、小程序助手这类场景通常一分都不用发。只有当 Agent 所有者把计费方设成「由使用者付费」时,成员才需要余额。

发放积分

const ws = new OpenhexClient({ apiKey: process.env.OPENHEX_WORKSPACE_KEY! })
.workspace(process.env.OPENHEX_WORKSPACE_SLUG!);

const grant = await ws.grantCredits(member.member_id, {
amount: 500,
idempotency_key: `signup-bonus:${member.member_id}`,
});
// → { balance: 500, purchase_id: '…', idempotent: false }
参数类型说明
amountnumber发放数量,必须大于 0,最大 1e9
idempotency_keystring你生成的幂等键,同一笔业务用同一个键
返回字段说明
balance发放后该成员的余额
purchase_id这笔发放的记录 id
idempotenttrue 表示这是一次重放,没有重复入账

幂等键怎么取

用同一个 idempotency_key 再调一次,平台不会重复发放,而是原样返回第一次的结果(同一个 purchase_id),并把 idempotent 置为 true。所以网络超时后直接重试就是安全的。

把幂等键和你的业务事件绑定,而不是每次随机生成:

// ✅ 一个订单只发一次
idempotency_key: `order:${orderId}`

// ✅ 每个成员只有一次注册奖励
idempotency_key: `signup-bonus:${memberId}`

// ❌ 每次都不一样,重试会重复发放
idempotency_key: crypto.randomUUID()

常见错误

状态码message原因
400body/amount Number must be greater than 0amount 不是正数
402insufficient owner wallet balance工作区所有者账户余额不足以支付这笔发放
403API key does not match workspaceKey 和 slug 不属于同一个工作区
404member not found成员 id 不属于这个工作区

工作区 API Key 和工作区所有者的登录态都可以调用这个方法。

查余额

余额在成员列表里:

const { members } = await ws.listMembers();
const balance = members.find(m => m.user_id === memberId)?.balance;

下一步

  • 成员 — 开通、列出与停用成员
  • 会话令牌 — 让成员拿着令牌去和 Agent 对话
  • 方法参考 — 每个方法的鉴权、HTTP 路由与错误码