Utwórz agenta z szablonu, opcjonalnie ustawiając jego pola w tym samym żądaniu. Bez template zaczyna od zera; GET /api/v1/voice/catalog wymienia szablony oraz języki i głosy, które może mieć agent. Szablony są napisane po angielsku i chińsku, więc dla innego języka wyślij system_prompt i first_message w tym języku. Zapisywane jest całe żądanie albo nie powstaje żaden agent, więc odrzucone żądanie można po poprawieniu wysłać ponownie. dashboard_url w odpowiedzi to strona agenta w panelu, gdzie możesz porozmawiać z wersją roboczą w przeglądarce. Każdy agent działa na EvaSay ASR, EvaSay LLM i EvaSay TTS, które EvaSay dobiera do każdego połączenia według języka i obciążenia i które są wliczone w cenę połączenia; nie ma kont innych dostawców do skonfigurowania.
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..."
}'
Każde z tych pól zaktualizujesz przez PATCH /api/v1/voice/agents/{id}:
| Pole | Uwagi |
|---|---|
name, first_message, system_prompt | Tekst |
status | published publikuje wersję roboczą jako nową wersję; draft przestaje przyjmować połączenia |
language | Jeden z 27 języków, np. en, zh, es, de, albo multi, aby podążać za językiem rozmówcy |
temperature | 0-100 |
max_duration_sec, silence_timeout_sec | Limity połączenia |
interruptible, end_call_enabled | Wartości logiczne |
confirm_details | Wartość logiczna; agent powtarza na głos liczby i imiona i prosi o potwierdzenie |
ai_disclosure | Wartość logiczna, domyślnie true; przed pierwszą wiadomością agent mówi w języku połączenia, że rozmówca rozmawia z SI (pomijane, gdy pierwsza wiadomość już to mówi) |
voicemail_detection | Wartość logiczna; w połączeniach wychodzących agent najpierw słucha i kończy rozmowę, gdy trafi na pocztę głosową |
voicemail_message | Zostawiana na poczcie głosowej, może zawierać {{variables}}; brak oznacza rozłączenie |
transfer_number | Numer, na który przekierować, w formacie międzynarodowym |
transfer_destinations | Do 9 dodatkowych numerów, [{name, number, when}]; agent wybiera jeden według when |
transfer_briefing | Wartość logiczna; osoba, która odbierze pierwsza, słyszy streszczenie rozmowy przygotowane przez agenta |
pronunciations | Do 100 pozycji [{word, say, case_sensitive}]; głos mówi say zamiast word |
idle_messages | Do 3 przypomnień wypowiadanych po kolei milczącemu rozmówcy, zanim połączenie się zakończy |
noise_reduction | Wartość logiczna; szum tła po stronie rozmówcy jest filtrowany, zanim zostanie usłyszany |
recording_enabled | Wartość logiczna; połączenia są nagrywane w dwóch kanałach (rozmówca po lewej, agent po prawej) |
recording_consent | announce, ask (nagranie jest zachowywane tylko, jeśli rozmówca się zgodzi) lub none |
recording_notice | Komunikat lub pytanie wypowiadane na początku; puste oznacza wbudowany tekst w języku połączenia |
handoffs | Do 5 pozycji [{agent_id, when}]: inni agenci, którym ten może przekazać połączenie |
knowledge_base_id | Jedna z Twoich baz wiedzy |
vocabulary_id | Jeden z Twoich słowników; jego terminy są trafniej rozpoznawane, gdy rozmówca je wypowiada |
voice_id | Identyfikator wbudowanego głosu EvaSay albo jeden z Twoich sklonowanych głosów (clone:…) |
Wbudowane głosy zależą od języka: chiński ma ming-designed-female-clear i ming-designed-female-warm (żeńskie) oraz ming-designed-male-clear i ming-designed-male-friendly (męskie), pozostałe języki mają F1–F5 (żeńskie) i M1–M5 (męskie). Wbudowany głos, który nie mówi językiem agenta, jest zastępowany głosem tej samej płci, który nim mówi. Starsza nazwa pola tts_voice_id nadal jest akceptowana. Każda inna wartość voice_id albo sklonowany głos, który nie jest jeszcze gotowy, zostaje odrzucona.
analysis_config określa, co jest ustalane z każdej rozmowy po jej zakończeniu: summary (domyślnie true), summaryLanguage, successCriteria (co osiąga udana rozmowa), fields (do 20 {name, type, description} do wyodrębnienia, gdzie type to string, number lub boolean) i scorecard (do 10 {name, description, weight}, waga 1–5). Wyniki są w polu analysis rozmowy i w webhooku call.analyzed.
Zmiana pól agenta zmienia jego wersję roboczą. Połączenia nadal używają wersji opublikowanej, dopóki nie opublikujesz wersji roboczej przez POST /api/v1/voice/agents/{id}/publish (opcjonalnie z note) albo przez status: "published" w tym samym PATCH. Każda publikacja zachowuje numerowaną wersję; published_version w agencie wskazuje, której używają połączenia. Połączenie pozostaje przy wersji, która obowiązywała w chwili jego rozpoczęcia, więc publikacja w trakcie rozmowy jej nie zmienia. Połączenia testowe z panelu używają wersji roboczej.
GET /agents/{id}/versions wyświetla wersje, a POST /agents/{id}/versions/{version}/restore cofa zmiany: nowe połączenia używają tej wersji, a wersja robocza się nią staje. Nazwa agenta, wdrożenie, wygląd widżetu i powiadomienia nie mają wersji i zmieniają się od razu, podobnie jak dokumenty jego bazy wiedzy.