我有一个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 事件的几种情况下非常有效(例如,显示呼叫队列统计信息)。