在轨道应用程序上接收实时Asterisk AMI事件 在Adhearsion之外



我有一个rails应用程序,我正在尝试通过AMI从我的星号获取实时事件。

我成功地创建了一个脚本来从听觉源代码发起调用,而无需创建新的听证项目。

我创建了一个类,扩展了 adhearsion 的 ManagerInterface 类并重写了 event_message_received 方法。从 Rails CLI 如果有人打电话并且我按回车键 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

我是否必须运行后台进程才能执行此操作。如果我这样做,我将如何去做????

提前致谢

虽然可以在Adhearsion应用程序之外使用Adhearsion AMI类,但它并不是真正受支持的用途。 Adhearsion应用程序提供的部分内容是帮助处理从Asterisk收到的事件所需的守护程序和事件子系统,这两者都不是像您以前那样真正需要的。 如果你真的坚持在Adhearsion应用程序之外使用库,你需要做的不仅仅是对ManagerInterface进行子类化。 请注意:您不想做的(主要是出于性能原因)是在每个 Rails Web 请求中创建一个新的 AMI 连接。

我强烈建议您使用Adhearsion应用程序来处理来自AMI的事件,然后使用DRb之类的东西来处理Rails和Adhearsion之间的通信。 这种方法在我们需要在 Rails 中访问 Asterisk 事件的几种情况下非常有效(例如,显示呼叫队列统计信息)。

最新更新