我有一個問題,已經20個小時的話題,但無法解決它。 由於在Asterisk中同時呼叫轉移的情況下無法獲得應答號碼的確切CLID,因此無法爲呼叫計費。 $ {CDR(src)},$ {CDR(dst)}在這裏沒有幫助。如何在Asterisk中同時呼叫轉移的情況下獲得應答號碼/接聽CLID?
我從PSTN +79000000000撥打電話到DID +78120000000,呼叫登陸到我們的星號。在星號上,通過同一中繼線,呼叫被轉發到另一個PSTN +74950000000並在那裏接聽。在CDR呼叫完成,我們可以看到:
src: 79000000000
dst: 78120000000
和有關上次781.2億沒有資料 - > 749.5億調用
我可以使用CDR變量來存儲749.5億,呼籲撥號應用程序之前:
Set(CDR(fwd)=74950000000);
Dial(SIP/78120000000/74950000000);
那麼CDR的呼叫完成,我們可以看到:
src: 79000000000
dst: 78120000000
fwd: 74950000000
那沒關係,因爲我可以在撥號之前限制最長通話時間,並在掛斷後給通話記帳。所有這一切都要感謝已知的FWD。
sip.conf
[78120000000]
name=78120000000
type=peer
host=sip.provider.com
extensions.ael
context sequential {
_.=> {
Set(CDR(fwd)=74950000000);
Dial(SIP/78120000000/74950000000);
Hangup();
}
h => {
Set(BILL_THE_CALL=${ODBC_BILL_THE_CALL()});
// billing is easily executed thanks to logged fwd in CDR
}
}
但在同時呼叫的情況下轉發這是不可能的:
context simultaneous {
_.=> {
// can't set fwd before call completion, because don't know
// if my_cell_phone or softphone will answer
// my_cell_phone costs 5 cents/min, softfone is free of charge
Dial(SIP/78120000000/74950000000&SIP/softphone);
Hangup();
}
h => {
Set(BILL_THE_CALL=${ODBC_BILL_THE_CALL()});
// billing is impossible because fwd is not logged to CDR
}
}
在CDR中,我們可以看到呼叫完成與順序案例一樣,沒有正轉:
src: 79000000000
dst: 78120000000
和有關上次781.2億沒有資料 - > 749.5億或爲軟件電話
所以,你知道任何方式得到應允的用戶名,接聽的號碼,回答CLID,任何爲了能夠法案呼叫?
http://www.voip-info.org/wiki/view/Asterisk+variables
http://www.voip-info.org/wiki/view/Asterisk+func+channel
等環節包含什麼有用的我。
在電話會議上我也可以申請
sip show channel faf7767642
,看到通道用戶名,起源URI等包含我的呼叫轉移號碼,但我不能從那裏撥號方案得到它們。但是當我打電話時:
NoOp(${CHANNEL(username)});
它只是什麼也沒有顯示。有什麼想法?不能相信我錯過了一些明顯的東西。 謝謝!
很難對你提供的信息說些什麼,非常喜歡你有限制的數據庫連接。我建議你啓用星號調試並檢查日誌。或聘請具有較高星號技能的外部顧問監督您的撥號方案。 – arheops
爲什麼你認爲這是一個數據庫連接問題,而所有的問題都圍繞着星號變量? DB絕對是好的。這種情況是同時呼叫轉移。例如撥號(SIP/client1&IAX/client2); - 如何獲得「誰應答了呼叫」:client1或client2?因爲CDR中沒有這樣的信息。這是問題。 –
由於星號對合數的數量沒有任何限制,因此即使你這樣做也沒那麼容易創造極限。 – arheops