2013-07-02 68 views
0

我使用python和pyst將DTMF發送給Asterisk。該代碼是:腳本星號AMI:在SIP通道上未收到DTMF

def playDTMF(self, channel, digit): 
     print "DTMF: Sending %s to %s" % (digit, channel) 
     response = self.manager.send_action({ 
      "Action" : "PlayDTMF", 
      "Channel" : channel, 
      "Digit" : digit 
     }) 
     print "DTMF: %s - %s" % (response['Response'], response['Message']) 

輸出還是不錯的:

DTMF: Sending 1 to SIP/S3bc9c3c-00000081 
DTMF: Success - DTMF successfully queued 

但是Asterisk的反應是這樣的:

[Jul 2 17:48:53] DEBUG[6967] manager.c: Running action 'PlayDTMF' 
[Jul 2 17:48:53] DEBUG[6967] channel.c: Set channel SIP/S3bc9c3c-00000081 to write format slin 
[Jul 2 17:48:53] DEBUG[6967] channel.c: Scheduling timer at (50 requested/50 actual) timer ticks per second 
[Jul 2 17:48:53] DEBUG[6967] channel.c: Thread 140629726328576 Blocking 'SIP/S3bc9c3c-00000081', already blocked by thread 140628353554176 in procedure ast_ 
waitfor_nandfds 

有趣的是,這種情況只在SIP渠道。在「本地」頻道上按預期工作:

[Jul 2 18:00:07] DTMF[7951]: channel.c:4083 __ast_read: DTMF begin '1' received on Local/[email protected];1 
[Jul 2 18:00:07] DTMF[7951]: channel.c:4093 __ast_read: DTMF begin passthrough '1' on Local/[email protected];1 

如何讓DTMF在SIP通道上正常播放?

UPD

發現這個Asterisk的錯誤追蹤:https://issues.asterisk.org/jira/browse/ASTERISK-13224

看來,如果我發送DTMF到SIP通道手機只是扮演它自己,它不會進一步去星號。有什麼方法可以處理它嗎?

+0

你使用的是什麼版本的'*',通話後通話是否繼續正常(即,如果dtmf 1比foo;否則吧) – mirkobrankovic

+0

它以某種方式反應,手機發出嘟嘟聲和回放停止。通話繼續照常進行。此外,在使用rfc2833時,不會發出嗶嗶聲或任何其他反應。 –

+0

該錯誤被封閉爲非錯誤,並且截止日期爲2011年6月。所以我非常確定這不是問題。我會在今天下午嘗試在我的PBX上重新創建您的問題並回復您。 – MichelV69

回答

0

使用SendDTMF應用。 SendDTMF(位[| timeout_ms])

+0

在Asterisk AMI中沒有像SendDTMF這樣的操作。我搜索了一下,這是可以通過AGI,但我記得有一些問題與AGI,不允許我使用它。 –

0

在你SIP.CONF,確保你有

dtmfmode=rfc2833 

爲您適當的SIP中繼。通常用SIP發送DTMF帶內(音頻)並不如你所希望的那樣好。

+0

'rfc2833'完全不起作用。在下面的回答中,我評論說:「在使用rfc2833時,沒有嘟嘟聲或任何其他反應」。 –

+0

看看那個pcap ......你可能聽不到它,但它可能只是一個類似RTP的包。根據ITSP的運行方式,網關將決定PSTN上的行爲。 – dougBTV

+0

使用'rfc2833'在手機中沒有聲音,但Asterisk日誌是一樣的。 –