对 Google 网络钩子调用的操作 - 为语音响应添加延迟

问题描述

我正在尝试制作自己的 Google 助理操作。我正在向我的 Google 助理发送 Json 响应。 Google 助理接收响应并阅读文本。到目前为止一切都很好。

现在我想做以下事情。 Google 助理应阅读: “Test 123”然后延迟 1 秒...然后最后读取“Test321”

我应该如何调整我的 Json 响应以使其与延迟一起工作?可能吗?

enter image description here

我通过 ASP.NET 生成 JSON 响应对象

我的主班

[HttpPost]
public async Task<IActionResult> PostWebHook()
{

    Google_Assistant_Request_Json.RequestJson request = new Google_Assistant_Request_Json.RequestJson(); //Request Object
    Google_Assistant_Response_Json.ResponseJson response = new Google_Assistant_Response_Json.ResponseJson(); //Response Object

    string body;
    using (var reader = new StreamReader(Request.Body))
    {
        
        body = await reader.ReadToEndAsync();
        request = JsonConvert.DeserializeObject<Google_Assistant_Request_Json.RequestJson>(body);

            response.session.id = request.session.id;
            response.prompt.@override = false;
            response.prompt.firstSimple.speech = "Test123";
            response.prompt.lastSimple.speech = "Test321";
      
    }

    return Ok(response);
}

解决方法

最简单的方法是使用 here 作为您的语音回复,并包含一个 SSML 标签来产生停顿。

因此您的 SSML 可能类似于:

<speak>
Test 123 <break time="1s"/> Test 321
</speak>

请注意,这应该是您在回复中用于“演讲”字段的内容。 “文本”字段应该包含 SSML 标记,并且默认情况下无法确保文本的第二部分在 1 秒延迟后出现 - 所有文本都会同时显示。 (有一些高级技术涉及 <break> 和 SSML Interactive Canvas 标记,但是这些技术在使用上有一些限制。)

根据您的代码,它可能如下所示:

response.prompt.firstSimple.speech = "<speak>Test123 <break time='1s'/> Test321</speak>";
response.prompt.firstSimple.text   = "Test123 Test321";

或者,如果您有充分的理由同时使用 firstSimplelastSimple

response.prompt.firstSimple.speech = "<speak>Test123 <break time='1s'/></speak>";
response.prompt.firstSimple.text   = "Test123";
response.prompt.lastSimple.speech  = "<speak>Test321</speak>";
response.prompt.lastSimple.text    = "Test321";

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...