1

私は次のように持ってextensions.confいます:

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

それは機能し、電話は互いにダイヤルできます。Python テストでは:

df = ami.originate(
 channel = "Local/222@users",
 exten = "111",
 priority = "1",
 context = "users")

テストの起動中に失敗し、警告が表示されます。

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/222@users extension 111@users

222 が鳴り、電話に応答した後、111 が鳴り始めます。

アップデート

で SIP ヘッダーを送信する方法を理解しましたami.originate()。ここにあります。それが機能していないという悪いこと - originate は上記のエラーのように失敗します。ダイヤルプランでヘッダーを送信することも解決策ではありません。何か助けはありますか?

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

1 に答える 1

2

チャネルの両側が Answer(ed) でない限り、発信 AMI アクションは失敗します。ここにはいくつかのオプションがあります。全員が確実に回答するようにするか、元の失敗を処理することができます (ただし、ねじれた例外が伝播するのを避けるために、おそらくこれを行う必要があります)。

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

df = ami.originate(
    channel = "Local/222@users",
    exten = "111",
    priority = "1",
    context = "users")
df.addErrback(__handle_originate_failure)

TestCase クラスは、自動的に失敗してテストを停止する Originate の失敗用のデフォルト ハンドラー (handleOriginateFailure) を提供することに注意してください。Originate が常に成功することを期待する場合は、それを使用することをお勧めします。

于 2013-05-29T14:36:14.817 に答える