1

私のアスタリスクからAMIを介してリアルタイムイベントを取得しようとしているレールアプリケーションがあります。

新しい adhearsion プロジェクトを作成せずに、adhearsion ソース コードから呼び出しを開始するスクリプトを作成することに成功しました。

adhearsion の ManagerInterface クラスを拡張し、event_message_received メソッドをオーバーライドするクラスを作成しました。Rails CLI から、誰かが呼び出して Enter キーを 2、3 回押すと、イベントが発生しますが、それを取得するために介入する必要があります。

これが私のコードです:

    class Astercall < Adhearsion::VoIP::Asterisk::Manager::ManagerInterface

  def initialize
    super(:host => "host", :username => "username", :password => "password", :events => true)
    connect!
  end




  def self.click_call(number, exten, name)
    # asterisk = connect()

    originate(:channel => "SIP/#{exten}", 
                        :context => "from-internal",
                        :exten => number,
                        :priority => "1",
                        :caller_id => "Calling  #{name}")
  end

  def event_message_received(event)
    if(event.kind_of? Adhearsion::VoIP::Asterisk::Manager::ManagerInterfaceEvent )
          puts event.inspect
    end
  end



end

そのためにバックグラウンド プロセスを実行する必要がありますか。もしそうなら、どうやってそれをするつもりですか????

前もって感謝します

4

1 に答える 1

3

Adhearsion アプリの外部で Adhearsion AMI クラスを使用することは可能ですが、実際にはサポートされている使用法ではありません。Adhearsion アプリが提供するものの一部は、Asterisk から受信したイベントの処理を支援するために必要なデーモン化およびイベント サブシステムです。どちらも、以前行っていたように、オリジネーションのためだけに必要なものではありません。Adhearsion アプリの外部でライブラリを使用することを強く主張する場合は、ManagerInterface をサブクラス化するだけでなく、それ以上のことを行う必要があります。ただ注意してください:やりたくないこと (主にパフォーマンス上の理由から) は、Rails Web リクエストごとに新しい AMI 接続を作成/切断することです。

Adhearsion アプリを使用して AMI からのイベントを処理し、DRb などを使用して Rails と Adhearsion 間の通信を処理することを強くお勧めします。このアプローチは、Rails でアスタリスク イベントにアクセスできるようにする必要があるいくつかの状況 (たとえば、呼び出しキューの統計の表示) で非常にうまく機能しました。

于 2012-07-09T17:04:36.443 に答える