2012-04-06 76 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。这是一个简单的修改,所以如果你使用不同的版本,你可以简单地区分变化,并对你的版本做一些小的修改。