SIP Attended Call Transfer In Cluster

From Yate Documentation
(Difference between revisions)
Jump to: navigation, search
(Enable and configure the line tracker)
(Route transfer requests using the line tracker)
Line 62: Line 62:
 
The example below returns a cluster pickup target.  
 
The example below returns a cluster pickup target.  
  
; register.conf
+
register.conf
;
+
 
   
 
   
 
  [general]
 
  [general]
Line 72: Line 71:
 
  query=SELECT nodeprefix || 'pickup/' || chan AS location FROM routes WHERE callid='${callid}' AND '${reason}'='transfer'
 
  query=SELECT nodeprefix || 'pickup/' || chan AS location FROM routes WHERE callid='${callid}' AND '${reason}'='transfer'
 
  result=location
 
  result=location
 
  
 
===Configure [[CDR Build Module|cdrbuild]] to copy extra parameter(s)===
 
===Configure [[CDR Build Module|cdrbuild]] to copy extra parameter(s)===

Revision as of 13:04, 24 October 2012

This page documents how to configure Yate to handle a SIP attended call transfer for an unknown call leg.
If the SIP module can't find the call in its list it will try to route and execute the transfer request.

These are the steps to follow:

  • Enable REFER method handler in the SIP module
  • Enable and configure clustering
  • Enable and configure the line tracker
  • Route transfer requests using the line tracker
  • Configure cdrbuild to copy extra parameter(s)

Contents

Enable REFER method handler in the SIP module

ysipchan.conf

[general]
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]
nodename=somehost

Enable and configure the clustering module

clustering.conf

[general]
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
Personal tools
Namespaces

Variants
Actions
Preface
Configuration
Administrators
Developers