GET /api/v1/voice/calls/{id} は通話のステータス、通話時間、課金されたクレジット、要約、分析、文字起こしを返します。通話一覧は GET /api/v1/voice/calls?agent_id=&status=&channel=&user_id=&page= で取得します(user_id:Web 通話トークンから得た、その人に対するあなた側の ID)。turns は通話のターンごとのデバッグログで、発信者が話し終えてから回答が聞こえるまでの時間の内訳をミリ秒で示します。waitMs(発話終了)、sttMs(音声認識)、llmMs(モデルの最初の単語。関数を呼ぶたびに 1 つ追加)、ttsMs(音声の最初の音)、firstAudioMs(回答が聞こえた時点)に加え、呼び出された関数、割り込み、エラーが含まれます。通話ページにも表示されます。
recording_enabled を有効にすると、各通話は 2 チャンネルの WAV として録音されます。左が発信者、右がエージェントで、サンプリングレートは通話と同じです。recording_consent: "announce" ではエージェントが最初に録音することを伝え、"ask" では許可を尋ね、発信者が同意した場合のみ録音を保存します(回答なしは不同意とみなします)。"none" では何も伝えません。あなたと発信者がいる地域の法律で何が求められるかを確認してください。
録音は EvaSay のストレージ、または 連携 → Webhook と通知 → 録音の保存先 で設定した独自の S3 互換バケット(AWS S3、Cloudflare R2、Google Cloud Storage、Supabase、MinIO)に保存されます。通話を処理する Worker がファイルを直接バケットにアップロードします。録音が保存されると、GET /api/v1/voice/calls/{id} は 1 時間有効な recordingUrl と recording.status(recording、stored、declined、failed)を返します。
DELETE /api/v1/voice/calls/{id} は終了した通話を、文字起こし、録音(EvaSay のストレージまたはお客様のバケット内)、分析、Webhook の送信記録とともに削除します。使用した Credits はクレジット履歴に残ります。まだ削除できない通話には 409(code は call_not_deletable_yet)が返ります。通話中か終了直後、精算中、録音のアップロード中、または残高で支払えなかった Credits がある場合です(先に Credits を追加してください)。
本人からデータ削除を求められたときは POST /api/v1/voice/calls/delete-by-caller を使います。{ "phone_number": "+14155550123" } を送るとこの番号の通話(着信は発信元の番号、発信は発信先の番号)がすべて、{ "user_id": "..." } を送るとトークンにこの user_id を含む Web 通話がすべて削除されます。応答は { "deleted": 12, "kept_back": { "settling": 1 }, "more": false } です。1 回あたり最大 200 件なので、more が true の間は繰り返し呼び出し、kept_back の通話は後で再度削除してください。番号が発信停止リストにある場合は、リストに残ります。ダッシュボードの 通話 → 発信者のデータを削除 でも同じことができます。