Google 助理是一款虚拟私人智能助理,借助 Google 助理开发者平台,您可以打造软件,从而为超过 10 亿台设备(包括智能音箱、手机、汽车、电视、头戴式耳机等)扩展 Google 助理的功能。用户可通过对话形式与 Google 助理互动,从而处理各种事务,例如购买日用品或约车。作为开发者,您可以使用 Google 助理开发者平台在用户和您自己的第三方执行方式服务之间轻松打造并管理愉悦、高效的对话体验。
本 Codelab 介绍了关于 Google 助理相关开发的中级概念,并以第 1 级 Codelab 中创建的 Action 为基础进一步构建。我们强烈建议您先完成第 1 级 Codelab,然后再开始学习本 Codelab。
您在本 Codelab 中构建的 Action 可根据用户选择的辅助物,告知用户他们探索神秘大陆 Gryffinberg 期间的运势。
构建内容
在本 Codelab 中,您要构建一个具有以下功能的复杂对话型 Action:
- 收集用户数据,并根据收集到的值修改对话提示。
- 对后续提问进行回应,持续推进对话
- 创建游戏循环,以便用户能够在收到运势信息后再次与相应 Action 互动。
开始构建之前,您可以在内置 Google 助理的设备上与实际 Action 进行互动,只需说出“Ok Google,跟 Fate and Fortune 聊聊”即可。回访用户与该 Action 互动的默认路径如下所示:
学习内容
所需条件
学习本 Codelab 前,您需要做好以下准备:
- 选择一种 IDE/文本编辑器。
- 已安装 NodeJS、npm 和 git 的终端,用于运行 shell 命令。
- 网络浏览器,例如 Google Chrome。
- 已完成的 Codelab 第 1 级 Actions 项目
我们强烈建议(但不强制要求)您熟悉 JavaScript (ES6),以便理解本 Codelab 的执行方式代码。
可选:获取示例代码
您可以选择通过此 GitHub 代码库获取第 1 级项目的完整代码,也可以通过此 GitHub 代码库获取第 2 级项目的完整代码。
在第一个 Codelab 中,您创建了一个具有单个场景 Start
的简单对话型 Action。
在本 Codelab 中,您可以扩展该 Action 的对话。在以下部分中,您可以配置该 Action 以执行以下操作:
- 在用户想要听取自己的运势时,过渡到新的
Fortune
场景 - 询问用户想要为自己的旅程选择哪种辅助物
- 根据用户所做的选择提供自定义运势
过渡到并创建 Fortune
场景
在本部分中,您可以执行以下操作:
- 从
Start
场景中移除用于回应用户并结束对话的现有提示 - 定义从
Start
场景向Fortune
场景的过渡 - 创建
Fortune
场景
如需修改 Start
场景并添加向 Fortune
场景的过渡,请按以下步骤操作:
- 在文本编辑器中打开第 1 级 Codelab 中构建的 Actions 项目。
- 打开
custom/scenes/Start.yaml
文件。 - 更新
yes
intent 的handler
,使您的代码符合以下代码段:
Start.yaml
intentEvents: - intent: "yes" transitionToScene: Fortune - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: I understand, stranger. Best of luck on your quest! Farewell. intent: "no" transitionToScene: actions.scene.END_CONVERSATION
- 保存文件。
如需创建名为 Fortune
的新场景,请按以下步骤操作:
- 在终端中导航至 Codelab 第 1 级 Actions 项目。
- 在
scenes
目录中创建一个名为Fortune.yaml
的新文件:
touch custom/scenes/Fortune.yaml
您将在下一部分中修改此文件。
为 Fortune
场景定义对话逻辑
在本 Codelab 中,您将配置 Fortune
场景,以便向用户提出以下问题:“What do you choose to help you on your quest, a dragon, a translator, or a compass?”(你选择哪一样辅助物来帮助你完成探索之旅,巨龙、翻译还是罗盘?)您可以使用一项名为槽填充的功能向用户收集必要的信息,然后再继续操作。
您的 Action 可针对 3 种辅助物提供对应的运势信息:dragon(巨龙)、translator(翻译)和 compass(罗盘)。若要配置您的 Action 以识别用户输入中的这 3 个选项,您必须创建一个新的“类型”。
您可以在场景的槽填充阶段使用类型来定义您想要从用户那里获取的信息。当 NLU 引擎在用户输入中检测到槽匹配时,它会将相应槽提取为已分类参数,让您能够在场景中使用该参数执行逻辑。
创建 available_options
类型
在本部分中,您将创建一个名为 available_options
的新类型,该类型可以指定用户在对提示做出回应时可以选择的 3 个选项(dragon、translator 和 compass)。您还可以针对这些选项定义几个同义词,以便在用户说出类似内容时也能识别。在后续部分中,您要将 available_options
类型添加到某个槽中,以便指明您想要获取用户的选择。
如需创建 available_options
类型,请按以下步骤操作:
- 创建名为
types
的新目录:
mkdir custom/types
- 在
types
目录中创建一个名为available_options.yaml
的新文件:
touch custom/types/available_options.yaml
- 在文本编辑器中打开
custom/types/available_options.yaml
。
类型将被配置为信息键值对,其中“键”为类型的名称,而“值”为相应键的同义词。定义键后,系统会自动为该键添加值。在 Actions SDK 中,您将键表示为 entities
,值表示为 synonyms
。
如需添加用户可选择的 3 个选项,请按以下步骤操作:
- 在
available_options.yaml
文件中添加以下entities
和synonyms
:
available_options.yaml
synonym: entities: dragon: synonyms: - dragon - hydra - lizard translator: synonyms: - translator - communicator - machine - decoder - translate compass: synonyms: - compass - direction - guide - navigator matchType: EXACT_MATCH
- 保存文件。
现在,您的 Action 不仅可以理解 available_options
是 dragon、translator 和 compass,还能识别出各选项对应的一些同义词。
配置槽填充
接下来,您需要配置 Fortune
场景中的槽填充。如需配置槽填充逻辑,请按以下步骤操作:
- 在文本编辑器中打开
custom/scenes/Fortune.yaml
。 - 将以下
slots
数据添加到Fortune.yaml
文件中:
Fortune.yaml
slots: - commitBehavior: writeSessionParam: chosenOptions name: chosenOptions promptSettings: initialPrompt: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass? suggestions: - title: Dragon - title: Translator - title: Compass required: true type: name: available_options
- 保存文件。
现在,您已将 available_options
类型添加到相应的槽,以便告知 Action 您需要先向用户收集哪些信息(用户选择哪个辅助物),然后再继续操作。此外,您还在该槽中配置了提示;在用户到达场景的槽填充阶段后,系统会将该提示添加到提示队列。
将槽命名为 chosenOptions
后,writeSessionsParam
字段会更新为相同的名称 ($session.params.chosenOptions
)。您可以在提示中使用该名称访问此参数,也可以通过客户端库在执行方式中使用该名称访问此参数。
添加条件
现在,您已添加了需要用户选择辅助物的槽,接下来可以添加条件,确保在用户继续对话之前已获取槽数据。
在本部分中,您将添加条件 scene.slots.status == "FINAL"
,用于检查槽填充是否已完成。所有槽均填充后,条件会向提示队列添加一个提示 (You picked $session.params.chosenOptions.
)。
如需配置 scene.slots.status == "FINAL"
条件,请按以下步骤操作:
- 在文本编辑器中打开
custom/scenes/Fortune.yaml
。 - 将
conditionalEvents
数据添加到Fortune.yaml
文件的顶部:
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: You picked $session.params.chosenOptions.
- 保存文件。
在模拟器中测试您的 Action
此时,您已定义用户可选择哪些选项以填充槽。向用户获取这些信息后,您的 Action 应该会提供提及用户所选的特定选项的提示。
如需测试您的 Action,请按以下步骤操作:
- 在终端中,运行以下命令:
gactions deploy preview
您应该会看到如下输出:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- 复制提供的网址,并将其粘贴到浏览器中。
- 在 Input 字段中点击或输入
Talk to my test app
,然后按 Enter 键。 - 在 Input 字段中输入
Yes
,然后按 Enter 键。或者,您也可以点击 Yes 建议内容信息卡。
- 点击、输入或说出
dragon
。您应该会收到内容为“You have pick dragon”(您已选择巨龙)的提示。
在下一部分中,您可以自定义用户可选的每个辅助物对应的提示。
使用条件自定义提示
在本部分中,您将为用户可选的每个选项添加条件,然后为每个条件添加一条自定义提示。
自定义 dragon
选项对应的运势
如需针对用户选择“dragon”的情况更新条件并自定义提示,请按以下步骤操作:
- 在文本编辑器中打开
custom/scenes/Fortune.yaml
。 - 将
Fortune.yaml
文件中conditionalEvents
数据替换为以下代码段:
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon.
- 保存文件。
现在,当用户说出“dragon”或其同义词时,您的 Action 会根据该选项提供对应的运势信息。接下来,您可以为剩余的两个选项添加运势。
自定义 translator
和 compass
选项对应的运势
如需针对用户说出“translator”或“compass”的情况更新条件并自定义提示,请按以下步骤操作:
- 在
custom/scenes/Fortune.yaml
文件中,在dragon
条件下添加另外两个条件:
Fortune.yaml
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many other journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum. - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success.
- 保存文件。
在模拟器中测试您的 Action
此时,您的 Action 应该会根据用户的所选项为用户提供自定义的运势信息。
如需测试您的 Action,请按以下步骤操作:
- 在终端中,运行以下命令:
gactions deploy preview
您应该会看到如下输出:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- 复制提供的网址,并将其粘贴到浏览器中。
- 在 Input 字段中输入
Talk to my test app
,然后按 Enter 键。 - 在 Input 字段中输入“Yes”,然后按 Enter 键。或者,点击 Yes 建议内容信息块。
- 点击、输入或说出
Translator
。
您应该会收到“translator”选项对应的运势信息。
在本部分中,您将配置 Action,以便用户在选择某选项后,能够改选其他选项并听取对应的运势信息。这项更改与游戏结束时显示的“Do you want to play again?”(要再玩一次吗?)消息类似。如需构建此循环,您可以重复使用之前创建的 yes
和 no
intent,然后将其添加到名为 Again
的新场景。
创建 Again
场景
在本部分中,您将创建一个新的 Again
场景,然后添加提示,以询问用户是否要选择其他选项。
如需创建和配置 Again
场景,请按以下步骤操作:
- 在
scenes
目录中创建一个名为Again.yaml
的新文件:
touch custom/scenes/Again.yaml
- 在文本编辑器中打开
custom/scenes/Again.yaml
。 - 将以下
onEnter
数据添加到Again.yaml
中:
Again.yaml
onEnter: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: That is what I see for you. Would you like to choose a different option and explore another future? suggestions: - title: "Yes" - title: "No"
- 保存文件。
添加从 Fortune
到 Again
场景的过渡
在用户收到运势信息后,对话需要过渡到新的 Again
场景。
如需添加从 Fortune
场景到 Again
场景的过渡,请按以下步骤操作:
- 在文本编辑器中打开
custom/scenes/Fortune.yaml
。 - 为每个条件添加
transitionToScene: Again
,如以下代码段所示:
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon. transitionToScene: Again - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many other journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum. transitionToScene: Again - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success. transitionToScene: Again
- 保存文件。
在模拟器中测试您的 Action
此时,在用户收到运势信息后,您的 Action 应该为用户提供以下提示:“That is what I see for you. Would you like to choose a different option and explore another future?”(我预见到你的运势就是这样。是否要选择其他选项,探索未来的另一种走向?)
如需测试您的 Action,请按以下步骤操作:
- 在终端中,运行以下命令:
gactions deploy preview
您应该会看到如下输出:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- 复制提供的网址,并将其粘贴到浏览器中。
- 在 Input 字段中输入
Talk to my test app
,然后按 Enter 键。 - 在 Input 字段中输入
Yes
,然后按 Enter 键。或者,点击 Yes 建议内容信息块。 - 点击、输入或说出
dragon
。
您应该会收到 dragon 选项对应的运势和 Again
提示。
添加 intent 以及向 Again
场景的过渡
在本部分中,您将向 Again
场景添加 yes
和 no
intent,以便您的 Action 能够理解用户是否想要选择新选项。此外,您还可以针对 yes
和 no
intent 添加适当的过渡。yes
intent 会过渡到 Fortune
场景,而 no
intent 会过渡到系统场景 End conversation
。
如需向 Again
场景添加 intent 和过渡,请按以下步骤操作:
- 在文本编辑器中打开
custom/scenes/Again.yaml
。 - 在
Again.yaml
文件的顶部添加intentEvents
数据(位于OnEnter
上方):
Again.yaml
intentEvents: - intent: "yes" transitionToScene: Fortune - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell. intent: "no" transitionToScene: actions.scene.END_CONVERSATION
- 保存文件。
在模拟器中测试您的 Action
现在,您的 Action 应该能够理解用户是要选择新选项,还是要结束对话。
如需测试 yes
intent,请按以下步骤操作:
- 在终端中,运行以下命令:
gactions deploy preview
您应该会看到如下输出:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- 复制提供的网址,并将其粘贴到浏览器中。
- 在 Input 字段中输入
Talk to my test app
,然后按 Enter 键。 - 在 Input 字段中输入
Yes
,然后按 Enter 键。或者,点击 Yes 建议内容信息块。 - 点击、输入或说出其中一个选项。
- 在“Input”字段中输入
Yes
,然后按 Enter 键。
您应该会收到以下提示:“What do you choose to help you on your quest, a dragon, a translator, or a compass?”
如需测试 no
intent,请按以下步骤操作:
- 点击、输入或说出其中一个选项。
- 在“Input”字段中输入
No
,然后按 Enter 键。
您应该会收到 End conversation
提示:“It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell.“(看来你对自己的选择很满意,我很欣慰。祝你顺利完成探索之旅。后会有期。)
现在,您已经构建了大多数用户在您的 Action 中选择的主要路径。不过,对于 Fortune
场景中的提示“What do you choose to help you on your quest, a dragon, a translator, or a compass?”,用户在回应时可能会选择所提供选项范围外的其他内容。
在本部分中,您将配置 Action,使其能够在用户选择“magic”(魔法)、“money”(钱)、“horse”(马)或“phone”(手机)时理解用户意图,并在用户选择此类选项中的某一项时重新提示用户从原有的 3 个选项中选择一项。如需配置此逻辑,您需要创建一个新的 type
(其中包含范围外的其他选项),以及一个新的 intent other_option
(当用户说出范围外的某一选项时,便会与该 intent 匹配)。此外,您还需要为 other_option
intent 中的训练短语添加注解,以便识别并提取 intent 参数。
Google 助理的自然语言处理引擎在用户输入中检测到参数匹配后,会将相应值提取为已分类参数,让您能够在场景中使用该参数执行逻辑。在本 Codelab 中,您将配置 Action,以便提取用户选择的辅助物,并在提示中提及相应选择。
创建 unavailable_options
类型
现在,您可以创建包含各种其他选项的 unavailable_options
类型,以便您的 Action 可以识别用户输入中的此类数据。
如需创建 unavailable_options
类型,请按以下步骤操作:
- 在
types
目录中创建一个名为unavailable_options.yaml
的新文件:
touch custom/types/unavailable_options.yaml
- 在文本编辑器中打开
custom/types/unavailable_options.yaml
。 - 将以下
synonyms
数据添加到unavailable_options.yaml
文件中:
unavailable_options.yaml
synonym: entities: money: synonyms: - money - cash - gold horse: synonyms: - horse - stallion - steed magic: synonyms: - magic - enchanted - spells phone: synonyms: - phone - cell - apps matchType: EXACT_MATCH
- 保存文件。
创建 other_option
intent
接下来,您要创建一个名为 other_option
的 intent,并添加 unavailable_options
类型包含的部分选项作为训练短语。如果用户选择 unavailable_options
类型中包含的选项,便会与该 intent 匹配。
如需创建和配置 other_option
intent,请按以下步骤操作:
- 在
intents
目录中创建一个名为other_option.yaml
的新文件:
touch custom/intents/other_option.yaml
- 在文本编辑器中打开
custom/intents/other_option.yaml
。 - 将以下
parameters
数据和trainingPhrases
数据添加到other_option.yaml
文件中:
other_option.yaml
parameters: - name: chosenUnavailableOption type: name: unavailable_options trainingPhrases: - I want to use ($chosenUnavailableOption 'spells' auto=true) - I really really want to use a ($chosenUnavailableOption 'phone' auto=true) - ($chosenUnavailableOption 'magic' auto=true)! - ($chosenUnavailableOption 'cash' auto=true) - I want to ride a ($chosenUnavailableOption 'horse' auto=true)
此时,您将使用上一部分中指定的不可用选项,为训练短语手动添加注解。借助 intent 参数 chosenUnavailableOption
,您可以提取选项的名称,并在提示中使用相应选项,我们将在下一部分完成此操作。
- 保存文件。
向 Fortune
场景添加 other_option
intent
您现在已经有了一个 intent (other_option
),它可以处理用户指定原有选项范围外的其他选项的情况。在本部分中,您将向 Fortune
场景添加 other_option
intent。您可以使用该 intent 参数,根据用户输入自定义提示。
如需向 Fortune
场景添加 other_option
intent,请按以下步骤操作:
- 在文本编辑器中打开
custom/scenes/Fortune.yaml
。 - 在
conditionalEvents
数据和slots
数据之间添加以下intentEvents
数据:
Fortune.yaml
intentEvents: - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey. intent: other_option
- 保存文件。
表达式 $intent.params.chosenUnavailableOption
指代 intent 参数对象,而 $intent.params.chosenUnavailableOption.original
指代该对象的值。original
属性指的是用户指定的原始输入。
如果用户在 Fortune
场景中说出 unavailable_options
类型中列出的某个选项,则会与 other_option
intent 匹配,并向提示队列添加提示。由于未指定过渡,因此场景执行循环会通过重新评估条件阶段的方式继续运行。然后,chosenOptions
槽会将其提示添加到提示队列,接着,系统会将提示队列分发到用户。
在模拟器中测试您的 Action
现在,用户选择 unavailable_options
类型中列出的某个选项后,您的 Action 应该会作出适当回应,并明确说出用户所选的辅助物。然后,您的 Action 应该重新提示用户选择原有选项之一(dragon、translator 或 compass)。
如需在模拟器中测试您的 Action,请按以下步骤操作:
- 在终端中,运行以下命令:
gactions deploy preview
您应该会看到如下输出:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- 复制提供的网址,并将其粘贴到浏览器中。
- 在 Input 字段中输入
Talk to my test app
,然后按 Enter 键。 - 在 Input 字段中输入
Yes
,然后按 Enter 键。或者,点击 Yes 建议内容信息块。 - 在 Input 字段中输入
magic
,然后按 Enter 键。
您可能会发现,如果用户选择“magic”,由于在该字词前面放置了冠词“a”,因此提示听起来有错误。您将在后面的部分中解决该问题。
添加 unavailable_options
处理脚本
如需在 unavailable_options
类型中的适当选项前面加上冠词“a”,您可以在执行方式逻辑中配置事件处理脚本,以便检查用户选择的选项前面是否需要冠词“a”。首先,您需要将配置 Action 为从 Fortune
场景中调用处理脚本。
如需向 Fortune
场景添加 unavailable_options
处理脚本,请按以下步骤操作:
- 在文本编辑器中打开
custom/scenes/Fortune.yaml
。 - 使用以下
intentEvents
数据更新Fortune.yaml
文件:
Fortune.yaml
intentEvents: - handler: webhookHandler: unavailable_options intent: other_option
- 保存文件。
更新和部署执行方式
现在,您已将 Action 配置为调用 unavailable_options
事件处理脚本,接下来,您可以在您的执行方式中更新该处理脚本并进行部署。
如需更新您的执行方式,请按以下步骤操作:
- 在文本编辑器中打开
webhooks/ActionsOnGoogleFulfillment/index.js
。 - 将以下代码添加到
index.js
中的greeting
处理脚本下方:
index.js
app.handle('unavailable_options', conv => {
const option = conv.intent.params.chosenUnavailableOption.original;
const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
let message = 'I have seen the future and ';
if(optionsNeedA.has(optionKey)){
message = message + 'a ';
}
message = message + `${option} will not aid you on your journey. `;
conv.add(message);
});
- 在
const app = conversation({debug:true});
下方添加以下代码:
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- 保存文件。
了解代码
unavailable_options
处理脚本会执行以下操作:
- 从
conv
对象获取option
数据,并将option
分配给original
属性(用户的原始输入) - 将适用于
unavailable_options
类型的键optionKey
分配给resolved
属性 - 检查
optionKey
是否为需要“a”的选项之一;如果是,则在构建消息时加上“a” - 通过
conv.add(message)
添加消息
更新处理脚本
若要让 Action 能够使用 unavailable_options
,请将 unavailable_options
处理脚本添加到 webhooks/ActionsOnGoogleFulfillment.yaml
中。
- 将
unavailable_options
处理脚本名称添加到ActionsOnGoogleFulfillment.yaml
中:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- 保存文件。
在模拟器中测试您的 Action
现在,您的 Action 应该会根据用户在 unavailable_options
类型中选择的选项前面是否需要冠词“a”来调整提示。
如需测试您的 Action,请按以下步骤操作:
- 在终端中,运行以下命令:
gactions deploy preview
您应该会看到如下输出:
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- 复制提供的网址,并将其粘贴到浏览器中。
- 在 Input 字段中点击或输入
Talk to my test app
,然后按 Enter 键。 - 在 Input 字段中输入
Yes
,然后按 Enter 键。或者,点击 Yes 建议内容信息块。 - 在 Input 字段中输入
magic
,然后按 Enter 键。然后,在 Input 字段中输入horse
并按 Enter 键。
您的 Action 应该会在“horse”选项前面添加冠词“a”,而在针对“magic”选项构建提示时则不会添加冠词“a”。
Actions SDK 与名为 Actions Builder 的基于 Web 的 IDE 可进行互操作,后者已集成到 Actions 控制台中。您可以使用 gactions push
命令,将本地文件系统推送为控制台中的 Action 草稿。Actions 控制台可直观地呈现您的 Action 配置。直观地呈现您的 Action 在开发过程中会很有用,并不会影响为测试提供的 Action 版本。
如需推送您的 Actions 项目并在 Actions 控制台中查看该项目,请按以下步骤操作:
- 在终端中,运行以下命令,将您的项目推送到 Actions 控制台:
gactions push
您应该会看到如下输出:
✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
- 复制提供的网址,并将其粘贴到浏览器中。
- 在 Actions 控制台中,点击顶部导航栏中的 Develop。
- 点击 Scenes 旁的下拉箭头,然后点击 Start。您应该会看到 Action 的
Start
场景的直观视图,如以下屏幕截图所示:
恭喜您!
现在,您已掌握使用 Actions SDK 构建适用于 Google Assistant 的 Action 所需的中级技能。
所学内容
- 如何使用 Node.js 执行方式库开发对话型 Action
- 如何使用槽向用户收集数据
- 如何使用条件向场景添加逻辑
- 如何添加游戏循环
- 如何添加辅助路径
其他学习资源
您可以探索以下资源,了解如何构建适用于 Google 助理的 Action:
- 参阅此文档,了解如何开发适用于 Google 助理的 Action
- 访问 Actions on Google GitHub 页面,查看示例代码和库
- 访问官方 Reddit 社区,与研究 Google 助理的开发者互动
- 参阅对话设计指南,了解与对话型 Action 有关的最佳做法和指南
欢迎关注我们的 Twitter 帐号 @ActionsOnGoogle,及时了解我们的最新公告,还可以使用标签 #AoGDevs 发布 Twitter 微博,分享您构建的成果!
清理项目 [推荐]
为避免可能产生的费用,建议您移除不想使用的项目。如需删除您在本 Codelab 中创建的项目,请按以下步骤操作:
- 如需删除 Cloud 项目和资源,请完成关停(删除)项目部分中所列的步骤。
- 可选:如需立即从 Actions 控制台中移除您的项目,请完成删除项目部分中所列的步骤。如果您未完成该步骤,系统会在大约 30 天后自动移除您的项目。
反馈调查问卷
在您离开本页面前,请填写简短的调查问卷,与我们分享您的体验。