Twilio 嵌套收集语句不起作用

问题描述 投票:0回答:1

我试图让 Twilio 拨打一个号码,然后监听用户的语音命令,然后向用户说出一些文本,然后继续等待用户的更多语音命令。我希望它不间断地运行,直到用户断开连接。相反,它只工作一次 - 用户说话,它会在我的服务器上调用操作 URL 作为收集的一部分,然后它说话,然后断开连接。

在我指定的操作 URL 中,我让服务器返回一个 TwiML,其中包含另一个 Gather 语句以使该过程不断重复,但是操作 URL 内的 Gather 语句将被忽略。

最初返回以下 TwiML:

<?xml version="1.0" encoding="UTF-8"?>

<Response>

<Say>Hello 0</Say>

<Gather input='speech' action='https://0fc2-**-**-**-14.ngrok-free.app/test/gather2' speechTimeout='auto' speechModel='phone_call' enhanced='true'></Gather>

<Say>After Gather</Say>

</Response>

这里显示“Hello 0”,然后调用我的 webhook 端点 https://0fc2---***-14.ngrok-free.app/test/gather2,其中包含用户所说的文本。它没有说“After Gather”,因为它进入了收集语句。

现在在 Gather2 端点中,它返回以下 TwiML:

<?xml version="1.0" encoding="UTF-8"?>

<Response>

<Say>Hello 2</Say>

<Gather input='speech' action='https://0fc2-***-**-***-14.ngrok-free.app/test/repeat' speechTimeout='10' speechModel='phone_call' enhanced='true'></Gather>

<Say>After Gather 2</Say>

</Response>

它说“Hello2”,然后说“After Gather2”,即使用户正在说话,它也不会调用 /test/repeat 端点。

我该如何解决这个问题?

使用不起作用的嵌套收集语句

twilio
1个回答
0
投票

您所描述的行为是设计使然。对于 Gather,成功收集数字或语音后,操作 URL 将接管发出 Twiml 的责任,并且操作 URL 之后的任何内容都将无法到达。这在 Gather 的文档中进行了解释:

结束后,Twilio 将其请求发送到您的操作 URL, 当前呼叫将继续使用您从该呼叫发回的 TwiML 网址。 因此,出现在您之后的任何 TwiML 动词 无法访问。 但是,如果呼叫者没有输入任何数字或语音,呼叫流程 将在原始 TwiML 文档中继续。

尝试不要按任何按钮或说任何话,等待 10 秒的语音超时到期,您应该听到“After Gather”消息。

© www.soinside.com 2019 - 2024. All rights reserved.