[英]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.