テンプレートからエージェントを作成し、同じリクエストでフィールドを設定することもできます。template を省くと空の状態から始まります。GET /api/v1/voice/catalog はテンプレートと、エージェントに指定できる言語と音声を返します。テンプレートは英語と中国語で書かれているため、ほかの言語では system_prompt と first_message をその言語で送ってください。リクエスト全体が保存されるか、エージェントがまったく作られないかのどちらかなので、拒否されたリクエストは直してそのまま送り直せます。レスポンスの dashboard_url はダッシュボード上のエージェントのページで、ブラウザから下書きと通話できます。すべてのエージェントは EvaSay ASR、EvaSay LLM、EvaSay TTS で動き、通話ごとに言語と負荷に応じて EvaSay が選び、通話料金に含まれます。ほかのサービスのアカウントを設定する必要はありません。
curl https://evasay.com/api/v1/voice/agents \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{
"name": "Front desk",
"language": "en",
"first_message": "Hi, thanks for calling Sunrise Salon. How can I help?",
"system_prompt": "You are the front desk of Sunrise Salon..."
}'
これらのフィールドは PATCH /api/v1/voice/agents/{id} で更新できます。
| フィールド | 説明 |
|---|---|
name, first_message, system_prompt | テキスト |
status | published で下書きを新しいバージョンとして公開、draft で通話の受付を停止 |
language | 27 言語のいずれか(例:en、zh、es、de)、または発信者に合わせる multi |
temperature | 0-100 |
max_duration_sec, silence_timeout_sec | 通話の上限 |
interruptible, end_call_enabled | 真偽値 |
confirm_details | 真偽値。番号や名前を復唱して確認を取ります |
ai_disclosure | 真偽値、既定は true。最初のメッセージの前に、通話の言語で相手が AI と話していることを伝えます(最初のメッセージですでに伝えている場合は省略) |
voicemail_detection | 真偽値。発信時はまず相手の声を聞き、留守番電話なら終了します |
voicemail_message | 留守番電話に残すメッセージ。{{variables}} を使えます。空なら切断します |
transfer_number | 転送先の番号(国際形式) |
transfer_destinations | 追加で最大 9 件の番号 [{name, number, when}]。エージェントが when に基づいて選びます |
transfer_briefing | 真偽値。電話に出た人が最初にエージェントによる通話の要約を聞きます |
pronunciations | 最大 100 件の [{word, say, case_sensitive}]。音声は word を say のとおりに読みます |
idle_messages | 黙っている発信者に順に伝える最大 3 件のリマインダー。最後のあとに通話が終了します |
noise_reduction | 真偽値。発信者の背景雑音を除去してから聞き取ります |
recording_enabled | 真偽値。通話を 2 チャンネル(左が発信者、右がエージェント)で録音します |
recording_consent | announce、ask(発信者が同意した場合のみ保存)、none |
recording_notice | 最初に伝える案内または質問。空なら通話の言語の標準文 |
handoffs | 最大 5 件の [{agent_id, when}]。通話を引き継げるほかのエージェント |
knowledge_base_id | ナレッジベースのいずれか |
vocabulary_id | 用語集のいずれか。発信者がその用語を話したとき、より確実に聞き取れます |
voice_id | EvaSay の内蔵音声 ID、またはクローン音声(clone:…) |
内蔵音声は言語によって異なります。中国語は ming-designed-female-clear、ming-designed-female-warm(女性)、ming-designed-male-clear、ming-designed-male-friendly(男性)、ほかの言語は F1–F5(女性)と M1–M5(男性)です。エージェントの言語を話せない内蔵音声は、その言語を話す同じ性別の音声に置き換わります。旧フィールド名 tts_voice_id も引き続き使えます。それ以外の voice_id や、まだ準備ができていないクローン音声は拒否されます。
analysis_config は通話終了後に何を分析するかを決めます。summary(既定 true)、summaryLanguage、successCriteria(成功した通話が達成すること)、fields(抽出する最大 20 個の {name, type, description}。type は string、number、boolean のいずれか)、scorecard(最大 10 個の {name, description, weight}、重みは 1〜5)です。結果は通話の analysis と call.analyzed Webhook に入ります。
エージェントのフィールドを変更すると下書きが変わります。POST /api/v1/voice/agents/{id}/publish(任意で note 付き)で下書きを公開するか、同じ PATCH で status: "published" を指定するまで、通話は公開中のバージョンを使い続けます。公開のたびに番号付きのバージョンが保存され、エージェントの published_version が通話で使われるバージョンを示します。通話は開始時に公開されていたバージョンのまま進むため、通話中に公開しても影響しません。ダッシュボードからのテスト通話は下書きを使います。
GET /agents/{id}/versions でバージョン一覧を取得し、POST /agents/{id}/versions/{version}/restore でロールバックします。新しい通話はそのバージョンを使い、下書きもその内容になります。エージェントの名前、デプロイ先、ウィジェットの見た目、通知はバージョン管理されず即座に変わります。ナレッジベースのドキュメントも同様です。