> ## Documentation Index
> Fetch the complete documentation index at: https://docs.waffo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhook エンドポイント

> HTTP、Feishu、Discord、Telegram、Slack 配信用の Webhook エンドポイントを管理する

Pancake は、ストアごとに 5 つのチャネルにわたる複数の Webhook エンドポイントをサポートしています：標準 HTTPS（RSA 署名付きエンベロープ）、Feishu、Discord、Telegram、Slack。各エンドポイントは `store.store_webhooks` における独立したレコードであり、独自の URL、購読イベントリスト、`test`/`prod` 環境バインディングを持ちます。

## チャネル

| チャネル       | ペイロード形式                                                       | 署名                                   | 備考                                  |
| ---------- | ------------------------------------------------------------- | ------------------------------------ | ----------------------------------- |
| `http`     | JSON エンベロープ `{ id, eventType, eventId, storeId, mode, data }` | RSA-SHA256（`X-Waffo-Signature` ヘッダー） | デフォルトチャネル。既存の Webhook 契約を維持します。     |
| `feishu`   | Feishu インタラクティブカード                                            | なし — URL トークン                        | 中国語タイトルテキスト、UTC+8 タイムスタンプ           |
| `discord`  | Discord 埋め込み                                                  | なし — URL トークン                        | 英語テキスト、クライアントローカルタイムスタンプ            |
| `telegram` | `sendMessage` ペイロード（`text` HTML、`chat_id`）                    | なし — URL 内のボットトークン                   | 英語テキスト、UTC。`chat_id` は `secret` に保存 |
| `slack`    | Attachments ペイロード                                             | なし — incoming-webhook URL トークン       | 英語テキスト、UTC                          |

## URL ホスト

チャネルにかかわらず、任意の HTTPS URL が受け入れられます。URL とチャネルの想定プラットフォームの一致はマーチャントの責任です — Discord URL が `channel: "slack"` で設定されている場合、ディスパッチャーはペイロードを Slack の attachments 形式でエンコードして Discord エンドポイントに送信し、エンドポイントはエラーで応答し、その失敗は `webhook_deliveries` に記録されます。

## 同一 URL の複数 webhook

同じストア内で、同一 URL を複数の Webhook に設定できます — Webhook はファンアウトモデルを採用し、異なるイベント購読、チャネル、`testMode` フラグで URL を共有できます。各 Webhook は独立して配信されるため、共有 URL で同一ペイロードを受信するコンシューマーは `(eventType, eventId)` で重複排除する必要があります。

## 制限

各ストアでは、すべてのチャネルにわたって最大 **20 個の Webhook** を持つことができます。制限を超えた場合は 400 が返されます。

## Webhook の一覧取得

`list-webhooks` エンドポイントは存在しません — 設定済み Webhook リストの照会は GraphQL `Store.storeWebhooks` を経由します（`test_mode` により環境で自動フィルタリングされます）：

```graphql theme={"system"}
query GetStoreWebhooks($storeId: String!) {
  store(id: $storeId) {
    storeWebhooks {
      id
      channel
      url
      events
      testMode
      secret
      createdAt
    }
  }
}
```

## エンドポイント

<CardGroup cols={3}>
  <Card title="Webhook の追加" icon="plus" href="/ja/api-reference/endpoints/webhooks/add-webhook">
    ストアに新しい Webhook エンドポイントを設定します。
  </Card>

  <Card title="Webhook の更新" icon="pen" href="/ja/api-reference/endpoints/webhooks/update-webhook">
    Webhook の URL、イベント、または secret を変更します。
  </Card>

  <Card title="Webhook の削除" icon="trash" href="/ja/api-reference/endpoints/webhooks/remove-webhook">
    Webhook を物理削除します（履歴は保持）。
  </Card>
</CardGroup>
