有人対応サービス(Manual Service)
開発者がWebhook を手動サービスの接続方式として選択した場合、まず自分のサーバー環境に Webhook サービスを構築する必要があります。
開発者は、有人対応リクエスト、ユーザーメッセージ、およびオペレーターからの返信メッセージを受信するために、仕様に従って以下の3つのインターフェースを提供する必要があります
また、GPTBots 側も、カスタマーサービスの返信メッセージと会話の終了指示を受け取るための2つのインターフェースを提供しています。
注意事項:
- 開発者は Webhook サービスが正常に利用可能な状態を確保する必要があります。そうでない場合、有人対応サービスの正常な利用に影響を及ぼす可能性があります。
- 有人対応サービスを開始した後に「ビジー状態」と表示される場合、開発者の Webhook サービスが異常であることを示します。
- 有人対応サービスを開始した後に「接続中」と表示される場合、開発者の Webhook サービスが正常であることを示します。
- 有人対応サービスのリクエストが正常に開始された後:
- 開発者はユーザーメッセージへの返信インターフェース(https://api.gptbots.ai/v1/human/message/receive)を適時に呼び出してユーザーに1件のメッセージを返信する必要があります。これにより、対話接続が正常に確立されます。
- 開発者がユーザーメッセージに返信しない場合、設定された待機タイムアウト時間(デフォルト60秒)を超過すると、有人対応の会話は自動的に終了します。
有人対応サービスリクエストの通知
エンドユーザーが有人対応サービスをリクエストすると、GPTBotsはそのリクエストを開発者のWebhookサービスに転送します。開発者のインターフェースサービスが200を返すと、有人対応サービスの作成が成功したことを意味します。
リクエストメソッド
POST
エンドポイント
https://your_domain/conversation/establish
リクエスト例
curl -X POST 'https://YOUR_DOMAIN/human/service/conversation/establish' \
-H 'Content-Type: application/json' \
-d '{
"body": [
{
"text": "human service",
"message_type": "QUESTION"
},
{
"text": "",
"message_type": "ANSWER"
}
],
"timestamp": 1742265090895,
"email": "bob@gmail.com",
"conversation_id": "67d8db020fa31d1ef64f53dg",
"bot_id": "665d88b03ce2b13cf2d573454",
"user_info": {
"phone": null,
"email": "bob@gmail.com",
"user_id": "KDslas",
"anonymous_id": "652face5184b30540a6ea7fe"
}
}'
注意:このリクエストボディの
conversation_idは、有人対応サービスの会話シナリオを識別するための一意のIDとして使用され、会話IDの作成 でエージェント会話シナリオ用に生成される一意のIDとは異なります。
リクエストパラメータ
| パラメータ | タイプ | 説明 |
|---|---|---|
| conversation_id | String | 有人対応サービスのシナリオにおける会話ID(エージェント会話シナリオの会話IDとは異なります)。カスタマーサービスの返信インターフェースでGPTBotsに渡す必要があります。 |
| timestamp | Long | タイムスタンプ |
| String | ユーザーのメールアドレス。一部の有人対応システムでは、適切なサービス提供のためにメールが必要です。 | |
| bot_id | String | エージェント(旧ボット)のID |
| body | List<Object> | メッセージ本文 |
| body.message_type | String | メッセージの種類、QUESTION/ANSWER |
| body.text | String | ユーザーがカスタマーサービスに対して送信する質問およびそのコンテキスト |
| user_info | Object | ユーザー情報 |
| user_info.phone | String | ユーザーの電話番号。現在は WhatsApp 経由で有人対応に切り替える場合のみ取得可能です。 |
| user_info.email | String | ユーザーのメールアドレス。ユーザーがメールアドレスを入力した場合に取得可能。 |
| user_info.user_id | String | ユーザーID。企業の開発者が定義した固有の識別子で、匿名IDに対して開発者が設定します。 |
| user_info.anonymous_id | String | 匿名ID。API以外のチャネルでユーザーがエージェントと会話を始めた場合、システムがチャネル情報を含む匿名IDを生成します。 |
- iframe/共有リンク/バブルウィジェット 経由で有人対応を開始する場合、ユーザーはメールアドレスの入力が必要です。ただし、開発者がユーザーのメールアドレスをカスタマイズ設定することで、入力を省略させることも可能です。
- WhatsApp/Telegram/LiveChat などの外部プラットフォーム経由で有人対応をリクエストする場合、デフォルトで使用されるメールアドレスは support@gptbots.ai です。なお、LiveChatでは開発者がユーザーのメールアドレスをカスタマイズ可能です。
- API 経由で有人対応をリクエストする場合、
レスポンス
| パラメータ | タイプ | 説明 |
|---|---|---|
| code | Int | レスポンスコード |
| message | String | 詳細 |
チャットインターフェース
作成したconversation_idを使用して、ユーザーのメッセージを有人対応サービスに送信します。
リクエストメソッド
POST
エンドポイント
https://your_domain/chat
リクエスト例
{
"conversation_id": "conv_xxx",
"message_id": "msg_abc124",
"create_time": 1750000005000,
"agent_id": "bot_xxx",
"body": "これは私の注文のスクリーンショットです",
"timestamp": 1750000005200,
"files": [
{
"content_type": "Image",
"url": "https://files.gptbots.ai/xxx/order.png",
"name": "order.png",
"format": "png"
}
]
}
リクエストのパラメータ
| パラメータ | タイプ | 説明 |
|---|---|---|
| conversation_id | String | 作成された conversation_id を使用して、ユーザーのメッセージを有人対応サービスに送信します |
| timestamp | Long | タイムスタンプ |
| body | String | ユーザーのメッセージ |
| message_id | string | ユーザーのこのメッセージの ID |
| create_time | long | ユーザーのこのメッセージの作成時刻(ミリ秒) |
| agent_id | string | エージェント(Agent/Bot)ID |
| files | array | ユーザーがメッセージとともにアップロードした添付ファイルのリスト。添付ファイルがない場合は渡さないか空にします |
| content_type | string | コンテンツタイプの列挙:Image / Audio / Video / Document / File / Text など |
| url | string | 添付ファイルのダウンロード可能なURL(GPTBots 側でアクセス可能。開発者は自身でダウンロード/転送する必要があります) |
| name | string | ファイル名(拡張子を含む)。「会話詳細の取得」API と一致します |
| format | string | ファイル形式/拡張子。「会話詳細の取得」API と一致します |
レスポンス
| パラメータ | タイプ | 説明 |
|---|---|---|
| code | Int | レスポンスコード |
| message | String | 詳細 |
会話終了インターフェース
ユーザーとの会話がタイムアウトした場合や、エージェントユーザーが自発的に会話を終了した場合に、このインターフェースが呼び出されて会話を終了します。
リクエストメソッド
POST
エンドポイント
https://your_domain/conversation/close
リクエストヘッダー
| フィールド | タイプ | 説明 |
|---|---|---|
| Authorization | Bearer ${API Key} | 認証には Authorization: Bearer ${API Key} を使用してください。トークンはAPIキーページから取得できます。 |
| Content-Type | application/json | データの形式は application/json を設定してください。 |
リクエストのパラメータ
| パラメータ | タイプ | 説明 |
|---|---|---|
| conversation_id | String | 会話ID。カスタマーサービスの返信インターフェースで GPTBots に渡す必要があります。 |
| timestamp | Long | タイムスタンプ |
| type | String | 終了タイプ。TIMEOUT(タイムアウトによる終了)または USER_CLOSED(ユーザーによる手動終了)から選びます。 |
レスポンス
| パラメータ | タイプ | 説明 |
|---|---|---|
| code | Int | レスポンスコード |
| message | String | 詳細 |
ユーザーメッセージへの返信
開発者がwebhookを有人対応サービスの連携方式として選択した場合、GPTBotsはユーザーメッセージへの返信用インターフェースを提供します。このインターフェースを通じて、有人オペレーターからのメッセージをユーザーに送信することができます。
リクエストメソッド
POST
エンドポイント
https://api-${endpoint}.gptbots.ai/v1/human/message/receive
リクエストヘッダー
| フィールド | タイプ | 説明 |
|---|---|---|
| Authorization | Bearer ${API Key} | 認証には Authorization: Bearer ${API Key} を使用してください。トークンはAPIキーページから取得できます。 |
| Content-Type | application/json | データの形式は application/json を設定してください。 |
リクエスト例
{
"conversation_id": "conv_xxx",
"timestamp": 1750000000000,
"body": "こちらがご依頼の請求書です",
"files": [
{ "content_type": "Document", "url": "https://your-cdn.com/files/invoice.pdf", "name": "invoice.pdf", "format": "pdf" },
{ "content_type": "Image", "url": "https://your-cdn.com/files/screenshot.png", "name": "screenshot.png", "format": "png" }
]
}
リクエストのパラメータ
| パラメータ | タイプ | 説明 | 必須 |
|---|---|---|---|
| conversation_id | String | 会話ID。会話作成インターフェースおよびチャットインターフェースで渡されるもので、そのまま引き継いで渡します。 | 必須 |
| timestamp | Long | タイムスタンプ | 必須 |
| body | String | 有人対応サービスからの返信内容 | 必須 |
| files | array | ユーザーがメッセージとともにアップロードした添付ファイルのリスト。添付ファイルがない場合は渡さないか空にします | |
| content_type | string | コンテンツタイプの列挙:Image / Audio / Video / Document / File / Text など |
|
| url | string | 添付ファイルのダウンロード可能なURL(GPTBots 側でアクセス可能。開発者は自身でダウンロード/転送する必要があります) | |
| name | string | ファイル名(拡張子を含む)。「会話詳細の取得」API と一致します | |
| format | string | ファイル形式/拡張子。「会話詳細の取得」API と一致します |
レスポンス
| パラメータ | タイプ | 説明 |
|---|---|---|
| code | Int | レスポンスコード |
| message | String | 詳細 |
有人対応サービスによる会話の終了
開発者が webhook を有人対応サービスの連携方法として選択した場合、 GPTBots が提供する有人対応サービスは必要に応じて能動的に会話を終了することができます。
会話が終了すると、ユーザーが再度有人カスタマーサービスの会話を開始しない限り、有人対応サービスからメッセージを受け取ることはありません。
リクエストメソッド
POST
エンドポイント
https://api-${endpoint}.gptbots.ai/v1/human/close
リクエストヘッダー
| フィールド | タイプ | 説明 |
|---|---|---|
| Authorization | Bearer ${API Key} | 認証には Authorization: Bearer ${API Key} を使用してください。トークンはAPIキーページから取得できます。 |
| Content-Type | application/json | データの形式は application/json を設定してください。 |
リクエストパラメータ
| パラメータ | タイプ | 説明 |
|---|---|---|
| conversation_id | String | 会話ID。カスタマーサービスの返信インターフェースで GPTBots に渡す必要があります。 |
| timestamp | Long | タイムスタンプ |
レスポンス
| パラメータ | タイプ | 説明 | 必須 |
|---|---|---|---|
| conversation_id | String | 会話ID。会話作成インターフェースおよびチャットインターフェースで渡されるもので、そのまま引き継いで渡します。 | 必須 |
| timestamp | Long | タイムスタンプ | 必須 |
GPTBots サービス状態の検出
GPTBots は、自身の有人対応サービスを監視するためのヘルスモニタリングインターフェースを提供しています。開発者はこのインターフェースを呼び出して、GPTBots の有人対応サービスが正常に利用可能かどうかを確認できます。HTTP ステータスコード 200 が返され、かつレスポンスボディがサービス正常を示す英語の識別子(例:service is normal)であれば、GPTBots の有人対応サービスが正常に利用可能であることを意味します。このインターフェースは認証不要で、プレーンテキストを返します。
リクエストメソッド
GET
エンドポイント
https://api.gptbots.ai/v1/human/health
リクエスト例
curl -X GET 'https://api.gptbots.ai/v1/human/health'
レスポンス
GPTBots サービスが正常に利用可能な場合、HTTP ステータスコード 200 が返され、レスポンスボディにサービス正常を示す英語の識別子が返されます。
service is normal
可用性の判定に関する推奨事項
呼び出し側は、HTTP ステータスコードのみを判定基準とすれば十分です:
| 状況 | 判定 |
|---|---|
200 が返され、かつレスポンスボディが service is normal |
GPTBots サービスは正常に利用可能 |
200 以外(例:5xx)が返される/リクエストタイムアウト/接続失敗 |
GPTBots サービスは利用不可 |
適切なリクエストタイムアウト(例:3~5秒)を設定し、一定の頻度でポーリング検出する(QPM:3)ことを推奨します。このインターフェースは認証不要で、呼び出し時に API Key を付与する必要はありません。
