2012-07-07 17 views
1

我有一個Rails應用程序,我試圖通過AMI從我的星號中獲取實時事件。在Rails應用程序上接收實時Asterisk AMI事件Adhearsion之外

我成功創建了一個腳本,可以在不創建新的adhearsion項目的情況下從adhearsion源代碼發起調用。

我創建了一個擴展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 

我是不是要運行一個後臺進程來做到這一點。如果我這樣做,我該怎麼做呢?

在此先感謝

回答

3

雖然可以使用一個Adhearsion應用之外Adhearsion AMI類,它不是一個真正的支持使用。 Adhearsion應用程序所提供的部分內容是幫助處理從Asterisk收到的事件所需的守護程序和事件子系統,這兩者對於您之前所做的事情來說都不是真正必需的。如果您真的堅持在Adhearsion應用程序之外使用該庫,則需要做的不僅僅是ManagerInterface的子類。請注意:你做什麼不是想要做的(主要是出於性能的原因)是導致每個Rails Web請求創建/拆除新的AMI連接。

我強烈建議您使用Adhearsion應用程序處理來自AMI的事件,然後使用類似DRb的內容來處理Rails和Adhearsion之間的通信。這種方法在我們需要Asterisk事件在Rails中可訪問的幾種情況下(例如,顯示呼叫隊列統計信息)對我們非常有用。

+0

好的!我不知道我能做到這一點!那麼我怎麼把事件從adhearsion項目推到rails應用程序?如果我用這種方法正確理解了這一點,您可以從rails應用程序訪問adhearsion應用程序的方法,而不是周圍的其他方式!一旦發生事件,我將如何將事件推送到Rails應用程序? – Matsoui 2012-07-10 15:52:18

+0

問題是,如果你在請求之外,你的Rails應用程序將如何處理它收到的事件?爲什麼會關心他們?更有可能的是你的用戶界面將會關心,你應該使用像[faye](http://faye.jcoglan.com/)這樣的事件將事件從Adhearsion推送到瀏覽器(可能不是真正的AMI事件,但某些事情您的客戶端應用程序將很容易理解)。 – 2012-07-24 15:10:07

相關問題