Crie um agente a partir de um modelo, definindo opcionalmente seus campos na mesma requisição. Sem template, ele começa em branco; GET /api/v1/voice/catalog lista os modelos, junto com os idiomas e as vozes que um agente aceita. Os modelos estão em inglês e chinês, então para outro idioma envie system_prompt e first_message nesse idioma. Ou a solicitação inteira é salva ou nenhum agente é criado, então uma solicitação recusada pode ser reenviada depois de corrigida. O dashboard_url da resposta é a página do agente no painel, onde você conversa com o rascunho no navegador. Todos os agentes rodam em EvaSay ASR, EvaSay LLM e EvaSay TTS, escolhidos pela EvaSay para cada chamada de acordo com o idioma e a carga, e incluídos no preço da chamada; não há contas de outros provedores para configurar.
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..."
}'
Atualize qualquer um destes campos com PATCH /api/v1/voice/agents/{id}:
| Campo | Observações |
|---|---|
name, first_message, system_prompt | Texto |
status | published publica o rascunho como uma nova versão; draft deixa de receber chamadas |
language | Um dos 27 idiomas, p. ex. en, zh, es, de, ou multi para acompanhar quem liga |
temperature | 0-100 |
max_duration_sec, silence_timeout_sec | Limites da chamada |
interruptible, end_call_enabled | Booleanos |
confirm_details | Booleano; repete números e nomes em voz alta e pede confirmação |
ai_disclosure | Booleano, padrão true; antes da primeira mensagem, o agente diz no idioma da chamada que quem liga está falando com uma IA (omitido quando a primeira mensagem já diz isso) |
voicemail_detection | Booleano; as chamadas de saída escutam primeiro e terminam ao chegar a uma caixa postal |
voicemail_message | Deixada em uma caixa postal, pode usar {{variables}}; nenhuma para desligar |
transfer_number | Número para transferir, em formato internacional |
transfer_destinations | Até 9 números a mais, [{name, number, when}]; o agente escolhe um conforme when |
transfer_briefing | Booleano; quem atende primeiro ouve o resumo da chamada feito pelo agente |
pronunciations | Até 100 [{word, say, case_sensitive}]; a voz diz say no lugar de word |
idle_messages | Até 3 lembretes ditos em sequência a quem liga e fica em silêncio, antes de a chamada terminar |
noise_reduction | Booleano; o ruído de fundo de quem liga é filtrado antes de ser ouvido |
recording_enabled | Booleano; as chamadas são gravadas em dois canais (quem liga à esquerda, o agente à direita) |
recording_consent | announce, ask (mantida só se quem liga concordar) ou none |
recording_notice | O aviso ou a pergunta dita primeiro; vazio para usar o integrado no idioma da chamada |
handoffs | Até 5 [{agent_id, when}]: outros agentes para os quais este pode transferir uma chamada |
knowledge_base_id | Uma das suas bases de conhecimento |
vocabulary_id | Um dos seus vocabulários; os termos dele são reconhecidos com mais segurança quando quem liga os diz |
voice_id | Um id de voz integrada da EvaSay, ou uma das suas vozes clonadas (clone:…) |
As vozes integradas dependem do idioma: o chinês tem ming-designed-female-clear e ming-designed-female-warm (femininas), ming-designed-male-clear e ming-designed-male-friendly (masculinas); os demais idiomas têm F1–F5 (femininas) e M1–M5 (masculinas). Uma voz integrada que não fala o idioma do agente é substituída pela do mesmo gênero que fala. O nome de campo antigo tts_voice_id continua aceito. Qualquer outro valor de voice_id, ou uma voz clonada que ainda não esteja pronta, é recusado.
analysis_config define o que é extraído de cada chamada quando ela termina: summary (padrão true), summaryLanguage, successCriteria (o que uma chamada bem-sucedida alcança), fields (até 20 {name, type, description} a extrair, com type sendo string, number ou boolean) e scorecard (até 10 {name, description, weight}, peso de 1 a 5). Os resultados ficam na analysis da chamada e no webhook call.analyzed.
Alterar os campos de um agente altera o rascunho dele. As chamadas continuam usando a versão publicada até você publicar o rascunho com POST /api/v1/voice/agents/{id}/publish (opcionalmente com uma note), ou com status: "published" no mesmo PATCH. Cada publicação guarda uma versão numerada; published_version no agente informa qual delas as chamadas usam. Uma chamada permanece na versão que estava ativa quando começou, então publicar durante uma chamada não a altera. As chamadas de teste feitas no painel usam o rascunho.
GET /agents/{id}/versions lista as versões, e POST /agents/{id}/versions/{version}/restore volta atrás: as novas chamadas usam essa versão e o rascunho passa a ser ela. O nome do agente, a implantação, a aparência do widget e as notificações não têm versões e mudam na hora, assim como os documentos da base de conhecimento.