执行方式定义了供 Actions 项目获取用户输入的对话界面,以及用于处理输入并最终执行 Action 的逻辑。
概览
您的执行方式会接收来自 Google 助理的请求、处理请求并做出响应。这种来回式请求和响应的过程会推动对话的进行,直到您最终满足初始用户请求。
以下步骤介绍了如何结合使用 Actions 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,请创建用于处理触发的 intent 的函数。
如需处理请求,请执行以下操作:
执行处理用户输入所需的任何逻辑。
调用
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
将所有函数设置为可以处理触发的 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()
函数。此函数指示 Google 助理向用户读出文本,并通过关闭麦克风来结束对话。
处理主调用 intent
当用户触发 app.intent.action.MAIN
intent 时,您通常不需要进行任何用户输入处理。如果您的 Action 包包含多项操作,且涵盖很多用例,则最好通过告诉用户一些可以执行的操作来引导用户。
- 调用
conv.ask()
函数,将您的响应作为参数传递。Google 助理会向用户说出您的响应,然后等待用户触发您指定的某个 intent。
以下代码段展示了如何处理简单的欢迎 intent:
// 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,则可以使用在您与 Google 助理之间来回传递的 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");