Ved et webopkald (widgetten, den hostede side, din app) ser opringeren en chat ved siden af stemmen, så agenten kan mere end at tale. Opringere i telefonen får intet af dette.
Slå Agent → Værktøjer → Send til opkalderen til (send_to_caller i agent-API'et), så kan agenten lægge op til fem kort ad gangen på opringerens skærm: en titel, en linje under, en beskrivelse, et billede, et link og op til to svarknapper hver; den kan også tilbyde op til tre hurtige svar under et spørgsmål. Links læses aldrig højt.
Agenten må kun sende links og billeder, den har fået i det opkald: dens instruktioner og hilsen, vidensbasen (et dokument læst fra en webside bærer dens adresse), svarene fra dine funktioner og de færdige kort. Et link skal desuden være på en af allowed_hosts (et færdigt korts eget websted er det altid). Links, agenten finder på, eller som opringeren læser højt, sendes ikke. Links til de websteder i agentens ord kan klikkes på i chatten.
"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": "" }
]
}
Hver afsendelse sendes til dig som webhooken call.message_sent (channel, items med title og url, quickReplies, blocked). Et opkald sender højst 10 gange.
Under opkaldet kan opringeren også skrive (en e-mailadresse, et ordrenummer) eller trykke på en svarknap; agenten svarer på det som på tale og stopper først, hvis den talte. Op til 500 tegn pr. besked, én i sekundet, 100 pr. opkald. I opkaldsposten er disse ture markeret som skrevne eller tappede.
Besøgende kan også starte med at skrive i stedet for at tale: widgetten og den hostede side tilbyder begge dele, eller kun den ene, hvis du vælger det under Agent → Deploy. En skrevet samtale har ingen stemme og afregnes pr. besked. Brug Chat API til at chatte med en agent fra din egen server.
Widgetten giver din side et evasay-objekt. Alt er valgfrit, og opkaldsrammen lytter kun til din side, hvis den er et af widgettens tilladte websteder (Agent → Udrul):
<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 udfylder {{name}} i instruktionerne og hilsenen. De kommer fra den besøgendes browser, så agenten får at vide, at de ikke er verificerede, og de når aldrig dine funktioner eller startopslaget.update fortæller agenten, hvad der sker på siden, uden at få den til at svare; en nyere opdatering med samme key erstatter den ældre."kind": "page", ingen url) til agenten, og registrer en funktion med samme navn på din side. Agenten må kun kalde den ved opkald fra en side, der har registreret den; den venter op til timeout_sec (1–10, standard 5) på svaret, medmindre wait_for_result er false. Den kører logget ind som den besøgende, som et klik fra dem: bed om bekræftelse på din egen side før alt, hvad der koster penge eller ikke kan fortrydes. Links i dens svar kan sendes som kort.Sæt Hvem der kan starte et opkald til Kun med et token, og lad din server hente et engangstoken til den loggede bruger:
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 }'
Svaret indeholder token (ét opkald, inden for expires_in sekunder, 30–3600, standard 600), agent (sluggen) og web_call_url. Giv tokenet til siden med data-token-url="/your/endpoint" på widgettens script (den POST'er dertil med den besøgendes cookies og læser { "token": "…" }) eller med agent.setToken(async () => token). Tokenets variables er verificerede: instruktionerne, startopslaget og dine funktioners skabeloner må bruge dem, ligesom user_id, som opkaldet beholder (userId i opkaldet, user_id til at filtrere opkald). Behold din API-nøgle på din server.
I din egen app POST'er du { "token": "…", "pageTools": ["add_to_cart"] } til https://evasay.com + web_call_url. Svaret er opkaldets forbindelse (en WebRTC-tilbudsadresse eller en WebSocket-adresse med sit opkaldstoken) til en RTVI-klient som Pipecats klient-SDK; til iOS, Android og React Native, se Mobilapps. Kort, sidefunktioner og meddelelser kommer som RTVI server-message (evasay.cards, evasay.tool, evasay.notice); send skrevne ord med send-text og sidens meldinger og svar som client-message evasay.context og evasay.tool_result. Eller før lyden selv med Lyd over en WebSocket, med user_id og page_tools.