Fulfillment رابط مکالمه ای را برای پروژه Actions شما برای به دست آوردن ورودی کاربر و منطق پردازش ورودی و در نهایت انجام Action تعریف می کند.
نمای کلی
انجام شما درخواستهایی را از دستیار دریافت میکند، درخواست را پردازش میکند و پاسخ میدهد. این فرآیند درخواست و پاسخ رفت و برگشت، مکالمه را به جلو می برد تا زمانی که در نهایت درخواست اولیه کاربر را برآورده کنید.
مراحل زیر توضیح میدهد که چگونه میتوانید با استفاده از Actions SDK با Node.js یا کتابخانه سرویس گیرنده Java/Kotlin، اجرا ایجاد کنید:
- شی ActionsSdkApp را راه اندازی کنید .
- توابعی برای رسیدگی به درخواست ها در منطق تحقق خود ایجاد کنید .
ساخت دیالوگ ها
شی ActionsSdkApp
راه اندازی کنید
کد زیر ActionsSdkApp
را نمونهسازی میکند و مقداری Boilerplate 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\":{}}" }
رسیدگی به مقاصد
هنگامی که تمام توابع خود را برای مدیریت intent های راه اندازی شده در اختیار دارید، از app.intent
برای اختصاص کنترل کننده ها به 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()
را فراخوانی کنید. این عملکرد به دستیار گوگل می گوید که متن را به کاربر بازگو کند و با بستن میکروفون مکالمه را پایان دهد.
رسیدگی به قصد فراخوانی اصلی
وقتی کاربران برنامه app.intent.action.MAIN
فعال می کنند، معمولاً نیازی به پردازش ورودی کاربر ندارید. اگر بسته اکشن شما شامل اکشن های زیادی است و موارد استفاده زیادی را پوشش می دهد، بهتر است با گفتن چند کار به کاربر جهت دهی کنید.
- تابع
conv.ask()
را که پاسخ شما را به عنوان آرگومان ارسال می کند، فراخوانی کنید. Google Assistant پاسخ شما را به کاربر میگوید و سپس منتظر میماند تا کاربر یکی از اهدافی را که شما مشخص کردهاید فعال کند.
قطعه زیر نشان می دهد که چگونه می توان با یک هدف خوشامدگویی ساده برخورد کرد:
// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) { return rb.add(input).build(); }
حالت مکالمه
اگر از مکالمه HTTP/JSON webhook API استفاده میکنید، میتوانید وضعیت مکالمههای خود را با یک شی قالببندی شده 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");