2010-03-03 118 views
4

我目前正在寫一個Windows服務,使用星號AMI來檢測呼叫何時進入,然後根據來自誰來執行網絡請求和它將要去哪裏。有沒有人知道Asterisk的一個事件,我可以聽包括這兩個細節?我需要系統外部正在呼叫的人的號碼,但只要可以在星號之外使用,我可以用來識別被呼叫的內部電話號碼的任何號碼都可以。檢測呼叫與星號和誰打來的電話

我在看事件,他們都有外部調用者的號碼,但他們沒有一個鏈接到內部調用方,除了uniqueid,除非我建立這些服務中的字典我不會是能夠使用。

有沒有人有任何想法?

回答

5

所以最終我設法通過僅使用AMI和監聽呼叫事件來實現這一點。通過我們想要訪問的內容,我聆聽了Newchannel事件,Dial事件和Hangup事件,但是如果您所追求的是呼叫的次數和呼叫次數,我相信您可以遠離監控只是撥號事件。

每次收到Newchannel事件時,我都創建了一個Channel對象,並將它添加到當前位於Asterisk服務器上的Channel列表中。然後,通過使用開始子事件監聽撥號事件,我可以提取呼叫中涉及的雙方的唯一頻道ID,然後獲取所涉及的號碼。收到Hangup事件後,我刪除了正在銷燬的頻道。雖然我們沒有全部時間來測試它,所以希望它是正確的,但現在看起來這很好。

0

我有一個想法,但你可能不喜歡的答案:)

我們試圖做到這一點,失敗了,所以我們做了一件壞事:)

我們沒有打算寫AGI腳本和他們使用Manager界面調用它們,然後刮擦命令行。

像核心節目頻道簡潔等東西,它的ikky,但它的工作..我們使用正則表達式來解析字符串輸出,然後從那裏抓取信息,唯一的問題就是,你必須觀看每一個你修補的時候,因爲命令行的輸出往往會將修補程序更改爲修補程序。

如果你確實發現了一種使用c#api而不使用agi的方法,我會非常感興趣,但是我們只是無法做到api所期望的,而最終不使用agi腳本。

+0

謝謝,我正在研究一些其他選項,我會告訴你,如果我能找到工作。 – 2010-03-07 04:21:26