簡體   English   中英

Asterisk AMI AGI通知PHP腳本

[英]Asterisk AMI AGI Notification PHP Script

我是Asterisk的新手。 我的要求是當我接到電話時,我需要識別來電顯示並在接聽電話時彈出該ID。 我對AMI和AGI有一些了解。 我想知道如何使用php腳本執行此操作。

我可以用來做任何這樣的例子或事情,請在這里附上。

這很大程度上取決於您使用的Asterisk的版本。 我建議使用Asterisk 13,因為它既是LTS又比其他版本有更好的AMI事件。

你可以在這里采取兩種方法。 第一種是使用AMI,它會通過TCP套接字將事件泄露給您。 第二種是使用AGI,特別是FastAGI,它將為您的遠程應用程序控制一個通道。 在該應用程序中,您可以自己提取來電顯示。

如果您選擇使用AMI,則通常應該監聽兩個事件: Newchannel (在創建頻道時引發)和Newcallerid - 在更改頻道的參與方標識時引發。 這應該涵蓋了聚會標識發生變化的絕大多數時間,並且應該為您提供頻道的來電顯示,以及連接線路信息,這是該頻道正在與之通話的一方的一方標識。

您不應該在Bridge事件中使用Link子事件(13中不存在,並且由BridgeEnter / BridgeLeave事件替換) - 這就是我認為Arheops所指的。 僅當通道“鏈接”到橋中的另一個通道時才會引發鏈接,並且與呼叫者ID無關。 在這種情況下,黨的身份識別可能會發生變化,但這會在NewcallerId事件中傳達,因此毫無意義地傾聽它。

或者,您可以使用FastAGI 如果你沿着這條路走下去,你會想要在你的撥號方案中有一些叫做FastAGI服務器的東西:

exten => _X.,1,NoOp()
 same => n,AGI(agi://127.0.0.1)
 same => n,...

在您的腳本中 - 可以使用多種語言編寫,只要AGI庫的數量可用 - 您可以使用get variable命令和CALLERID函數提取CallerID。 以下是node.js中的示例:

return agi.getFullVariable('${CALLERID(NUMBER)}').then(function (number) {
    callerId.number = number;

    return agi.getFullVariable('${CALLERID(NAME)}');
}).then(function (name) {
    callerId.name = name;

順便說一句,這些都不是“專家”級別的星號操縱。 它只需要一些編程和對Asterisk API的基本了解。 祝好運!

如果您是星號的新手,您可以使用已開發的軟件,如asternic fop / fop2。 它允許在來電時使用callerid進行啟動,我相信它會更簡單。

如果你仍然希望通過星號來做,你應該注意“鏈接”事件。 但是在該事件中將沒有調用者,因此您還要查找“NewChannel”事件以及使用CALLERID(num)= something的“set”擴展,這將改變調用者。

您可以使用channel uniqueid連接事件。

這項任務並不簡單,需要專家的PHP。

此外,您可以更改星號撥號方案以使用呼叫應答所需的信息觸發UserEvent操作,之后只需收集UserEvents。 這需要在星號撥號方案和低PHP的高專業知識。

如果瀏覽器上的彈出窗口適合您,我建議使用websocket通知網頁有關新呼叫(包含所有參數)。 您可以通過偵聽AMI事件並使用nodejs將數據發送到瀏覽器來實現此目的,這樣您就可以避免輪詢到Asterisk服務器以檢查呼叫是否已應答。

看看這段代碼: https//www.backloop.biz/en/products/asterisk-call-notifier-en

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM