통화가 진행되는 동안 POST /api/v1/voice/calls/{id}/control을 보내세요. 통화를 처리하는 Worker가 약 2초 안에 명령을 받고, 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 })은 2분 안에 열 수 있는 listen_url을 돌려줍니다. 이것은 WebSocket으로, 먼저 JSON 메시지 {"type":"start","sampleRate":8000,"channels":1,"encoding":"pcm_s16le"}가 오고, 이어서 발신자가 듣는 소리(두 목소리를 섞은 것, channels: 2면 왼쪽 발신자와 오른쪽 에이전트)가 16비트 리틀 엔디언 PCM 바이너리 프레임으로 옵니다. 통화가 끝나면 닫힙니다. 음성은 EvaSay의 컨트롤 플레인을 거치지 않고 통화를 처리하는 Worker에서 바로 옵니다. 대시보드 통화 페이지의 듣기 버튼도 같은 주소를 씁니다.