仕組み
- スキーマ(ツールが受け入れる引数)を使用してツールを定義します。
endpoint設定(ThunderPhoneがAPIを呼び出す場所)を指定するか、省略して組織のWebhookでツール呼び出しを受信します。- 通話中、AIは会話に基づいてツールを使用するタイミングを判断します。
- ThunderPhoneはツール引数を含めてエンドポイントを呼び出します。
- APIレスポンスがAIに返され、会話を継続します。
ツールスキーマ
各ツールは次の構造に従います。関数定義
エンドポイント設定
endpoint 設定はAIモデルには送信されません。ThunderPhoneがツール呼び出しを実行するためにのみ使用されます。2つの呼び出し経路
サーバーが受信するリクエストは、ツールにendpoint があるかどうかによって異なります。
どちらの経路もブロッキングです。AIは文の途中で結果を待機し、
タイムアウトは20 秒です。ハンドラーは高速に保ってください。
混在させることもできます。組織にWebhook URLが設定されている通話では、
endpoint を持つツールは直接呼び出され、残りはWebhookにフォールバックします。
直接エンドポイント呼び出し
AI がendpoint を持つツールを呼び出すと、ThunderPhone は
指定した URL にリクエストを送信します。
リクエストヘッダー
endpoint.headers のカスタムヘッダーは常にそのまま含まれ、
加えて ThunderPhone 名前空間の次の 2 つのヘッダーが付与されます。
X-ThunderPhone-Signature— 正確なリクエスト本文のバイト列に対する HMAC-SHA256。組織の Webhook シークレット をキーとして使用します。X-ThunderPhone-Call-ID— 現在の通話 ID
endpoint.headers で上書きしない限り、
Content-Type: application/json が設定されます。カスタムの Content-Type
が優先されます。
リクエスト本文
POST / PUT / PATCH の場合、本文にはツール引数のみが
含まれます(ラッパーなし)。正規形式(キーをソートし、区切り文字を圧縮)で
シリアライズされます。
GET / DELETE の場合、引数はクエリパラメーターとして送信され、
本文は空になります。この場合、署名は空のバイト文字列に対して計算されます。
Webhook 署名を検証するを参照してください。
レスポンス
ツール結果を含む JSON レスポンスを返します。{"data": "<text>"} でラップされます。タイムアウトや接続障害は
AI にエラーとして報告されるため、エージェントは停止するのではなく、
謝罪して次に進むことができます。
Webhook モードのディスパッチ
endpoint を持たないツールは、組織のレガシー Webhook URL に対して、
署名付きの telephony.tool(電話通話)または web.tool(Web 通話)
リクエストとしてディスパッチされます。実行後に Webhook エンドポイントへ配信される
監査通知とは異なり、このリクエスト自体が
実行です。HTTP レスポンスがツール結果になります。
web.tool には from_number / to_number の代わりに
origin_domain が含まれます。ツール結果を JSON として返してください。
レスポンスの契約は直接エンドポイント呼び出しと同じです。リクエストは、
他のすべての Webhook と同様に、生の本文に対して組織の Webhook シークレットで
署名されます。
登録済みの Webhook エンドポイントは、各ツールの実行後
(実行経路を問わず)に、ツールのレスポンスを含むブロックしない
telephony.tool / web.tool 通知も受信します。監査証跡に役立ちます。
イベントカタログを参照してください。署名の検証
直接のツール呼び出しは、Webhook と同じ方法で署名されます。- 正確なリクエスト本文のバイト列に対する HMAC-SHA256(正規化された JSON — キーをソートし、余分な空白を含まない形式)
- 組織の Webhook シークレットをキーとして使用
GET/DELETEツールでは空のバイト文字列に署名
例: 完全な予約フロー
完全な予約システム向けのツールセットは次のとおりです。ベストプラクティス
明確な説明を記述する
明確な説明を記述する
description フィールドは、AI がツールを使用するタイミングを理解するのに役立ちます。ツールの機能と適切な使用タイミングを具体的に記述してください。エラーを適切に処理する
エラーを適切に処理する
汎用的な 500 エラーではなく、AI が理解できるエラーメッセージを返します。例:
{"error": "No slots available for that date"}レスポンスを簡潔に保つ
レスポンスを簡潔に保つ
AI が会話を続けるために必要な情報だけを返します。ペイロードが大きいと応答時間が遅くなります。
必須フィールドを適切に使用する
必須フィールドを適切に使用する
本当に必要な場合にのみフィールドを
required としてマークします。AI はツールを呼び出す前に、必須情報をユーザーに確認します。関連項目
アプリ接続
HubSpot、Salesforce、Slack、Google
Calendar、Google Sheets、Cal.com 向けのプラットフォーム管理ツール。エンドポイントは不要です。
MCP サーバー
MCP サーバーを接続し、エージェントからそのツールを呼び出せます。
API 接続
エージェントに接続できる再利用可能な REST 統合です。
Webhook 署名を検証する
Webhook とツール呼び出しのための検証ヘルパーです。