6

我正在使用 Asterisk PBX 呼叫软电话,我使用这个命令:“发起 SIP/100 分机 4004”,在拨号方案中,我必须获取 CALLERID 变量,但在这种情况下,它总是空的!

PS:如果我从软电话(100)呼叫分机(4004),则设置了 CALLERID,我可以通过 : 获取它${CALLERID(num)}

如何在发起案例中获取来电显示?

4

3 回答 3

10

当您发起呼叫时,您可以自己设置呼叫者 ID。有两种方法可以做到这一点——要么在你自己的发起应用程序中,要么在拨号方案中。下面是一个例子。

Action: Originate
Channel: local/12345@outgoing
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()

您应该看到您的呼叫者 ID 在 AMI 发起中设置,或者,如果您选择在拨号计划中覆盖它,这些值。

有关详细信息,请参阅Manager Action OriginateCallerID Function

于 2012-04-08T02:14:48.550 回答
3

我知道这已经很晚了,但如果你在 Asterisk 1.8 上,Originate 应用程序通常不允许它。

我之前在论坛上问过,他们说以后会添加这个功能。所以我所做的是修改 app_originate.c 以允许传递数字和名称。

这是我去年写的: https ://github.com/cmendes0101/asterisk-originate-callerid

已经生产一年多了,一直运行良好。为 1.8 编写的。这是一个简单的修改,因此如果您使用不同的版本,您可以简单地对更改进行比较,并对您的版本进行一些小的更改以实现它。

于 2013-02-19T19:24:05.763 回答
1

我现在使用的最终解决方案:

  • 我从 php 脚本调用我的扩展(发起 SIP/100 扩展 777)
  • 我将扩展名写入文本文件(file_put_contents)
  • 然后我在星号拨号计划中读取它,并将此变量设置为呼叫者 ID Set(CALLERID(num)=${caller_id}

我没有找到另一个解决方案。

于 2012-04-27T16:02:44.793 回答