Asterisk 出席转移:如何保留来电显示
Asterisk Attended Transfer: How to Retain Caller ID
(我是 Asterisk 的新手。)当您进行有人值守的转接时,为什么 Asterisk 在 phone 上显示 asterisk
?
这是场景:
- 我已经在我的 asterisk 服务器上注册了 2 个 SNOM 300 phones 和一个软件 Switchboard 应用程序
- 当我在 phone 1 上拨分机 1499 时,它在总机上响铃
- 我接听电话,转给Phone 2、此时总机正在执行咨询转(*2)
- 在 Asterisk 上,呼叫被放入队列,但是当 phone 2 振铃时,它只显示
asterisk
而不是 phone 1 的分机号码
这是我为了解发生的情况所做的工作:
当调用进入时,它进入上下文并执行这个
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)
希望这可以帮助遇到相同类型问题的其他人,或者只是有时需要使用变量继承。
(我是 Asterisk 的新手。)当您进行有人值守的转接时,为什么 Asterisk 在 phone 上显示 asterisk
?
这是场景:
- 我已经在我的 asterisk 服务器上注册了 2 个 SNOM 300 phones 和一个软件 Switchboard 应用程序
- 当我在 phone 1 上拨分机 1499 时,它在总机上响铃
- 我接听电话,转给Phone 2、此时总机正在执行咨询转(*2)
- 在 Asterisk 上,呼叫被放入队列,但是当 phone 2 振铃时,它只显示
asterisk
而不是 phone 1 的分机号码
这是我为了解发生的情况所做的工作:
当调用进入时,它进入上下文并执行这个
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)
希望这可以帮助遇到相同类型问题的其他人,或者只是有时需要使用变量继承。