ErisPulse アダプタ標準化返却仕様
1. 説明
なぜこの規格があるのでしょうか?
各プラットフォームの送信インターフェースが一貫性とOneBot12との互換性を確保するため、ErisPulseアダプターはAPIレスポンス形式においてOneBot12が定義するメッセージ送信返却構造の標準を採用しています。
ただしErisPulseのプロトコルにはいくつかの特殊な定義があります:
- 基本フィールドにおいて、message_idは必須ですが、OneBot12の標準にはこのフィールドはありません。
- 返却内容には、{platform_name}_raw フィールドを追加する必要があります。このフィールドには、元のレスポンスデータを格納します。
2. 基礎レスポンス構造
すべてのアクションレスポンスには、以下の基本フィールドを含める必要があります。
| フィールド名 | データ型 | 必須 | 説明 |
|---|---|---|---|
| status | string | はい | 実行ステータス。"ok"または"failed"のいずれかに設定する必要があります |
| retcode | int64 | はい | 戻り値コード。OneBot12の戻り値コード規則に従います |
| data | any | はい | レスポンスデータ。成功時はリクエスト結果を含み、失敗時はnull |
| message_id | string | はい | メッセージID。メッセージを識別するためのもので、存在しない場合は空文字列 |
| message | string | はい | エラーメッセージ。成功時は空文字列 |
| {platform_name}_raw | any | いいえ | 元のレスポンスデータ |
オプションフィールド:
| フィールド名 | データ型 | 必須 | 説明 |
|---|---|---|---|
| echo | string | いいえ | リクエストにechoフィールドが含まれている場合、その値をそのまま返します |
3. 完全なフィールド仕様
3.1 一般的なフィールド
成功時のレスポンス例
{
"status": "ok",
"retcode": 0,
"data": {
"message_id": "1234",
"time": 1632847927.599013
},
"message_id": "1234",
"message": "",
"echo": "1234",
"telegram_raw": {...}
}
失敗時のレスポンス例
{
"status": "failed",
"retcode": 10003,
"data": null,
"message_id": "",
"message": "必要なパラメータが不足しています: user_id",
"echo": "1234",
"telegram_raw": {...}
}
3.2 戻り値コードの仕様
0 成功(OK)
- 0: 成功(OK)
1xxxx 動作リクエストエラー(Request Error)
| エラーコード | エラー名 | 説明 |
|---|---|---|
| 10001 | Bad Request | 無効な動作リクエスト |
| 10002 | Unsupported Action | 対応していない動作リクエスト |
| 10003 | Bad Param | 無効な動作リクエストパラメータ |
| 10004 | Unsupported Param | 対応していない動作リクエストパラメータ |
| 10005 | Unsupported Segment | 対応していないメッセージセグメントの種類 |
| 10006 | Bad Segment Data | 無効なメッセージセグメントパラメータ |
| 10007 | Unsupported Segment Data | 対応していないメッセージセグメントパラメータ |
| 10101 | Who Am I | ロボットアカウントが指定されていません |
| 10102 | Unknown Self | 知らないロボットアカウント |
2xxxx 動作ハンドラーエラー(Handler Error)
| エラーコード | エラー名 | 説明 |
|---|---|---|
| 20001 | Bad Handler | 動作ハンドラーの実装エラー |
| 20002 | Internal Handler Error | 動作ハンドラーが実行中に例外をスローしました |
3xxxx 動作実行エラー(Execution Error)
| エラーコード範囲 | エラー種別 | 説明 |
|---|---|---|
| 31xxx | Database Error | データベースエラー |
| 32xxx | Filesystem Error | ファイルシステムエラー |
| 33xxx | Network Error | ネットワークエラー |
| 34xxx | Platform Error | ロボットプラットフォームエラー |
| 35xxx | Logic Error | 動作ロジックエラー |
| 36xxx | I Am Tired | 実装が作業を中止することを決定しました |
保留エラーセグメント
- 4xxxx、5xxxx: 保留セグメント、使用しないでください
- 6xxxx~9xxxx: 他のエラーセグメント、実装が独自に使用するためのものです
4. 実装要件
- すべてのレスポンスには status、retcode、data、message フィールドが含まれている必要があります。
- リクエストに非空の echo フィールドが含まれている場合、レスポンスには同じ値の echo フィールドが含まれている必要があります。
- 戻り値コードは OneBot12 規格に厳密に従う必要があります。
- エラーメッセージ(message)は人間に読みやすい説明文である必要があります。
5. 拡張仕様
ErisPulse は OneBot12 標準の返却構造に以下の拡張を加えています。
5.1 message_id 必須フィールド
OneBot12 標準では message_id は data オブジェクト内にあり、必須ではありません。ErisPulse ではこれをトップレベルの必須フィールドに昇格させています:
message_idを取得できない場合は、空文字列""を設定するmessage_idが常に存在することを保証し、モジュールは null チェックを行う必要がない
5.2 {platform}_raw 原始レスポンスフィールド
返却値には、プラットフォームの原始レスポンスデータの完全なコピーを保持する {platform}_raw フィールドを含める必要があります:
{
"status": "ok",
"retcode": 0,
"data": {"message_id": "1234", "time": 1632847927},
"message_id": "1234",
"message": "",
"telegram_raw": {
"ok": true,
"result": {"message_id": 1234, "date": 1632847927, ...}
}
}
要件:
{platform}_rawは原始レスポンスのディープコピーである必要があり、参照ではありませんplatformはアダプター登録時のプラットフォーム名と完全に一致する必要があります(大文字小文字を区別)- エラーメッセージも保持し、デバッグに役立つようにする
5.3 フレームワーク拡張返却コード(34xxx プラットフォームエラーセグメントの下3桁をカスタム)
OneBot12 規格では、実装が 3xxxx の下3桁をカスタムに使用することが許可されています。34xxx の意味は Platform Error(ロボットプラットフォームエラー、プラットフォーム制限による失敗など)です。34xxx 内部では役割ごとに分層して使用されます:
| 下3桁セグメント | 所属 | 用途 |
|---|---|---|
340xx |
アダプター実装 | リクエスト操作族(Request Not Found / Already Handled / Not Supported / Permission Denied、request-action-spec §7 参照) |
341xx~345xx |
アダプター実装 | プラットフォーム側の権限 / リスク管理 / アカウント制限などのエラー(実装者が下3桁をカスタム、元のエラーは {platform}_raw に格納) |
346xx |
ErisPulse フレームワーク(予約済み) | フレームワーク自身のブロックと一般的な失敗、アダプターやモジュールは使用しない |
347xx~349xx |
アダプター実装 | その他のプラットフォーム実行エラー |
ErisPulse フレームワークで現在使用している 346xx コード:
| エラーコード | エラー名 | 説明 |
|---|---|---|
| 34600 | SDK Failure | フレームワークの一般的な失敗(make_error() のデフォルト返却コード) |
| 34601 | Action Denied | 出力アクションがスコープによって禁止された(scope.actions)、呼び出しは行われず、直接このレスポンスを返す |
役割の区別:
34601はフレームワークが呼び出し前にブロック(モジュールはそもそもアクションを発行する資格がない)です。34004/34xxxプラットフォームコードはアクションは発行されたがプラットフォームが拒否(Bot に権限がない、リスク管理対象など)です。 モジュールは権限の問題を判断する際に、これら2つを同時にチェックする必要があります:まず34601(自分のモジュールが scope によって禁止されているか)を確認し、次に34xxx(プラットフォーム側の制限)を確認します。
返却構造は §2 の標準失敗レスポンスに従います:
{
"status": "failed",
"retcode": 34601,
"data": null,
"message_id": "",
"message": "action 'send' denied by scope.actions"
}
5.4 アダプター実装チェックリスト
-
status,retcode,data,message_id,messageフィールドを含む - 返却コードは OneBot12 規格に従う(§3.2 参照)
-
message_idが常に存在する(取得できない場合は空文字列) -
{platform}_rawにプラットフォームの原始レスポンスデータを含む
6. 注意事項
- 3xxxxエラーコードについては、下位3桁は実装側で独自に定義可能です。
- 予約エラーセグメント(4xxxx、5xxxx)は使用しないでください。
34600/34601は ErisPulse フレームワーク用に予約されたコードです(§5.3を参照)。アダプタやモジュールでは使用しないでください。- エラーメッセージは簡潔かつ明瞭にし、デバッグしやすいようにしてください。