每日更新 (Dialogflow)

使用者在手機上訂閱動作的每日最新動態

如果您的動作每天都帶給使用者價值,就要提醒使用者: 即可。使用者每天訂閱時 當你執行動作有更新時,他們就會收到推播通知 輕觸一下即可叫用動作的其中一項意圖。

使用者體驗更新如下:

  1. 使用者叫用您設為使用者的其中一項動作意圖 每日更新
  2. 使用者按照提示訂閱每日最新動態。這則提示是 會在對話中途顯示,或對話結束時顯示的建議方塊。
  3. 使用者排定每天要接收每日快訊的時段 更新,正在向 Google 助理註冊更新。
  4. 使用者每天在排定的時間收到 Google 助理 行動裝置通知。
  5. 使用者開啟這則通知時,會叫用您的意圖 並設為每日更新,然後與您的動作互動

根據預設,系統會以建議方塊的形式顯示每日更新註冊提示 使用者成功結束動作時。也可以新增對話進行中 註冊提示或個人化使用者的更新

用途

每日更新是相當實用的參與度工具 整合到每個「動作」中判斷是否要新增 改成訂閱動作

  • 確保每天的更新內容都會帶給使用者不同、實用的體驗 資訊。如果輕觸每日更新,系統還是會在同一提示中顯示 使用者可能都會在幾天後取消訂閱
  • 請確保使用者直接跳到 以及每日更新意圖的意圖使用者不一定會從頭開始 因此他們不應提供太多來龍去脈。
  • 提示使用者註冊前,先呈現動作的優點 每日更新。使用者應思考: 天」讀者可以選擇訂閱
  • 別以重複的建議來讓使用者不知所措,提供 每日更新訂閱項目 向使用者顯示訂閱的內容 ,避免在其他情況下重複使用優惠
  • 觸發更新意圖後,對話應保持簡短。每天最多 更新應只包含一則回應,且在沒有說明的情況下將其關閉 需要使用者輸入內容
,瞭解如何調查及移除這項存取權。

設定每日最新動態

在 Dialogflow 中探索

按一下 [繼續],在 Dialogflow 中匯入每日更新範例。接著,請按照 部署及測試範例的步驟:

  1. 輸入虛擬服務專員名稱,並為範例建立新的 Dialogflow 代理程式。
  2. 代理程式匯入完畢後,按一下「Go to agent」
  3. 在主要導覽選單中,前往「Fulfillment」(執行要求)
  4. 啟用「Inline Editor」(內嵌編輯器),然後按一下 [Deploy] (部署)。編輯器包含範例 再也不是件繁重乏味的工作
  5. 在主要導覽選單中,前往「Integrations」(整合),然後按一下「Google」 Google 助理
  6. 在出現的互動視窗中,啟用「自動預覽變更」,然後按一下「測試」 以開啟動作模擬工具
  7. 在模擬工具中輸入 Talk to my test app 即可測試範例!
繼續

如要設定動作的其中一個意圖供每日更新,請按照這些操作操作 說明:

1. 準備更新意圖

請將動作的其中一項意圖設為觸發意圖。這項意圖 允許向使用者傳送每日更新。使用者開啟每日更新時 系統會觸發意圖 然後繼續往前走

如要在 Dialogflow 中定義觸發意圖,請按照下列步驟操作:

  1. Dialogflow 主控台整合
  2. 在「Google 助理」部分下方,按一下「整合設定」
  3. 前往「探索 >」隱含叫用,按一下新增意圖 並選取觸發意圖 (如果尚未選取的話)。
  4. 開啟「自動預覽」變更 (如果尚未啟用)。
  5. 按一下「關閉」

在 Actions SDK 中,將更新意圖定義為在 動作套件。

2. 啟用更新功能

如要為觸發意圖開啟每日更新,請按照下列步驟操作:

  1. Actions 主控台中 前往 [開發] >動作
  2. 選取您的觸發意圖。如果您的意圖沒有顯示在清單中 請確認已將設定設為觸發意圖和 Dialogflow 的 Google 助理 但已經設為自動預覽變更
  3. 向下捲動至「使用者參與度」部分並開啟 您可以向使用者提供每日最新資訊
  4. 輸入內容標題
  5. 按一下 [儲存]

您現在已完成設定,為 意圖。你現在可以在自己的行動裝置上測試每日更新。

自訂更新註冊 (選用)

除了建議方塊,以及 Google 助理處理的每日更新 註冊流程,即可讓使用者訂閱每日最新消息, 顯示的對話方塊和註冊提示

如需會處理選用每日更新功能的動作完整範例, 查看 Actions on Google 使用者參與度範例 (Node.js)。 和 Java)。

