템플릿으로 에이전트를 만들고, 같은 요청에서 필드를 설정할 수도 있습니다. 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 웹훅에 들어갑니다.
에이전트 필드를 바꾸면 초안이 바뀝니다. POST /api/v1/voice/agents/{id}/publish(선택적으로 note 포함)로 초안을 게시하거나 같은 PATCH에 status: "published"를 넣기 전까지 통화는 게시된 버전을 계속 씁니다. 게시할 때마다 번호가 붙은 버전이 남고, 에이전트의 published_version이 통화에 쓰이는 버전을 알려 줍니다. 통화는 시작할 때 게시되어 있던 버전을 유지하므로 통화 중에 게시해도 바뀌지 않습니다. 대시보드의 테스트 통화는 초안을 씁니다.
GET /agents/{id}/versions는 버전 목록을 보여 주고, POST /agents/{id}/versions/{version}/restore는 되돌립니다. 새 통화는 그 버전을 쓰고 초안도 그 버전이 됩니다. 에이전트의 이름, 배포, 위젯 모양, 알림은 버전 관리되지 않고 즉시 바뀌며, 지식 베이스의 문서도 마찬가지입니다.