分布式电话测试程序

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 运行 应该通过。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么javaassist仅在项目中使用lambda时加载Entitymanager时抛出无效的常量类型:18   java如何识别用户是否在Alexa中首次启动技能?   java maven:如何防止插件更新   java StringBuilder将null追加为“null”   在java中,我可以在画布上绘制画布吗?   java如何在JRadioButton上垂直对齐文本和图像?   java“类是对象的集合”。这个定义是对的还是错的?   java如何用其他字符替换字符串中的1个或多个字符?   Java的HashSet<Double>及其子集的hashcode的唯一性   对象ArrayList的java并发修改错误   多线程Java线程:让EDT函数等待长时间运行的函数离开EDT   java如何重写方法,将一个实例变量和一个局部变量相加,从而生成一个数据类型为Double的新变量?