问题描述
我正在尝试制作自己的 Google 助理操作。我正在向我的 Google 助理发送 Json 响应。 Google 助理接收响应并阅读文本。到目前为止一切都很好。
现在我想做以下事情。 Google 助理应阅读: “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);
}
解决方法
最简单的方法是使用 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";
或者,如果您有充分的理由同时使用 firstSimple
和 lastSimple
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";