Dialplan API¶
The dialplan handles the routing of incoming calls.
/api/dialplan/v2¶
The dialplan v2 is a replacement for the old dialplan routing implementation.
-
GET
/api/dialplan/v2
¶ Get list of dialplan objects
Response body example
{ "dialplan" : [ { "uuid": "a4a33462-c88a-42f7-be35-ae06775fde6e", "description": "A description text" }, { "uuid": "b6774686-2bc5-4af0-9dbf-33f4427adbd9", "description": "Holidays" }, { "uuid": "84126d2c-b2d7-4e39-8455-fc4788515928", "description": "Busy season" } ] }
-
POST
/api/dialplan/v2
¶ Creates a new dialplan.
Request body example
{ "dialplan" : { "description": "A description text", "ringtone": { "announcement": "91e85f5c-b9eb-11e1-8b7e-0024e8f90cc0", "mix": true }, "profiles": [ { "filter": { "caller": "\+49221.*|\+4830123456|anonymous", "time": { "weekdays": ["MON","TUE","WED","THU","FRI","SAT","SUN"], "time_start": "07:30", "time_end": "13:00", "time_zone": "Europe/Berlin" } }, "linear": { "timeout" : 7, "targets": [ { "target": "joe_05", "timeout": 5, "clip_number": "+492216698980" }, { "target": "+491771234567", "timeout": 4 } ] } }, { "filter": { "time": { "date": "11.06.2015", "time_start": "07:30", "time_end": "13:00", "time_zone": "Europe/Berlin" } }, "parallel": { "timeout" : 10, "clip_number": "+492216698980", "targets": [ "joe_04", "+491771234567" ] } }, { "cyclic": { "timeout": 7, "targets": [ { "target": "joe_08", "timeout": 4 }, { "target": "+491771234567", "timeout": 5, "clip_number": "+492216698980" } ] } }, { "pin": { "code" : 1337, "timeout": 20, "onStart": [ { "play": { "announcement": "b6774686-2bc5-4af0-9dbf-33f4427adbd9" } } ], "onSuccess": [ { "record" : { "announcement": "b6774686-2bc5-4af0-9dbf-33f4427adbd9" } } ], "onFail": [ { "reject" : {} } ], "onTimeout": [ { "reject" : {} } ], } }, { "play": { "announcement": "b6774686-2bc5-4af0-9dbf-33f4427adbd9" } }, { "record": { "announcement": "b6774686-2bc5-4af0-9dbf-33f4427adbd9" } } ] } }
JSON Parameters: - description –
^.{0,200}$
optional: a short description of this dialplan
- ringtone – optional: The section to configure a “custom ringback tone”
- ringtone.announcement –
UUID
optional: announcement to be played during the connection process
- ringtone.mix –
true|false
optional: if true, a ringing tone is mixed with the ringtone.announcement
- profiles –
optional: first to last element in this list will be evaluated. The elements of profiles contain a filter and an action object. The action object is mandatory it will be executed. Only one action object in a profile element is allowed.
Possible action’s:
- reject: will hang up the call.
- play: will play the given announcement.
- record: will start mailbox recording.
- parallel: will originate calls to all targets in parallel.
- linear: will originate calls to all targets in a sequential way. if a target is busy or timeouts the next will be connected. The starting point is the first list element.
- cyclic: originate calls to all targets in a sequential way. if a target is busy or timeouts the next will be connected. The starting point will be choosen by Round-robin scheduling.
- pin: will generate a pin code request.
- code: the string of DTMF symbols to gain access. The pin code check will run when the recorded DTMF count matches the length of the given code.
- timeout: optional field with the default value of 0(never). The timeout to enter all DTMF symbols.
- onStart: optional field with an array of profile actions. The actions will be executed after DTMF recording has started. The given array must not contain any pin-profile.
- onSuccess: an array of profile actions. The actions will be executed when the user input matches the code.
- onFail: optional field with an array of profile actions. The actions will be executed when the input doesn’t match. If this field is missing or has an empty array, the next profile action starts.
- onTimeout: optional field with an array of profile actions. The actions will be executed when the timeout is reached. The timeout stops when the recorded DTMF count matches the given code length. If this field is missing or has an empty array, the next profile action starts.
- filter – optional: if the
filter
object isn’t present or is present and the all criteria matches the action object will be executed - caller –
regular expression (max. 500 characters)
optional: if the regex doesn’t match the next rule in the
profiles
will be evaluated. Examples: “anonymous” matches calls with clir enabled. “+49.*” matches calls for Germany. “+4922112345” exact match - time – optional: You can define a time range and/or a date and/or date range and/or weekdays.
if the field
date
is present, the fieldsweekdays
,date_start
anddate_end
should not be used. - date –
dd.MM.yyyy
optional: if the current day doesn’t match the given
date
the next rule in theprofiles
will be evaluated. - date_start –
dd.MM.yyyy
optional: if the current day doesn’t follow the given
date
the next rule in theprofiles
will be evaluated. - date_end –
dd.MM.yyyy
optional: if the current day doesn’t precede the given
date
the next rule in theprofiles
will be evaluated.date_end
should not precededate_start
- weekdays – optional: if the current day doesn’t match the given list of
weekdays
the next rule in theprofiles
will be evaluated. - time_start –
hh:mm
optional: the start time of this time filter. The server timezone is UTC.
- time_end –
hh:mm
optional: the end time of this time filter. If
time_start
is not earlier than thetime_end
, then thetime_end
refers to the following day. - time_zone –
^.{2,32}$
optional: the time zone of this time filter. If
time_zone
is not set it will default to UTC. - (parallel|linear|cyclic).clip_number –
^\+[0-9]{3,20}$
optional: custom CLIP number of this action.
- (parallel|linear|cyclic).timeout – optional: the timeout in seconds of this action. The default value is 0. if set to lower than 1 this action won’t stop until network disconnect.
- parallel.targets – mandatory: must be present with at least one
target
. - (linear|cyclic).targets – mandatory: must be present with at least one element. Elements are objects with a
target
and atimeout
. - target –
^\+[0-9]{3,20}$|^[a-z0-9]{2,20}_[0-9]{2}$
optional: the phone number or the SIP account target. The solucon SIP accounts must be owned by this account.
- (linear|cyclic).targets.timeout – optional: the timeout in seconds of the ringing action. The default value is 0. if set to lower than 1 the ringing won’t stop until network disconnect.
Response body example
{ "uuid": "6e33d20f-2052-4e1e-9109-868c06bc5a17" }
The UUID of the newly created dialplan is returned.
Status: - wrong-announcement: This announcement is not a valid announcement accessible from the user
- description –
-
GET
/api/dialplan/v2/
(uuid)¶ Get dialplan
uuid
Response body example
{ "dialplan" : { "description": "Busy season", "profiles": [ { "reject": {} } ] } }
For a description of the JSON fields see
POST /api/dialplan/v2
Status: - wrong-dialplan: The given UUID does not match to a dialplan accessible by the current user
-
POST
/api/dialplan/v2/
(uuid)¶ Modifies dialplan
uuid
Request body example
{ "dialplan" : { "description": "Holidays", "profiles": [ { "record": { "announcement" : "b6774686-2bc5-4af0-9dbf-33f4427adbd9" } } ] } }
Response body example
{}
For a description of the JSON fields see
POST /api/dialplan/v2
Status: - wrong-dialplan: The given UUID does not match to a dialplan accessible by the current user
- wrong-announcement: This announcement is not a valid announcement accessible from the user
-
DELETE
/api/dialplan/v2/
(uuid)¶ Delete the dialplan
uuid
Response body example
{}
Status: - wrong-dialplan: The given UUID does not match to a dialplan accessible by the current user
When the dialplan is active in :http:get:’/api/phone’ it will be removed there as well. This will end in a unintended number configuration.
/api/dialplan¶
-
GET
/api/dialplan
¶ Get the configuration of the user’s dialplan.
Response body example
{ "announcement": "1de1227a-4f34-11e0-ab6e-0024e8f90cc1", "mix_ringtone": false, "clip_number": "+492216698980", "dial_prefix": "+492216698", "clir_enable": false, "cti_via": "+492216698777", "action": "none", "phone": "+492216698999", "sip": "joe_01", "phone_pool": { "+492216698991": true, "+492216698992": false }, "sip_pool": [ "joe_08", "joe_13" ], "callreverse_enable": false, "timeout": { "timeout": 20, "action": "record" }, "unavailable": { "action": "redirect", "phone": "+492216698998", "sip": "joe_01" }, "busy": { "action": "sip", "sip": "joe_07" } }
The
sip
andphone
fields can exist independently of the selection action. E.g. if the action issip
, a phone number can be configured for the respective session, however it will not be used. Each entry in thephone_pool
section is either active (valuetrue
, the number will be dialled if the dialplan gets called) or inactive (valuefalse
).
-
POST
/api/dialplan
¶ Modify the user’s dialplan configuration
Request body example
{ "announcement": "91e85f5c-b9eb-11e1-8b7e-0024e8f90cc0", "mix_ringtone": true, "clip_number": "+492216698888", "dial_prefix": "+492216698", "clir_enable": false, "cti_via": "+492216698777", "action": "none", "phone": "+492216698001", "sip": "joe_01", "phone_pool": { "add": { "+492216698990": false, "+492216698995": true }, "delete": [ "+492216698992" ] }, "sip_pool": { "add": [ "joe_01", "joe_03" ], "delete": [ "joe_02" ] }, "callreverse_enable": false, "timeout": { "timeout": 20, "action": "record" }, "unavailable": { "action": "redirect", "phone": "+492216698993" }, "busy": { "action": "sip", "sip": "joe_01" } }
JSON Parameters: - announcement –
UUID
optional: announcement to be played during the connection process
- mix_ringtone –
true|false
optional: if true, a ringing tone is mixed with the announcement (“custom ringback tone”)
- action –
none|redirect|reject|sip|record
optional: the action to proceed with if the condition is reached
- phone –
^\+[0-9]{3,20}$
optional: the phone number target for action redirect
- sip –
^[a-z0-9]{2,20}_[0-9]{2}$
optional: the SIP account target for action sip
- dial_prefix –
^\+[0-9]{3,20}$
optional: prefix for quick dialing
- clip_number –
^\+[0-9]{3,20}$
optional: custom CLIP number
- clir_enable –
true|false
optional: to enable / disable CLIR feature
- cti_via –
^\+[0-9]{3,20}$
optional: the user’s phone number to receive callback calls on
- callreverse_enable –
true|false
optional: if
true
, enables the call-reverse function
Response body example
{}
Status: - wrong-announcement: The given announcement does not match an announcement accessible by the current user
- wrong-sip: The given SIP account is not one of the current user’s SIP accounts
All fields and structures in this request are optional.
If entries listed in the
add
section of thephone_pool
refer to existing phone numbers, they are overwritten.To delete the
announcement
,phone
,dial_prefix
,clip_number
,cti_via
orsip
fields, an empty string value can be given for these fields.In the case of
timeout
orunavailable
, the actionnone
is not possible.If present, the
dial_prefix
specifies a phone number that will be prepended to the original dialed number if the user (SIP account) dials a short number (quick dialing).If present, the
clip_number
will specify the phone number that is transmitted as the calling line identification for outgoing calls made by a SIP account (PSTN CLIP feature).If
clir_enable
istrue
, the transmission of the calling line identification is suppressed (PSTN CLIR feature).If
callreverse_enable
istrue
, a call to the user’s dialplan will activate the call-reverse function as an additional target just like the targets in thephone_pool
andsip_pool
.- announcement –
-
POST
/api/dialplan/callthrough
¶ Initiate a call-through function
Request body example
{ "phone": "+492216698001", "filter": "+492118271982" }
JSON Parameters: - phone –
^([a-zA-Z0-9]{2,20})|(\+[0-9]{3,20})$
optional: the target (e.g. a phone number) to call in the call-through function.
- filter –
^\+[0-9]{3,20}$
optional: a phone number that has to match to trigger the call-through function.
Response body example
{}
All fields and structures in this request are optional.
When this API method is called, a new call-through process is started. The system saves the given
phone
and optionalfilter
numbers. When the user’s dialplan is called from an external number that matches thefilter
, or when the short-dialling code*98
is dialled from one of the user’s SIP accounts, the call will be connected to the destination phone.There can only be one active call-through process per user. The process state is reset when the call-through is initiated or with any subsequent call to this API method. If this method is called without the phone field, an outstanding call-through request is cleared. Outstanding call-through requests will also time out after an appropriate time interval (typically 1-2 minutes).
- phone –
-
POST
/api/dialplan/callback
¶ Initiate a callback call
Request body example
{ "from": "+492118271982", "to": "+492216698711" }
JSON Parameters: - from –
^\+[0-9]{3,20}$
the originating phone number
- to –
^([a-zA-Z0-9]{2,20})|(\+[0-9]{3,20})$
the destination target (e.g. a phone number)
Response body example
{}
Status: - wrong-phone: The given
from
number does not match any of the user’s phone numbers or thedialplan_enable
flag is not set on the phone number - no-via: No
cti_via
field is set in the user’s dial plan - access-denied: The user has no permissions to use the callback feature
This API call initiates a call back procedure. First, a call is iniated towards the user’s
cti_via
phone number (seeGET /api/dialplan
andPOST /api/dialplan
). When the user answers the call, the given to number will be called and bridged to the first call. The from number will used as an originating caller number on both call legs.The callback feature will utilize the
clip_number
,clir_number
andcti_via
values of the user’s dialplan.- from –
-
POST
/api/dialplan/callreverse
¶ Set the filter for an ongoing call-reverse function
Request body example
{ "filter": "+492118271982" }
JSON Parameters: - filter –
^\+[0-9]{3,20}$
a phone number that has to match to trigger the call-reverse function.
Response body example
{}
Status: - no-callreverse: There is no active call-reverse process
This API method should be called if an ongoing call-reverse process has previously been signalled to the user with a
dialplan_callreverse
event. A phone number can be set as afilter
, and if this phone number calls the user’s dialplan number, the incoming call-reverse call will be connected to this call.- filter –