2011年2月6日 星期日

dtmfmode設定

在設定Asterisk的時候有個參數叫dtmfmode,可以設定的值有 inband|info|rfc2833|auto。
到底如何設才正常呢?因為最近在試用由pbxes.org所提供的免費版的Asterisk服務時,新增Extension時,如果不設為auto時,3cx或x-lite 4透過市網的sip撥回校內的Asterisk時,進入ivr後撥號,它完全不理我,似乎因為是dtmfmode設定的問題。為了徹底了解它的影響,google了一下,這些文章應該可以解惑。
原來,Asterisk在2005年9月之後如果設定dtmfmode為auto的話,它為先用使用rfc2833,但是如果遠端沒回應是否在SDP支援rfc2833的話,它會轉變成為inband(帶內)。但codec如果不是ulaw或alaw的話,inband的DTMF撥號音會被語音壓縮扭曲而無法辦別,所以inband方式不可靠的話,可考慮用G.711(無壓縮)的codec。而使用rfc2833的話,會指定一個不同的RTP封包格式做為DTMF撥號音,可以減少傳送的資料量。info是使用SIP協定的元素以out-of-band的事件方式來傳送DTMF撥號音,有二種方式:
方法一:
…略…
Content-Type: application/dtmf-relay

Signal=5
Duration=160
這樣是指送出數字5,持續160毫秒。

方法二:
…略…
Content-Length: 1
Content-Type: application/dtmf

5

附註:dtmf-relay或dtmf都還未向IANA正式註冊的mime類型的應用。

另外,有個outband(帶外)這個詞,在Asterisk裏(pbxes.org)應該是沒這個選項,它泛指將按鍵音從語音資料中獨立出來,另外使用一個頻道傳送訊息。

那底到要設定那一個呢?如果單位內所有的call都是撥給PSTN的號碼的話,那就找出VOIP服務供應商所使用的語音匣道器設備所使用的DTMF模式,然後將單位內所有的VOIP設備使用相同的設定值。不過…很不幸的,有些不同的系統使用不同的DTMF模式,例如語音郵件可能需要使用SIP的INFO,但是使用者可能需要透過inband的方式使用電話銀行(telebanking。或稱為電子銀行)。