每日更新 (Dialogflow)

用户在手机上订阅 Action 的每日更新

如果您的 Action 每天都能为用户带来价值,请提醒用户 通过配置每日更新来使用这一功能当用户进行每日订阅时 更新时,他们会收到推送通知 点按即可调用您的 Action 的某个 intent。

用户对这些更新的体验如下:

  1. 用户调用您配置为 每日更新。
  2. 用户按照提示订阅每日更新。这个提示是 在对话过程中提供,或在对话结束时显示为建议内容信息卡。
  3. 用户安排在一天中的什么时间接收您的每天 更新,向 Google 助理注册你的更新。
  4. 用户会在每天的预定时间收到一个 Google 助理 在移动设备上打开通知
  5. 当用户打开此通知时,他们会调用 配置为每日更新,并与您的 Action 互动。

默认情况下,每日更新注册提示显示为建议内容信息卡 当用户成功退出 Action 时触发。你还可以在对话过程中添加 注册提示或自定义用户的更新。

使用场景

每日更新是一种很有用的互动工具,但不应将其作为 融入到每个 Action 中。决定是否添加 Action 的每日更新订阅数:

  • 确保每日更新会让用户看到不同的实用信息 每天获取大量信息如果点按每日更新有相同的提示 每次都可能在几天后退订。
  • 确保用户直接跳转到您的对话框时,您的对话框对他们是有意义的 与每日更新的意图有关用户不一定会从头开始 对话的一部分,因此不应要求他们了解太多背景信息。
  • 在提示用户注册之前,先向他们展示您的 Action 的好处 获取每日更新。用户应该在想:“我希望每次都能看到此内容 天”向其提供订阅选项时
  • 不要反复建议注册,以免用户感到无所适从。提供一个 在向用户显示他们将会订阅的内容后立即显示每日更新订阅 并避免在其他情境中重复提供优惠。
  • 在触发更新 intent 后,确保对话简短。每日最多 更新应仅包含单个响应,然后关闭而不 需要用户输入。

设置每日动态

在 Dialogflow 中探索

点击继续,将我们的“每日动态”示例导入 Dialogflow 中。然后,按照 部署和测试示例的步骤如下:

  1. 输入代理名称并为示例创建新的 Dialogflow 代理。
  2. 代理导入完成后,点击转到代理 (Go to agent)。
  3. 在主导航菜单中,前往 Fulfillment
  4. 启用内嵌编辑器,然后点击部署。编辑器包含示例 代码。
  5. 在主导航菜单中,前往 Integrations(集成),然后点击 Google Google 助理
  6. 在显示的模态窗口中,启用 Auto-preview changes(自动预览更改),然后点击 Test(测试) 打开 Actions 模拟器。
  7. 在模拟器中,输入 Talk to my test app 以测试该示例!
<ph type="x-smartling-placeholder"></ph> 继续

如需为 Action 的某个 intent 配置每日更新,请按照下列步骤操作 操作说明:

1. 准备更新 intent

将 Action 的某个 intent 配置为触发 intent。此 intent 能够向用户发送每日更新;当用户打开每日动态时触发 intent 触发器和对话 然后再继续

如需在 Dialogflow 中定义触发 intent,请执行以下操作:

  1. Dialogflow 控制台中,点击 集成
  2. Google 助理部分下,点击集成设置
  3. 发现 >隐式调用,点击添加 intent 然后选择您的触发意图(如果尚未选择)。
  4. 开启自动预览更改(如果尚未启用)。
  5. 点击关闭

在 Actions SDK 中,将更新 intent 定义为触发 intent,位于 操作包。

2. 启用更新

如需为触发 intent 启用每日更新,请执行以下操作:

  1. Actions 控制台中, 请转到开发 >操作
  2. 选择触发意图。如果您的意图未显示在列表中, 确保将其配置为触发 intent 和 Dialogflow 的 Google 助理 集成设置为自动预览更改。
  3. 向下滚动到用户互动部分,然后开启 是否向用户提供每日动态
  4. 输入内容标题
  5. 点击保存

现在,您已将 Action 配置为针对 intent。现在,您可以在自己的移动设备上测试每日更新。

自定义更新注册(可选)

除了建议内容信息条和 Google 助理处理的每日更新之外 为您的注册流程订阅每日更新, 自己的对话框和注册提示。

如需查看处理可选每日更新功能的 Action 的完整示例, 查看 Actions on Google 用户互动示例 (Node.jsJava)。

