2012-04-06 110 views
5

我正在使用Asterisk PBX呼叫軟電話,我使用thise命令:「發起SIP/100分機4004」,在撥號方案中,我必須獲得CALLERID變量,但在這種情況下,它總是空的! P:如果我從軟電話(100)呼叫分機(4004),設置了CALLERID,並且我可以使用:${CALLERID(num)}Asterisk:始發呼叫不設置撥號方案中的CALLERID

如何在原始情況下獲取調用者ID?

回答

2

最終的解決方案,我現在使用:

  • 我打電話給我的extention從PHP腳本(發起SIP/100分機777)
  • 我寫我的擴展到一個文本文件(file_put_contents)
  • 然後我在撥號方案讀取它,並設置這個變量作爲主叫方ID設置(CALLERID(NUM)= $ {} caller_id

我沒有找到另一種解決方案。

9

當您發起呼叫時,您自己設置來電顯示。有兩種方法可以做到這一點 - 無論是在原始應用程序中,還是在撥號方案中。下面是一個例子。

Action: Originate 
Channel: local/[email protected] 
Application: Echo 
CallerID: Asterisk <12345> 

的extensions.conf:

[outgoing] 
exten => 12345,1,NoOp() 
same => n,Verbose(1, Outgoing Caller ID: {$CALLERID(all)}) 
same => n,Dial(SIP/${EXTEN}) 
same => n,Hangup() 

,或者你可以這樣做:

exten => 12345,1,NoOp() 
same => n,Set(CALLERID(num)=54321) 
same => n,Set(CALLERID(name)=Asterisk) 
same => n,Verbose(1, Outgoing Caller ID: {$CALLERID(all)}) 
same => n,Dial(SIP/${EXTEN}) 
same => n,Hangup() 

你應該可以看到你的來電顯示設置無論是在AMI發起或,如果您選擇在dialplan中覆蓋它,這些值。

欲瞭解更多信息,請參閱Manager Action OriginateCallerID Function

+0

你好 感謝您的回答,但我不明白如何使用您的解決方案,因爲呼叫者ID必須是動態的(我稱他爲php腳本,它將接收擴展作爲參數)。 無論如何,我正在使用相同的腳本將擴展名寫入文件,然後使用AGI腳本從星號讀取此文件,這是我現在使用的解決方案。 exten => 4004,n,AGI(get_caller_id.php) exten => 4004,n,Set(CALLERID(num)= $ {caller_id}) 謝謝。 – 2012-04-09 09:59:49

+0

上述示例回答了您如何在通過AMI來源創建的渠道上設置調用者ID的問題。我並沒有試圖爲你寫你的申請。如果你需要一個動態的來電顯示,只需使用dialplan變量而不是上面所示的硬編碼值,然後從你的AGI腳本中設置變量。 – 2012-04-09 23:42:44

+0

我沒有說我正在使用AMI!我只是從另一個腳本中調用originate。 謝謝你:) – 2012-04-10 11:02:02

4

我知道這是晚了,但如果你在Asterisk 1.8原始應用程序只是不允許它正常。

我之前曾在論壇上發過帖子,他們表示該功能將在稍後添加。所以我所做的是修改app_originate.c以允許傳遞數字和名稱。

這裏是一個我寫了去年: https://github.com/cmendes0101/asterisk-originate-callerid

一直在生產了一年多,並一直工作良好。寫爲1.8。這是一個簡單的修改,所以如果你使用不同的版本,你可以簡單地區分變化,並對你的版本做一些小的修改。