Google webhook 调用的操作 - 为语音响应添加延迟
Actions on Google webhook call - add a delay to speech response
我正在尝试制作自己的 Google 辅助操作。我正在向我的 Google 助理发回 Json 回复。 Google 助理收到回复并阅读文本。目前一切顺利。
现在我想做以下事情。 Google 助手应该阅读:
“Test 123”然后延迟 1 秒...然后最后读“Test321”
我应该如何调整我的 Json 响应以使其适用于延迟?可能吗?
我通过 ASP.NET
生成 JSON 响应对象
我的主Class
[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);
}
最简单的方法是使用 SSML as your speech response and to include a <break>
标记来生成暂停。
因此您的 SSML 可能类似于:
<speak>
Test 123 <break time="1s"/> Test 321
</speak>
请注意,这应该是您在回复中用于“语音”字段的内容。 “文本”字段应不包含 SSML 标记,并且默认情况下无法确保文本的第二部分在 1 秒延迟后出现 - 显示所有文本立刻。 (有一些涉及 Interactive Canvas and the SSML <mark>
标签的高级技术,但是这些技术对其使用有一些限制。)
根据您的代码,它可能看起来像这样:
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";
我正在尝试制作自己的 Google 辅助操作。我正在向我的 Google 助理发回 Json 回复。 Google 助理收到回复并阅读文本。目前一切顺利。
现在我想做以下事情。 Google 助手应该阅读: “Test 123”然后延迟 1 秒...然后最后读“Test321”
我应该如何调整我的 Json 响应以使其适用于延迟?可能吗?
我通过 ASP.NET
生成 JSON 响应对象我的主Class
[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);
}
最简单的方法是使用 SSML as your speech response and to include a <break>
标记来生成暂停。
因此您的 SSML 可能类似于:
<speak>
Test 123 <break time="1s"/> Test 321
</speak>
请注意,这应该是您在回复中用于“语音”字段的内容。 “文本”字段应不包含 SSML 标记,并且默认情况下无法确保文本的第二部分在 1 秒延迟后出现 - 显示所有文本立刻。 (有一些涉及 Interactive Canvas and the SSML <mark>
标签的高级技术,但是这些技术对其使用有一些限制。)
根据您的代码,它可能看起来像这样:
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";