本页面介绍了如何使用 API 将音频输入流式传输到检测 intent 请求。Dialogflow 会先处理音频并将其转换为文本,然后再尝试进行 intent 匹配。此过程称为音频输入、语音识别、语音转文字或 STT。
准备工作
此功能仅适用于使用 API 与最终用户互动的情况。如果您使用的是集成服务,则可以跳过本指南。
在阅读本指南之前,请完成以下任务:
- 阅读 Dialogflow 基础知识。
- 执行设置步骤。
创建代理
- 前往 Dialogflow ES 控制台。
- 如果系统提示,请登录控制台。如需了解详情,请参阅 Dialogflow 控制台概览。
- 在边栏菜单中,展开加载代理。
- 点击创建新代理。
- 输入代理名称、默认语言和默认时区。
- 输入现有项目。如需让 Dialogflow 控制台创建项目,请选择创建新的 Google 项目。
- 点击创建。
流式传输基础知识
Session 类型的 streamingDetectIntent 方法会返回双向 gRPC 流式传输对象。此对象的可用方法因语言而异,因此请参阅客户端库的参考文档了解详情。
流式传输对象用于同时发送和接收数据。使用此对象,您的客户端会将音频内容流式传输到 Dialogflow,同时监听 StreamingDetectIntentResponse。
streamingDetectIntent 方法具有一个会影响语音识别的 query_input.audio_config.single_utterance 参数:
- 如果为
false(默认),则语音识别不会停止,直到客户端关闭数据流。 - 如果为
true,Dialogflow 将检测输入音频中的单个语音。当 Dialogflow 检测到音频中的语音已停止或暂停时,它会停止语音识别,并向您的客户端发送一个StreamingDetectIntentResponse,其中包含END_OF_SINGLE_UTTERANCE的识别结果。收到END_OF_SINGLE_UTTERANCE后,Dialogflow 会忽略在数据流上发送到 Dialogflow 的任何音频。
在双向流式传输中,客户端可以半关闭流对象,以向服务器发出信号,表明它不会发送更多数据。例如,在 Java 和 Go 中,此方法称为 closeSend。
在以下情况下,请务必半关闭(但不要中止)数据流:
- 客户端已完成数据发送。
- 您的客户端配置为将
single_utterance设置为true,并且它会收到识别结果为END_OF_SINGLE_UTTERANCE的StreamingDetectIntentResponse。
关闭数据流后,您的客户端应根据需要使用新数据流启动新请求。
流式传输检测意图
以下示例使用 Session 类型的 streamingDetectIntent 方法流式传输音频。
Go
如需向 Dialogflow CX 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 Dialogflow CX 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Dialogflow CX 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 Dialogflow CX 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为本地开发环境设置身份验证。
其他语言
C#:请按照客户端库页面上的 C# 设置说明操作,然后访问 .NET 版 Dialogflow CX 参考文档。
PHP:请按照客户端库页面上的 PHP 设置说明操作,然后访问 PHP 版 Dialogflow CX 参考文档。
Ruby:请按照客户端库页面上的 Ruby 设置说明操作,然后访问 Ruby 版 Dialogflow CX 参考文档。
示例
如需详细了解从浏览器麦克风流式传输到 Dialogflow 的最佳实践,请参阅示例页面。