ThunderPhone 2.0、提供開始。セルフサービスで、1分あたり2セントから。発表内容を見る

Webhooks

イベントカタログ

ThunderPhone が送信するすべてのWebhookイベントタイプ。

すべての webhook 本文には type フィールドがあり、その値はこのページにあるイベント タイプのいずれかです。エンドポイントをサブスクライブする場合、 events 配列には必要なイベントタイプを含める必要があります(すべてをサブスクライブするには 空にします。ただし、ターンごとのイベント telephony.turn / web.turn は例外で、明示的に指定したエンドポイントにのみ配信されます)。

これらのイベントには 2 種類の配信形式があります。

  • エンドポイント配信は常に再試行を伴う非ブロッキング通知です。任意の 2xx で応答してください。エンベロープには重複排除に使用する event_id が含まれます。
  • ブロッキング交換は、レガシー単一 URL webhookでのみ実行されます。telephony.incoming / web.incoming の設定リクエスト(webhook モードの電話番号: 再試行 1 回を含めて 13 秒、webhook モードのウィジェットキー: 10 秒)と、webhook モードのツールディスパッチです。応答内容がライブ通話を制御します。

以下のペイロード例は、ワイヤ順序のエンドポイントエンベロープを示しています (キーはアルファベット順です: data、event_id、type)。レガシー配信では、 event_id を除いた同じ data が送信されます。

通話イベント

telephony.incoming

着信通話がいずれかの電話番号に到達したときに送信されます。エンドポイント配信は、番号がエージェント設定済みか webhook 設定済みかにかかわらず、すべての着信通話に対して送信されるファイアアンドフォーゲット通知です。エージェントが割り当てられていない番号には、従来の webhook で ブロッキング 構成リクエストも送信されます。リクエスト / レスポンスの完全なスキーマは、telephony.incoming / web.incomingを参照してください。

{
  "data": {
    "call_id": 987654321,
    "from_number": "+14155550199",
    "to_number": "+15551234567"
  },
  "event_id": "3f6b2ad0-1c9e-4a57-9f2b-8f6f0f9d2f11",
  "type": "telephony.incoming"
}
フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント

telephony.complete

着信または発信の電話通話が終了したときに送信されます。ノンブロッキングです。文字起こし、利用可能な場合は録音 URL、請求概要が含まれます。ペイロードのスキーマは、telephony.complete / web.completeを参照してください。

フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント

telephony.tool

電話通話で関数ツールが呼び出された後に送信されます。ノンブロッキングの監査通知です。このイベントが配信される時点でツールはすでに実行されており、独自の関数ツールおよび組み込みの send_sms ツールが対象です(他の組み込みツール、ナレッジベース、アプリ接続、MCP ツールは対象外です)。send_sms では、arguments.to と arguments.body の両方が [REDACTED] になります。完了時の文字起こしでもこれらは伏せ字になります。コンテンツと送信先は、レスポンスの message_id を使用して組織スコープの SMS リソースから取得してください。

{
  "data": {
    "arguments": { "date": "2026-04-21" },
    "call_id": 987654321,
    "from_number": "+14155550199",
    "response": {
      "response": { "available_slots": ["9:00 AM", "2:00 PM"] },
      "status": 200
    },
    "to_number": "+15551234567",
    "tool_name": "search_appointments"
  },
  "event_id": "1f0a7c3e-52d4-4a0e-8f4b-b1a6a1c0d9e2",
  "type": "telephony.tool"
}

