Bir web aramasında (widget, barındırılan sayfa, uygulamanız) arayan sesin yanında bir sohbet görür, böylece ajan konuşmaktan fazlasını yapabilir. Telefondan arayanlar bunların hiçbirini görmez.
Ajan → Araçlar → Arayana gönder seçeneğini açın (ajan API'sinde send_to_caller) ve ajan arayanın ekranına aynı anda en fazla beş kart koyabilsin: bir başlık, altında bir satır, bir açıklama, bir resim, bir bağlantı ve her birinde en fazla iki yanıt düğmesi; bir sorunun altında en fazla üç hızlı yanıt da sunabilir. Bağlantılar asla sesli okunmaz.
Ajan yalnızca o aramada kendisine verilen bağlantıları ve resimleri gönderebilir: talimatları ve karşılama, bilgi tabanı (bir web sayfasından okunan belge o sayfanın adresini taşır), fonksiyonlarınızın yanıtları ve hazır kartlar. Ayrıca bağlantı allowed_hosts içindeki sitelerden birinde olmalıdır (hazır bir kartın kendi sitesi her zaman olur). Ajanın uydurduğu veya arayanın sesli okuduğu bağlantılar gönderilmez. Ajanın sözlerindeki bu sitelere giden bağlantılar sohbette tıklanabilir.
"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": "" }
]
}
Her gönderim size call.message_sent webhook'u olarak iletilir (channel, title ve url içeren items, quickReplies, blocked). Bir arama en fazla 10 kez gönderim yapar.
Arama sırasında arayan yazabilir (bir e-posta adresi, bir sipariş numarası) veya bir yanıt düğmesine dokunabilir; ajan buna konuşmaya yanıt verir gibi yanıt verir, konuşuyorsa önce durur. Mesaj başına en fazla 500 karakter, saniyede bir, arama başına 100. Arama kaydında bu turlar yazılmış veya dokunulmuş olarak işaretlenir.
Ziyaretçiler konuşmak yerine yazarak da başlayabilir: widget ve barındırılan sayfa ikisini de sunar ya da Agent → Deploy bölümünde seçerseniz yalnızca birini. Yazılı konuşmada ses yoktur ve mesaj başına ücretlendirilir. Kendi sunucunuzdan bir ajanla sohbet etmek için Chat API'yi kullanın.
Widget sayfanıza bir evasay nesnesi verir. Her şey isteğe bağlıdır ve arama çerçevesi sayfanızı yalnızca widget'ın izin verilen web sitelerinden biriyse dinler (Ajan → Dağıt):
<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 değerleri talimatlardaki ve karşılamadaki {{name}} yer tutucusunu doldurur. Ziyaretçinin tarayıcısından gelirler; bu yüzden ajana doğrulanmadıkları söylenir ve fonksiyonlarınıza veya başlangıç sorgusuna asla ulaşmazlar.update, ajanı yanıt vermeye zorlamadan sayfada ne olduğunu ona bildirir; aynı key ile gelen daha yeni bir güncelleme eskisinin yerini alır."kind": "page", url yok) bir fonksiyon ekleyin ve sayfanızda aynı adı taşıyan bir fonksiyon kaydedin. Ajan onu yalnızca kaydetmiş bir sayfadan gelen aramalarda çağırabilir; wait_for_result değeri false değilse yanıtı en fazla timeout_sec (1–10, varsayılan 5) bekler. Ziyaretçi olarak oturum açmış biçimde çalışır, tıpkı onun kendi tıklaması gibi: para harcatan veya geri alınamayan herhangi bir şeyden önce kendi sayfanızda onay isteyin. Yanıtındaki bağlantılar kart olarak gönderilebilir.Kimler arama başlatabilir ayarını Yalnızca token ile yapın ve sunucunuzun oturum açmış kullanıcı için tek kullanımlık bir token almasını sağlayın:
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 }'
Yanıtta token (bir arama, expires_in saniye içinde, 30–3600, varsayılan 600), agent (slug) ve web_call_url bulunur. Token'ı sayfaya widget betiğindeki data-token-url="/your/endpoint" ile (ziyaretçinin çerezleriyle oraya POST eder ve { "token": "…" } okur) ya da agent.setToken(async () => token) ile verin. Token'ın variables değerleri doğrulanmıştır: talimatlar, başlangıç sorgusu ve fonksiyonlarınızın şablonları bunları kullanabilir; aramanın sakladığı user_id de öyle (aramada userId, aramaları süzmek için user_id). API anahtarınızı sunucunuzda tutun.
Kendi uygulamanızda { "token": "…", "pageTools": ["add_to_cart"] } verisini https://evasay.com + web_call_url adresine POST edin. Yanıt, aramanın bağlantısıdır (bir WebRTC teklif adresi veya arama token'ıyla bir WebSocket adresi); Pipecat'in istemci SDK'sı gibi bir RTVI istemcisi içindir. iOS, Android ve React Native için Mobil uygulamalar sayfasına bakın. Kartlar, sayfa fonksiyonları ve bildirimler RTVI server-message olarak gelir (evasay.cards, evasay.tool, evasay.notice); yazılan sözcükleri send-text ile, sayfa bildirimlerini ve yanıtlarını evasay.context ve evasay.tool_result adlı client-message olarak gönderin. Ya da sesi kendiniz WebSocket üzerinden ses bölümündeki gibi, user_id ve page_tools ileterek taşıyın.