VXML 使用输入进行传输
VXML use the input for transfer
我正在尝试获取用户输入(国家代码 + phone 号码)以便稍后在使用传输元素时调用它。
我的问题出在传输元件上,直接挂了。我不知道如何调试它们。我使用 NEXMO 作为提供商。我事先搜索并尝试了很多东西,包括分别测试每个功能(有效!)。
<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.1">
<property name="inputmodes" value="dtmf" />
<form id="get_mobile_number">
<field name="mobileno" type="digits?minlength=7;maxlength=13">
<prompt>
<prosody rate="slow"> please enter your 7 to 13 digit mobile number !</prosody>
</prompt>
<!--INVALID-->
<nomatch count="1">
<prompt>
<prosody rate="slow"> Is that a number? Please try again. </prosody>
</prompt>
<reprompt/>
</nomatch>
<!--TIMEOUT-->
<noinput count="1">
<prompt>Again, please enter your 7 to 13 digit mobile number !</prompt>
<reprompt/>
</noinput>
<catch event="noinput nomatch" count="3">
<prompt>Please try again later. Good bye.</prompt>
<exit/>
</catch>
<filled>
<goto next="#call_number"/>
</filled>
</field>
</form>
<form id="call_number">
<transfer name="result" destexpr="'tel:+'+ mobileno" bridge="true">
<prompt>Please wait while we transfer you.</prompt>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="voice">
<rule id="TOPLEVEL" scope="public">
<one-of>
<item> disconnect </item>
</one-of>
</rule>
</grammar>
</transfer>
<filled>
<if cond="result == 'busy'">
<prompt>Sorry, they're busy.</prompt>
<elseif cond="result == 'noanswer'" />
<prompt>Sorry, they didn't answer.</prompt>
<else />
<prompt>
You spoke for <value expr="result$.duration" /> seconds.
</prompt>
</if>
<if cond="result$.inputmode == 'voice'">
You ended the call by saying,<value expr="result$.utterance" />.
</if>
</filled>
</form>
</vxml>
有谁知道它有什么问题吗?
从表面上看,逻辑似乎是正确的。
为了调试它,我建议 运行 仅使用 call_number
形式(不使用 get_mobile_number
形式)并在其中输入实际数字而不是 + mobileno
形式 'call_number'。然后您将知道呼叫是否确实在进行。
如果仍然没有通过,那么您可能必须按照提供商的预期使用正确的格式(这可能不是 VXML 错误)。
或者,您可以只检查 IVR 日志并查看正在拨入的号码(如果您可以自己识别任何明显的错误)
我正在尝试获取用户输入(国家代码 + phone 号码)以便稍后在使用传输元素时调用它。
我的问题出在传输元件上,直接挂了。我不知道如何调试它们。我使用 NEXMO 作为提供商。我事先搜索并尝试了很多东西,包括分别测试每个功能(有效!)。
<?xml version="1.0" encoding="UTF-8"?>
<vxml version="2.1">
<property name="inputmodes" value="dtmf" />
<form id="get_mobile_number">
<field name="mobileno" type="digits?minlength=7;maxlength=13">
<prompt>
<prosody rate="slow"> please enter your 7 to 13 digit mobile number !</prosody>
</prompt>
<!--INVALID-->
<nomatch count="1">
<prompt>
<prosody rate="slow"> Is that a number? Please try again. </prosody>
</prompt>
<reprompt/>
</nomatch>
<!--TIMEOUT-->
<noinput count="1">
<prompt>Again, please enter your 7 to 13 digit mobile number !</prompt>
<reprompt/>
</noinput>
<catch event="noinput nomatch" count="3">
<prompt>Please try again later. Good bye.</prompt>
<exit/>
</catch>
<filled>
<goto next="#call_number"/>
</filled>
</field>
</form>
<form id="call_number">
<transfer name="result" destexpr="'tel:+'+ mobileno" bridge="true">
<prompt>Please wait while we transfer you.</prompt>
<grammar xml:lang="en-US" root = "TOPLEVEL" mode="voice">
<rule id="TOPLEVEL" scope="public">
<one-of>
<item> disconnect </item>
</one-of>
</rule>
</grammar>
</transfer>
<filled>
<if cond="result == 'busy'">
<prompt>Sorry, they're busy.</prompt>
<elseif cond="result == 'noanswer'" />
<prompt>Sorry, they didn't answer.</prompt>
<else />
<prompt>
You spoke for <value expr="result$.duration" /> seconds.
</prompt>
</if>
<if cond="result$.inputmode == 'voice'">
You ended the call by saying,<value expr="result$.utterance" />.
</if>
</filled>
</form>
</vxml>
有谁知道它有什么问题吗?
从表面上看,逻辑似乎是正确的。
为了调试它,我建议 运行 仅使用 call_number
形式(不使用 get_mobile_number
形式)并在其中输入实际数字而不是 + mobileno
形式 'call_number'。然后您将知道呼叫是否确实在进行。
如果仍然没有通过,那么您可能必须按照提供商的预期使用正确的格式(这可能不是 VXML 错误)。
或者,您可以只检查 IVR 日志并查看正在拨入的号码(如果您可以自己识别任何明显的错误)