从零构建Google Assistant对话应用:Actions on Google实战指南
2026/6/2 2:42:19 网站建设 项目流程

1. 项目概述:为什么你的业务需要“Actions on Google”?

如果你正在经营一家面向消费者的业务,无论是咖啡馆、健身房、咨询公司,还是电商平台,你肯定思考过一个问题:如何让我的服务更便捷地触达用户?当用户想预约、查询、下单时,他们最自然的反应是什么?是打开手机,在十几个App图标里翻找,还是直接对着身边的智能音箱说一句“Hey Google”?答案显而易见。后者代表了交互的未来——对话式交互。而“Actions on Google”正是你为你的业务接入这个未来世界的官方桥梁。

简单来说,Actions on Google(AoG)是谷歌为开发者提供的平台,让你可以为Google Assistant(谷歌助手)创建自定义的对话体验。你可以把它理解为你为你的业务在Google Assistant这个“超级App”里开发的一个“技能”或“小程序”。用户无需下载任何新应用,只需通过语音或文字与Google Assistant对话,就能完成与你业务的互动。这不仅仅是技术上的酷炫,它直接解决了现代商业的几个核心痛点:降低用户使用门槛、提升服务可及性、在用户最自然的场景中嵌入你的品牌。

想象一下,你的披萨店客户可以在开车回家路上,直接对车载系统说“Hey Google,从XX披萨店订一个夏威夷披萨”,订单就完成了。你的健身会员可以在早晨起床时,问“Hey Google,我今天在XX健身房的课程安排是什么?”,并直接完成签到。这种无缝、无摩擦的体验,是任何传统App或网页都难以比拟的。它让你的业务变得“可对话”,从而在用户心智中建立起更智能、更便捷的品牌形象。这不仅仅是“锦上添花”,在语音交互日益普及的今天,它正迅速成为提升用户留存和获取新客的“雪中送炭”。

2. 核心思路拆解:从业务场景到对话蓝图

在动手敲代码之前,最关键的一步是进行“对话设计”。这不同于传统的UI/UX设计,它关乎于如何用最自然的人类语言,引导用户完成一个目标。一个成功的Action,其核心在于精准匹配用户意图与你的业务能力。

2.1 识别高价值对话场景

并非所有业务功能都适合做成语音交互。你需要筛选出那些“高频、低复杂度、结果明确”的场景。通常,这些场景符合以下几个特征:

  1. 信息查询类:用户需要快速获取一个明确的答案。例如:“我的账户余额是多少?”、“门店今天营业到几点?”、“产品A有没有库存?”。
  2. 事务执行类:用户需要完成一个简单的、有明确参数的操作。例如:“预约明天下午两点的理发”、“订购一杯大杯拿铁,送到XX地址”、“播放我的健身歌单”。
  3. 流程引导类:用户需要被引导完成一个多步骤的流程,但每一步都相对简单。例如:“我想申请一张信用卡”、“报告设备故障”。

注意:避免将需要复杂输入、大量选项选择或视觉确认(如图片、复杂表格)的流程强行语音化。例如,让用户通过语音从50种商品中挑选并比较参数,体验会非常糟糕。这类场景更适合作为语音入口,触发后跳转到富媒体界面(如手机屏幕)完成后续操作。

2.2 设计对话流程与话术

确定了场景,接下来就要像写剧本一样设计对话。一个完整的对话流程通常包括:

  1. 欢迎意图:用户通过调用短语(如“Hey Google,和[你的业务名]对话”)触发你的Action。你的Action应该有一个友好、清晰的欢迎语,并简要说明能提供什么帮助。
  2. 主意图处理:这是核心。你需要定义用户可能表达的各种方式(训练短语)。例如,对于“查询营业时间”的意图,用户可能会说“你们几点开门?”、“今天营业吗?”、“关门时间是?”。平台的自然语言理解(NLU)引擎会将不同的用户表达映射到同一个意图。
  3. 参数收集:如果意图需要额外信息,Assistant会提示用户提供。例如,对于“预约服务”意图,你需要收集“服务类型”、“日期”、“时间”等参数。设计清晰、不冗长的提示语至关重要。
  4. 确认与执行:在关键操作(如支付、预约)前,必须向用户确认信息。确认后,调用你的后端服务(Webhook)执行实际业务逻辑。
  5. 结果反馈与结束:将执行结果(成功或失败)用清晰的语音反馈给用户,并提供下一步的建议(如“您的预约已确认,预约号是123。需要我把详情发送到您手机吗?”)。

