Senden und empfangen Sie das Audio eines Anrufs aus Ihrem eigenen Programm, etwa Ihrer eigenen Telefonanlage oder App. Starten Sie den Anruf:
curl https://evasay.com/api/v1/voice/calls/websocket \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{ "agent_id": "AGENT_ID", "encoding": "pcm_s16le", "sample_rate": 16000 }'
Die websocket_url in der Antwort enthält ein Einmal-Token und kann innerhalb von 15 Minuten geöffnet werden. encoding ist pcm_s16le (16-Bit-Little-Endian-PCM mit einer sample_rate von 8000, 16000 oder 24000) oder mulaw (8 kHz μ-law). Audio fließt in beide Richtungen als Binärframes in diesem Format, idealerweise je 20 ms. Textframes sind JSON:
| Richtung | Nachrichten |
|---|---|
| Sie → EvaSay | {"type":"dtmf","digits":"12#"} Tastendrücke; {"type":"end"} legt auf; {"type":"text","text":"…"} vom Anrufer getippte Worte ("input":"button" für eine angetippte Antwort); {"type":"context","text":"…","key":"cart"} was Ihre App meldet (der Agent antwortet nicht darauf); {"type":"typing"} der Anrufer tippt (etwa einmal pro Sekunde senden, solange getippt wird; der Agent spricht 2 s lang nicht); {"type":"tool_result","id":"…","result":{…}} (oder "error") die Antwort einer Seitenfunktion |
| EvaSay → Sie | start (mit callId); clear (der Anrufer hat unterbrochen: noch nicht abgespieltes Agent-Audio verwerfen); transcript (role, text, final und input für getippte Worte); user_started_speaking, user_stopped_speaking, agent_started_speaking, agent_stopped_speaking; cards (cards, quick_replies); tool (id, name, arguments: eine Ihrer Seitenfunktionen ausführen); notice (code: too_fast oder limit für getippte Worte); ended (mit reason, danach schließt der Socket) |
Der Agent grüßt, sobald Sie verbinden. user_id und page_tools (die Seitenfunktionen, die Ihre App beantwortet, siehe unten) können dem Request hinzugefügt werden. Anrufe werden wie alle anderen pro Minute abgerechnet, mit denselben Anrufprotokollen, Analysen und Webhooks.