0

我是 Asterisk 的初学者,但我的 PBX 已经连接到 PSTN。我遇到的问题是我有这个规则

exten => _*X.*,1,Log(DEBUG, Calling through provider one to ${EXTEN:1:-1})      
  same => n,Dial(SIP/${EXTEN:1:-1}@oneProvider,60)

没有其他以 * 开头的扩展名。我想要实现的是在按下第二个 * 后立即拨出(用户无法按下任何内容来转到有效的分机),现在它等待几秒钟然后拨号。我也尝试添加!在扩展结束时,但没有任何改变。

我错过了什么吗?这可行吗?

谢谢!

4

1 回答 1

1

此任务在当前星号中不可行。它不会工作,因为 * 匹配 .(dot) 在您的拨号计划中。

除了这样的拨号方案(非常丑陋的一个,因为它会为每个新数字进行拨号方案)

[originalcontext]
exten => *,1,Goto(collect_number,s,1)

[collect_number]
exten => s,1,WaitExten(); wait for single digit

exten => *,1,Set(stars=${stars}*);save stars
exten => *,2,GotoIF($[ "${stars}" == "**" ]?dial,1); if 2 star already,go dial.

exten =>_X,1,Set(digits=${digits}${EXTEN});save digits

exten => _.,3,WaitExten(); wait enother input;
exten => _.,4,Goto(dial,1); go dial if no new digits


exten => dial,1,Dial(SIP/${digits}@oneProvider,60)

正确的解决方案 - 使用读取应用程序并要求用户使用 # 结束数字而不是 *。

你也可以这样尝试拨号方案:

   exten => _*X*!,1,Goto(dial,${EXTEN:1:-1},1)
   exten => _*XXX*!,1,Goto(dial,${EXTEN:1:-1},1)
   exten => _*XXXX*!,1,Goto(dial,${EXTEN:1:-1},1)
   exten => _*XXXXX*!,1,Goto(dial,${EXTEN:1:-1},1)
   exten => _*XXXXXX*!,1,Goto(dial,${EXTEN:1:-1},1)
   exten => _*XXXXXXX*!,1,Goto(dial,${EXTEN:1:-1},1)
   exten => _*XXXXXXXX*!,1,Goto(dial,${EXTEN:1:-1},1); continue upto max number length

   [dial]
    exten =>_.,1,Dial(SIP/${EXTEN}@oneProvider,,);

但我不完全确定这会奏效。如果有效,将减少负载(但更多行)

于 2013-10-18T21:00:14.487 回答