2014-05-20 77 views
1

Asterisk 1.4.21.2。 (編輯:另外,我不認爲有可能將Asterisk升級到uClinux上的1.4版本,但如果有人知道某種方式,我很想知道,但我不認爲這個問題是)Asterisk在所有呼叫期間都忽略DTMF - 在ATCOM IP01的uClinux下,不能使用按鍵功能

features.conf中的功能圖如下所示,但在通話過程中按鍵無效。

[featuremap] 
blindxfer => *#   ; Blind transfer (default is #) 
disconnect => ***0    ; Disconnect (default is *) 
;automon => *1     ; One Touch Record a.k.a. Touch Monitor 
atxfer => *0     ; Attended transfer 
;parkcall => #72    ; Park call (one step parking) 

的CLI顯示,所配置的featuremap已生效:

IP0x*CLI> feature show channels 
No feature channels in use 

IP0x*CLI> feature show 
Builtin Feature   Default Current 
---------------   ------- ------- 
Pickup     *8  *8 
Blind Transfer   #  *# 
Attended Transfer     *0 
One Touch Monitor 
Disconnect Call   *  ***0 
Park Call 

Dynamic Feature   Default Current 
---------------   ------- ------- 
(none) 

Call parking 
------------ 
Parking extension : 700 
Parking context  : parkedcalls 
Parked call extensions: 701-750 

各種使用不同的電話(潮流BT-200,松下KX-TGP500,X-精簡版4),但總是相同問題。所有電話都配置爲使用rfc2833,這是Asterisk的默認DTMF模式;還嘗試在sip.conf中明確設置dtmfmode = rfc2833。

在通話期間沒有任何按鍵可以從Asterisk獲得任何響應。當不在通話中(在撥號方案中或在語音信箱中)時,Astrisk總能識別出*#密鑰。

如果使用full => verbose,debug,dtmffull => verbose,error,warning,dtmf開啓DTMF日誌記錄,則日誌中不會出現任何DTMF條目,即使在呼叫過程中遇到大量密鑰。

問題是什麼?


編輯:現在的附加信息,顯示Dialplan中使用的撥號命令。

編輯:我發現問題仍然發生,而不使用該鰻魚宏,只需exten=261,1,Dial(SIP/261)在extensions.conf中。所以我已經從問題中刪除了這個問題來解決它。

我已經嘗試在sip.conf中添加canreinvite = norelaxdtmf=yes,但問題仍然存在。

我現在也發現,DTMF記錄ZAP通道在通話過程中發生的(而不是在SIP頻道我嘗試過)。但是DTMF仍然不會觸發這些功能。下面是示例DTMF日誌。

[May 22 08:25:46] DTMF[474]: channel.c:2191 __ast_read: DTMF begin '*' received on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2201 __ast_read: DTMF begin passthrough '*' on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2116 __ast_read: DTMF end '*' received on SIP/251-01354004, duration 180 ms 
[May 22 08:25:46] DTMF[474]: channel.c:2163 __ast_read: DTMF end accepted with begin '*' on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2179 __ast_read: DTMF end passthrough '*' on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2191 __ast_read: DTMF begin '*' received on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2201 __ast_read: DTMF begin passthrough '*' on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2116 __ast_read: DTMF end '*' received on SIP/251-01354004, duration 160 ms 
[May 22 08:25:46] DTMF[474]: channel.c:2163 __ast_read: DTMF end accepted with begin '*' on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2179 __ast_read: DTMF end passthrough '*' on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2191 __ast_read: DTMF begin '*' received on SIP/251-01354004 
[May 22 08:25:46] DTMF[474]: channel.c:2201 __ast_read: DTMF begin passthrough '*' on SIP/251-01354004 
[May 22 08:25:47] DTMF[474]: channel.c:2116 __ast_read: DTMF end '*' received on SIP/251-01354004, duration 140 ms 
[May 22 08:25:47] DTMF[474]: channel.c:2163 __ast_read: DTMF end accepted with begin '*' on SIP/251-01354004 
[May 22 08:25:47] DTMF[474]: channel.c:2179 __ast_read: DTMF end passthrough '*' on SIP/251-01354004 
[May 22 08:25:47] DTMF[474]: channel.c:2191 __ast_read: DTMF begin '0' received on SIP/251-01354004 
[May 22 08:25:47] DTMF[474]: channel.c:2201 __ast_read: DTMF begin passthrough '0' on SIP/251-01354004 
[May 22 08:25:47] DTMF[474]: channel.c:2116 __ast_read: DTMF end '0' received on SIP/251-01354004, duration 280 ms 
[May 22 08:25:47] DTMF[474]: channel.c:2163 __ast_read: DTMF end accepted with begin '0' on SIP/251-01354004 
[May 22 08:25:47] DTMF[474]: channel.c:2179 __ast_read: DTMF end passthrough '0' on SIP/251-01354004 
IP0x*CLI> 
+1

你在dialplan中使用的撥號命令是什麼? – moonstruck

+0

我已編輯該問題以包含詳細信息。 –

+0

升級出了問題嗎? 1.4是2012年的EOL,https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions - 沒有大量的1.4安裝來比較。 – dougBTV

回答

3

最後破解了這個。

確實,設置canreinvite=no確實阻止了SIP電話在Asterisk最初建立呼叫之後協商它們之間的直接連接,因此將Asterisk保存在媒體路徑中(並且因此知道它們發送的任何DTMF)。

但即便如此,爲Asterisk把響應到DTMF和調用配置的傳輸功能,必須明確啓用轉移,在每個呼叫的基礎上,通過將T和/或t選項作爲撥號命令參數。

features.conf新版本提請注意這一點:

;atxfer => *2     ; Attended transfer -- Make sure to set the T and/or t option in the Dial() or Queue() app call! 

所以修復程序,我不得不改變我的AEL代碼只要代碼使用撥號命令添加T和/或t參數。

我當時留下的唯一剩下的難題是如何中止有人轉送;例如,如果沒有答覆,使等待超時的繁瑣操作,或者轉移已經開始轉到語音郵件,可能使其有希望返回到另一方。通過實驗,我最終發現,使用按鍵也斷開通話功能的工作而取消轉接:的features.conf

;disconnect => *0    ; Disconnect (default is *) 

較新版本包含擴展的評論,雖然不是一個涉及到轉讓:

;disconnect => *0    ; Disconnect (default is *) -- Make sure to set the H and/or h option in the Dial() or Queue() app call! 

我發現的是,即使沒有將H和/或h參數傳遞給撥號命令,斷開功能也可用於中止有人轉接。並且在撥號命令之間傳遞H和/或h選項並沒有任何衝突:如果您想要這樣做並使用該功能進行任何類型的斷開連接,則它對於中止傳輸而不斷開整個呼叫仍然有效(儘管使用那麼除了缺省*之外的東西可能變得必要,因爲現在開始*的任何序列現在將切斷呼叫!)。

撥號命令上的Zap/1撥出電話我AEL代碼現在是:

Dial(Zap/1/${number},,T); 

而且所有傳輸功能現在工作正常。