response は実行結果です。成功時は {"status": <http status>, "response": <your endpoint's JSON>}、失敗時は {"status": <status>, "error": "<message>"} です。

フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント

telephony.turn

電話通話が進行中に、発話を含む各ターンごとにリアルタイムで送信されます。エージェントの音声による完了応答と、発信者の文字起こしされたターンが対象です。GET /v1/calls/{call_id}/transcriptをポーリングする代わりに、通常の webhook を介してライブ会話を追跡できます。ノンブロッキングです。

{
  "data": {
    "call_id": 987654321,
    "entry_type": "completion",
    "from_number": "+14155550199",
    "position": 7,
    "role": "assistant",
    "start_ms": 15200,
    "text": "How many employees does your company have?",
    "to_number": "+15551234567"
  },
  "event_id": "8d3f5a2c-7b1e-4c9a-b6d0-2e4f6a8c0d1e",
  "type": "telephony.turn"
}
フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント
positioninteger通話履歴におけるターンのインデックス。並び順を決める安定した識別子
rolestringassistant(エージェントの発話)または user(発信者の発話)
textstring送信時点で認識されているターンの文字起こしテキスト
entry_typestring基になる履歴エントリのタイプ。completion(エージェント)、または user_turn / span(発信者)
start_ms, end_msinteger通話開始からのミリ秒単位の音声オフセット。送信時点ですでに再生タイミングが判明している場合にのみ存在

web.incoming

telephony.incoming のウェブチャネル版で、ウェブウィジェットセッションまたはビルダーのマイクテスト通話が開始されたときに送信されます。エンドポイント配信は、すべてのウェブセッションに対するファイアアンドフォーゲットです。mode="webhook" の公開可能キーには、従来の webhook で ブロッキング 構成リクエストも送信されます。このブロッキングリクエストの形式は異なり(origin_domain、publishable_key_prefix、電話番号なし)、詳細はtelephony.incoming / web.incomingを参照してください。

{
  "data": {
    "call_id": 987654322,
    "from_number": "web",
    "origin_domain": "https://example.com",
    "publishable_key_prefix": "pk_live_a1b2",
    "to_number": "+15551234567"
  },
  "event_id": "9a2b4c6d-8e0f-4a1b-9c2d-3e4f5a6b7c8d",
  "type": "web.incoming"
}

from_number は常にリテラル値の "web" です。webhook モードのウィジェットセッションでは to_number は空です(セッションのエージェント番号は構成後に割り当てられます)。ビルダーのマイクテスト通話では、origin_domain と publishable_key_prefix は空です。

フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント

web.complete

telephony.complete のウェブチャネル版で、ウェブウィジェット通話(direction: "web")とビルダーのマイクテスト通話(direction: "test")が対象です。ノンブロッキングです。telephony.completeと同じペイロード形式に加え、origin_domain が含まれ、from_number は "web" に設定されます。

フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント

web.tool

telephony.tool のウェブチャネル版です。data には from_number / to_number ではなく origin_domain が含まれます。

フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント

web.turn

telephony.turnのウェブチャネル版で、ウェブウィジェット通話とビルダーのマイクテスト通話が対象です。ペイロード形式は同じですが、from_number / to_number の代わりに origin_domain が含まれます。telephony.turn と同様に、明示的なサブスクリプションが必要です。空の events 配列を通じて配信されることはありません。

フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント

call.transfer_completed

通話ごとに1回、通話転送の最終結果とともに送信されます。結果はコールド転送、またはエージェントが離脱した後にウォーム転送で残る人同士のブリッジです。 ブロッキングは行われず、エンドポイントにのみ配信されます(従来の単一 URL Webhook には配信されません)。通話の telephony.complete の後に到着します。つまり、通信事業者が通話を引き継いだ時点、転送に失敗した時点、または ThunderPhone が通話をブリッジした場合はブリッジ終了時点です。

{
  "data": {
    "agent_id": 12,
    "agent_name": "Front desk",
    "bridge_kind": "cold_fallback",
    "bridge_seconds": 255,
    "bridge_total_cents": 5,
    "call_id": 987654321,
    "destination": "+15555550102",
    "sip_status": 403,
    "transfer_outcome": "bridged"
  },
  "event_id": "5b0f6c1e-9d2a-5e7b-8c4d-1a2b3c4d5e6f",
  "type": "call.transfer_completed"
}
フィールド型説明
call_idinteger転送された通話
agent_idinteger | null割り当てられていた場合に通話を処理したエージェント
agent_namestring | null割り当てられていた場合に通話を処理したエージェント
transfer_outcomestringrefer_accepted: 通信事業者が通話を引き継ぎました。bridged: 通信事業者がコールド転送を拒否した場合、またはウォーム転送のエージェントが離脱した場合に、ThunderPhone が発信者と転送先の接続を維持しました。bridge_unanswered: 通信事業者がコールド転送を拒否し、転送先が ThunderPhone 自身の通話に応答しませんでした。failed: 転送は完了せず、通話が終了しました。
destinationstring | null通話の転送先番号
sip_statusinteger | null通信事業者がコールド転送を拒否した際の SIP ステータス: 403(たとえば、通話転送に対応していない Twilio トランク)、405、または 501。通信事業者が拒否しなかった場合は null
bridge_kindstring | nullbridged の場合のみ: cold_fallback(ThunderPhone が接続した、拒否されたコールド転送)または warm(エージェント離脱後のウォーム転送における2人)
bridge_secondsinteger | nullbridged の場合のみ: ThunderPhone が請求したブリッジ時間(秒)
bridge_total_centsinteger | nullbridged の場合のみ: 無料通話クレジット適用後のブリッジ料金(米ドルセント)。通話の billing_total_cents とは別に請求されます。

同じ値は通話オブジェクトにも transfer_outcome、transfer_destination、transfer_sip_status、 transfer_bridge_kind、transfer_bridge_seconds、 transfer_bridge_total_cents として含まれます。event_id は通話のすべての配信で同一です。そのため、同じレポートが繰り返されても2つ目のイベントは生成されません。


SMS イベント

SMS イベントは、組織に接続された Twilio または Telnyx アカウントを通じて送信されたメッセージを示します。メッセージ本文は省略され、to はマスクされます。内容または宛先が必要な場合は、 GET /v1/sms/{message_id} で組織スコープのメッセージを取得します。

sms.sent

顧客の通信事業者が送信 SMS リクエストを受け付けたときに送信されます。これは端末への配信確認ではありません。

{
  "data": {
    "accepted_at": "2026-09-19T15:42:10.113Z",
    "agent_id": 12,
    "call_id": 987654321,
    "created_at": "2026-09-19T15:42:09.901Z",
    "direction": "outbound",
    "error_code": null,
    "error_message": null,
    "from_number": "+15551234567",
    "id": "313a3117-827b-46e9-a01a-ac1493838724",
    "provider": "twilio",
    "provider_id": "SM0123456789abcdef0123456789abcdef",
    "segment_count": 1,
    "source": "agent_tool",
    "status": "accepted",
    "to": "[REDACTED]"
  },
  "event_id": "0ae347b4-1716-45bb-9a0e-b52373586e37",
  "type": "sms.sent"
}

sms.failed

通信事業者による恒久的な拒否後、一時的な失敗に対する再試行がすべて尽きた後、または結果が最終的に不明な場合に送信されます。error_code は安定した ThunderPhone コードであり、対応可能な場合は error_message に顧客が取るべき操作が示されます。status: "unknown" は、通信事業者が SMS を受け付けた可能性があることを意味します。ThunderPhone は自動的に再送しないため、通信事業者ログで照合してください。

sms.received

受信 SMS サポート用に予約されています。現行リリースでは sms.received イベントは送信されません。受信通信事業者 webhook の設定と署名検証は別途提供予定です。


音声イベント

カスタム音声の作成は非同期です。これらの非ブロッキングイベントにより、 クローン詳細エンドポイントをポーリングする代わりに、最終結果に対応できます。

voice.ready と voice.failed は、events: [] を持つ組織全体のエンドポイントにのみ配信されます。明示的なイベントフィルターとして選択することはできません。

voice.ready

カスタム音声の処理が完了し、エージェントに割り当て可能になったときに送信されます。

{
  "data": {
    "voice": {
      "created_at": "2026-07-30T14:12:08.317Z",
      "display_name": "Support voice",
      "failure_reason": "",
      "gender": "female",
      "id": "cv_2f6f90b0e9a34ee8b39be7d1",
      "language": "en",
      "name": "custom:cv_2f6f90b0e9a34ee8b39be7d1",
      "status": "ready",
      "updated_at": "2026-07-30T14:13:31.605Z"
    }
  },
  "event_id": "2d5f0a61-e9b5-4a3c-b684-29d7d9e4b214",
  "type": "voice.ready"
}

voice.failed

カスタム音声の処理が恒久的な失敗に至ったときに送信されます。

{
  "data": {
    "reason": "audio sample could not be processed",
    "voice": {
      "created_at": "2026-07-30T14:12:08.317Z",
      "display_name": "Support voice",
      "failure_reason": "audio sample could not be processed",
      "gender": "female",
      "id": "cv_2f6f90b0e9a34ee8b39be7d1",
      "language": "en",
      "name": "custom:cv_2f6f90b0e9a34ee8b39be7d1",
      "status": "failed",
      "updated_at": "2026-07-30T14:13:31.605Z"
    }
  },
  "event_id": "3493e985-1a75-4f77-a10a-e74af440cd31",
  "type": "voice.failed"
}
フィールド型説明
voice.idstringカスタム音声の公開 ID
voice.namestringcustom:<public_id> 形式のエージェント音声値
voice.display_namestring組織向けの音声名
voice.languagestringクローンの単一言語コード
voice.genderstringmale、female、または空文字列
voice.statusstringvoice.ready では ready、voice.failed では failed
voice.failure_reasonstring成功時は空。失敗時は処理失敗の詳細
voice.created_at, voice.updated_attimestampISO 8601 タイムスタンプ
reasonstring失敗の詳細。voice.failed にのみ含まれます

品質イベント

call.graded

通話のAI評価実行が完了するたびに送信されます。非ブロッキングです。

{
  "data": {
    "call_id": 987654321,
    "grade": {
      "call_outcome": "success",
      "created_at": "2026-04-20T18:25:11.002Z",
      "detected_issues": [],
      "graded_at": "2026-04-20T18:25:11.002Z",
      "grader_model": "heuristic-v1",
      "id": 5512,
      "score": 92,
      "status": "completed",
      "summary": "Caller asked about their policy and got a full answer…"
    },
    "report": null
  },
  "event_id": "7c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f",
  "type": "call.graded"
}
フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント
grade.idinteger評価 ID
grade.scoreinteger | null0~100
grade.call_outcomestringsuccess、failure、unknown、または no_conversation
grade.summarystring1段落の要約
grade.detected_issuesarray評価器が検出した問題の文字列
grade.statusstring常に completed。完了した実行のみが送信されます
grade.grader_modelstring結果を生成した評価器(例: heuristic-v1)
grade.graded_at, grade.created_attimestamp
reportobject | null顧客向けの通話レポート: 結果ラベル、要対応フラグと理由、発信者、1行の要約、発信者体験。初期のヒューリスティック評価では、これは null、またはフィールドがプレースホルダーである pending レポートです。完全な評価のイベントには完了したレポートが含まれます

call.data_extracted

構造化データの抽出が正常に完了するたびに送信されます。これには、telephony.complete / web.complete 後の遅延リトライ、または POST /v1/calls/{call_id}/extract による手動再実行も含まれます。非ブロッキングです。

ブロッキング抽出モードでは、通常、完了イベントは75秒の抽出予算を超えて待機しません。抽出ワーカープロセスが失われた場合、プロダクションの完了処理ドレインは5分ごとに実行され、次の抽出試行を開始する前に blocking_deadline_at を過ぎた完了を解放します。その後の成功は、このイベントとして別途配信されます。

{
  "data": {
    "call_id": 987654321,
    "agent_id": 12,
    "agent_name": "Acme intake",
    "extracted_data": {
      "status": "completed",
      "fields": {
        "customer_name": "Alex Morgan",
        "appointment_date": "2026-04-23"
      },
      "evidence": {
        "customer_name": {
          "quote": "My name is Alex Morgan",
          "speaker_role": "caller",
          "turn_index": 4
        },
        "appointment_date": {
          "quote": "April 23 works for me",
          "speaker_role": "caller",
          "turn_index": 7
        }
      },
      "verification": "verified",
      "field_reasons": {},
      "schema_version": "92850758e231a3c95a..."
    },
    "extracted_at": "2026-04-20T18:25:11.002Z",
    "model": "<model id>",
    "summary": "Alex Morgan called to book a follow-up visit and confirmed Thursday, April 23."
  },
  "event_id": "4d79ef1d-c2b1-4ed6-85b8-8326bd2895ef",
  "type": "call.data_extracted"
}
フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント
summarystring | nullエージェントで 通話の要約を生成 が有効な場合の完了済み通話要約。遅延した抽出イベントでも、完了ウィンドウに間に合わなかった要約が配信されます。それ以外の場合は null です。要約はあるものの抽出フィールドがないエージェントでは、このイベントは送信されません。遅延した要約は GET /v1/calls/{call_id} から取得してください
extracted_data.statusstringこのイベントでは常に completed
extracted_data.fieldsobject設定済みの抽出フィールドキーをキーとする値。利用できない値は null
extracted_data.evidenceobject抽出フィールドをキーとする根拠。null 以外の値には、構造的に正確性が確認された引用(最大1,000文字)、speaker_role(caller または agent)、および turn_index が含まれます。モデルが返した長すぎる引用は切り詰めずに拒否され、フィールドが null の場合は根拠も常に null です
extracted_data.verificationstring独立した根拠検証パスが、候補フィールドごとに有効な判定を厳密に1つ返した場合にのみ verified です。unavailable は、検証パスの失敗、タイムアウト、予算不足、または不正な出力や部分的な出力を意味します。完全に利用不可の検証パスでも、顧客レビュー用に構造的根拠を持つ値は保持されます。部分的な出力では有効な判定が適用され、厳密に1つの有効な判定がない各候補は null に設定されます
extracted_data.field_reasonsobject構造的根拠付けまたは独立検証ツールにより null に設定されたフィールドをキーとする理由
extracted_data.schema_versionstringこの抽出で使用された正確なフィールドスキーマのハッシュ
extracted_attimestampISO 8601 完了時刻
modelstring抽出に使用したモデル

campaign.completed

キャンペーンが running から completed に移行した際に1回送信されます。スケジュールが終了した場合も、すべての連絡先が終端状態に到達した場合も対象です。ランナーのリトライでは別のイベントは送信されません。この組織レベルのライフサイクルイベントは、エージェントスコープのエンドポイントではなく、組織スコープのエンドポイントにのみ配信されます。非ブロッキングです。

{
  "data": {
    "campaign_id": "3f6b2c9e-2a0d-4c63-b6d6-a708dc98f403",
    "name": "May win-back",
    "agent_id": 12,
    "status": "completed",
    "started_at": "2026-04-20T17:00:00Z",
    "completed_at": "2026-04-20T18:25:11Z",
    "counts": {
      "contacts_total": 150,
      "completed": 121,
      "failed": 11,
      "no_answer": 18,
      "remaining": 0
    }
  },
  "event_id": "8d8f52ce-6b46-423f-9dde-cea0b91ec135",
  "type": "campaign.completed"
}

4つの結果カウントは互いに重複せず、合計すると contacts_total になります。completed には成功した連絡先が含まれます。no_answer には、最終結果が応答なしであった終端状態の失敗または試行回数上限到達の連絡先が含まれます。failed には、その他すべての終端状態の失敗または試行回数上限到達の連絡先が含まれます。remaining には、保留中、スケジュール済み、または現在発信中の連絡先が含まれます。リトライ待ちの連絡先は、直近の試行が応答なしであっても remaining です。進行中の通話は、1回限りの完了スナップショットの前に照合されます。started_at は設定済みのキャンペーン開始時刻、開始時刻が設定されていない場合はキャンペーン作成時刻です。

issue.reported

問題レポートが作成されると送信されます。ダッシュボードからユーザーが報告したもの(source: "user")と、通話評価により自動作成されたもの(source: "system")の両方が対象です。非ブロッキングです。

{
  "data": {
    "call_id": 987654321,
    "issue_report": {
      "created_at": "2026-04-20T18:25:11.002Z",
      "description": "Five-second silence before responding to the main question.",
      "id": 4321,
      "severity": "warning",
      "source": "system",
      "status": "open",
      "title": "Agent paused too long"
    }
  },
  "event_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
  "type": "issue.reported"
}
フィールド型説明
agent_idinteger | null割り当てられている場合に通話を処理したエージェント
agent_namestring | null割り当てられている場合に通話を処理したエージェント
issue_report.severitystringcritical、warning、または info
issue_report.statusstringopen または resolved
issue_report.sourcestringuser(ダッシュボードから報告)または system(評価により作成)

issue.escalated

問題パターンがスタッフレビューのためにThunderPhoneへ送信されると送信されます。ThunderPhone に報告 の実行後、または AIで修正 が顧客側での修正を確認できず、自動的に問題をルーティングした場合が対象です。このイベントを受信するのは組織全体のエンドポイントのみです。

{
  "data": {
    "automatic": false,
    "cluster_id": "7ac2844c-2df0-4fa8-a560-7378da649e19",
    "escalation_id": "ec99f52b-c8c0-41dd-a4f2-dd8a07b10894",
    "status": "open"
  },
  "event_id": "d8f8f420-7a42-45ba-bcf1-b747f9bbecda",
  "type": "issue.escalated"
}
フィールド型説明
automaticboolean自動エスカレーションの場合は true、手動エスカレーションの場合は false
cluster_idUUIDエスカレーションされた問題パターン
escalation_idUUIDエスカレーションレコード
statusstringイベント送信時は open

これは通知であり、根拠バンドルではありません。cluster_id を使用して問題パターンと関連付けてください。ThunderPhone に報告を参照してください。


テスト通話イベント

test-call.completed

test-call 実行 が completed または failed の最終ステータスに到達したときに送信されます。起動時に失敗して通話が生成されなかった実行も含まれます。同期応答は不要です。バッチ CI 実行をチャットや通知システムに連携する場合に役立ちます。

{
  "data": {
    "test_call_run": {
      "call_id": 987654321,
      "completed_at": "2026-04-20T18:25:04.822Z",
      "error_message": "",
      "id": 7110,
      "status": "completed",
      "target_id": 12,
      "target_type": "agent"
    }
  },
  "event_id": "2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e",
  "type": "test-call.completed"
}
フィールド型説明
agent_idinteger | null割り当てられている場合、通話を処理したエージェント
agent_namestring | null割り当てられている場合、通話を処理したエージェント
test_call_run.target_typestringagent または phone_number
test_call_run.target_idintegertarget_type に対応する、実行の対象となったエージェント ID または電話番号 ID
test_call_run.statusstringcompleted または failed
test_call_run.call_idinteger | null通話が開始される前に実行が失敗した場合は null
test_call_run.error_messagestring成功時は空

アラートイベント

alert.triggered

「開発者向け Webhook に配信」チャネルが有効なアラートルールがしきい値を超えたときに送信されます。同期応答は不要です。ルールは一度発火するとクールダウンに従うため、継続的な違反ではクールダウンウィンドウごとに 1 つのイベントが生成されます。

{
  "data": {
    "comparator": "lt",
    "event_id": "b8e6a1d4-2c3f-4a5b-9c8d-7e6f5a4b3c2d",
    "fired_at": "2026-04-20T18:00:00+00:00",
    "metric": "success_rate",
    "metric_value": 71.4,
    "rule_id": "d2c3b4a5-6f7e-4d8c-9b0a-1c2d3e4f5a6b",
    "rule_name": "Success rate below 80%",
    "threshold": 80.0,
    "window_hours": 24
  },
  "event_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a",
  "type": "alert.triggered"
}
フィールド型説明
event_id(data 内)UUIDアラートの発火 ID。エンベロープの配信 event_id とは異なります
rule_id, rule_nameUUID, string発火したルール
metricstringsuccess_rate、failure_rate、avg_score、call_volume、または suite_regression
comparatorstringlt、lte、gt、または gte
metric_valuenumberルール発火時のウィンドウ内におけるメトリクス値
thresholdnumber設定されたしきい値
window_hoursinteger直近の評価ウィンドウ
fired_attimestamp

ルール、メトリクス、クールダウン、メール / Slack チャネルの作成については、アラートガイドを参照してください。


移行イベント

migration.call.complete

POST /v1/migrations/{id}/calls を通じて発信した通話が、 どちらのプラットフォームで行われたかにかかわらず終了したときに送信されます。ブロッキングされません。通話終了後、最大約5分で到着します。data には telephony.complete のすべてのフィールドに加えて、migration ブロックが含まれます。ThunderPhone が発信した通話では、同じ call_id を持つ通常どおりの telephony.complete も送信されます。もう一方のプラットフォームの通話が2時間経過しても終了しない場合、または移行が先に完了したかキーを失った場合は、status: "unknown" とトランスクリプトなしで送信されます。

{
  "data": {
    "agent_id": 42,
    "agent_name": "Front desk",
    "billable_minutes": null,
    "billing_total_cents": null,
    "call_id": null,
    "direction": "outbound",
    "duration_seconds": 94,
    "end_reason": "user_hangup",
    "end_time": "2026-10-06T17:01:34+00:00",
    "extracted_data": null,
    "from_number": "+15551234567",
    "migration": {
      "arm": "vendor",
      "id": "5f0c2a9e-7b1d-4c3e-8a6f-2d9e1b4c7a30",
      "metadata": {
        "lead_id": "8812"
      },
      "routing_id": "9b2f8c1e-4d3a-4f6b-8e2d-1a7c5b9e0f34",
      "vendor": "retell",
      "vendor_call_id": "call_6a1f0e",
      "vendor_cost_usd": "0.1240"
    },
    "product": "",
    "recording_mode": "vendor",
    "recording_url": "https://…",
    "start_time": "2026-10-06T17:00:00+00:00",
    "status": "completed",
    "summary": "The callee booked a table for two on Thursday.",
    "thunderphone_retained_call_content": true,
    "to_number": "+14155552671",
    "transcripts": [
      {
        "content": "Hi Ada, this is Rosa's calling about your booking.",
        "role": "agent"
      },
      {
        "content": "Yes, Thursday works.",
        "role": "user"
      }
    ],
    "transfer_number": null,
    "unresolved_variables": [],
    "variables": {
      "first_name": "Ada"
    },
    "voice": ""
  },
  "event_id": "7c1e2f3a-4b5c-4d6e-8f7a-9b0c1d2e3f4a",
  "type": "migration.call.complete"
}
フィールド型説明
migration.idUUID移行
migration.routing_idUUID発信時に返される、ルーティングされた通話
migration.armstringours(ThunderPhone が発信)または vendor(もう一方のプラットフォームが発信)
migration.vendorstringretell、vapi、elevenlabs、または bland
migration.vendor_call_idstring | nullもう一方のプラットフォームの通話 ID。ours では null
migration.metadataobject通話の発信時に送信した metadata
migration.vendor_cost_usdstring | nullもう一方のプラットフォームが報告した通話コスト(報告された場合)
call_idinteger | nullThunderPhone の通話 ID。vendor では null
statusstringvendor の場合:被発信者が応答したときは completed、応答しなかったときは failed、上記の場合は unknown。ours の場合:telephony.complete と同様

vendor 通話の場合、ThunderPhone には請求データや抽出データがありません。 billable_minutes、billing_total_cents、extracted_data は null、 product と voice は空、recording_mode は vendor です。recording_url は、もう一方のプラットフォームから提供された場合、そのリンクになります。

migration.rollback

移行の段階的な切り替えにより、すべての通話が自動的に他方の プラットフォームへ戻されたときに送信されます。条件は、15分以内にThunderPhoneへの接続が3件失敗した、 ThunderPhoneに送信された2件の通話がエージェントの応答前に終了した、または ThunderPhoneのタスク結果率が、設定された差を超えて他方のプラットフォームの結果率を下回った場合です。ロールバックごとに1回、非ブロッキングで送信されます。この後、ThunderPhoneの 通話シェアは0%となり、エージェントの移行タブで再開されるまで移行は一時停止されます。ペイロードには電話番号、トランスクリプト、通話IDは含まれません。

{
  "data": {
    "agent_id": 42,
    "agent_name": "Front desk",
    "dropped": 0,
    "migration_id": "5f0c2a9e-7b1d-4c3e-8a6f-2d9e1b4c7a30",
    "ours": {
      "graded": 20,
      "success_rate": 0.8
    },
    "ours_failed": 3,
    "ours_percent": 0,
    "previous_percent": 25,
    "reason": "ours_failed_burst",
    "rolled_back_at": "2026-10-10T12:05:00+00:00",
    "step": 1,
    "theirs": {
      "graded": 20,
      "success_rate": 0.8
    },
    "vendor": "retell"
  },
  "event_id": "3d1f6b2a-8c4e-5a7b-9d0e-2f1a3b4c5d6e",
  "type": "migration.rollback"
}
フィールド型説明
migration_idUUID移行
vendorstringretell、vapi、elevenlabs、またはbland
reasonstringours_failed_burst(15分以内に接続が3件失敗)、dropped_calls(30分以内にエージェントの応答前に2件の通話が終了)、またはrate_gap(各側で少なくともrollback_min_calls件の評価済み通話におけるタスク結果率の差)
previous_percentintegerロールバック前のThunderPhoneの通話シェア
ours_percentinteger常に0
stepinteger | null適用されていたスケジュールステップ(0始まり)
ours / theirsobject | null現在のステップの評価済み通話数と成功率。ステップの通話数が少なすぎる場合、theirsは直近30日間の値になることがあります。存在しない場合はnull
ours_failedinteger直近15分間にカウントされた接続失敗数
droppedinteger直近30分間に切断としてカウントされた通話数
rolled_back_attimestamp

関連項目