带 SIPP 测试的 DTMF 数字
DTMF digit with SIPP test
我正在尝试通过 sipp 将 DTMF 数字发送到 IVR 应用程序
这是我的 sip xml 效果不错,除了动作部分...
呼叫成功但未收到 DTMF 数字 1。它显示收到的数字为空。没有得到实际问题这个 pcap 是否有任何配置?或脚本有任何问题?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="UAC with media">
<send retrans="500">
<![CDATA[
INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[field0]@[remote_ip]:[remote_port]>
Call-ID: [call_id]
CSeq: 1 INVITE
Contact: sip:[field1]@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Type: application/sdp
Content-Length: [len]
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[local_ip_type] [local_port]
t=0 0
m=audio [auto_media_port] RTP/AVP 96 0 9 8 101 13
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-1
]]>
</send>
<recv response="100" optional="true">
</recv>
<recv response="183" optional="true">
</recv>
<recv response="200">
</recv>
<![CDATA[
ACK sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[field0]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 1 ACK
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]>
</send>
<pause milliseconds="5000"/>
<nop>
<action>
<exec play_pcap_audio="pcap/dtmf_2833_1.pcap"/>
</action>
</nop>
<pause milliseconds="2000"/>
<recv request="BYE"> </recv>
<send>
<![CDATA[
SIP/2.0 200 OK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:[field]@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 1 INVITE
Contact: sip:sipp[call_number]@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]>
</send>
<ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
您有多种发送 DTMF 的方式
- 带内:在音频流中混合发送音调(您正在尝试执行的操作)
- 带外:在单独的 SIP 消息中,如 SIP INFO 或 SIP NOTIFY,它们基本上是说 "DTMF 1 was pressed" 的消息,但没有将其放入音频流中。对于 IVR 程序员来说更容易,也更可靠。
带外方法已经变得如此普遍,以至于许多供应商默认情况下不会费心打开他们的带内检测器。您可能想要搜索名为 "In-band DTMF detection" 或 "DTMF recognizer" ...
的配置设置
当然,我不知道你用的是什么系统所以"digit received as null"可能是指:
- "nothing received",可能意味着未启用带内检测器
- "something received but could not understand it",可能意味着您的音频文件内容或该内容的传输有问题
由于是 SIP 到 SIP,我建议切换到带外 dtmf 消息。
实际上,您的脚本中有一个明确的请求,要求使用
RTP 事件:
m=audio [auto_media_port] RTP/AVP 96 0 9 8 101 13
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-1
我假设对方已经接受了你的提议,并且正在等待 dtmf 作为 rtp 事件数据包;您应该能够发送带有 rtp 事件的 pcap,或者如果没有切换到 sip 通知或信息。
此模式首先记录在 RFC 2833 中,并由 rfc5244 更新。
我正在尝试通过 sipp 将 DTMF 数字发送到 IVR 应用程序
这是我的 sip xml 效果不错,除了动作部分...
呼叫成功但未收到 DTMF 数字 1。它显示收到的数字为空。没有得到实际问题这个 pcap 是否有任何配置?或脚本有任何问题?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="UAC with media">
<send retrans="500">
<![CDATA[
INVITE sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[field0]@[remote_ip]:[remote_port]>
Call-ID: [call_id]
CSeq: 1 INVITE
Contact: sip:[field1]@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Type: application/sdp
Content-Length: [len]
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[local_ip_type] [local_port]
t=0 0
m=audio [auto_media_port] RTP/AVP 96 0 9 8 101 13
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-1
]]>
</send>
<recv response="100" optional="true">
</recv>
<recv response="183" optional="true">
</recv>
<recv response="200">
</recv>
<![CDATA[
ACK sip:[field0]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:[field1]@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[field0]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 1 ACK
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]>
</send>
<pause milliseconds="5000"/>
<nop>
<action>
<exec play_pcap_audio="pcap/dtmf_2833_1.pcap"/>
</action>
</nop>
<pause milliseconds="2000"/>
<recv request="BYE"> </recv>
<send>
<![CDATA[
SIP/2.0 200 OK sip:[service]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: sipp <sip:[field]@[local_ip]:[local_port]>;tag=[call_number]
To: sut <sip:[service]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 1 INVITE
Contact: sip:sipp[call_number]@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]>
</send>
<ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
您有多种发送 DTMF 的方式
- 带内:在音频流中混合发送音调(您正在尝试执行的操作)
- 带外:在单独的 SIP 消息中,如 SIP INFO 或 SIP NOTIFY,它们基本上是说 "DTMF 1 was pressed" 的消息,但没有将其放入音频流中。对于 IVR 程序员来说更容易,也更可靠。
带外方法已经变得如此普遍,以至于许多供应商默认情况下不会费心打开他们的带内检测器。您可能想要搜索名为 "In-band DTMF detection" 或 "DTMF recognizer" ...
的配置设置当然,我不知道你用的是什么系统所以"digit received as null"可能是指:
- "nothing received",可能意味着未启用带内检测器
- "something received but could not understand it",可能意味着您的音频文件内容或该内容的传输有问题
由于是 SIP 到 SIP,我建议切换到带外 dtmf 消息。
实际上,您的脚本中有一个明确的请求,要求使用 RTP 事件:
m=audio [auto_media_port] RTP/AVP 96 0 9 8 101 13
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-1
我假设对方已经接受了你的提议,并且正在等待 dtmf 作为 rtp 事件数据包;您应该能够发送带有 rtp 事件的 pcap,或者如果没有切换到 sip 通知或信息。
此模式首先记录在 RFC 2833 中,并由 rfc5244 更新。