في مكالمة الويب (الودجت أو الصفحة المستضافة أو تطبيقك) يرى المتصل محادثة نصية بجوار الصوت، فيستطيع الوكيل أن يفعل أكثر من الكلام. أما المتصلون عبر الهاتف فلا يحصلون على شيء من ذلك.
فعّل الوكيل ← الأدوات ← الإرسال إلى المتصل (send_to_caller في واجهة الوكيل) فيستطيع الوكيل وضع حتى خمس بطاقات في آن واحد على شاشة المتصل: عنوان وسطر تحته ووصف وصورة ورابط وحتى زرَّي رد في كل بطاقة؛ ويمكنه أيضًا عرض حتى ثلاثة ردود سريعة تحت سؤال. لا تُقرأ الروابط بصوت عالٍ أبدًا.
لا يجوز للوكيل إرسال سوى الروابط والصور التي مُنحت له في تلك المكالمة: تعليماته وتحيته، وقاعدة المعرفة (المستند المقروء من صفحة ويب يحمل عنوانها)، وإجابات دوالك، والبطاقات الجاهزة. ويجب أيضًا أن يكون الرابط ضمن أحد 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.