2.3 技术架构选型:Dialogflow ES vs. 自定义Conversation

Actions on Google 支持两种主要的开发方式:

  • 使用 Dialogflow ES(推荐给大多数业务):这是一个谷歌收购的、强大的对话式AI平台。它提供了直观的图形化界面来设计意图、实体和对话流,极大地降低了开发门槛。其内置的自然语言理解模型经过海量数据训练,能很好地处理用户表达的变化。对于绝大多数标准业务场景(信息查询、简单事务),Dialogflow ES 是最高效的选择。
  • 使用 Actions SDK 和自定义Conversation:这种方式提供最大的灵活性,允许你完全通过代码(如Node.js, Python, Java)来控制对话逻辑。适合需要极其复杂的状态管理、与特定后端深度集成或希望完全掌控NLU模型的情况。但开发成本和维护难度较高。

选择建议:除非你的业务对话逻辑异常复杂或有特殊定制需求,否则强烈建议从Dialogflow ES开始。它能让你在几小时内就搭建起一个可用的原型,快速验证想法。后续如果真有高级需求,部分功能仍可混合使用。

3. 实操全流程:从零构建一个“咖啡订购”Action

让我们以一个虚拟的“BeanThere咖啡店”在线订购场景为例,完整走一遍构建流程。目标是让用户通过Google Assistant语音下单。

3.1 前期准备与环境搭建

  1. 创建谷歌云项目:访问 Google Cloud Console ,创建一个新项目(例如beam-there-coffee-action)。这是所有服务(Actions API, Dialogflow ES)的容器。
  2. 启用必要API:在项目的“API和服务”库中,搜索并启用Actions APIDialogflow API
  3. 安装并初始化 gCloud CLI:这是谷歌云的命令行工具,用于项目管理和部署。安装后,运行gcloud init登录并关联到你刚创建的项目。
  4. 访问 Actions Console:这是Action的“总部”。访问 Actions on Google Console ,在同一个项目下开始创建你的Action。

3.2 在Dialogflow ES中构建对话核心

  1. 创建代理:在Actions Console中,选择“创建项目”后,会引导你连接到Dialogflow ES。为你的对话机器人创建一个“代理”(Agent),这就是你的Action的大脑。
  2. 设计意图
    • welcome意图:系统默认意图。设置当用户首次调用时的回复,如“欢迎来到BeanThere咖啡店!您可以通过我订购咖啡、查询菜单或了解营业时间。今天想做什么?”
    • order.coffee意图:核心订购意图。
      • 训练短语:添加多种用户可能说的话,如“我想点一杯咖啡”、“下单拿铁”、“订购一杯卡布奇诺”。
      • 参数:定义需要收集的参数。例如:
        • coffee_type(类型:@sys.any,或你自定义的@coffee.menu实体):咖啡种类。
        • coffee_size(类型:@sys.any,或自定义@size实体):杯型。
        • milk_option(类型:@sys.any,可选):牛奶选项。
      • 提示:为每个参数设置友好的追问提示,如“您想点哪种咖啡?我们有拿铁、卡布奇诺、美式...”。
    • fallback意图:当用户说的话无法匹配任何意图时触发。设置一个友好的回复,如“抱歉,我没听明白。您可以试着说‘点一杯拿铁’或者‘查询营业时间’。”
  3. 创建自定义实体:为了让NLU更好地识别你的业务专有词汇,创建实体。例如:
    • 实体coffee.menu:词条latte,cappuccino,americano,mocha...
    • 实体size:词条small,medium,large,tall,grande,venti...
  4. 启用Webhook调用:在order.coffee意图的底部,打开“在意图结束时启用Webhook调用”开关。这意味着当所有必要参数收集完毕后,Dialogflow会将对话数据(包含参数)以JSON格式发送到你指定的后端服务地址,由你的业务逻辑处理订单。

