2016-09-13 64 views
1

我用這個PHP庫PAGI來構建帶有Asterisk的IVR應用程序。 對於每次調用,我需要做一些清理工作,並將一些東西寫入數據庫。所以我在用戶掛斷電話後需要一些回調/處理程序。當用戶掛斷來自IVR的呼叫時運行回調

ASAIK,該庫提供了一些方法來從用戶檢測掛斷:

pcntl_signal(SIGHUP, $signalHandler); 

然而,這是行不通的我通過發送命令ANSWER拿起電話後。如果在沒有使用ANSWER的情況下使用,則在呼叫掛斷後,上述回撥將起作用!

所以我想知道我的情況的解決方法是什麼?

+0

你可以在你的上下文中有'h'擴展名,每次掛機後都會調用它。但我認爲你不應該在'h'擴展中做數據庫操作。 如何在每個呼叫上註冊「掛斷處理程序」到達星號,仍不推薦在掛機處理程序上執行數據庫操作 – rajesh6115

+0

爲什麼說處理信號「不起作用」?請參閱:https://wiki.asterisk.org/wiki/display/AST/Application_AGI「除非使用DeadAGI,否則本地執行的AGI腳本將在通道掛斷時接收SIGHUP。」 – marcelog

+0

@marcelog您好,我試圖運行您的例子之一「nodecontroller/run.php」,但'signalHandler'不會在用戶掛斷後調用。這裏是我的extensions.conf:'[my_ivr_menu] exten => s,1,AGI(/tmp/ivr.php,1) same => n,NoOp(掛斷) same => n,Hangup' – sc1013

回答

0

其實我有一個服務器與Asterisk,Digium卡(FSX KS信令)和安裝的固定電話。客戶可以撥打連接到我的服務器的公共電話號碼來獲得IVR服務。 我發現當用戶掛斷電話時,星號不會發送SIGHUP到我的AGI腳本。它確實工作時,內部網絡呼叫IVR。

我終於解決它通過調整chan_dahdi.conf

一些配置
busydetect=yes 
busycount=3 

希望這有助於如果你有類似的情況跟我來!