בשיחת אינטרנט (הווידג'ט, הדף המאוחסן, האפליקציה שלכם) המתקשר רואה צ'אט לצד הקול, ולכן הסוכן יכול לעשות יותר מלדבר. מתקשרים בטלפון אינם מקבלים דבר מזה.
הפעילו סוכן ← כלים ← שליחה למתקשר (send_to_caller ב-API של הסוכן) והסוכן יוכל להציג עד חמישה כרטיסים בו-זמנית על מסך המתקשר: כותרת, שורה מתחתיה, תיאור, תמונה, קישור ועד שני כפתורי תשובה בכל אחד; הוא יכול גם להציע עד שלוש תשובות מהירות מתחת לשאלה. קישורים אינם מוקראים לעולם.
הסוכן רשאי לשלוח רק קישורים ותמונות שניתנו לו באותה שיחה: ההוראות והברכה שלו, מאגר הידע (מסמך שנקרא מדף אינטרנט נושא את כתובתו), תשובות הפונקציות שלכם והכרטיסים המוכנים. קישור חייב גם להיות באחד מ-allowed_hosts (האתר של כרטיס מוכן תמיד מותר). קישורים שהסוכן ממציא, או שהמתקשר מקריא, לא נשלחים. קישורים לאתרים האלה בדברי הסוכן ניתנים ללחיצה בצ'אט.
"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": "" }
]
}
כל שליחה נשלחת אליכם כ-Webhook בשם call.message_sent (channel, items עם title ו-url, quickReplies, blocked). שיחה שולחת לכל היותר 10 פעמים.
במהלך השיחה המתקשר יכול גם להקליד (כתובת דוא"ל, מספר הזמנה) או להקיש על כפתור תשובה; הסוכן עונה על כך כמו על דיבור, ועוצר קודם אם דיבר. עד 500 תווים להודעה, אחת בשנייה, 100 לשיחה. ברשומת השיחה התורות האלה מסומנים כמוקלדים או כמוקשים.
מבקרים יכולים גם להתחיל בהקלדה במקום בדיבור: הווידג׳ט והדף המתארח מציעים את שתי האפשרויות, או רק אחת מהן אם בוחרים בכך ב‑Agent ← Deploy. שיחה מוקלדת היא בלי קול ומחויבת לפי הודעה. כדי לשוחח עם סוכן מהשרת שלכם, השתמשו ב‑Chat API.
הווידג'ט נותן לדף שלכם אובייקט evasay. הכול אופציונלי, ומסגרת השיחה מאזינה לדף שלכם רק אם הוא אחד מהאתרים המותרים של הווידג'ט (סוכן ← פריסה):
<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 ממלאים את {{name}} בהוראות ובברכה. הם מגיעים מהדפדפן של המבקר, ולכן הסוכן מקבל הודעה שאינם מאומתים, והם אף פעם לא מגיעים לפונקציות שלכם או לחיפוש ההתחלה.update מספר לסוכן מה קורה בדף בלי לגרום לו לענות; עדכון חדש יותר עם אותו key מחליף את הישן."kind": "page", ללא url) ורשמו בדף שלכם פונקציה באותו שם. הסוכן רשאי לקרוא לה רק בשיחות מדף שרשם אותה; הוא ממתין לתשובה עד timeout_sec (1–10, ברירת מחדל 5) אלא אם wait_for_result הוא false. היא רצה בחיבור של המבקר, כמו לחיצה שלו: בקשו אישור בדף שלכם לפני כל דבר שעולה כסף או שאי אפשר לבטל. קישורים בתשובתה יכולים להישלח ככרטיסים.הגדירו את מי יכול להתחיל שיחה ל-רק עם אסימון, והשרת שלכם ישיג אסימון חד-פעמי עבור המשתמש המחובר:
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 }'
התשובה כוללת token (שיחה אחת, תוך expires_in שניות, 30–3600, ברירת מחדל 600), agent (ה-slug) ו-web_call_url. העבירו את האסימון לדף עם data-token-url="/your/endpoint" על הסקריפט של הווידג'ט (הוא שולח לשם POST עם העוגיות של המבקר וקורא { "token": "…" }) או עם agent.setToken(async () => token). ה-variables של האסימון מאומתים: ההוראות, חיפוש ההתחלה ותבניות הפונקציות שלכם רשאים להשתמש בהם, וכך גם ב-user_id ששיחה שומרת (userId בשיחה, user_id לסינון שיחות). שמרו את מפתח ה-API שלכם בשרת שלכם.
באפליקציה שלכם שלחו POST עם { "token": "…", "pageTools": ["add_to_cart"] } אל https://evasay.com + web_call_url. התשובה היא חיבור השיחה (כתובת הצעה של WebRTC, או כתובת WebSocket, עם אסימון השיחה שלה), עבור לקוח RTVI כמו ערכת ה-SDK ללקוח של Pipecat; עבור iOS, Android ו-React Native ראו אפליקציות לנייד. כרטיסים, פונקציות דף והודעות מגיעים כהודעות RTVI מסוג server-message (evasay.cards, evasay.tool, evasay.notice); שלחו מילים מוקלדות עם send-text ודיווחים ותשובות של הדף כהודעות client-message בשמות evasay.context ו-evasay.tool_result. או העבירו את השמע בעצמכם באמצעות שמע דרך WebSocket, עם user_id ו-page_tools.