3.3 开发与部署业务逻辑Webhook

Webhook是你的业务服务器,用于处理真实的订单逻辑。这里以 Node.js 和 Express 框架为例,展示一个极简的实现。

  1. 初始化项目

    mkdir coffee-webhook && cd coffee-webhook npm init -y npm install express body-parser
  2. 创建服务器文件index.js

    const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); // Dialogflow Webhook 处理端点 app.post('/webhook', (req, res) => { const intent = req.body.queryResult.intent.displayName; const parameters = req.body.queryResult.parameters; let fulfillmentText = ''; if (intent === 'order.coffee') { const { coffee_type, coffee_size, milk_option } = parameters; // 这里应调用你的真实订单系统API // 模拟订单处理 const orderId = `ORD${Date.now()}`; fulfillmentText = `好的,已为您下单:一杯${coffee_size}杯的${coffee_type}${milk_option ? `,加${milk_option}` : ''}。订单号是${orderId}。预计15分钟后可取。需要我把订单详情发送到您关联的手机上吗?`; } else if (intent === 'Default Welcome Intent') { fulfillmentText = '欢迎光临BeanThere咖啡店!我可以帮您订购咖啡、查询菜单或营业时间。请告诉我您需要什么?'; } else { fulfillmentText = '抱歉,我暂时无法处理这个请求。'; } res.json({ fulfillmentMessages: [{ text: { text: [fulfillmentText] } }] }); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Webhook服务运行在端口 ${PORT}`));
  3. 部署Webhook:你需要将这段代码部署到一个公网可访问的服务器。对于快速原型,可以使用Google Cloud RunHerokuGlitch等PaaS服务。

    • 以 Cloud Run 为例:将代码推送到Git仓库,在Cloud Console中创建Cloud Run服务,选择从源码部署,它会自动构建容器并提供一个HTTPS端点,例如https://your-webhook-service.a.run.app/webhook
  4. 配置Webhook地址:回到Dialogflow ES控制台,在“Fulfillment”页面,填入你部署好的Webhook URL(如https://your-webhook-service.a.run.app/webhook),并保存。

3.4 在Actions Console中完成集成与发布

  1. 配置调用名称:在Actions Console的“开发”->“调用”部分,设置你的Action的调用名称(Invocation name),如“Bean There咖啡店”。用户将通过“Hey Google,和Bean There咖啡店对话”来触发。
  2. 配置场景:在“场景”部分,关联你在Dialogflow中创建的代理。
  3. 配置账户关联(可选但重要):如果你的服务需要用户登录(例如查询个人订单历史),需要在此设置OAuth 2.0或Google Sign-In。对于简单的下单,可以跳过。
  4. 添加表面功能:声明你的Action需要哪些设备能力,如“音频输出”、“屏幕输出”(如果打算在智能显示屏上显示图片)。
  5. 测试与模拟:使用内置的模拟器,你可以直接输入文本或语音来测试整个对话流程,无需真实设备。
  6. 发布准备:填写所有必需的发布信息,包括简短和长描述、示例交互话术、隐私政策链接、小图标和横幅图等。
  7. 提交审核:提交你的Action供谷歌审核。审核通常关注策略合规性、用户体验(是否崩溃、回复是否恰当)和元数据完整性。

4. 进阶优化与提升用户体验

一个能用的Action和一个优秀的Action之间,差距就在细节里。

4.1 利用上下文实现多轮对话

单纯的“一问一答”很生硬。利用Dialogflow的“上下文”(Context),可以记住对话状态。例如,用户问“你们有什么咖啡?”,你回复后,用户接着说“来一杯大的”。这时,“大的”指的是咖啡,而不是别的。你需要在上一个回复中输出一个上下文(如coffee_order),并在下一个意图中设置输入上下文为coffee_order,这样系统就知道用户仍在咖啡订购的对话流中,并自动将“大的”映射到coffee_size参数。

4.2 丰富响应格式:卡片、列表与建议芯片

在智能显示屏或手机Google Assistant App上,纯语音回复是浪费。你可以通过Webhook返回丰富的响应:

  • 基本卡片:显示标题、图片、文字描述和一个按钮(如“打开官网”)。
  • 列表:展示多个选项供用户选择,非常适合展示菜单。
  • 建议芯片:在回复底部提供几个预设的快捷短语按钮(如“查看菜单”、“再订一杯”、“联系客服”),引导用户下一步操作,极大提升交互效率。

4.3 实现用户记忆与个性化

通过账户关联获取用户的匿名标识符,你可以将对话与你的后台用户系统关联起来。这样,当老用户再次光临时,你可以说“欢迎回来,张三!您上次点的是一杯大杯拿铁,今天想来点一样的吗?”,这种个性化体验能显著提升用户粘性。

4.4 处理支付与交易

对于直接下单场景,集成Google提供的交易API是终极方案。它允许用户通过已保存在Google账户中的支付方式(如信用卡)在对话中直接完成支付,体验无缝且安全。这需要更复杂的设置,包括商品目录管理、价格更新和订单状态同步,但对于电商类业务是质的飞跃。

5. 避坑指南与实战心得

在开发和发布Action的过程中,我踩过不少坑,也积累了一些让项目更顺利的经验。

5.1 对话设计中的常见陷阱

  • 提示语过于开放:避免问“您需要什么?”。用户可能会回答任何东西,导致匹配失败。应该问封闭式或引导式问题,如“您想点咖啡、查询营业时间,还是了解我们的新品?”
  • 忽略错误处理:用户可能会提供无效参数(如“我要一杯外星人咖啡”)。你的Webhook必须有健壮的错误处理,并返回友好的引导信息,而不是让对话卡死或报技术错误。
  • 对话过长:语音交互中,用户的短期记忆有限。尽量将复杂流程拆解,每一步只收集1-2个关键信息,并适时给予确认和总结。

5.2 开发与测试要点

  • 模拟器是你的最佳朋友:Actions Console的模拟器功能极其强大,不仅可以测试,还能查看每次请求/响应的完整JSON日志。调试Webhook问题时,这是第一现场。
  • 本地测试Webhook:在开发初期,可以使用ngroklocaltunnel这样的工具,将你本地运行的服务器临时暴露到公网,让Dialogflow可以调用,实现快速迭代调试。
  • 参数类型选择:优先使用系统内置实体(@sys.date,@sys.time,@sys.number),它们识别准确率高。对于业务专有名词,务必创建自定义实体并添加足够的同义词(如“大杯”的同义词可以是“超大杯”、“Large”)。
  • 关注配额与限额:谷歌云API有免费配额,但对于高频使用的Action,要监控用量,避免因配额用尽导致服务中断。特别是Dialogflow API的请求次数。

5.3 发布与运营注意事项

  • 审核不通过的常见原因
    • 政策违规:内容涉及敏感领域。
    • 用户体验差:频繁出现“Sorry, I didn't get that”或崩溃。
    • 元信息不完整/误导:描述与功能不符,示例话术无法工作。
    • 账户关联问题:如果需要登录但流程不通。
  • 收集反馈与迭代:发布后,关注Actions Console中的分析面板,查看用户常用的调用短语、成功率、留存率等数据。根据数据持续优化你的意图和对话流。
  • 多语言支持:如果你的业务面向全球,Dialogflow ES支持轻松添加多种语言版本。但要注意,不同语言的文化和表达习惯不同,对话设计需要本地化,不能直接翻译了事。

构建一个成功的Actions on Google项目,技术实现只是骨架,真正的灵魂在于对用户对话场景的深刻理解和对细节体验的不断打磨。从一个小而美的功能点切入,快速上线验证,然后基于真实用户反馈和数据持续迭代,是让这项技术真正为你的业务赋能的关键路径。当你听到第一位用户通过语音成功完成一笔订单时,你就会明白,这不仅仅是一个功能更新,而是为你的事业打开了一扇通往更自然、更智能交互时代的大门。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询