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

# 技術付録

> Live Chat と API チャネルで共有する、エラーコード、システムの上限、本番前チェックリスト

このページは、[Live Chat チャネル](/ja/live-chat-channel)、[モバイル SDK](/ja/mobile-sdk)、[API 連携](/ja/api-integration) が共有する参照表をまとめたものです。

## エラーコード

Visitor API と履歴 API のエラーは、すべて同じ形で返ります。`code` は数値ではなく文字列です。分岐は必ず `code` で行い、`message` では行わないでください。

HTTP ステータスはステータス行にあり、本文には繰り返されません。5xx のエラーでは `message` は常に決まった一文で、本当の原因はプラットフォームのログに入ります。4xx のエラーでは `message` は読んでもらうために書かれているので、表示する価値があります。

### API チャネル - 受信メッセージの Webhook

| ステータス | 意味 | 再送 |
| - | - | - |
| 200 | 受理 | 不要 |
| 400 | 本文が不正、または上限超過 | 不要。リクエストを直してください |
| 401 | 署名またはタイムスタンプが不正 | 不要。鍵と時刻を確認してください |
| 405 | HTTP メソッドが違う | 不要 |
| 503 | プラットフォームが受け取れなかった | 必要。バックオフを入れて |

### Live Chat - Visitor API

| コード | HTTP | 意味 |
| - | - | - |
| `INVALID_ARGUMENT` | 400 | 必須のパラメータが欠けている、または値が長さの上限を超えている |
| `INVALID_REQUEST_BODY` | 400 | 本文を解析できない、または許容量を超えている |
| `WORKSPACE_ID_NOT_ACCEPTED` | 400 | 本文に組織、セッション、接続の識別子が入っている。これらは常にトークンから取ります |
| `ORIGIN_NOT_ALLOWED` | 403 | オリジンが許可リストにない、またはセッション要求に `Origin` ヘッダーがなかった |
| `CONVERSATION_UNAVAILABLE` | 403 | この顧客はブロックされています |
| `SESSION_FORBIDDEN` | 403 | トークンが、要求されたセッションのものではない |
| `AGENT_FORBIDDEN` | 403 | トークンが、要求された Agent のものではない |
| `HISTORY_FORBIDDEN` | 403 | 呼び出し元に履歴を読む権限がない |
| `USAGE_FORBIDDEN` | 403 | 利用枠の確認は API キー専用 |
| `UPLOAD_FORBIDDEN` | 403 | ファイルのアップロードは `visitorToken` 専用 |
| `FEEDBACK_FORBIDDEN` | 403 | フィードバックの送信は `visitorToken` 専用 |
| `CONNECTION_NOT_FOUND` | 404 | `connectionKey` が存在しない、チャネルが未接続、Agent が付いていない、または削除済み |
| `CONVERSATION_NOT_FOUND` | 404 | 会話が存在しない、別の組織のもの、または社内のもの |
| `AGENT_NOT_FOUND` | 404 | Agent が存在しない、またはトークンの範囲外 |
| `ARTIFACT_NOT_FOUND` | 404 | ファイルが存在しない、または呼び出し元のものではない |
| `FILE_TOO_LARGE` | 413 | ファイルが 30 MiB を超えている |
| `UNSUPPORTED_TYPE` | 415 | 拡張子が一覧にない、またはファイルの中身が拡張子と合わない |
| `RATE_LIMITED` | 429 | 枠を超過。再試行の時刻は `Retry-After` ヘッダーを読んでください |
| `STORAGE_DISABLED` | 503 | ファイル保存が有効になっていない。チャット自体は通常どおり動きます |
| `HISTORY_UNAVAILABLE` | 503 | 履歴サービスが一時的に停止中 |

<Note>
  いくつかの 404 は、意図的に複数の原因をまとめています。`CONNECTION_NOT_FOUND` は 4 つの場合を、`ARTIFACT_NOT_FOUND` はファイルが無い場合と権限が無い場合の両方をまとめます。どのリソースが存在するかを外から探れないようにするための設計です。
</Note>

### Console - チャネル設定

| コード | HTTP | 意味 |
| - | - | - |
| `CHANNEL_CONFIG_INVALID` | 400 | 設定が不正。`callback_url` が https でない、`idle_window_hours` が 1 から 720 の範囲外、または未知のフィールドがある |
| `CHANNEL_NOT_FOUND` | 404 | チャネルが存在しない、または別の組織のもの |
| `CHANNEL_NO_AGENT` | 409 | チャネルに Agent が付いていないため接続できない |
| `CHANNEL_SECRET_NOT_MINTABLE` | 409 | この種類のチャネルは、プラットフォーム生成の秘密鍵を使わない |
| `API_KEY_ALREADY_REVOKED` | 409 | その API キーはすでに失効済み |
| `CALLBACK_TEST_RATE_LIMITED` | 429 | コールバックのテストが毎分 10 回を超えた |

