2

電話を転送したいのですが。内線番号を定義し、電話に出て、Dial コマンドを使用できます。しかし、tは私が望むものではありません。すぐに電話に出たくない。2 番目の呼び出しに応答するのを待ちたいと思います。

どうやってするの?応答せずに Dial(Sip/...) を使用すると、両側が完全に無音になります。

ファックスを無効にすることで解決できることを読みました ( http://fonality.com/trixbox/forums/trixbox-forums/open-discussion/call-forward-without-answer-dialplanを参照)。FAX モジュールをアンロードしましたが、問題は解決しませんでした。同じページで、 http://www.voip-info.org/wiki/view/Asterisk%20auto-dial%20outのようなものを試すことができると読みましたが、それは高度すぎるようです。

別のアイデアがあります。Dial(Sip/..., 60, M(a-macro)) を使用します。しかし、これら 2 つの呼び出しをマクロで結合する方法がわかりません。

何か案が?

編集:明確にするために。Dial (SIP/uri) または Dial(SIP/uri, 60, r) などの Dial のみを使用すると、次のようになります。

  1. 発信者:鳴る
  2. SIP 電話 (またはソフトウェア) が鳴る
  3. コールは SIP 電話から応答されます
  4. SIP電話:音が出ません。
  5. 発信者:鳴り止む、音が出ない

Dial(...) コマンドの前にコマンド Playback(invalid) を追加すると、まったく異なります。

  1. 発信者:鳴る
  2. 発信者: 通話に応答し、「無効」というメッセージが読み上げられます。
  3. 発信者: 呼び出し音が鳴ります (ただし、電話に応答し、発信者はこの呼び出し時間を支払います)
  4. SIP 電話 (またはソフトウェア) が鳴る
  5. コールは SIP 電話から応答されます
  6. 通話は正常に接続されました

Dial(...) コマンドの前に (たとえば、Playback(...) または Answer() を介して) 呼び出しが明示的に応答されない場合にのみ、問題が発生するようです。したがって、次のようなものが役立つ場合があります (JQuery のような疑似コード)。

call_1.Dial(...).onAnswer(function(call_2){
    call_1.Answer();
});

アスタリスクは似たようなことを試みますが、アスタリスクのやり方にはバグがあります。

もちろん、Dial(...) の前に Answer() を追加しても機能しますが、リダイレクトされた通話に応答するまで通話に応答したくありません。


Dial(SIP/..., timeout, A(invalid)) を使用してほぼ解決しました。ここで、別の (ゼロ長またはほぼゼロ長の) サウンドを使用する必要があります。

4

4 に答える 4

3

長さゼロの有効なサウンドを作成することはできませんでしたが、次の解決策で十分だと思われます。

exten => s,1,<log it>
exten => s,n,Dial(SIP/address@somewhere.com, 600, A(beeperr))
exten => s,n,GotoIf($["${DIALSTATUS}" = "ANSWER"]?:callfail)
exten => s,n(callfail),<report call fail>

コードの最も重要な部分はDial(SIP/address@somewhere.com, 600, A(beeperr)).

今、それは動作します:

  1. 発信者が電話をかけます。
  2. address@somewhere.com への呼び出しが作成されます。
  3. address@somewhere.com への呼び出しは、ユーザーによって応答されます。
  4. address@somewhere.com に対して短い音 (ビープ音) が再生されます。
  5. 元の通話が応答され、ブリッジされます。

この場合、発信者にはビープ音は聞こえません。音声は address@somewhere.com にのみ再生されます。これにより、address@somewhere.com による呼び出しに応答してから元の呼び出しに応答するまでの間に短い一時停止が発生します。一時停止中、ビープ音が鳴ります。

directmedia=no は解決策の一部かもしれませんが、よくわかりません。

于 2013-01-14T10:38:33.867 に答える
2

はい、正しい方法はダイヤルするだけです。

リンギングが発生しない場合は、アスタリスクと gsm ゲートウェイのリンギング/アーリー メディア パラメータで遊んでいます。

しかし、安価な gsm ゲートウェイを使用すると、プロバイダー側​​に何も送信できません (gsm プロバイダーはそれを許可しません)。gsm ネットワーク経由でアーリー メディアを送信するには、e1 回線などのデジタル機器を介して gsm プロバイダーに接続する必要があります。

オプションとして、r オプションを使用してダイヤル コマンドを試すか、ダイヤルする前に Ringing コマンドを使用できますが、それは gsm ゲートウェイの設定に大きく依存します。

于 2013-01-05T01:41:22.110 に答える
0

私が提案するのはこれです:

  1. 最初の通話を開始し、呼び出し音を鳴らして動的な会議に誘導します。会議番号を一意の 8 桁の番号として設定します。
  2. 2 番目の通話を開き、上記の会議番号をチャネル変数として保存します。
  3. 2 番目のコールが応答した場合は、チャネル変数を読み取り、そのコールを適切な会議にドロップします。
  4. 2 番目の電話に応答しない場合は、最初の電話を切ります。これは、参加者が 1 人だけのすべての会議の AMI をポーリングし、チャネルの「オフフック」時間をチェックすることで判断します。時間が長すぎる場合は、無応答/無参加を意味します。

私は同様のクライアント プロジェクトにこのアプローチを使用しましたが、アスタリスク ダイヤル プランと AGI の組み合わせとして実装するのは非常に簡単です。適切なチャネル変数などを使用してダイヤルを実行する方法として、スプールされた呼び出しファイルを使用しました。簡単、迅速、きれいです。

于 2013-01-08T18:53:58.457 に答える
0

良い、

あなたの主な問題は、ダイヤルプランに直接関連するものではなく、ネットワークに関連しているように思えます。何も聞こえない状況は通常、Asterisk サーバーが 1 つの場所にあり、クライアントとターミネーションが NAT ファイアウォールの背後にあることが原因です。または、別の可能性として、Asterisk サーバーがファイアウォールの背後にあり、当事者の 1 人でもあります。これらのいずれにおいても、sip.conf 構成が正しく構成されていないと、機能しません。

ファンキーなことを試してみたい場合は、次のようにします。

exten => _XXXX,1,Noop(*** Here we Go ***)
exten => _XXXX,n,Playback(SomeShortFile,noanswer)
exten => _XXXX.n,Dial(Your SIP destination,60,R)

2 行目は、SIP 180 メッセージを SIP 183 メッセージに変更する必要があり、「R」パラメータは、リモート エンドで発生しない場合に備えて、ローカルの呼び出し音を生成する必要があります。

これで問題が解決しない場合は、sip.conf の設定をhttp://www.pastebin.caに保存し、そのリンクを私たちと共有してください。

ニールS

于 2013-01-14T12:52:11.150 に答える