الاستكشاف في Dialogflow
انقر على متابعة لاستيراد نموذج الخروج من المحادثة في Dialogflow. بعد ذلك، اتّبِع الخطوات أدناه لنشر النموذج واختباره:
- أدخِل اسم وكيل وأنشِئ وكيل Dialogflow جديدًا للنموذج.
- بعد الانتهاء من استيراد الوكيل، انقر على الانتقال إلى الوكيل.
- من قائمة التنقّل الرئيسية، انتقِل إلى توصيل الطلب.
- فعِّل المحرِّر المضمّن، ثم انقر على نشر. يحتوي المحرّر على الرمز النموذجي.
- من قائمة التنقّل الرئيسية، انتقِل إلى عمليات الدمج، ثم انقر على مساعد Google.
- في النافذة المشروطة التي تظهر، فعِّل معاينة التغييرات التلقائية وانقر على اختبار لفتح محاكي الإجراءات.
- في المحاكي، أدخِل
Talk to my test app
لاختبار النموذج.
وعندما يريد المستخدمون الخروج من المحادثة، يمكنهم قول عبارات مثل:
- "خروج"
- "إلغاء"
- "إيقاف"
- "لا مشكلة"
- "الوداع"
يخرج "مساعد Google" تلقائيًا من المحادثة ويشغّل رمز أذن.
ولتجاوز هذا السلوك، يمكنك تفعيل ميزة تلقّي طلب أخير يمكنك استخدامه لتنظيم المنطق وتنفيذ الرد في المرة الأخيرة على المستخدم.
يجب أن يكون الرّد النهائي ردًا بسيطًا
مع عدد 60 حرفًا كحدٍ أقصى في القيمتين textToSpeech
وdisplayText
.
يبلغ الحد الأقصى لوقت التنفيذ المسموح به لطلبات الخروج من المحادثة ثانيتَين. وإذا لم يتم تلقّي أي ردّ، ستنتهي المحادثة باستخدام رمز الخروج التلقائي من المحادثة. إذا تعذّرت الاستجابة المخصّصة للإلغاء (بسبب تجاوز عدد الأحرف المسموح به، نوع الاستجابة غير المناسب، وما إلى ذلك)، ستنتهي المحادثة أيضًا مع رمز الخروج التلقائي.
Dialogflow
لتلقّي أحداث الخروج من المحادثة:
- في شريط التنقّل الأيمن، انقر على الرمز + بجانب عنصر القائمة Intents.
- أدخِل اسمًا حسب النية بالشراء (مثل
Exit Conversation
) وانقر على قسم الأحداث. - أدخِل
actions_intent_CANCEL
في الحقل إضافة حدث. - يمكنك تحديد ردّ ضمن الردّ أو إعداد ردّك الخاص بالقصد من هذا الرمز في رمز الردّ التلقائي على الويب.
- فعِّل تحديد هذا الهدف كنهاية المحادثة.
- انقر على حفظ.
- في شريط التنقل الأيمن، انقر على عمليات الدمج.
- اختَر مساعد Google وانقر على تعديل المسودة، ثم اختبار للتأكّد من ظهور التغييرات في مشروعك.
عندما يطلب المستخدم الخروج من المحادثة، يتم تشغيل الهدف الذي أنشأته ويتم ردّك على المستخدم. على سبيل المثال، في ما يلي بعض رموز تنفيذ الطلبات التي تستخدم مكتبة البرامج للتعامل مع عملية إلغاء النية وعرض ردّ.
Node.js
const {dialogflow} = require('actions-on-google'); const functions = require('firebase-functions'); const app = dialogflow({debug: true}); app.intent('Exit Conversation', (conv) => { conv.close(`Okay, talk to you next time!`); }); exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
Java
package com.example; import com.google.actions.api.ActionRequest; import com.google.actions.api.ActionResponse; import com.google.actions.api.DialogflowApp; import com.google.actions.api.ForIntent; import com.google.actions.api.response.ResponseBuilder; public class MyActionsApp extends DialogflowApp { @ForIntent("Exit Conversation") public ActionResponse exit(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.add("Okay, talk to you next time!"); responseBuilder.endConversation(); return responseBuilder.build(); } }
طلب JSON
يُرجى العِلم أنّ JSON أدناه يصف طلب ردّ تلقائي على الويب.
{ "responseId": "e0c9d47f-aa99-4d03-bd48-a64c79e9c2a2-712767ed", "queryResult": { "queryText": "actions_intent_CANCEL", "parameters": {}, "allRequiredParamsPresent": true, "fulfillmentText": "Webhook failed for intent: Exit Conversation", "fulfillmentMessages": [ { "text": { "text": [ "Webhook failed for intent: Exit Conversation" ] } } ], "outputContexts": [ { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_audio_output" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_media_response_audio" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_account_linking" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_screen_output" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_web_browser" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/google_assistant_input_type_keyboard" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_intent_cancel" } ], "intent": { "name": "projects/df-exits-kohler/agent/intents/b506991f-ad7a-4c4b-8adc-5e6c62727381", "displayName": "Exit Conversation" }, "intentDetectionConfidence": 1, "languageCode": "en" }, "originalDetectIntentRequest": { "source": "google", "version": "2", "payload": { "user": { "locale": "en-US", "userVerificationStatus": "VERIFIED" }, "conversation": { "conversationId": "ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0", "type": "ACTIVE", "conversationToken": "[]" }, "inputs": [ { "intent": "actions.intent.CANCEL", "rawInputs": [ { "inputType": "KEYBOARD", "query": "cancel" } ] } ], "surface": { "capabilities": [ { "name": "actions.capability.AUDIO_OUTPUT" }, { "name": "actions.capability.MEDIA_RESPONSE_AUDIO" }, { "name": "actions.capability.ACCOUNT_LINKING" }, { "name": "actions.capability.SCREEN_OUTPUT" }, { "name": "actions.capability.WEB_BROWSER" } ] }, "availableSurfaces": [ { "capabilities": [ { "name": "actions.capability.SCREEN_OUTPUT" }, { "name": "actions.capability.WEB_BROWSER" }, { "name": "actions.capability.AUDIO_OUTPUT" } ] } ] } }, "session": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0" }
ردّ JSON
يُرجى العِلم أنّ JSON أدناه يصف ردًّا على الويب تلقائيًا.
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Okay, talk to you next time!" } } ] } } } }
حزمة تطوير برامج المهام
لتلقّي أغراض الخروج من المحادثة:
-
في عنصر
conversations
داخل حزمة الإجراءات، يُرجى الإعلان عن رغبتك في تلقّي هدفactions.intent.CANCEL
عند خروج المستخدم من منتصف المحادثة.{ "actions": [ { "description": "Default Welcome Intent", "name": "MAIN", "fulfillment": { "conversationName": "conversation_1" }, "intent": { "name": "actions.intent.MAIN" } } ], "conversations": { "conversation_1": { "name": "conversation_1", "url": "YOUR_ENDPOINT_URL", "inDialogIntents": [ { "name": "actions.intent.CANCEL" } ] } } }
-
عندما تتلقّى طلبًا بالقصد من
actions.intent.CANCEL
، عليك إزالة أي منطق على الإطلاق تريده وإرجاع عبارة خروج مناسبة إلى المستخدم. على سبيل المثال، إليك بعض رموز توفّر الطلبات التي تستخدم مكتبة البرامج للتعامل مع هدف الإلغاء.Node.js
const {actionssdk} = require('actions-on-google'); const functions = require('firebase-functions'); const app = actionssdk({debug: true}); app.intent('actions.intent.MAIN', (conv) => { conv.ask(`Hi! Try saying 'exit' or 'cancel'`); }); app.intent('actions.intent.TEXT', (conv, input) => { conv.ask(`You said ${input}`); conv.ask(`Try saying 'exit' or 'cancel'`); }); app.intent('actions.intent.CANCEL', (conv) => { conv.close(`Okay, talk to you next time!`); }); exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
Java
package com.example; import com.google.actions.api.ActionRequest; import com.google.actions.api.ActionResponse; import com.google.actions.api.ActionsSdkApp; import com.google.actions.api.ConstantsKt; import com.google.actions.api.ForIntent; import com.google.actions.api.response.ResponseBuilder; import com.google.actions.api.response.helperintent.Confirmation; import com.google.actions.api.response.helperintent.DateTimePrompt; import com.google.actions.api.response.helperintent.Permission; import com.google.actions.api.response.helperintent.Place; import com.google.api.services.actions_fulfillment.v2.model.DateTime; import com.google.api.services.actions_fulfillment.v2.model.Location; public class MyActionsApp extends ActionsSdkApp { @ForIntent("actions.intent.MAIN") public ActionResponse welcome(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.add("Hi! Try saying 'exit' or 'cancel'"); return responseBuilder.build(); } @ForIntent("actions.intent.TEXT") public ActionResponse fallback(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.add("You said " + request.getRawInput().getQuery()); responseBuilder.add("Try saying 'exit' or 'cancel'"); return responseBuilder.build(); } @ForIntent("actions.intent.CANCEL") public ActionResponse exit(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.add("Okay, talk to you next time!"); responseBuilder.endConversation(); return responseBuilder.build(); } }
طلب JSON
يُرجى العِلم أنّ JSON أدناه يصف طلب ردّ تلقائي على الويب.
{ "user": { "locale": "en-US", "userVerificationStatus": "VERIFIED" }, "conversation": { "conversationId": "ABwppHEtH6XptryyLGWDBOVnLgy8EkOclTPETd4lcLh_f6ghQAzzg0seUuq3YocyFT8B17N6AGD6YPPjQw5CXBM", "type": "NEW" }, "inputs": [ { "intent": "actions.intent.CANCEL", "rawInputs": [ { "inputType": "KEYBOARD", "query": "exit" } ] } ], "surface": { "capabilities": [ { "name": "actions.capability.SCREEN_OUTPUT" }, { "name": "actions.capability.ACCOUNT_LINKING" }, { "name": "actions.capability.MEDIA_RESPONSE_AUDIO" }, { "name": "actions.capability.AUDIO_OUTPUT" }, { "name": "actions.capability.WEB_BROWSER" } ] }, "availableSurfaces": [ { "capabilities": [ { "name": "actions.capability.AUDIO_OUTPUT" }, { "name": "actions.capability.SCREEN_OUTPUT" }, { "name": "actions.capability.WEB_BROWSER" } ] } ] }
ردّ JSON
يُرجى العِلم أنّ JSON أدناه يصف ردًّا على الويب تلقائيًا.
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Okay, talk to you next time!" } } ] } } }