如果您的 Action 每天都能为用户带来价值,请提醒用户 通过配置每日更新来使用这一功能当用户进行每日订阅时 更新时,他们会收到推送通知 点按即可调用您的 Action 的某个 intent。
用户对这些更新的体验如下:
- 用户调用您配置为 每日更新。
- 用户按照提示订阅每日更新。这个提示是 在对话过程中提供,或在对话结束时显示为建议内容信息卡。
- 用户安排在一天中的什么时间接收您的每天 更新,向 Google 助理注册你的更新。
- 用户会在每天的预定时间收到一个 Google 助理 在移动设备上打开通知
- 当用户打开此通知时,他们会调用 配置为每日更新,并与您的 Action 互动。
默认情况下,每日更新注册提示显示为建议内容信息卡 当用户成功退出 Action 时触发。你还可以在对话过程中添加 注册提示或自定义用户的更新。
使用场景
每日更新是一种很有用的互动工具,但不应将其作为 融入到每个 Action 中。决定是否添加 Action 的每日更新订阅数:
- 确保每日更新会让用户看到不同的实用信息 每天获取大量信息如果点按每日更新有相同的提示 每次都可能在几天后退订。
- 确保用户直接跳转到您的对话框时,您的对话框对他们是有意义的 与每日更新的意图有关用户不一定会从头开始 对话的一部分,因此不应要求他们了解太多背景信息。
- 在提示用户注册之前,先向他们展示您的 Action 的好处 获取每日更新。用户应该在想:“我希望每次都能看到此内容 天”向其提供订阅选项时
- 不要反复建议注册,以免用户感到无所适从。提供一个 在向用户显示他们将会订阅的内容后立即显示每日更新订阅 并避免在其他情境中重复提供优惠。
- 在触发更新 intent 后,确保对话简短。每日最多 更新应仅包含单个响应,然后关闭而不 需要用户输入。
设置每日动态
在 Dialogflow 中探索
点击继续,将我们的“每日动态”示例导入 Dialogflow 中。然后,按照 部署和测试示例的步骤如下:
- 输入代理名称并为示例创建新的 Dialogflow 代理。
- 代理导入完成后,点击转到代理 (Go to agent)。
- 在主导航菜单中,前往 Fulfillment。
- 启用内嵌编辑器,然后点击部署。编辑器包含示例 代码。
- 在主导航菜单中,前往 Integrations(集成),然后点击 Google Google 助理。
- 在显示的模态窗口中,启用 Auto-preview changes(自动预览更改),然后点击 Test(测试) 打开 Actions 模拟器。
- 在模拟器中,输入
Talk to my test app
以测试该示例!
如需为 Action 的某个 intent 配置每日更新,请按照下列步骤操作 操作说明:
1. 准备更新 intent
将 Action 的某个 intent 配置为触发 intent。此 intent 能够向用户发送每日更新;当用户打开每日动态时触发 intent 触发器和对话 然后再继续
如需在 Dialogflow 中定义触发 intent,请执行以下操作:
- 在 Dialogflow 控制台中,点击 集成。
- 在 Google 助理部分下,点击集成设置。
- 在发现 >隐式调用,点击添加 intent 然后选择您的触发意图(如果尚未选择)。
- 开启自动预览更改(如果尚未启用)。
- 点击关闭。
在 Actions SDK 中,将更新 intent 定义为触发 intent,位于 操作包。
2. 启用更新
如需为触发 intent 启用每日更新,请执行以下操作:
- 在 Actions 控制台中, 请转到开发 >操作。
- 选择触发意图。如果您的意图未显示在列表中, 确保将其配置为触发 intent 和 Dialogflow 的 Google 助理 集成设置为自动预览更改。
- 向下滚动到用户互动部分,然后开启 是否向用户提供每日动态。
- 输入内容标题。
- 点击保存。
现在,您已将 Action 配置为针对 intent。现在,您可以在自己的移动设备上测试每日更新。
自定义更新注册(可选)
除了建议内容信息条和 Google 助理处理的每日更新之外 为您的注册流程订阅每日更新, 自己的对话框和注册提示。
如需查看处理可选每日更新功能的 Action 的完整示例, 查看 Actions on Google 用户互动示例 (Node.js 和 Java)。
如要在对话中添加自定义的每日更新注册提示,请按照 这些说明:
1. 添加注册提示
在需要提示时,在对话中添加对话框和建议内容信息卡 用户可订阅每日更新。在用户互动后提供这些提示 您的更新意图,以便其了解您每天 更新。
以下示例代码提示用户订阅每日更新 提供每天的最低预期温度:
<ph type="x-smartling-placeholder">app.intent('Daily Lowest Temperature', (conv, params) => { const today = DAYS[new Date().getDay()]; const lowestTemperature = lowestTemperatures[today]; conv.ask(`The lowest temperature for today is ${lowestTemperature}`); conv.ask('I can send you daily updates with the lowest temperature' + ' of the day. Would you like that?'); conv.ask(new Suggestions('Send daily updates')); });
@ForIntent("Daily Lowest Temperature") public ActionResponse dailyLowestTemperature(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); Integer lowestTemperature = LOWEST_TEMPERATURES.get(LocalDate.now().getDayOfWeek()); responseBuilder .add("The lowest temperature for today is " + lowestTemperature + " degrees Fahrenheit.") .add("I can send you daily updates with the lowest temperature of " + "the day. Would you like that?") .addSuggestions(new String[] { "Send daily updates" }); return responseBuilder.build(); }
请注意,下面的 JSON 描述的是 webhook 响应。
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "The lowest temperature for today is 75 degrees Fahrenheit" } }, { "simpleResponse": { "textToSpeech": "I can send you daily updates with the lowest temperature of the day. Would you like that?" } } ], "suggestions": [ { "title": "Send daily updates" } ] } } } }
请注意,下面的 JSON 描述的是 webhook 响应。
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "The lowest temperature for today is 75 degrees Fahrenheit" } }, { "simpleResponse": { "textToSpeech": "I can send you daily updates with the lowest temperature of the day. Would you like that?" } } ], "suggestions": [ { "title": "Send daily updates" } ] } } } ] }
2. 处理更新注册
设置在用户关注您的注册时触发的新 intent
提示。在这个新 intent 的 fulfillment 中,触发 actions_intent_CONFIGURE_UPDATES
内置 intent
以下参数:
intent
- 设置为您配置的更新 intent。frequency
- 设置为“DAILY”。
以下代码会记录“每日最低温度”的每日更新 intent:
<ph type="x-smartling-placeholder">app.intent('Subscribe to Daily Updates', (conv) => { conv.ask(new RegisterUpdate({ intent: 'Daily Lowest Temperature', frequency: 'DAILY', })); });
conv.ask(new RegisterUpdate({ intent: 'Daily Lowest Temperature', frequency: 'DAILY', }));
@ForIntent("Subscribe to Daily Updates") public ActionResponse subscribeToDailyUpdates(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); return responseBuilder.add(new RegisterUpdate() .setIntent("Daily Lowest Temperature") .setFrequency("DAILY")) .build(); }
ResponseBuilder responseBuilder = getResponseBuilder(request); return responseBuilder.add(new RegisterUpdate() .setIntent("Daily Lowest Temperature") .setFrequency("DAILY")) .build();
{ "payload": { "google": { "expectUserResponse": true, "systemIntent": { "intent": "actions.intent.REGISTER_UPDATE", "data": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "Daily Lowest Temperature", "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } } } }
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.REGISTER_UPDATE", "inputValueData": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "Daily Lowest Temperature", "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } ] } ] }
3. 处理结果
Google 助理会接管您的对话,并引导用户完成 每日更新配置的其他部分完成注册后, Google 助理会触发一个 intent,其中包含指示 是否成功
此步骤的具体说明取决于您是否使用 Dialogflow 或 Actions SDK 用于开发。
<ph type="x-smartling-placeholder">请按照以下步骤创建用于处理注册结果的 intent:
- 在 Dialogflow 控制台中, 创建新意图。
- 添加
actions_intent_REGISTER_UPDATE
事件。 - 为该 intent 启用 webhook 执行方式。
- 点击保存。
registered
参数,然后相应地调整对话方式。
<ph type="x-smartling-placeholder">app.intent('Confirm Daily Updates Subscription', (conv, params, registered) => { if (registered && registered.status === 'OK') { conv.close(`Ok, I'll start giving you daily updates.`); } else { conv.close(`Ok, I won't give you daily updates.`); } });
@ForIntent("Confirm Daily Updates Subscription") public ActionResponse confirmDailyUpdatesSubscription(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); if (request.isUpdateRegistered()) { responseBuilder.add("Ok, I'll start giving you daily updates."); } else { responseBuilder.add("Ok, I won't give you daily updates."); } return responseBuilder.endConversation().build(); }
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Ok, I'll start giving you daily updates." } } ] } } } }
在执行方式代码中,添加对 actions.intent.REGISTER.UPDATE
的处理
。查看 registered
参数以获取结果。
并相应地转变对话风格。
app.intent('actions.intent.REGISTER_UPDATE', (conv, params, registered) => { if (registered && registered.status === 'OK') { conv.close(`Ok, I'll start giving you daily updates.`); } else { conv.close(`Ok, I won't give you daily updates.`); } });
@ForIntent("actions.intent.REGISTER_UPDATE") public ActionResponse confirmDailyUpdatesSubscription(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); if (request.isUpdateRegistered()) { responseBuilder.add("Ok, I'll start giving you daily updates."); } else { responseBuilder.add("Ok, I won't give you daily updates."); } return responseBuilder.endConversation().build(); }
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Ok, I'll start giving you daily updates." } } ] } } }
个性化动态资讯(可选)
若要对您的更新 intent 进行个性化设置,请在用户注册时添加自定义参数 每日更新。执行更新 intent 时,引用这些参数 来自定义该用户的每日更新
关于此功能的说明会有所不同,具体取决于您使用的是 Dialogflow 或 Actions SDK 用于开发。
<ph type="x-smartling-placeholder">定义一个 Dialogflow 实体来处理更新的自定义参数,然后 提交该参数的值作为更新 intent 的参数。 如需在 Dialogflow 中设置个性化更新,请按以下步骤操作:
- 在 Dialogflow 控制台中,创建一个新实体。
- 添加与您的参数相关的一些条目和同义词。
- 点击保存,然后打开您的更新 intent。
- 在操作和参数部分中,设置
actions.intent.CONFIGURE_UPDATES
事件。在同一部分中,添加一个与新实体具有相同类型的参数。 - 打开“更新注册”用于处理
CONFIGURE_UPDATES
内置 intent 的 intent。 - 在操作和参数部分,添加一个必需参数,并将其类型设置为之前创建的实体。
- 更新注册 intent 的执行方式代码,以包含具有以下内容的
arguments
对象: 以下内容:name
- Dialogflow 中配置的参数名称。textValue
- 您的参数值。
以下代码会读取并使用该参数的值 在更新注册请求中:
<ph type="x-smartling-placeholder">app.intent('setup_update', (conv) => { conv.ask(new RegisterUpdate({ intent: 'update_of_the_day', arguments: [ { name: 'category', textValue: 'Daily_lowest_temperature', }, ], frequency: 'DAILY', })); });
@ForIntent("setup_update") public ActionResponse setupUpdate2(ActionRequest request) { List<Argument> args = Arrays.asList( new Argument() .setName("category") .setTextValue(request.getParameter("category").toString())); return getResponseBuilder(request) .add(new RegisterUpdate().setIntent("intent_name").setArguments(args).setFrequency("DAILY")) .build(); }
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "PLACEHOLDER" } } ] }, "userStorage": "{\"data\":{}}", "systemIntent": { "intent": "actions.intent.REGISTER_UPDATE", "data": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "update_of_the_day", "arguments": [ { "name": "category", "textValue": "Daily_lowest_temperature" } ], "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } } }, "outputContexts": [ { "name": "/contexts/_actions_on_google", "lifespanCount": 99, "parameters": { "data": "{}" } } ] }
在 intent 执行方式中向用户请求其他信息, 然后将信息作为更新 intent 的参数传递。 如需在 Actions SDK 中设置个性化更新,请按以下步骤操作:
- 提示用户输入您要使用的信息 个性化。
- 在“更新注册”的执行方式代码中的意图,
处理
CONFIGURE UPDATES
,并添加一个arguments
对象, 以下内容:name
- 参数的名称。textValue
- 来自用户的信息,要作为参数传递。
以下代码会在更新注册请求中发送一个参数:
<ph type="x-smartling-placeholder">app.intent('actions.intent.TEXT', (conv) => { if (conv.input.raw === 'Send daily') { conv.ask(new RegisterUpdate({ intent: 'update_of_the_day', arguments: [ { name: 'category', textValue: 'Daily_lowest_temperature', }, ], frequency: 'DAILY', })); } });
@ForIntent("actions.intent.CONFIGURE_UPDATES") public ActionResponse configureUpdatesActionsSdk(ActionRequest request) { List<Argument> args = Arrays.asList( new Argument() .setName("category") .setTextValue(request.getParameter("category").toString())); return getResponseBuilder(request) .add(new RegisterUpdate().setIntent("intent_name").setArguments(args).setFrequency("DAILY")) .build(); } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { ResponseBuilder rb = getResponseBuilder(request); String input = request.getRawInput().getQuery(); if (input.equals("DAILY_NOTIFICATION_SUGGESTION")) { rb.add("For which category do you want to receive daily updates?"); } else { rb.add("Sorry, I didn't get that. Please try again later").endConversation(); } return rb.build(); }
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "PLACEHOLDER" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.REGISTER_UPDATE", "inputValueData": { "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec", "intent": "update_of_the_day", "arguments": [ { "name": "category", "textValue": "Daily_lowest_temperature" } ], "triggerContext": { "timeContext": { "frequency": "DAILY" } } } } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
当用户调用您的每日更新时,您的更新 intent 现在包括 实参,其中包含用户在注册期间提供的值。使用这些 值来为每个用户个性化更新。
测试每日更新
使用装有 Google 助理的移动设备来测试您的每日动态 您用于构建 Action 的 Google 账号。调用您的 Action 还能订阅每日动态 更新时间。