Asterisk サーバーと統合された単純なポップアップ アプリケーションを作成しています。私たちのテスト環境は、いくつかの SIP トランクを構成した FreePBX に基づいています。テストは、2 つの内線番号 3000 と 3001 の間です。
3000、3001、およびその他の内線番号は、テスト目的で SIP クライアント (microsip) によって制御され、後で他の sip クライアントまたはソフトフォンになる可能性があります。
私が必要としているのは、誰かが内線 3000 に電話をかけると、オペレーターは通常の SIP クライアントを使用して電話に応答でき、私のアプリケーションは通話に関する情報を表示することです。AMIを使用してそれを達成できました。ここで、通話を保留にするためのボタンをアプリケーションに追加したいと考えています。私は、AMI がそのような機能を公開していないことを知っているので、Async AGI を使用しようとしています。(ところで、アスタリスクと通信するために asternet を使用しています)
AgiAction agi = new AgiAction(channel, "MusicOnHold");
ManagerResponse resp = manager.SendAction(agi);
それをしたら返事が来ました
Failed to add AGI command to channel SIP/3000-00000003 queue
私はそれが何を意味するのだろうか?
また、CLI経由で「MusicOnHold」コマンドを開始しようとしており、応答があります
Channel XXXXX is not controlled by AGI"
そのようなものをダイヤルプラン(extensions.conf)に追加しようとしました:
[default]
exten => 3000,1,NoOp(Async AGI)
same => n,AGI(agi:async)
これにより、「チャネル XXXXX は AGI によって制御されていません」というエラーは削除されますが、「AGI コマンドをチャネル SIP/3000-00000003 キューに追加できませんでした」というエラーは残ります。そして最悪なのは、このダイヤル プランを取得した後、AMI はまだそれをキャプチャできたにもかかわらず、私の sip クライアントが通話を受信しなくなったことです。
私が望むものを達成するための正しい方法は何だろうか?私はアスタリスクがまったく初めてで、基本的な概念が欠けている可能性があるので、良い例をいただければ幸いです。ありがとうございました。