分布式电话测试程序
calltest的Python项目详细描述
配置
配置是一个yaml文件,基本上如下所示:
links: foo: channel: "SIP/foo/{nr}" number: "+49123456789" bar: channel: "SIP/bar/{nr}" number: "+49987654321" calls: ':default:': mode: dtmf foobar: src: foo dst: bar info: "Check that calling bar from foo works"
有关工作版本,请参见example.cfg。运行 /ct -c example.cfg dumpcfg 用于预先填充默认值的副本。
链接
链接 包含CallTest可以使用的星号通道。
在链路上发起呼叫时使用这些参数:
- 频道:用来呼叫这个频道的拨号字符串。 {nr} 是 目的地电话号码的占位符。
这些参数在接听电话时使用:
- 号码:呼叫此链接时要拨的号码。
prio值用于在获取 双向测试。如果相同,则使用链接的名称。
:default:'值将应用于所有其他项(除非重写), 这样可以避免更改999个相同的条目。
呼叫
调用包含许多(命名的)测试。
- src:要使用的源链接,即发起呼叫。
- DST:要使用的目的地,即接听电话。
- 模式:如何执行测试。见下文。
- 超时:呼叫持续时间的硬限制。如果通话超过这个时间, 它被终止,测试失败。
- url:对于纯应答模式,您需要一种方法来引起呼叫。现在这个 通过获取此URL上的数据来完成。
:default:'值将应用于所有其他项(除非重写), 这样可以避免更改999个相同的条目。
测试子标题包含与运行相关的值 在后台重复测试:
- retry,repeat:延迟至重复呼叫的秒数,具体取决于 上一次尝试是失败还是成功。
- 警告:测试进入"警告"状态时连续失败的次数。
- 失败:测试进入"失败"状态时的连续失败次数。
- 跳过:如果为真,则只能手动触发此测试。
模式
模式值配置CallTest如何处理调用。
双音多频
应答信道发送随机的dtmf音调序列。发起人 然后做同样的事情。接收器确认代码正确。
当设置了dtmf.may_repeat时,允许接收器读取重复的dtmf 声调。此标志可能是带内信令所必需的。
dtmf.len 是要测试的位数。通常,一个数字是 重复的。否则序列是随机的。
呼叫
应答频道会确认它在响,但是 挂断。
音频
像DTMF一样,但是两边都发送一个声音文件。声音是 记录。它们应该匹配,但还没有测试。
环
仅来源:拨打此号码。应该在响。然后挂断。
播放
仅来源:拨打此号码。它应该会回答。然后播放一个声音 挂断。
如果未指定音频输出,则只需挂断即可。
可选地, audio.dst_in 记录通话期间的传入音频。 记录ing在播放传出声音时运行。
失败
仅来源:拨打此号码。电话可能无法接通。一定是 被拒绝,在响铃时间之前的一段时间内
还要做的事:添加一个标志以确定是否有中间铃声 允许/要求/禁止状态。
超时
仅来源:拨打此号码。电话可能无法接通。一定是 然后在 铃声时间 和 超时 秒之间被拒绝 后来,
等待
只接听:等待来电,将其设为铃声,稍等 秒,挂断。
回答
仅接听:等待来电,接听来电,还可以选择播放声音, 可选择在播放声音时录制音频,然后挂断。
录音将与发出的声音重叠。这是一个星号 限制。
记录
仅接听:等待来电,接听来电,还可以选择播放声音, 有选择地录制传入的音频,直到发端人挂断电话。
数字格式
待办事项:当前来电号码既不发送也不检查。
CallTest识别两种电话号码:站点本地分机和 其他一切。calltest用首字母"+"来区分它们。
传出
传出的星号通道应该能够直接处理这两种类型。 如果没有,要么放弃踢你的电话供应商,或写一个"本地"频道 把你的电话号码弄坏了。例如,如果你需要放弃 "+",使用此宏:
context mangle { _+! => { Dial(SIP/broken/${EXTEN:1}) } }
然后调用 local/{nr}@mangle 。作为另一个例子,如果您需要使用 L要拨出的电话号码格式:
context mangle { _X! => Dial(SIP/broken/${EXTEN}); // pass-thru for local extensions _+49123! => Dial(SIP/broken/${EXTEN:6}); // 49123: country+city _+49! => Dial(SIP/broken/0${EXTEN:3}); // 49: country // _+! => Dial(SIP/broken/00${EXTEN:1}); _+! => Congestion(); }
尽管你可能只需要第一行和最后一行就行了。
以上适用于大多数欧洲,其中"00"是国际的,"0" 国家前缀。如果你在南普(美国或加拿大),你可能 要改用此宏:
context mangle { _N! => Dial(SIP/broken/1888${EXTEN}); // 888 is your area code _[01]! => Dial(SIP/broken/${EXTEN}); // pass-thru for operator and long-distance _+1! => Dial(SIP/broken/${EXTEN:1}); // long distance // _+! => Dial(SIP/broken/011${EXTEN:1}); // international _+! => Congestion(); }
最后一行被一个"拥塞"阻塞器替换,这样就错了 不会引起国际费用。
输入
calltest将验证传入呼叫上的呼叫方号码是否匹配 测试配置的源链接中的编号。如果那个号码是 以"+"为前缀的输入号码将转换为国际号码 格式,根据配置文件,需要完全匹配。否则, 配置的数字假定为本地扩展名,并且只能位于 呼叫端。
这确保了不会有任何废话,同时也承认 站点本地号码通常不会干净地传输。
如果你需要星号来改变来电者的号码,使其看起来正常 对于calltest,将其添加到 calltest 宏。例如,到 去掉前导零(在nanp中通常是9):
macro calltest(typ) { SET(cid=${CALLERID(num)}) switch(cid) { pattern 0.: set(CALLERID(num)=${cid:1}); break; default: break; } Stasis("calltest", ${typ}); Hangup(); return; }
星号配置
服务器连接
星号部分的一些参数需要进一步说明。
- 应用程序:
- 音频:"声音"URL的(基部),星号将用于查找 测试的传出声音文件。应该是声音:/一些/绝对/路径
测试设置
Asterisk需要知道如何将传入的呼叫定向到测试仪。这是 通常用停滞宏完成。这是用于 扩展的.ael :
macro calltest(link,nr) { Stasis(calltest,${link},${nr}); Hangup(); return; }
- calltest:星号app的配置参数。
- link:链接的名称,在 星号中。link
- nr:输入的目的地电话号码。
您可以从上下文中调用此宏:
αααα7如果要将频道上的所有传入呼叫路由到此宏,请使用 类似于此上下文:
context ext_bar { s => &calltest(bar,); i => &calltest(bar,${INVALID_EXTEN}); _+! => &calltest(bar,${EXTEN}); _X! => &calltest(bar,${EXTEN}); h => Hangup(); }
警告:
These calls all have no spaces after the argument-separating commas. This is important.
线路设置
PJSIP不是很宽容。示例配置:todo。
代替语音质量检查,这个系统还没有,你 可能只需要将端点的DTMF模式设置为"带内"。不要使用 进行此操作时压缩编解码器。你可能需要设置测试 DTMF可以重复。然而,带内DTMF并非特别 可靠,可能会随机中断。
随机DTMF序列只使用数字,因为字母不是 普遍传递,而 和 * 可以被解释,因此 被中间系统吞噬。
测试
这个包包含一个 example.cfg 配置。使用它,你的 星号.ael 文件应包含以下行:
links: foo: channel: "SIP/foo/{nr}" number: "+49123456789" bar: channel: "SIP/bar/{nr}" number: "+49987654321" calls: ':default:': mode: dtmf foobar: src: foo dst: bar info: "Check that calling bar from foo works"0
将此项添加到您的 ari.conf中 < Buff行情> [例] 类型=用户 密码=哦不你不 密码格式=普通
最后,将 enabled=yes 添加到 http.conf 的 [常规] 部分
完成所有这些并重新启动星号(重新加载"AEL", "http"和"res_ari"也应该工作),命令 /ct -c example.cfg 运行 应该通过。