Asterisk 出席转移:如何保留来电显示

Asterisk Attended Transfer: How to Retain Caller ID

(我是 Asterisk 的新手。)当您进行有人值守的转接时,为什么 Asterisk 在 phone 上显示 asterisk

这是场景:

这是我为了解发生的情况所做的工作:

当调用进入时,它进入上下文并执行这个

exten => _1499,1,Set(CALLERID(name)=${CALLERID(num)})
exten => _1499,n,NoOp(#################### ${CALLERID(num)} ${CALLERID(name)})
exten => _1499,n,Queue(swb_q,tTkK)

在星号上它显示 CallerID 为 1904,这是正确的。

呼叫转移后,它会转到 TRANSFER 上下文并执行此代码

exten => _19XX,1,Gosub(ENDRECORD,s,1)
exten => _19XX,n,NoOp(#################### ${CALLERID(num)} ${CALLERID(name)})
exten => _19XX,n,Set(_TransToExt=${EXTEN})
exten => _19XX,n,NoOp(IN TRANSFER ${TransToExt})
exten => _19XX,n,Gosub(RECORDING,s,1)
exten => _19XX,n,Dial(Sip/${EXTEN},40,tT,kK)

CALLERID(num)(name) 变量不是空白。现在我确定这是因为我在不同的分机或频道或其他东西上。

如何保留来电的来电显示,并在总机转接呼叫时,将该 CID 传递给 Phone2?

如有任何帮助,我们将不胜感激。 Google 有很多关于传输的信息,但我正在努力寻找与此相近的东西。

我看过这个 retain original caller id on Call transfer on asterisk 但我不确定它是否有帮助,因为答案中没有很多细节。

经过长时间的搜索,我找到了答案。

您可以使用变量继承。 https://wiki.asterisk.org/wiki/display/AST/Variable+Inheritance

这让我可以将传入的 CID 存储到我称为 EXTERNAL_NUM 的变量中,如下所示:

exten => _1499,n,Set(__EXTERNAL_NUM= ${CALLERID(num)})
exten => _1499,n,Queue(swb_q,tTkK)

注意变量名称的 from 中的 2x_。 2x_ 用于多重继承。 1x_ 用于单继承。请参阅我发布的 link 以获得解释。

在我的 Transfer 上下文中,我使用这个没有 __ 的变量,如下所示:

exten => _19XX,1,Gosub(ENDRECORD,s,1)
exten => _19XX,n,Set(_TransToExt=${EXTEN})
exten => _19XX,n,NoOp(IN TRANSFER ${TransToExt})
exten => _19XX,n,Gosub(RECORDING,s,1)
exten => _19XX,n,Set(CALLERID(num)=EXTERNAL_NUM)
exten => _19XX,n,Dial(Sip/${EXTEN},40,tT,kK)

希望这可以帮助遇到相同类型问题的其他人,或者只是有时需要使用变量继承。