如要在对话中添加自定义的每日更新注册提示,请按照 这些说明:

1. 添加注册提示

在需要提示时,在对话中添加对话框和建议内容信息卡 用户可订阅每日更新。在用户互动后提供这些提示 您的更新意图,以便其了解您每天 更新。

以下示例代码提示用户订阅每日更新 提供每天的最低预期温度:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Node.js
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'));
});
Java
@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();
}
Dialogflow JSON

请注意,下面的 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"
          }
        ]
      }
    }
  }
}
Actions SDK JSON

请注意,下面的 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">
</ph> <ph type="x-smartling-placeholder">
</ph>
Dialogflow Node.js
app.intent('Subscribe to Daily Updates', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'Daily Lowest Temperature',
    frequency: 'DAILY',
  }));
});
Actions SDK Node.js
conv.ask(new RegisterUpdate({
  intent: 'Daily Lowest Temperature',
  frequency: 'DAILY',
}));
Dialogflow Java
@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();
}
Actions SDK Java
ResponseBuilder responseBuilder = getResponseBuilder(request);
return responseBuilder.add(new RegisterUpdate()
    .setIntent("Daily Lowest Temperature")
    .setFrequency("DAILY"))
    .build();
Dialogflow JSON
{
  "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"
            }
          }
        }
      }
    }
  }
}
Actions SDK JSON
{
  "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">
</ph> <ph type="x-smartling-placeholder">
</ph>
Dialogflow

请按照以下步骤创建用于处理注册结果的 intent:

  1. Dialogflow 控制台中, 创建新意图。
  2. 添加 actions_intent_REGISTER_UPDATE 事件。
  3. 为该 intent 启用 webhook 执行方式。
  4. 点击保存
。 在 intent 的执行方式中,检查 registered 参数,然后相应地调整对话方式。 <ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Dialogflow Node.js
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.`);
  }
});
Dialogflow Java
@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();
}
Dialogflow JSON
{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Ok, I'll start giving you daily updates."
            }
          }
        ]
      }
    }
  }
}
Actions SDK

在执行方式代码中,添加对 actions.intent.REGISTER.UPDATE 的处理 。查看 registered 参数以获取结果。 并相应地转变对话风格。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Actions SDK Node.js
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.`);
  }
});
Actions SDK Java
@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();
}
Actions SDK JSON
{
  "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">
</ph> <ph type="x-smartling-placeholder">
</ph>
Dialogflow

定义一个 Dialogflow 实体来处理更新的自定义参数,然后 提交该参数的值作为更新 intent 的参数。 如需在 Dialogflow 中设置个性化更新,请按以下步骤操作:

  1. Dialogflow 控制台中,创建一个新实体。
  2. 添加与您的参数相关的一些条目和同义词。
  3. 点击保存,然后打开您的更新 intent。
  4. 操作和参数部分中,设置 actions.intent.CONFIGURE_UPDATES 事件。在同一部分中,添加一个与新实体具有相同类型的参数。
  5. 打开“更新注册”用于处理 CONFIGURE_UPDATES 内置 intent 的 intent。
  6. 操作和参数部分,添加一个必需参数,并将其类型设置为之前创建的实体。
  7. 更新注册 intent 的执行方式代码,以包含具有以下内容的 arguments 对象: 以下内容:
    • name - Dialogflow 中配置的参数名称。
    • textValue - 您的参数值。

以下代码会读取并使用该参数的值 在更新注册请求中:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Dialogflow Node.js
app.intent('setup_update', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'update_of_the_day',
    arguments: [
      {
        name: 'category',
        textValue: 'Daily_lowest_temperature',
      },
    ],
    frequency: 'DAILY',
  }));
});
Dialogflow Java
@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();
}
Dialogflow JSON
{
  "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": "{}"
      }
    }
  ]
}
Actions SDK

在 intent 执行方式中向用户请求其他信息, 然后将信息作为更新 intent 的参数传递。 如需在 Actions SDK 中设置个性化更新,请按以下步骤操作:

  1. 提示用户输入您要使用的信息 个性化。
  2. 在“更新注册”的执行方式代码中的意图, 处理 CONFIGURE UPDATES,并添加一个 arguments 对象, 以下内容:
    • name - 参数的名称。
    • textValue - 来自用户的信息,要作为参数传递。

以下代码会在更新注册请求中发送一个参数:

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Actions SDK Node.js
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',
    }));
  }
});
Actions SDK Java
@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();
}
Actions SDK JSON
{
  "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 还能订阅每日动态 更新时间。