Fulfillment 定义了 Action 项目要获取的对话界面 用户输入以及处理输入并最终完成 Action 的逻辑。
概览
你的执行方式会接收来自 Google 助理的请求、处理该请求 响应。这种来回式请求和响应流程推动了 直至您最终满足初始用户请求。
以下步骤介绍了如何使用 Actions 构建 fulfillment SDK 与 Node.js 或 Java/Kotlin 客户端库:
- 初始化 ActionsSdkApp 对象。
- 在执行方式逻辑中创建用于处理请求的函数。
构建对话框
初始化 ActionsSdkApp
对象
以下代码会实例化
ActionsSdkApp
并为 Google Cloud Functions 进行一些样板 Node.js 设置:
'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 助理的请求。接收者 实现请求中的意图,创建用于处理 触发的 intent。
如需处理请求,请执行以下操作:
执行处理用户输入所需的任何逻辑。
调用
conv.ask()
函数,传递您要显示的响应。 作为参数。
以下代码展示了如何构建简单的响应:
<ph type="x-smartling-placeholder">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
在获得所有可处理触发的 intent 的函数后,使用 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 助理向用户说出文本,并通过关闭麦克风结束对话。
处理主调用 intent
当用户触发 app.intent.action.MAIN
intent 时,您通常不会
需要执行任何用户输入处理。如果您的操作包
并且涵盖了许多用例,最好通过告诉用户
提供一些自己可以做的事
- 调用
conv.ask()
函数,将您的响应作为参数传递。 Google 助理会向用户说出你的回复 等待用户触发您指定的某个 intent。
以下代码段展示了如何处理简单的欢迎 intent:
<ph type="x-smartling-placeholder">// 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
) 传递对话状态
。如果您
使用 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");