mirror of https://github.com/asterisk/asterisk
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r284698 | rmudgett | 2010-09-02 11:34:32 -0500 (Thu, 02 Sep 2010) | 5 lines Added documentation for CONNECTEDLINE and REDIRECTING functions. (closes issue #17808) Reported by: jtodd Review: https://reviewboard.asterisk.org/r/875/ ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@284699 65c4cc65-6c06-0410-ace0-fbb531ad65f310-digiumphones
parent
172741bfcf
commit
df6d017aa1
@ -0,0 +1,325 @@
|
||||
\section{Introduction}
|
||||
|
||||
This chapter aims to explain how to use some of the features available to
|
||||
manipulate party ID information. It will not delve into specific channel
|
||||
configuration options described in the respective sample configuration
|
||||
files. The party ID information can consist of Caller ID, Connected Line
|
||||
ID, redirecting to party ID information, and redirecting from party ID
|
||||
information. Meticulous control is needed particularly when
|
||||
interoperating between different channel technologies.
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Caller ID: The Caller ID information describes who is originating a
|
||||
call.
|
||||
|
||||
\item Connected Line ID: The Connected Line ID information describes who
|
||||
is connected to the other end of a call while a call is established.
|
||||
Unlike Caller ID, the connected line information can change over the life
|
||||
of a call when call transfers are performed. The connected line
|
||||
information can also change in either direction because either end could
|
||||
transfer the call. For ISDN it is known as Connected Line Identification
|
||||
Presentation (COLP), Connected Line Identification Restriction (COLR), and
|
||||
Explicit Call Transfer (ECT). For SIP it is known either as
|
||||
P-Asserted-Identity or Remote-Party-Id.
|
||||
|
||||
\item Redirecting information: When a call is forwarded, the call
|
||||
originator is informed that the call is redirecting-to a new destination.
|
||||
The new destination is also informed that the incoming call is
|
||||
redirecting-from the forwarding party. A call can be forwarded repeatedly
|
||||
until a new destination answers it or a forwarding limit is reached.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\section{Tools available}
|
||||
|
||||
Asterisk contains several tools for manipulating the party ID information
|
||||
for a call. Additional information can be found by using the 'core show
|
||||
function' or 'core show application' console commands at the Asterisk CLI.
|
||||
The following list identifies some of the more common tools for
|
||||
manipulating the party ID information:
|
||||
|
||||
\begin{itemize}
|
||||
\item CALLERID(datatype[,caller-id])
|
||||
|
||||
\item CONNECTEDLINE(datatype[,i])
|
||||
|
||||
\item REDIRECTING(datatype[,i])
|
||||
|
||||
\item Dial() and Queue() dialplan application 'I' option
|
||||
|
||||
\item Interception macros
|
||||
|
||||
\item Channel driver specific configuration options.
|
||||
\end{itemize}
|
||||
|
||||
\subsection{CALLERID dialplan function}
|
||||
|
||||
The CALLERID function has been around for quite a while and its use is
|
||||
straightforward. It is used to examine and alter the caller information
|
||||
that came into the dialplan with the call. Then the call with it's caller
|
||||
information passes on to the destination using the Dial() or Queue()
|
||||
application.
|
||||
|
||||
The CALLERID information is passed during the initial call setup.
|
||||
However, depending on the channel technology, the caller name may be
|
||||
delayed. Q.SIG is an example where the caller name may be delayed so your
|
||||
dialplan may need to wait for it.
|
||||
|
||||
\subsection{CONNECTEDLINE dialplan function}
|
||||
|
||||
The CONNECTEDLINE function does the opposite of the CALLERID function.
|
||||
CONNECTEDLINE can be used to setup connected line information to be sent when the
|
||||
call is answered. You can use it to send new connected line information
|
||||
to the remote party on the channel when a call is transferred. The
|
||||
CONNECTEDLINE information is passed when the call is answered and when the
|
||||
call is transferred.
|
||||
|
||||
Since the connected line information can be sent while a call is
|
||||
connected, you may need to prevent the channel driver from acting on a
|
||||
partial update. The 'i' option is used to inhibit the channel driver from
|
||||
sending the changed information immediately.
|
||||
|
||||
\subsection{REDIRECTING dialplan function}
|
||||
|
||||
The REDIRECTING function allows you to report information about
|
||||
forwarded/deflected calls to the caller and to the new destination. The
|
||||
use of the REDIRECTING function is the most complicated of the party
|
||||
information functions.
|
||||
|
||||
The REDIRECTING information is passed during the initial call setup and
|
||||
while the call is being routed through the network. Since the redirecting
|
||||
information is sent before a call is answered, you need to prevent the
|
||||
channel driver from acting on a partial update. The 'i' option is used to
|
||||
inhibit the channel driver from sending the changed information
|
||||
immediately.
|
||||
|
||||
The incoming call may have already been redirected. An incoming call has
|
||||
already been redirected if the REDIRECTING(count) is not zero. (Alternate
|
||||
indications are if the REDIRECTING(from-num-valid) is non-zero or if the
|
||||
REDIRECTING(from-num) is not empty.)
|
||||
|
||||
There are several things to do when a call is forwarded by the dialplan:
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item Setup the REDIRECTING(to-xxx) values to be sent to the caller.
|
||||
|
||||
\item Setup the REDIRECTING(from-xxx) values to be sent to the new
|
||||
destination.
|
||||
|
||||
\item Increment the REDIRECTING(count).
|
||||
|
||||
\item Set the REDIRECTING(reason).
|
||||
|
||||
\item Dial() the new destination.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\subsection{Special REDIRECTING considerations for ISDN}
|
||||
|
||||
Special considerations for Q.SIG and ISDN point-to-point links are needed
|
||||
to make the DivertingLegInformation1, DivertingLegInformation2, and
|
||||
DivertingLegInformation3 messages operate properly.
|
||||
|
||||
You should manually send the COLR of the redirected-to party for an
|
||||
incoming redirected call if the incoming call could experience further
|
||||
redirects. For chan_misdn, just set the REDIRECTING(to-num,i) =
|
||||
\$\{EXTEN\} and set the REDIRECTING(to-num-pres) to the COLR. For
|
||||
chan_dahdi, just set the REDIRECTING(to-num,i) = CALLERID(dnid) and set
|
||||
the REDIRECTING(to-num-pres) to the COLR. (Setting the
|
||||
REDIRECTING(to-num,i) value may not be necessary since the channel driver
|
||||
has already attempted to preset that value for automatic generation of the
|
||||
needed DivertingLegInformation3 message.)
|
||||
|
||||
For redirected calls out a trunk line, you need to use the 'i' option on
|
||||
all of the REDIRECTING statements before dialing the redirected-to party.
|
||||
The call will update the redirecting-to presentation (COLR) when it
|
||||
becomes available.
|
||||
|
||||
\subsection{Dial() and Queue() dialplan application 'I' option}
|
||||
|
||||
In the dialplan applications Dial() and Queue(), the 'I' option is a brute
|
||||
force option to block connected line and redirecting information updates
|
||||
while the application is running. Blocking the updates prevents the
|
||||
update from overwriting any CONNECTEDLINE or REDIRECTING values you may
|
||||
have setup before running the application.
|
||||
|
||||
The option blocks all redirecting updates since they should only happen
|
||||
before a call is answered. The option only blocks the connected line
|
||||
update from the initial answer. Connected line updates resulting from
|
||||
call transfers happen after the application has completed. Better control
|
||||
of connected line and redirecting information is obtained using the
|
||||
interception macros.
|
||||
|
||||
\subsection{Interception macros}
|
||||
|
||||
The interception macros give the administrator an opportunity to alter
|
||||
connected line and redirecting information before the channel driver is
|
||||
given the information. If the macro does not change a value then that is
|
||||
what is going to be passed to the channel driver.
|
||||
|
||||
The tag string available in CALLERID, CONNECTEDLINE, and REDIRECTING is
|
||||
useful for the interception macros to provide some information about where
|
||||
the information originally came from.
|
||||
|
||||
\begin{verbatim}
|
||||
${REDIRECTING_SEND_CALLEE_MACRO}
|
||||
Macro to call before sending a redirecting update to the callee.
|
||||
This macro may never be needed since the redirecting updates
|
||||
should only go from the callee to the caller direction. It is
|
||||
available for completeness.
|
||||
${REDIRECTING_SEND_CALLEE_MACRO_ARGS}
|
||||
Arguments to pass to ${REDIRECTING_SEND_CALLEE_MACRO}.
|
||||
|
||||
${REDIRECTING_SEND_CALLER_MACRO}
|
||||
Macro to call before sending a redirecting update to the caller.
|
||||
${REDIRECTING_SEND_CALLER_MACRO_ARGS}
|
||||
Arguments to pass to ${REDIRECTING_SEND_CALLER_MACRO}.
|
||||
|
||||
${CONNECTED_LINE_SEND_CALLEE_MACRO}
|
||||
Macro to call before sending a connected line update to the callee.
|
||||
${CONNECTED_LINE_SEND_CALLEE_MACRO_ARGS}
|
||||
Arguments to pass to ${CONNECTED_LINE_SEND_CALLEE_MACRO}.
|
||||
|
||||
${CONNECTED_LINE_SEND_CALLER_MACRO}
|
||||
Macro to call before sending a connected line update to the caller.
|
||||
${CONNECTED_LINE_SEND_CALLER_MACRO_ARGS}
|
||||
Arguments to pass to ${CONNECTED_LINE_SEND_CALLER_MACRO}.
|
||||
\end{verbatim}
|
||||
|
||||
\section{Manipulation examples}
|
||||
|
||||
The following examples show several common scenarios in which you may need
|
||||
to manipulate party ID information from the dialplan.
|
||||
|
||||
\subsection{Simple recording playback}
|
||||
|
||||
\begin{verbatim}
|
||||
exten => 1000,1,NoOp
|
||||
; The CONNECTEDLINE information is sent when the call is answered.
|
||||
exten => 1000,n,Set(CONNECTEDLINE(name,i)="Company Name")
|
||||
exten => 1000,n,Set(CONNECTEDLINE(name-pres,i)=allowed)
|
||||
exten => 1000,n,Set(CONNECTEDLINE(num,i)=5551212)
|
||||
exten => 1000,n,Set(CONNECTEDLINE(num-pres)=allowed)
|
||||
exten => 1000,n,Answer
|
||||
exten => 1000,n,Playback(tt-weasels)
|
||||
exten => 1000,n,Hangup
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Straightforward dial through}
|
||||
|
||||
\begin{verbatim}
|
||||
exten => 1000,1,NoOp
|
||||
; The CONNECTEDLINE information is sent when the call is answered.
|
||||
exten => 1000,n,Set(CONNECTEDLINE(name,i)="Company Name")
|
||||
exten => 1000,n,Set(CONNECTEDLINE(name-pres,i)=allowed)
|
||||
exten => 1000,n,Set(CONNECTEDLINE(num,i)=5551212)
|
||||
exten => 1000,n,Set(CONNECTEDLINE(num-pres)=allowed)
|
||||
; The I option prevents overwriting the CONNECTEDLINE information
|
||||
; set above when the call is answered.
|
||||
exten => 1000,n,Dial(SIP/1000,20,I)
|
||||
exten => 1000,n,Hangup
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Use of interception macro}
|
||||
|
||||
\begin{verbatim}
|
||||
[macro-add_pfx]
|
||||
; ARG1 is the prefix to add.
|
||||
; ARG2 is the number of digits at the end to add the prefix to.
|
||||
; When the macro ends the CONNECTEDLINE data is passed to the
|
||||
; channel driver.
|
||||
exten => s,1,NoOp(Add prefix to connected line)
|
||||
exten => s,n,Set(NOPREFIX=${CONNECTEDLINE(number):-${ARG2}})
|
||||
exten => s,n,Set(CONNECTEDLINE(num,i)=${ARG1}${NOPREFIX})
|
||||
exten => s,n,MacroExit
|
||||
|
||||
exten => 1000,1,NoOp
|
||||
exten => 1000,n,Set(__CONNECTED_LINE_CALLER_SEND_MACRO=add_pfx)
|
||||
exten => 1000,n,Set(__CONNECTED_LINE_CALLER_SEND_MACRO_ARGS=45,4)
|
||||
exten => 1000,n,Dial(SIP/1000,20)
|
||||
exten => 1000,n,Hangup
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Simple redirection}
|
||||
\begin{verbatim}
|
||||
exten => 1000,1,NoOp
|
||||
; For Q.SIG or ISDN point-to-point we should determine the COLR for this
|
||||
; extension and send it if the call was redirected here.
|
||||
exten => 1000,n,GotoIf($[${REDIRECTING(count)}>0]?redirected:notredirected)
|
||||
exten => 1000,n(redirected),Set(REDIRECTING(to-num,i)=${CALLERID(dnid)})
|
||||
exten => 1000,n,Set(REDIRECTING(to-num-pres)=allowed)
|
||||
exten => 1000,n(notredirected),NoOp
|
||||
; Determine that the destination has forwarded the call.
|
||||
; ...
|
||||
exten => 1000,n,Set(REDIRECTING(from-num,i)=1000)
|
||||
exten => 1000,n,Set(REDIRECTING(from-num-pres,i)=allowed)
|
||||
exten => 1000,n,Set(REDIRECTING(to-num,i)=2000)
|
||||
; The DivertingLegInformation3 message is needed because at this point
|
||||
; we do not know the presentation (COLR) setting of the redirecting-to
|
||||
; party.
|
||||
exten => 1000,n,Set(REDIRECTING(count,i)=$[${REDIRECTING(count)} + 1])
|
||||
exten => 1000,n,Set(REDIRECTING(reason,i)=cfu)
|
||||
; The call will update the redirecting-to presentation (COLR) when it
|
||||
; becomes available with a redirecting update.
|
||||
exten => 1000,n,Dial(DAHDI/g1/2000,20)
|
||||
exten => 1000,n,Hangup
|
||||
\end{verbatim}
|
||||
|
||||
\section{Ideas for usage}
|
||||
|
||||
The following is a list of ideas in which the manipulation of party ID
|
||||
information would be beneficial.
|
||||
|
||||
\begin{itemize}
|
||||
|
||||
\item IVR that updates connected name on each selection made.
|
||||
|
||||
\item Disguise the true number of an individual with a generic company
|
||||
number.
|
||||
|
||||
\item Use interception macros to make outbound connected number E.164
|
||||
formatted.
|
||||
|
||||
\item You can do a lot more in an interception macro than just manipulate
|
||||
party information...
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\section{Troubleshooting tips}
|
||||
\begin{itemize}
|
||||
|
||||
\item For CONNECTEDLINE and REDIRECTING, check the usage of the 'i'
|
||||
option.
|
||||
|
||||
\item Check channel configuration settings. The default settings may not
|
||||
be what you want or expect.
|
||||
|
||||
\item Check packet captures. Your equipment may not support what Asterisk
|
||||
sends.
|
||||
|
||||
\end{itemize}
|
||||
|
||||
\section{For further reading...}
|
||||
\begin{itemize}
|
||||
|
||||
\item Relevant ETSI ISDN redirecting specification: EN 300 207-1
|
||||
|
||||
\item Relevant ETSI ISDN COLP specification: EN 300 097-1
|
||||
|
||||
\item Relevant ETSI ISDN ECT specification: EN 300 369-1
|
||||
|
||||
\item Relevant Q.SIG ISDN redirecting specification: ECMA-174
|
||||
|
||||
\item Relevant Q.SIG ISDN COLP specification: ECMA-148
|
||||
|
||||
\item Relevant Q.SIG ISDN ECT specification: ECMA-178
|
||||
|
||||
\item Relevant SIP RFC for P-Asserted-Id: RFC3325
|
||||
|
||||
\item The expired draft (draft-ietf-sip-privacy-04.txt) defines
|
||||
Remote-Party-Id. Since Remote-Party-Id has not made it into an RFC at
|
||||
this time, its use is non-standard by definition.
|
||||
|
||||
\end{itemize}
|
Loading…
Reference in new issue