Memokit
API 参考

Webhooks

接收记忆事件的实时通知

Webhooks

Webhooks 允许您在 Memokit 账户中发生事件时接收实时 HTTP 通知。

概述

当您配置了 webhook 后,Memokit 会在订阅的事件发生时向您指定的 URL 发送 HTTP POST 请求。这使得无需轮询 API 即可实现实时集成。

Webhook 事件

事件描述
memory.created创建了新记忆
memory.updated更新了记忆
memory.deleted删除了记忆

Webhook 载荷

所有 webhook 载荷遵循以下结构:

{
  "id": "wh_delivery_abc123",
  "event": "memory.created",
  "timestamp": "2024-01-15T10:30:00Z",
  "data": {
    "id": "mem_abc123",
    "content": "用户提到...",
    "userId": "user_123",
    "createdAt": "2024-01-15T10:30:00Z"
  }
}

设置 Webhooks

1. 创建 Webhook 端点

首先,在您的服务器上创建一个可以接收 POST 请求的端点:

// Express.js 示例
app.post('/webhooks/memokit', (req, res) => {
  const signature = req.headers['x-memokit-signature'];
  const payload = req.body;

  // 验证签名
  if (!verifySignature(payload, signature, webhookSecret)) {
    return res.status(401).send('签名无效');
  }

  // 处理事件
  switch (payload.event) {
    case 'memory.created':
      handleMemoryCreated(payload.data);
      break;
    case 'memory.updated':
      handleMemoryUpdated(payload.data);
      break;
    case 'memory.deleted':
      handleMemoryDeleted(payload.data);
      break;
  }

  res.status(200).send('OK');
});

2. 注册 Webhook

在 Memokit 控制台中:

  1. 在侧边栏中进入 Webhooks
  2. 点击 创建 Webhook
  3. 输入您的端点 URL
  4. 选择要接收的事件
  5. 保存 webhook

3. 验证签名

每个 webhook 请求都包含用于验证的签名头:

X-Memokit-Signature: sha256=abc123...

使用 HMAC-SHA256 验证签名:

const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expectedSignature = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(JSON.stringify(payload))
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature)
  );
}

Webhook 重试

如果您的端点返回错误(非 2xx 状态码),Memokit 会重试投递:

尝试次数延迟
1立即
21 分钟
35 分钟
430 分钟
52 小时

5 次失败后,webhook 投递被标记为失败。

最佳实践

快速响应

尽快返回 200 响应。异步处理 webhook 数据:

app.post('/webhooks/memokit', async (req, res) => {
  // 验证签名
  if (!verifySignature(req.body, req.headers['x-memokit-signature'], secret)) {
    return res.status(401).send('签名无效');
  }

  // 加入队列处理
  await queue.add('process-webhook', req.body);

  // 立即返回
  res.status(200).send('OK');
});

处理重复

Webhook 投递可能会发送多次。使用投递 ID 进行去重:

async function processWebhook(payload) {
  const deliveryId = payload.id;

  // 检查是否已处理
  if (await isDeliveryProcessed(deliveryId)) {
    return;
  }

  // 处理 webhook
  await handleWebhookEvent(payload);

  // 标记为已处理
  await markDeliveryProcessed(deliveryId);
}

使用 HTTPS

始终使用 HTTPS 端点以确保 webhook 数据在传输中加密。

查看 Webhook 日志

在 Memokit 控制台中,您可以查看 webhook 投递日志:

  1. 进入 Webhooks
  2. 点击某个 webhook
  3. 查看 投递日志 标签

每条日志显示:

  • 投递时间戳
  • 事件类型
  • 响应状态码
  • 响应时间
  • 请求/响应体(用于调试)

错误码

错误码描述
WEBHOOK_NOT_FOUND指定的 webhook 不存在
INVALID_WEBHOOK_URLwebhook URL 无效
WEBHOOK_DELIVERY_FAILED所有重试后 webhook 投递失败

本页目录