يحدِّد التنفيذ واجهة المحادثة التي يجب أن يحصل عليها مشروع "المهام مع مساعد Google" البيانات التي أدخلها المستخدم والمنطق لمعالجة المدخلات وتنفيذ الإجراء في النهاية.
نظرة عامة
يتلقّى تطبيقك طلبات من "مساعد Google" ويعالج الطلب ويستجيب. تؤدي عملية الطلب والاستجابة هذه المتبادلة إلى إعادة توجيه المحادثة إلى أن تفي في النهاية بطلب المستخدم الأولي.
توضّح الخطوات التالية كيفية تحقيق النتائج المرجوة باستخدام قسم "المهام مع مساعد Google". حزمة تطوير البرامج (SDK) تتضمّن Node.js أو مكتبة برامج Java/Kotlin:
- إعداد كائن ActionSdkApp.
- إنشاء دوال للتعامل مع الطلبات في منطق التنفيذ:
إنشاء مربّعات الحوار
إعداد كائن ActionsSdkApp
ينشئ التعليمة البرمجية التالية مثيلاً
ActionsSdkApp
وهل يتم إعداد بعض عناصر Node.js النموذجية لدوال Google Cloud:
'use strict'; 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!'); }); // More intent handling if needed exports.myFunction = functions.https.onRequest(app);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!"); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi!" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
إنشاء دوال لمعالجة الطلبات
عندما يقول المستخدمون عبارة، ستتلقّى طلبًا من "مساعد Google". إلى تحقق المقاصد التي تأتي في الطلبات، وإنشاء الدوال التي تعالج نية العميل.
لمعالجة الطلبات:
تنفيذ أي منطق مطلوب لمعالجة إدخالات المستخدم.
يمكنك استدعاء الدالة
conv.ask()
لتمرير الرد الذي تريده كوسيطة.
توضح التعليمة البرمجية التالية كيفية إنشاء استجابة بسيطة:
conv.ask(`Hi! Say something, and I'll repeat it.`);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi! Say something, and I'll repeat it."); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi! Say something, and I'll repeat it." } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
النية في التعامل مع البيانات
بعد أن يصبح لديك جميع الدوال للتعامل مع الأهداف والنتائج، استخدِم app.intent
من أجل
تعيين معالِجات الأهداف.
app.intent('actions.intent.TEXT', (conv) => { // handle text intent. }); app.intent('actions.intent.MAIN', (conv) => { // handle main intent. });
@ForIntent("actions.intent.MAIN") public ActionResponse main(ActionRequest request) { // handle main intent // ... } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { // handle text intent // ... }
إنهاء المحادثات
إذا لم تعد تريد أي بيانات يُدخلها المستخدم في المقابل وتريد إنهاء المحادثة،
لاستدعاء الدالة conv.close()
.
تطلب هذه الوظيفة من "مساعد Google" إعادة قول النص إلى المستخدم وإنهاء المحادثة من خلال إغلاق الميكروفون.
التعامل مع الغرض الرئيسي من الاستدعاء
وعندما يشغّل المستخدمون نية app.intent.action.MAIN
، لا يتم تنفيذها عادةً
بحاجة إلى إجراء أي معالجة لإدخالات المستخدم. إذا كانت حزمة الإجراءات الخاصة بك تحتوي على العديد
الإجراءات ويتناول العديد من حالات الاستخدام، فمن الجيد توجيه المستخدم من خلال إخبار
ببعض الأشياء التي يمكنهم القيام بها.
- يمكنك استدعاء الدالة
conv.ask()
لتمرير ردك كوسيطة. يجيب "مساعد Google" ردّك على المستخدم، ثم ينتظر المستخدم تشغيل أحد الأهداف التي حدّدتها.
يوضح المقتطف التالي كيفية التعامل مع نيّة ترحيب بسيطة:
// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) { return rb.add(input).build(); }
حالة المحادثة
إذا كنت تستخدم واجهة برمجة تطبيقات الردّ التلقائي على الويب للمحادثة HTTP/JSON، يمكنك الاحتفاظ
حالة محادثاتك باستخدام كائن بتنسيق JSON (conversationToken
)
يتم إرسالها بينك وبين "مساعد Google" من حين لآخر. إذا كنت
باستخدام مكتبة برامج Node.js، يمكنك
يمكنه الكتابة إلى حقل conv.data
والقراءة منه مباشرةً. هذا الحقل
يتم تمريرها مرارًا وتكرارًا بين الطلبات والردود.
conv.data = {something: 10}; let value = conv.data.something;
ResponseBuilder rb = getResponseBuilder(request); rb.getConversationData().put("something", 10); Object value = rb.getConversationData().get("something");