我使用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通道手機只是扮演它自己,它不會進一步去星號。有什麼方法可以處理它嗎?
你使用的是什麼版本的'*',通話後通話是否繼續正常(即,如果dtmf 1比foo;否則吧) – mirkobrankovic
它以某種方式反應,手機發出嘟嘟聲和回放停止。通話繼續照常進行。此外,在使用rfc2833時,不會發出嗶嗶聲或任何其他反應。 –
該錯誤被封閉爲非錯誤,並且截止日期爲2011年6月。所以我非常確定這不是問題。我會在今天下午嘗試在我的PBX上重新創建您的問題並回復您。 – MichelV69