שלחו POST /api/v1/voice/calls/{id}/control בזמן שהשיחה מתנהלת. ה-worker שמריץ את השיחה קולט את הפקודה תוך כשתי שניות; ה-API עונה 202. אם אין גישה ל-worker שמריץ את השיחה, ה-API עונה 503 (code call_unreachable) והפקודה לא מתבצעת.
type | מה קורה |
|---|---|
say | הסוכן אומר את text אחרי המשפט הנוכחי שלו, או מיד עם "interrupt": true |
note | הסוכן מקבל את text (לא נאמר בקול) ולוקח אותו בחשבון מהתשובה הבאה שלו; התמלול מציין זאת |
end | הסוכן אומר את text אם ניתן ואז מנתק; שיחת טלפון בלי text מנותקת מיד |
ended_reason של השיחה הוא אז api_ended. בדף השיחה בלוח הבקרה יש את אותן פקודות שליטה.
POST /api/v1/voice/calls/{id}/listen (אפשר עם { "channels": 2 }) מחזיר listen_url שאפשר לפתוח תוך שתי דקות. זהו WebSocket: תחילה הודעת JSON {"type":"start","sampleRate":8000,"channels":1,"encoding":"pcm_s16le"}, ואז מסגרות בינאריות של PCM ב-16 סיביות little-endian עם מה שהמתקשר שומע (שני הקולות מעורבבים; עם channels: 2 המתקשר בשמאל והסוכן בימין). הוא נסגר כשהשיחה מסתיימת. השמע מגיע ישירות מה-worker שמריץ את השיחה, לא דרך מישור הבקרה של EvaSay; כפתור ההאזנה בדף השיחה בלוח הבקרה משתמש באותה כתובת.