I ett webbsamtal (widgeten, den värdade sidan, din app) ser uppringaren en chatt bredvid rösten, så att agenten kan göra mer än att tala. Den som ringer via telefon får inget av detta.
Slå på Agent → Verktyg → Skicka till uppringaren (send_to_caller i agent-API:et) så kan agenten visa upp till fem kort åt gången på uppringarens skärm: en rubrik, en rad under, en beskrivning, en bild, en länk och upp till två svarsknappar var; den kan också erbjuda upp till tre snabbsvar under en fråga. Länkar läses aldrig upp.
Agenten får bara skicka länkar och bilder som den fått i just det samtalet: dess instruktioner och hälsning, kunskapsbasen (ett dokument som lästs från en webbsida bär dess adress), svaren från dina funktioner och de färdiga korten. En länk måste dessutom finnas bland allowed_hosts (ett färdigt korts egen webbplats gör det alltid). Länkar som agenten hittar på, eller som uppringaren läser upp, skickas inte. Länkar till de webbplatserna i agentens ord går att klicka 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": "" }
]
}
Varje utskick skickas till dig som webhooken call.message_sent (channel, items med title och url, quickReplies, blocked). Ett samtal skickar högst 10 gånger.
Under samtalet kan uppringaren också skriva (en e-postadress, ett ordernummer) eller knacka på en svarsknapp; agenten svarar på det som på tal och slutar först tala om den pratade. Upp till 500 tecken per meddelande, ett per sekund, 100 per samtal. I samtalsposten är dessa turer markerade som skrivna eller knackade.
Besökare kan också börja med att skriva i stället för att prata: widgeten och den värdade sidan erbjuder båda, eller bara det ena om du väljer det under Agent → Deploy. Ett skrivet samtal har ingen röst och debiteras per meddelande. Använd Chat API för att chatta med en agent från din egen server.
Widgeten ger din sida ett evasay-objekt. Allt är valfritt, och samtalsramen lyssnar bara på din sida om den är en av widgetens tillåtna webbplatser (Agent → Driftsätt):
<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 fyller {{name}} i instruktionerna och hälsningen. De kommer från besökarens webbläsare, så agenten får veta att de inte är verifierade, och de når aldrig dina funktioner eller startuppslaget.update berättar för agenten vad som händer på sidan utan att få den att svara; en nyare uppdatering med samma key ersätter den äldre."kind": "page", ingen url) på agenten och registrera en funktion med samma namn på din sida. Agenten får bara anropa den i samtal från en sida som registrerat den; den väntar upp till timeout_sec (1–10, standard 5) på svaret om inte wait_for_result är false. Den körs inloggad som besökaren, som ett klick av dem: be om bekräftelse på din egen sida före allt som kostar pengar eller inte går att ångra. Länkar i dess svar kan skickas som kort.Sätt Vem som kan starta ett samtal till Bara med en token, och låt din server hämta en engångstoken för den inloggade användaren:
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 innehåller token (ett samtal, inom expires_in sekunder, 30–3600, standard 600), agent (sluggen) och web_call_url. Ge token till sidan med data-token-url="/your/endpoint" på widgetens skript (den POST:ar dit med besökarens cookies och läser { "token": "…" }) eller med agent.setToken(async () => token). Tokenens variables är verifierade: instruktionerna, startuppslaget och dina funktioners mallar får använda dem, liksom user_id, som samtalet behåller (userId i samtalet, user_id för att filtrera samtal). Behåll din API-nyckel på din server.
I din egen app, POST:a { "token": "…", "pageTools": ["add_to_cart"] } till https://evasay.com + web_call_url. Svaret är samtalets anslutning (en WebRTC-offeradress, eller en WebSocket-adress, med sin samtalstoken), för en RTVI-klient som Pipecats klient-SDK; för iOS, Android och React Native, se Mobilappar. Kort, sidfunktioner och meddelanden kommer som RTVI server-message (evasay.cards, evasay.tool, evasay.notice); skicka skrivna ord med send-text och sidans rapporter och svar som client-message evasay.context och evasay.tool_result. Eller för över ljudet själv med Ljud över en WebSocket, med user_id och page_tools.