SIP Attended Call Transfer In Cluster
(→Configure cdrbuild to copy extra parameter(s)) |
|||
Line 1: | Line 1: | ||
− | This page documents how to configure Yate to handle a SIP attended call transfer for unknown call leg in the cluster node.<br> | + | This page documents how to configure Yate to handle a SIP attended call transfer for an unknown call leg in the cluster node.<br> |
If the SIP module can't find the call in its list it will try to route and execute the transfer request. | If the SIP module can't find the call in its list it will try to route and execute the transfer request. | ||
Line 15: | Line 15: | ||
[general] | [general] | ||
+ | ;Allow handling the REFER message to perform transfers | ||
transfer=yes | transfer=yes | ||
Line 28: | Line 29: | ||
[general] | [general] | ||
+ | ;Name of this node in a cluster | ||
nodename=somehost | nodename=somehost | ||
Line 35: | Line 37: | ||
[general] | [general] | ||
+ | ;Regular expression describing node name match rules | ||
regexp=^[[:alnum:].-]\+$ | regexp=^[[:alnum:].-]\+$ | ||
+ | ; | ||
callto=sip/sip:cluster/${called}@\0 | callto=sip/sip:cluster/${called}@\0 | ||
Revision as of 17:15, 8 November 2012
This page documents how to configure Yate to handle a SIP attended call transfer for an unknown call leg in the cluster node.
If the SIP module can't find the call in its list it will try to route and execute the transfer request.
Bellow are the steps to follow.
Contents |
Enable REFER method handler in the SIP module
ysipchan.conf
[general] ;Allow handling the REFER message to perform transfers transfer=yes
Enable and configure clustering
REMEMBER: It is mandatory to choose node names that can be easily resolved to an IP address.
The SIP call to another cluster will fail if its name can't be resolved.
See also Node Name and clustering.
Set node name
yate.conf
[general] ;Name of this node in a cluster nodename=somehost
Enable and configure the clustering module
clustering.conf
[general] ;Regular expression describing node name match rules regexp=^[[:alnum:].-]\+$ ; callto=sip/sip:cluster/${called}@\0
Enable and configure the line tracker
The line tracker is used to maintain the list of call legs in the database.
The example below assumes the existence of a 'cluster' account in a database module containing a 'lines' table with the following text columns: 'nodeprefix','chan','callid','nodename'.
See also register.
register.conf
[general] linetracker=yes [linetracker] account=cluster initquery=DELETE FROM lines WHERE nodename='${nodename}' cdr_initialize=INSERT INTO lines(nodeprefix,chan,callid,nodename)\ VALUES('${nodeprefix}', '${chan}', '${callid}', '${nodename}') cdr_finalize=DELETE FROM lines WHERE nodeprefix='${nodeprefix}' AND chan='${chan}' cdr_update=UPDATE lines SET callid='${callid}' WHERE nodeprefix='${nodeprefix}' AND chan='${chan}'
Route transfer requests using the line tracker
The example below returns a cluster pickup target.
register.conf
[general] call.route=yes [call.route] account=cluster query=SELECT nodeprefix || 'pickup/' || chan AS location FROM routes WHERE callid='${callid}' AND '${reason}'='transfer' result=location
Configure cdrbuild to copy extra parameter(s)
We need the cdrbuild module to update and forward the callid parameter.
The callid parameter is added by the SIP module.
It is built from SIP dialog data ('Call-ID', 'From' tag, 'To' tag).
cdrbuild.conf
[parameters] callid=true
See also