Egy webes hívásnál (a widget, a tárolt oldal, az alkalmazásod) a hívó a hang mellett egy csevegést lát, így az ügynök többet tehet a beszédnél. A telefonos hívók ebből semmit sem kapnak.
Kapcsold be az Ügynök → Eszközök → Küldés a hívónak beállítást (send_to_caller az ügynök API-ban), és az ügynök egyszerre legfeljebb öt kártyát tehet a hívó képernyőjére: címet, alatta egy sort, leírást, képet, hivatkozást és mindegyiken legfeljebb két válaszgombot; egy kérdés alá legfeljebb három gyorsválaszt is felkínálhat. A hivatkozásokat soha nem olvassa fel.
Az ügynök csak olyan hivatkozásokat és képeket küldhet, amelyeket abban a hívásban kapott: az utasításait és az üdvözlését, a tudásbázist (egy weboldalról beolvasott dokumentum hordozza az oldal címét), a függvényeid válaszait és a kész kártyákat. A hivatkozásnak ezenkívül az allowed_hosts egyikén kell lennie (a kész kártya saját webhelye mindig az). Az ügynök által kitalált, vagy a hívó által felolvasott hivatkozásokat nem küldi el. Az ügynök szavaiban az ezekre a webhelyekre mutató hivatkozások kattinthatók a csevegésben.
"send_to_caller": {
"enabled": true,
"allowed_hosts": ["shop.example.com", "*.cdn.example.com"],
"presets": [
{ "name": "hours", "when": "asked when we open", "title": "Opening hours",
"description": "Mon–Sat 9:00–18:00", "url": "https://shop.example.com/stores", "image_url": "" }
]
}
Minden küldés a call.message_sent webhookként érkezik hozzád (channel, items a title és url mezőkkel, quickReplies, blocked). Egy hívás legfeljebb 10-szer küldhet.
A hívás során a hívó gépelhet is (e-mail-címet, rendelésszámot), vagy megérinthet egy válaszgombot; az ügynök úgy válaszol rá, mint a beszédre, előbb abbahagyva, ha éppen beszélt. Üzenetenként legfeljebb 500 karakter, másodpercenként egy, hívásonként 100. A hívásnaplóban ezek a fordulók begépeltként vagy megérintettként vannak megjelölve.
A látogatók beszéd helyett gépeléssel is kezdhetnek: a widget és a hosztolt oldal mindkettőt kínálja, vagy csak az egyiket, ha így állítja be az Agent → Deploy alatt. A gépelt beszélgetésnek nincs hangja, és üzenetenként számlázzuk. Ha a saját szerveréről szeretne egy ügynökkel csevegni, használja a Chat API-t.
A widget egy evasay objektumot ad az oldaladnak. Minden opcionális, és a hívás kerete csak akkor hallgat az oldaladra, ha az a widget engedélyezett webhelyeinek egyike (Ügynök → Telepítés):
<script src="https://evasay.com/voice-widget.js" data-agent="AGENT_SLUG" async></script>
<script>
window.evasay = window.evasay || [];
evasay.push(function (agent) {
agent.setVariables({ plan: 'pro', page: location.pathname }); // for the next call
agent.update('Cart: 2 items, $120', { key: 'cart' }); // during it
agent.registerTool('add_to_cart', async function (args) {
// your code, in the visitor's browser
return { ok: true, checkout: 'https://shop.example.com/checkout' };
});
agent.on('cards', function (cards) {}); // also 'live', 'ended'
});
</script>
setVariables értékei kitöltik a {{name}} helyőrzőt az utasításokban és az üdvözlésben. A látogató böngészőjéből származnak, ezért az ügynök megtudja, hogy nincsenek ellenőrizve, és soha nem jutnak el a függvényeidhez vagy az indítási lekérdezéshez.update közli az ügynökkel, mi történik az oldalon, anélkül hogy válaszra késztetné; ugyanazzal a key értékkel érkező újabb frissítés felváltja a régebbit."kind": "page", url nélkül), és regisztrálj az oldaladon egy azonos nevű függvényt. Az ügynök csak olyan oldalról érkező hívásokban hívhatja, amely regisztrálta; a választ legfeljebb timeout_sec ideig várja (1–10, alapértelmezés 5), kivéve ha a wait_for_result értéke false. A látogató bejelentkezett munkamenetével fut, mint egy saját kattintása: a pénzbe kerülő vagy vissza nem vonható dolgok előtt kérj megerősítést a saját oldaladon. A válaszában szereplő hivatkozások kártyaként elküldhetők.Állítsd a Ki indíthat hívást beállítást Csak tokennel értékre, és a szervered kérjen egyszeri tokent a bejelentkezett felhasználónak:
curl https://evasay.com/api/v1/voice/web-calls \
-X POST \
-H "Authorization: Bearer sk-your-key" \
-H "Content-Type: application/json" \
-d '{ "agent_id": "AGENT_ID", "user_id": "u_42", "variables": { "name": "Ann" }, "expires_in": 600 }'
A válasz tartalmazza a token (egy hívás, expires_in másodpercen belül, 30–3600, alapértelmezés 600), az agent (a slug) és a web_call_url mezőt. Add át a tokent az oldalnak a widget szkriptjén a data-token-url="/your/endpoint" attribútummal (a látogató sütijeivel POST-ol oda, és beolvassa a { "token": "…" } választ) vagy az agent.setToken(async () => token) hívással. A token variables értékei ellenőrzöttek: az utasítások, az indítási lekérdezés és a függvényeid sablonjai használhatják őket, akárcsak a user_id-t, amelyet a hívás megőriz (userId a hívásban, user_id a hívások szűréséhez). Az API-kulcsodat tartsd a szervereden.
A saját alkalmazásodban POST-old a { "token": "…", "pageTools": ["add_to_cart"] } tartalmat a https://evasay.com + web_call_url címre. A válasz a hívás kapcsolata (egy WebRTC-ajánlat címe vagy egy WebSocket-cím a hívástokennel), egy RTVI-klienshez, például a Pipecat kliens-SDK-jához; iOS-hez, Androidhoz és React Native-hez lásd a Mobilalkalmazások oldalt. A kártyák, az oldalfüggvények és az értesítések RTVI server-message üzenetként érkeznek (evasay.cards, evasay.tool, evasay.notice); a begépelt szavakat a send-text üzenettel küldd, az oldal jelentéseit és válaszait pedig client-message üzenetként evasay.context és evasay.tool_result néven. Vagy vidd magad a hangot a Hang WebSocketen keresztül szakasz szerint, a user_id és a page_tools megadásával.