本页面介绍了如何使用 API 将音频输入流式传输给检测意图请求。Dialogflow 会处理音频并将其转换为文字,然后再尝试匹配意图。此过程称为音频输入、语音识别、语音转文字或 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 会忽略该流中向其发送的任何音频。
在双向流式传输中,客户端可以半关闭此流式传输对象,以告知服务器它不会再继续发送数据。例如,在 Java 和 Go 中,此方法称为 closeSend。
在以下情况下,半关闭(并非取消)数据流非常重要:
- 客户端已完成数据发送。
- 客户端配置为
single_utterance设为true,并且收到了StreamingDetectIntentResponse以及识别结果END_OF_SINGLE_UTTERANCE。
关闭数据流后,客户端应根据需要使用新数据流发起新请求。
流式传输检测意图
以下示例使用 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 的最佳实践,请参阅示例页面。