يحدد توصيل الطلب واجهة المحادثة الخاصة بالإجراء الذي يتم تنفيذه للحصول على إدخال المستخدم ومنطق معالجة الإدخال وتنفيذه في النهاية.
تحديد محادثتك
الآن بعد أن تم تحديد الإجراءات، يمكنك إنشاء المحادثة المقابلة لهذه الإجراءات. ويمكنك إجراء ذلك من خلال إنشاء نوايا Dialogflow التي تحدّد القواعد اللغوية أو ما يحتاجه المستخدمون لقول نية الشراء والاستجابة المقابلة لها بهدف معالجة النية بالشراء عند تشغيلها.
يمكنك إنشاء أي عدد تريده من عناصر intent لتحديد قاعدة المحادثة بأكملها.
إنشاء أغراض
انقر على علامة + بجانب عنصر القائمة Intent في شريط التنقّل الأيمن في Dialogflow. يظهر "محرِّر intent" حيث يمكنك إدخال المعلومات التالية:
- اسم intent هو اسم الغرض الذي يتم عرضه في IDE.
- تتيح لك السياقات إمكانية توسيع نطاق الغرض من الشراء في حالات محدّدة. اطّلِع على مستندات Dialogflow حول السياقات للحصول على المزيد من المعلومات.
- تؤدي الأحداث إلى ظهور نيّات بدون الحاجة إلى قول أي مستخدم. ومثال على ذلك هو الحدث
GOOGLE_ASSISTANT_WELCOME
الذي يسمح لـ "مساعد Google" باستدعاء الإجراء الذي أجريته. يُستخدم هذا الحدث في الإجراء التلقائي للإجراء. يمكنك الرجوع إلى المحتوى الذي نوفّره للحصول على مزيد من المعلومات حول النيّة المضمّنة للمساعدة. - عبارات التدريب تحدّد ما يجب أن يقوله المستخدمون (القواعد النحوية) لتشغيل النية. اكتب بعض العبارات هنا (5-10) عما يقوله المستخدمون لتشغيل القصد. وتعالج Dialogflow تلقائيًا الصيغ الطبيعية للأمثلة التي تقدّمها.
تُحدِّد الإجراء والمعلّمات البيانات التي سيتم تمريرها إلى التنفيذ، في حال تم تفعيل التنفيذ لذلك الغرض. ويشمل ذلك البيانات التي تم تحليلها من إدخال المستخدم والاسم الذي يمكنك استخدامه في توصيل الطلب لمعرفة النية التي تم تشغيلها. ستستخدم هذا الاسم لاحقًا لربط قصدك بمنطق توصيل الطلب المقابل. اطّلِع على الإجراءات والمعلّمات في مستندات Dialogflow للحصول على مزيد من المعلومات عن تحديد الإجراءات.
الردود هي أداة إنشاء الردود على Dialogflow حيث يمكنك تحديد الرد على هذا الغرض مباشرةً من داخل Dialogflow بدون طلب تنفيذ. وهذه الميزة مفيدة للردود الثابتة التي لا تتطلّب توصيل الطلب. يمكنك استخدام هذا الإجراء لعرض رسائل ترحيب بسيطة أو وداعًا. ومع ذلك، من المرجح أنك ستعمل على تنفيذ الطلبات للرد على المستخدمين في معظم النوايا.
يحدّد الخيار توصيل الطلب ما إذا كنت تريد استدعاء توصيل الطلب أم لا عند تشغيل هذا الهدف. ستتمكّن على الأرجح من تفعيل هذه الميزة لمعظم النية في وكيل Dialogflow. للاطّلاع على هذا العنصر الهدف، يجب تفعيل طريقة توفّر الوكيل في قائمة توصيل الطلب.
إنشاء الردود في Dialogflow
بالنسبة إلى بعض الأهداف، قد لا تحتاج إلى عرض توصيل الطلب. في هذه الحالات، يمكنك استخدام أداة إنشاء الردود في Dialogflow لإنشاء الردود.
في قسم الردود، قدّم الرد النصي الذي تريد عرضه للمستخدمين. الردود النصية التلقائية هي استجابات نصية بسيطة بتنسيق TTS يمكن أن تعمل في عمليات دمج Dialogflow متعددة. يتم وصف الردود على "مساعد Google" في صفحة الردود.
الإجابة عن أسئلة توصيل الطلبات
تتم استضافة رمز التنفيذ الخاص بك في منطق توصيل الرد التلقائي على الويب لأحد الإجراءات.
على سبيل المثال، في نموذج Silly Name Maker،
يمكن العثور على هذا المنطق في index.js
لوظيفة السحابة الإلكترونية لبرنامج Firebase.
عند ظهور نية استخدام الطلبات، ستتلقّى طلبًا من Dialogflow يحتوي على معلومات عن الغرض. بعد ذلك، يمكنك الردّ على الطلب من خلال معالجة النية بالشراء وعرض ردّ. يتم تحديد هذا الطلب والاستجابة من خلال الرد التلقائي على الويب في Dialogflow.
ننصحك بشدة باستخدام مكتبة برامج Node.js لمعالجة الطلبات وعرض الردود. في ما يلي العملية العامة لاستخدام "مكتبة العميل":
- إعداد عنصر Dialogflow. يعالج هذا الكائن تلقائيًا الاستماع إلى الطلبات وتحليلها حتى تتمكّن من معالجتها في توصيل الطلبات.
- إنشاء دوال للتعامل مع الطلبات. وتعالج هذه الدوال البيانات التي يدخلها المستخدم ومكوّنات أخرى من النية بالشراء وإنشاء الاستجابة للعودة إلى Dialogflow.
إعداد الكائن Dialogflow
يُنشئ الرمز التالي مثيل Dialogflow
ويُجري بعض إعداد نموذجي Node.js لدوال Google Cloud:
'use strict'; const {dialogflow} = require('actions-on-google'); const functions = require('firebase-functions'); const app = dialogflow({debug: true}); app.intent('Default Welcome Intent', (conv) => { // Do things }); exports.yourAction = functions.https.onRequest(app);
public class DfFulfillment extends DialogflowApp { private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class); @ForIntent("Default Welcome Intent") public ActionResponse welcome(ActionRequest request) { // Do things // ... }
إنشاء دوال للتعامل مع الطلبات
عندما يقول المستخدمون عبارة تؤدّي إلى إنشاء هدف، ستتلقّى طلبًا من Dialogflow يمكنك التعامل معه باستخدام وظيفة في طريقة التنفيذ. في هذه الوظيفة، ستُجري بشكل عام الإجراءات التالية:
- تنفيذ أي منطق مطلوب لمعالجة إدخال المستخدم
- يمكنك إنشاء ردودك استجابةً لنوايا الشراء. ضَع في اعتبارك مساحة الاستخدام التي يستخدمها المستخدمون لإنشاء الردود المناسبة. يمكنك الاطّلاع على إمكانات العرض للحصول على مزيد من المعلومات حول طريقة تقديم الردود على مساحات العرض المختلفة.
- يمكنك استدعاء الدالة
ask()
للردّ.
يعرض لك الرمز التالي كيفية إنشاء ردَّيinput.welcome
input.number
const app = dialogflow(); app.intent('Default Welcome Intent', (conv) => { conv.ask('Welcome to number echo! Say a number.'); }); app.intent('Input Number', (conv, {num}) => { // extract the num parameter as a local string variable conv.close(`You said ${num}`); });
@ForIntent("Default Welcome Intent") public ActionResponse defaultWelcome(ActionRequest request) { ResponseBuilder rb = getResponseBuilder(request); rb.add("Welcome to number echo! Say a number."); return rb.build(); } @ForIntent("Input Number") public ActionResponse inputNumber(ActionRequest request) { ResponseBuilder rb = getResponseBuilder(request); Integer number = (Integer) request.getParameter("num"); rb.add("You said " + number.toString()); return rb.endConversation().build(); }
يستخدم هدف رقم الإدخال المخصّص، الذي يصاحب الرمز أعلاه،
كيان @sys.number
لاستخراج رقم من كلام المستخدمين. بعد ذلك، يتم إرسال المعلمة num
التي تحتوي على الرقم من المستخدم إلى الدالة في طريقة التنفيذ.
بدلاً من استخدام معالجات فردية لكل هدف، يمكنك بدلاً من ذلك إضافة دالة احتياطية. داخل الدالة الاحتياطية، تحقَّق من النية بالشراء التي شغّلتها ونفِّذ الإجراء المناسب وفقًا لذلك.
const WELCOME_INTENT = 'Default Welcome Intent'; const NUMBER_INTENT = 'Input Number'; const NUMBER_PARAMETER = 'num'; // you can add a fallback function instead of a function for individual intents app.fallback((conv) => { // intent contains the name of the intent // you defined in the Intents area of Dialogflow const intent = conv.intent; switch (intent) { case WELCOME_INTENT: conv.ask('Welcome! Say a number.'); break; case NUMBER_INTENT: const num = conv.parameters[NUMBER_PARAMETER]; conv.close(`You said ${num}`); break; } });
// you can add a fallback function instead of a function for individual intents @ForIntent("Default Fallback Intent") public ActionResponse fallback(ActionRequest request) { final String WELCOME_INTENT = "Default Welcome Intent"; final String NUMBER_INTENT = "Input Number"; final String NUMBER_ARGUMENT = "num"; // intent contains the name of the intent // you defined in the Intents area of Dialogflow ResponseBuilder rb = getResponseBuilder(request); String intent = request.getIntent(); switch (intent) { case WELCOME_INTENT: rb.add("Welcome! Say a number."); break; case NUMBER_INTENT: Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT); rb.add("You said " + num).endConversation(); break; } return rb.build(); }
إعادة تقديم المحتوى المطابق بدون مطابقة
عندما يتعذّر على Dialogflow تتطابق مع أي من القواعد النحوية المدخلة المحدّدة في عبارات التدريب الخاصة بالقصد، يؤدي ذلك إلى ظهور هدف احتياطي. عادةً ما تطلب من النُسخ الاحتياطية المستخدم تقديم المعلومات اللازمة لإجراءك. ويمكنك تقديم عبارات فورية من خلال تحديدها في قسم الردّ حسب النية بالشراء أو يمكنك استخدام ردّ تلقائي على الويب لتقديم الردود.
عندما لا يتطابق ردّ المستخدم مع عبارات التدريب المخصّصة للإجراءات التي تتخذها، يحاول "مساعد Google" التعامل مع الإدخال. وهذا السلوك يسهّل على المستخدمين تغيير الإجراءات في منتصف المحادثة. على سبيل المثال، يسأل المستخدم "ما الأفلام التي سيتم عرضها هذا الأسبوع؟" ثم يغيّر السياق في منتصف المحادثة: "ما حالة الطقس غدًا؟" في هذا المثال، وبما أنّ "ما حالة الطقس غدًا؟" ليس استجابة صالحة للمحادثة التي تم تشغيلها من خلال الإشعار الأولي، سيحاول "مساعد Google" تلقائيًا التعامل مع المطابقة ونقل المستخدم إلى محادثة مناسبة.
إذا تعذّر على "مساعد Google" العثور على إجراء مناسب يطابق إدخال المستخدم، يتم إرجاع المستخدم إلى سياق الإجراء.
بما أنّ "مساعد Google" قد يقيّف الإجراء الذي تقدّمه للاستجابة لسيناريوهات صالحة غير مطابقة، لا تستخدم عناصر intent الاحتياطية كطريقة لتلبية طلبات المستخدم. يجب عدم استخدام عناصر نيّة احتياطية إلّا لإعادة إرسال إشعار إلى المستخدم بشأن معلومات صالحة.
لإنشاء هدف احتياطي:
- انقر على الأهداف في قائمة التنقّل في Dialogflow.
- انقر على ⋮ بجانب إنشاء نية شراء واختَر إنشاء نية احتياطية. (بدلاً من ذلك، انقر على الحِزمة الاحتياطية التلقائية لتعديلها).
يمكنك تحديد العبارات التي قدّمتها للتحدّث إلى المستخدمين. ويجب أن تكون هذه العبارات محادثة مباشرة وأن تكون مفيدة قدر الإمكان للسياق الحالي للمستخدم.
لتنفيذ هذا الإجراء بدون توفير الطلب: حدِّد العبارات في قسم الردّ من النية بالشراء. ويختار Dialogflow عشوائيًا العبارات الواردة من هذه القائمة للتواصل مع المستخدمين حتى يتم تحديد نيّة محدَّدة أكثر.
لتنفيذ ذلك مع توصيل الطلب:
- إيقاف/تفعيل تفعيل الردّ التلقائي على الويب لهذا الغرض في قسم النية بالشراء <ul classmentment
- في منطقك الخاص بتنفيذ الطلبات، يمكنك التعامل مع الغرض الاحتياطي مثل أي نوايا أخرى، كما هو موضّح في القسم إنشاء دوال للتعامل مع الطلبات.
على سبيل المثال، تستخدِم الدالة التالية العنصر
conv.data
(حِمل بيانات عشوائي يمكنك استخدامه للحفاظ على الحالة) من مكتبة برامج Node.js لتخزين عدّاد يتتبّع عدد مرات تشغيل هدف احتياطي. في حال تشغيله أكثر من مرة، يتم إنهاء الإجراء. على الرغم من أنّه لا يظهر في الرمز، عليك ضبط أهداف أخرى على إعادة ضبط العدّاد على 0 عندما يتمّ تشغيل هدف غير احتياطي. (راجِع نموذج Genie للحصول على تفاصيل حول كيفية تنفيذ ذلك).Node.js app.intent('Default Fallback Intent', (conv) => { conv.data.fallbackCount++; // Provide two prompts before ending game if (conv.data.fallbackCount === 1) { conv.contexts.set(DONE_YES_NO_CONTEXT, 5); conv.ask('Are you done playing Number Genie?'); } else { conv.close(`Since I'm still having trouble, so I'll stop here. ` + `Let's play again soon.`); } });
JavaScript @ForIntent("Default Fallback Intent") public ActionResponse defaultFallback(ActionRequest request) { final String DONE_YES_NO_CONTEXT = "done_yes_no_context"; ResponseBuilder rb = getResponseBuilder(request); int fallbackCount = request.getConversationData().get("fallbackCount") == null ? 0 : (Integer) request.getConversationData().get("fallbackCount"); fallbackCount++; request.getConversationData().put("fallbackCount", fallbackCount); if (fallbackCount == 1) { rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5)); rb.add("Are you done playing Number Genie?"); } else { rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon") .endConversation(); } return rb.build(); }
- إيقاف/تفعيل تفعيل الردّ التلقائي على الويب لهذا الغرض في قسم النية بالشراء <ul classmentment
استخدام السياقات
استخدِم السياقات إذا أردت أن يؤدي Dialogflow إلى تشغيل أهداف احتياطية في حالات معيّنة فقط. ويكون هذا مفيدًا إذا كنت تريد أن يكون لديك نيّات احتياطية مختلفة لسيناريوهات مختلفة من عدم المطابقة.
- إذا لم تحدّد سياقات حسب نيّة احتياطية، سيُعتبَر هذا الهدف هدفًا احتياطيًا عامًا يتم عرضه في Dialogflow عندما لا تتطابق أي نيّة أخرى. يجب أن يكون لديك واحد فقط من الخيارات المحددة إذا اخترت استخدام واحدة.
في حال ضبط سياقات إدخال نيّة احتياطية، يبدأ Dialogflow هذا النُسخ الاحتياطي في الحالات التالية:
- إنّ السياقات الحالية للمستخدم هي السمة الشاملة للسياقات المحدّدة في النية.
- ما مِن تطابقات أخرى حسب النية بالشراء.
يتيح لك هذا الإجراء استخدام عناصر نيّة احتياطية متعدّدة مع سياقات إدخال مختلفة لتخصيص الرسالة التي لا تنطبق على المحتوى المطابق لسيناريوهات معيّنة.
وفي حال ضبط سياق مخرجات لنية احتياطية، تحتفظ بالمستخدم في السياق نفسه بعد بدء القصد الاحتياطي ومعالجته.
لمزيد من المعلومات، اطّلِع على سياقات Dialogflow.
إعادة العرض بدون إدخال
يمكنك الانتقال إلى صفحة الإشعارات للحصول على تفاصيل حول كيفية التعامل عندما لا يقدّم المستخدم معلومات إضافية على جهاز صوتي مثل Google Home يتطلب تفاعلاً مستمرًا.