1

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

现在我想做以下事情。Google Assistant 应该是:“Test 123”,然后延迟 1 秒……最后是“Test321”

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

在此处输入图像描述

我通过 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);
}
4

1 回答 1

2

最简单的方法是使用SSML作为您的语音响应并包含一个<break>标签来生成暂停。

因此,您的 SSML 可能类似于:

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

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

根据您的代码,它可能看起来像这样:

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";
于 2021-04-07T13:25:22.957 回答