任务:我们正在尝试构建一个 Dialogflow 代理,该代理将通过我们的 Cisco 电话堆栈与呼叫者进行交互。我们将尝试从调用者那里收集字母数字凭据。
这是我们提出的架构:
问题:为了将文本输入发送到 Dialogflow,我们使用 Google Cloud 的 Speech-to-Text (STT) API 将调用者的音频转换为文本。但是,STT API 并不总是按预期执行。例如,如果呼叫者希望说他/她的出生日期是04-04-90
,转录的音频可能会返回为oh for oh 490
。然而,通过向 API 传递短语提示可以大大改善转录的音频,因此我们需要根据场景动态发送这些提示。不幸的是,我们很难理解如何通过 UniMRCP 服务器动态传递这些短语提示,特别是Google Speech Recognition 插件。
问题:Google 语音识别手册的第 5.2 节概述了使用动态语音上下文。
提供的示例是:
<grammar mode="voice" root="booking" version="1.0" xml:lang="en-US" xmlns="http://www.w3.org/2001/06/grammar">
<meta name="scope" content="hint"/>
<rule id="booking">
<one-of>
<item> 04 04 1990</item>
<item> 04 04 90</item>
<item> April 4th 1990</item>
</one-of>
</rule>
</grammar>
这是否仍然像内置语法builtin:speech/transcribe
一样转录所有用户输入?
例如,如果我要说March 5th 1980,
Google 的 STT 会返回March 5th 1980,
还是只返回提供的项目之一?
明确地说,我希望 Google 的 STT 能够返回的不仅仅是提供的项目,因此如果用户说March 5th 1980,
我希望通过 UniMRCP、VBB、CVP 返回并传递给 Dialogflow。 有人告诉我,即使 STT 返回March 5th 1980
CVP 或语音浏览器也可能会将其评估为“不匹配”。