2013-05-29 43 views
1

我有extensions.conf为:Asterisk的测试套件:手机不响

[users] 
exten=>111,1,Dial(SIP/demo-alice,5) 
exten=>111,n,UserEvent(TestResult,result:pass) 
exten=>222,1,Dial(SIP/demo-bob,5) 

它的工作原理,手机可以拨打对方。 在蟒蛇测试:

df = ami.originate(
channel = "Local/[email protected]", 
exten = "111", 
priority = "1", 
context = "users") 

当启动测试,它failes并给我一个警告:

Unhandled error in Deferred: 
Unhandled Error 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/dist-packages/starpy/manager.py", line 153, in lineReceived 
    self.dispatchIncoming() # does dispatch and clears cache 
    File "/usr/lib/python2.7/dist-packages/starpy/manager.py", line 241, in dispatchIncoming 
    callback(message) 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 362, in callback 
    self._startRunCallbacks(result) 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 458, in _startRunCallbacks 
    self._runCallbacks() 
--- <exception caught here> --- 
    File "/usr/lib/python2.7/dist-packages/twisted/internet/defer.py", line 545, in _runCallbacks 
    current.result = callback(current.result, *args, **kw) 
    File "/usr/lib/python2.7/dist-packages/starpy/manager.py", line 347, in errorUnlessResponse 
    raise error.AMICommandFailure(message) 
starpy.error.AMICommandFailure: {'message': 'Originate failed', 'response': 'Error', 'actionid': 'VirtATS3-36015280-2'} 

原产通过CLI作品,因为它应该:

channel originate Local/[email protected] extension [email protected] 

222环,在接听电话111后开始响铃。

UPDATE

想出如何,我可以在ami.originate()发送SIP头。发现here。它不起作用的坏处 - 发生失败,就像上面记录的错误一样。在dialplan中发送头文件也不是解决方案。任何帮助?

df = ami.originate(
     channel = "Local/[email protected]", 
     exten = "111", 
     priority = "1", 
     context = "users", 
     variable = { 
      "SIPAddHeader":"Call-Info: answer-after=0" 
      }) 

回答

2

原始AMI操作失败,除非通道的两端都是Answer(ed)。你在这里有几个选择。您可以确保每个人的答案,或者您也可以处理起源故障(虽然你可能应该这样做无论如何,以避免传播的扭曲的除外):

def __handle_originate_failure(self, reason): 
    print "Originate failure: %s" % reason 
    return reason 

df = ami.originate(
    channel = "Local/[email protected]", 
    exten = "111", 
    priority = "1", 
    context = "users") 
df.addErrback(__handle_originate_failure) 

注意,TestCase类提供了一个默认的处理程序(handleOriginateFailure )对于将自动失败并停止测试的原始失败。如果你期望Originate应该总是成功,你可能会想要使用它。

+0

我知道我需要直接在拨号方案或AGI或其他有所应答呼叫。我已经修改我的拨号方案如下: '[用户] 讯号分配延长=> 111,1,SIPAddHeader(呼叫信息:回答-后= 0) 讯号分配延长=> 111,N,拨号(SIP /演示翘,5 ) exten => 111,n,UserEvent(TestResult,result:pass) exten => 222,1,SIPAddHeader(Call-Info:answer-after = 0) exten => 222,n,Dial(SIP /演示鲍勃,5) 讯号分配延长=> 222,N,等待(1) 讯号分配延长=> 222,N,答案()'它的工作原理,但手机是不响,我的意思是,没有任何声音。这是一个正确的测试行为,还是还有一些东西遗漏? –