## システムの上限

### API チャネル - 受信

| 項目 | 上限 |
| - | - |
| `integrationKey`、`messageId`、`user.id` | 256 文字 |
| `user.name`、`user.locale` | 256 文字 |
| `user.avatar`、`attachments[].url` | 2048 文字 |
| `text` | 16,384 文字 (バイトではありません) |
| `postback` | 1024 文字 |
| `metadata` | 32 キー、JSON 化して 8192 バイト |
| `attachments` | 5 件 |
| 本文全体 | 1 MiB |
| 許容されるタイムスタンプのずれ | ±5 分 |
| `messageId` の重複排除の有効期間 | 5 分 |

### API チャネル - コールバック

| 項目 | 上限 |
| - | - |
| 1 回あたりのタイムアウト | 10 秒 |
| 試行回数 | 3 回 |
| 試行の間隔 | およそ 1 秒、3 秒、9 秒 |
| 尊重する `Retry-After` の最大 | 30 秒 |
| リダイレクトの追跡 | しません |
| `callback_url` | 2048 文字、https 必須、公開到達可能 |
| Console からのコールバックテスト | 組織あたり毎分 10 回 |

### Live Chat

| 項目 | 上限 |
| - | - |
| `visitorToken` の有効期間 | 1 時間 |
| `POST /v1/runs` の本文 | 256 KiB。1 ターンあたり添付 5 件まで |
| `POST /v1/visitor/session` の本文 | 16 KiB |
| 添付のサイズ | 30 MiB、1 度に 1 ファイル |
| 許可される拡張子 | pdf, doc, docx, ppt, pptx, jpg, jpeg, png, gif, svg, webp, heic, jfif, xlsx, xls, csv |
| `visitorName` | 送信時 256 バイト、保存時に 64 文字へ切り詰め |
| `metadata.postback` | 1024 バイト |
| フィードバックの `comment` | 2000 文字に切り詰め |
| 質問の候補 | 6 件、各 120 文字 |
| 許可ドメインの一覧 | 20 件、各 253 文字 |
| ダウンロードリンクの有効期間 | 300 秒 |

### 組織全体の枠

| 項目 | 既定の上限 | 補足 |
| - | - | - |
| 1 日あたりの実行回数 | 2000 | 組織全体で合算。UTC の 00:00 にリセット |
| 1 分あたりの呼び出し | 20 | 呼び出し元ごとに合算 |
| 1 分あたりの履歴読み出し | 120 | API キーごとの別枠。1 日の上限には数えません |
| API キー失効の反映遅延 | 30 秒 | キーがキャッシュされているため |

## 本番前チェックリスト

### Live Chat チャネル

* チャネルの設定を少なくとも一度保存し、埋め込みコードを手元に持っている。
* コードが閉じ `</body>` タグの直前にあり、`data-connection-key` が正しく、`data-app-origin` に `/chat-widget/` のパスが残っている。
* パソコンだけでなく、スマートフォンでも試した。
* モバイルアプリを使う場合: 端末の `locale` を渡している。SDK は Console の既定言語を読まないため。
* 自前の画面を作る場合: 自社ドメインが許可リストに入っていて、`credentials: "include"` で呼び出していない。

### API チャネル

* メッセージの送り先が、Console から取得した Webhook のホスト (`https://console-agents.fpt.ai/webhooks/api`) であり、アプリケーションのホストではない。
* 秘密鍵が、ソースコードや git にコミットした設定ファイルではなく、秘密情報の保管先に入っている。
* サーバーの時刻を NTP で同期している。5 分を超えてずれると、すべてのパケットが拒否されます。
* 署名の関数が、再度文字列化したものではなく、本文の生のバイト列を使っている。
* 署名の比較に定数時間の関数を使っている。
* `messageId` が自社の安定した識別子で、再送しても変わらない。
* Webhook がすぐ 200 を返し、処理は非同期にしている。1 回あたり 10 秒しかありません。
* Webhook が `type == "verification"` の分岐を扱い、`challenge` をそのまま返している。
* Console から **コールバックをテスト** を実行し、合格した。
* `eventId` による重複排除を入れている。
* コールバックのたびに `conversationId` を保存している。配信の確認も含めて。
* 履歴 API で突き合わせる処理を入れ、失敗したコールバックを埋め合わせている。
* 履歴を読むための専用の API キーを用意し、安全に保管している。
* 429 を `Retry-After` ヘッダーを読んで処理している。
* 503 をバックオフ付きの再送で処理し、拒否されたメッセージとして扱っていない。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.