1

ATCOM IP01 上の uClinux でのアスタリスク 1.4.21.2。(編集:余談ですが、uClinuxでAsteriskを1.4より新しいバージョンにアップグレードすることはできないと思いますが、方法を知っている人がいれば、知りたいと思います。しかし、問題はないと思いますバージョン固有です。)

の機能マップ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

さまざまな電話 (Grandstream BT-200、Panasonic KX-TGP500、X-Lite 4) を使用していますが、常に同じ問題が発生します。アスタリスクのデフォルトの DTMF モードである rfc2833 を使用するように構成されたすべての電話。また、sip.conf で dtmfmode=rfc2833 を明示的に設定しようとしました。

通話中にキーを押しても、アスタリスクからの応答はありません。およびキーは*#通話中でないとき (ダイヤルプラン中またはボイスメール中) に常にアスタリスクによって認識されます。

full => verbose,debug,dtmfまたはを使用して DTMF ロギングをオンにfull => verbose,error,warning,dtmfすると、通話中に多数のキーを押しても DTMF エントリがログに表示されません。

問題は何でしょうか?


編集: 追加情報が続き、dialplan で使用される Dial コマンドが表示されます。

編集: 私はexten=261,1,Dial(SIP/261)、extensions.conf にあるだけで、その ael マクロを使用しなくても問題が発生することを発見しました。そのため、質問から ael を削除して整理しました。

sip.conf に と を追加しようとしましたが、問題は残りcanreinvite = noます。relaxdtmf=yes

また、 (以前に試した SIP チャネルとは対照的に) ZAPチャネルでの通話中にDTMF ログ発生することもわかりました。しかし、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>
4

1 に答える 1

4

最後にこれを割った。

アスタリスクが最初に通話を確立した後、SIP 電話が直接接続をネゴシエートできないように設定することは事実です。そのcanreinvite=noため、アスタリスクはメディア パスに保持されます (したがって、送信される DTMF を認識します)。

それでも、Asterisk が実際に DTMFに応答し、構成された転送機能を呼び出すには、および/またはオプションを Dial コマンド パラメータとして渡すことによって、呼び出しごとに転送を明示的に有効にする必要があります。Tt

の新しいバージョンでは、次のfeatures.confことに注意してください。

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

そのため、AEL コードを変更して、コードが Dial コマンドを使用するすべての場所にTand/orパラメーターを追加する必要がありました。t

私が残した唯一の謎は、在席転送を中止する方法でした。たとえば、応答がなく、タイムアウトを待つのが面倒になったり、転送がボイスメールに送られ始めたりして、代わりに相手に戻ることが望ましい場合があります。実験の結果、キープレスを使用して通話を切断する機能は、転送を中止するためにも機能することが最終的にわかりました。

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

の新しいバージョンにfeatures.confは拡張されたコメントが含まれていますが、転送に関連するコメントは含まれていません。

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

私が発見したことは、Hand/orhパラメータを Dial コマンドに渡さなくても、切断機能を使用して有人転送を中止できることです。そして、これと、Hおよび/またはhオプションを Dial コマンドに渡すことの間に競合はありません: これを行い、あらゆる種類の切断にこの機能を使用したい場合、通話全体を切断せずに転送を中止するのに効果的です (ただし、他のものを使用します)。*開始するシーケンス*は代わりに呼び出しを切断するため、デフォルトよりも必要になる場合があります!)。

Zap/1 で発信するための私の AEL コードの Dial コマンドは次のようになりました。

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

そして、すべての転送機能が正常に動作するようになりました。

于 2014-06-01T17:24:57.750 に答える