내 전화 시스템이나 앱 같은 자체 프로그램에서 통화 음성을 보내고 받습니다. 통화를 시작하세요.
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 }'
응답의 websocket_url에는 일회용 토큰이 들어 있으며 15분 안에 열 수 있습니다. encoding은 pcm_s16le(sample_rate 8000, 16000 또는 24000의 16비트 리틀 엔디언 PCM) 또는 mulaw(8 kHz μ-law)입니다. 음성은 그 형식의 바이너리 프레임으로 양방향으로 오가며, 프레임당 20 ms가 이상적입니다. 텍스트 프레임은 JSON입니다.
| 방향 | 메시지 |
|---|---|
| 나 → EvaSay | {"type":"dtmf","digits":"12#"} 키 입력. {"type":"end"} 끊기. {"type":"text","text":"…"} 발신자가 입력한 말(버튼으로 한 답은 "input":"button"). {"type":"context","text":"…","key":"cart"} 앱이 알리는 상황(에이전트는 답하지 않음). {"type":"typing"} 고객이 입력 중(입력하는 동안 1초에 한 번쯤 전송, 에이전트는 2초간 말하지 않음). {"type":"tool_result","id":"…","result":{…}}(또는 "error") 페이지 함수의 답 |
| EvaSay → 나 | start(callId 포함). clear(발신자가 끼어듦: 아직 재생하지 않은 에이전트 음성을 버림). transcript(role, text, final, 입력한 말이면 input). user_started_speaking, user_stopped_speaking, agent_started_speaking, agent_stopped_speaking. cards(cards, quick_replies). tool(id, name, arguments: 페이지 함수 실행). notice(code: 입력한 말의 too_fast 또는 limit). ended(reason 포함, 그 뒤 소켓이 닫힘) |
연결하자마자 에이전트가 인사합니다. 요청에 user_id와 page_tools(앱이 답하는 페이지 함수, 아래 참고)를 추가할 수 있습니다. 통화는 다른 통화처럼 분 단위로 과금되며 통화 기록, 분석, Webhook도 같습니다.