如要在對話中加入自訂每日更新註冊提示,請按照下列步驟操作: 操作說明:

1. 新增註冊提示

根據對話提示加入對話和建議方塊 使用者訂閱每日最新動態在使用者互動後提供這些提示 更新意圖,讓對方瞭解你每天的 更新。

下列範例程式碼會提示使用者訂閱每日最新動態 提供每天最低的預期溫度:

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"
          }
        ]
      }
    }
  }
}
動作 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. 處理更新註冊作業

設定新的意圖,在使用者追蹤註冊資訊時觸發 提示。在這項新意圖的執行要求中,觸發 actions_intent_CONFIGURE_UPDATES 內建意圖,且包含 參數

  • intent:設為您設定的更新意圖。
  • frequency - 設為「DAILY」。

下方程式碼會註冊「每日最低溫度」的每日更新 意圖:

Dialogflow Node.js
,瞭解如何調查及移除這項存取權。
app.intent('Subscribe to Daily Updates', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'Daily Lowest Temperature',
    frequency: 'DAILY',
  }));
});
動作 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();
}
動作 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"
            }
          }
        }
      }
    }
  }
}
動作 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 助理會使用參數來觸發意圖,此參數會指出 註冊是否成功

這個步驟的操作說明會因您是否使用 或是使用 Dialogflow 或 Actions SDK 進行開發。

Dialogflow

如要建立用於處理註冊結果的意圖,請按照下列步驟操作:

  1. Dialogflow 控制台中 建立新的意圖
  2. 新增 actions_intent_REGISTER_UPDATE 事件。
  3. 為意圖啟用 Webhook 執行要求。
  4. 按一下 [儲存]
,瞭解如何調查及移除這項存取權。 在意圖的執行要求中,查看 registered 參數,並據此調整對話方向。
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."
            }
          }
        ]
      }
    }
  }
}
動作 SDK

在執行要求程式碼中,為 actions.intent.REGISTER.UPDATE 新增處理方式 內建意圖檢查結果的 registered 參數。 並據此引導對話方向

動作 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.`);
  }
});
動作 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();
}
動作 SDK JSON
{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "simpleResponse": {
            "textToSpeech": "Ok, I'll start giving you daily updates."
          }
        }
      ]
    }
  }
}

個人化更新 (選用)

如要個人化更新意圖,請在使用者註冊時加入自訂參數 以及每日更新執行更新意圖時,請參照這些參數 自訂該使用者的每日更新。

這項功能的操作說明會根據您是否使用 或是使用 Dialogflow 或 Actions SDK 進行開發。

Dialogflow

定義 Dialogflow 實體來處理更新作業的自訂參數,然後 把參數值做為更新意圖的引數。 如要在 Dialogflow 中設定個人化更新,請按照下列步驟操作:

  1. Dialogflow 控制台中建立新實體。
  2. 新增一些與參數相關的項目和同義詞。
  3. 按一下「Save」(儲存),然後開啟更新意圖。
  4. 在「動作和參數」部分中設定 actions.intent.CONFIGURE_UPDATES 做為事件在同一個部分中,新增與新實體類型相同的參數。
  5. 開啟「更新註冊」處理 CONFIGURE_UPDATES 內建意圖的意圖。
  6. 在「Actions and parameters」(動作和參數) 部分中新增必要參數,並將其類型設為先前建立的實體。
  7. 更新註冊意圖的執行要求程式碼,加入含有 arguments 物件的 包含下列內容:
    • name - Dialogflow 中設定的參數名稱。
    • textValue - 參數的值。

下列程式碼會讀取並使用該參數的值 更新:

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": "{}"
      }
    }
  ]
}
動作 SDK

在意圖執行要求中,要求使用者提供其他資訊。 然後將資訊做為更新意圖的引數。 如要在 Actions SDK 中設定個人化更新功能,請按照下列步驟操作:

  1. 提示使用者提供您想用於提供的資訊 個人化。
  2. 在「更新註冊資訊」的出貨代碼中意圖 處理 CONFIGURE UPDATES 包括 arguments 物件,其中包含 包含下列內容:
    • name - 引數的名稱。
    • textValue - 要做為引數傳遞的使用者資訊。

下列程式碼會傳送引數與更新註冊要求:

動作 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',
    }));
  }
});
動作 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();
}
動作 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\":{}}"
}

當使用者叫用您的每日更新時,您的更新意圖現在包含 含有使用者在註冊期間提供的值的引數。使用這些 值,建立每位使用者的個人化更新。

測試每日最新動態

在行動裝置上使用 Google 助理,透過以下方式測試每日最新動態: 也就是你用於建立動作的 Google 帳戶。叫用動作 並訂閱每日最新動態,然後查看裝置通知 更新時間。