Html |
---|
<div class="fb-like" data-href="https://confluence.wildix.com/x/swBuAQ" data-layout="button_count" data-action="recommend" data-size="large" data-show-faces="true" data-share="true"></div> |
...
Scroll export button | ||||||||
---|---|---|---|---|---|---|---|---|
|
Info |
---|
Smart Dialplan explains how to use Custom Applications in Wildix Dialplan to interact with external software and databases. Updated: November 2021 Permalink: https://confluencewildix.wildixatlassian.comnet/wiki/x/swBuAQ1Q3OAQ |
Table of Contents |
---|
AGI in “Custom Application”
...
${foo} → 123456789
${foO:1} → 23456789
${Foo:-4:3} → 678
Dialplan example:
- set(FOO=101) - sets the name of the variable as FOO and the value as 101
- Dial(SIP/${FOO}) - dials 101
...
${CHANNEL}: The channel (the called number present in the Dialplan procedure)
Example:
This Dialplan is assigned to user 102.
NoOp function serves to display the variable value in logs:
Conditions in Dialplan
You can use execute a conditional jump to another Dialplan procedure, based on the boolean result (true or false) of the Gotoif function.
...
expr1 >= expr2 → greater than or equal
Example:
In this example:
set(FOO=1) - we introduce FOO variable with the value 1.
...
Note | ||
---|---|---|
With the help of QUEUE_MEMBER function it is possible to configure CG strategy to execute another Dialplan procedure. The function counts the number of free members of a Call group. When there are no available CG members, an incoming call is routed according to another Dialplan procedure.
where "free" - returns the number of not paused / busy members for a specified queue that can answer calls or are currently paused for the duration of wrap up time after a previous call (free CG members). Note: Wrap up time and ringing state are not considered when using the function. For example: All Call group members are put on pause for the duration period of wrap up time -> the incoming call stays in a queue until wrap up time doesn't expire
|
Example 3: Check if the CALLERID(number) matches a regular expression
GotoIf($[${REGEX("^0[6-7][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]$" ${CALLERID(number)})}]?noanswer,01,1)
...
For this purpose, a query to CDR is made to get a count of unanswered calls from the Caller ID number over the previous X minutes.
NoOp(FromNumber is ${CALLERID(num)}) - detects the Caller ID.
...
Code Block |
---|
<?php echo 101; ?> |
Set(foo=${CURL(http://192.168.1.1/echo.php)})
...
Code Block |
---|
<?php if (isset($_GET['callernum'])) { $callernum = $_GET['callernum']; } Else { $callernum="UNKOWN ID"; } if ($callernum === "0612345678") { echo 102; } Else { echo 101; } ?> |
Set(foo=${CURL(http://192.168.1.1/callernum.php?callernum=${CALLERID(num)})})
...
A database request requires several steps, here is an example:
MYSQL(Connect connid 192.168.1.1 smartdialplan Wil01diX@@ smartdialplan)
MYSQL(Query resultid ${connid} SELECT ext FROM callernum WHERE callernum=${CALLERID(num)})
MYSQL(Fetch fetchid ${resultid} FOO)
MYSQL(Clear ${resultid})
MYSQL(Disconnect ${connid})
Connect: Establishing connection to the BDD
Query: Request execution
Fetch: Reading the result
Clear: Memory cleaning
Disconnect: Disconnection from the BDD
...
SayDigits(digits)
Says the digits, one by one, digits can be a variable.
SayNumber(number, gender)
Says number
gender is "f" for female voice; "m" - for male ;"c" - for neutral
Example:
Read(FOO,00000/smartdialplan/numcommande,3,,,10)
SayNumber(${FOO},f)
Dial(SIP/${FOO})
Implementation of Smart Dialplan: limited access to the phone based on the amount of credits purchased
...
You need to:
Upload PHP AGI (phpagi.sourceforge.net) to /var/www/agi/phpagi/phpagi.php
Upload test script to /var/www/scripts/test.php
...
Then you can use “remote script” in dialplan, example: Remote script
Microsoft SQL Integration
Create /rw2/var/www/scripts/sqllookup.php
...
Call Remote script it in Dialplan:
Call file directory to generate a call
...
Specify the call destination and the channel to use:
Channel: <channel>: Channel to use for the call.
CallerID: "name" <number> Caller ID, please note: it may not work if you do not respect the format: CallerID: "Some Name" <1234>
MaxRetries: <number> Number of retries before failing (not including the initial attempt, e.g. 0 = total of 1 attempt to make the call). Default is 0.
RetryTime: <number> Seconds between retries. Default is 300 (5 min).
WaitTime: <number> Seconds to wait for an answer. Default is 45.
If the call answers, connect it here:
Context: <context-name> Context in extensions.conf
Extension: <ext> Extension definition in extensions.conf
Priority: <priority> Priority of extension to start with
Set: Set a variable to be used in the extension logic (example: file1=/tmp/to)
Application: Application to run (use it instead of specifying context, extension and priority)
Data: The options to be passed to the application
Use Callfile in dialplan
Create a script file in /var/www/scripts dir.
This script will be executed by dialplan.
Copy a template file and move the duplicated file to /var/spool/callweaver/outgoing/
callfile.sh
Code Block |
---|
------------------------------------------------------ #! /bin/sh cp /var/www/scripts/test.call /var/www/scripts/temp.call mv /var/www/scripts/temp.call /var/spool/callweaver/outgoing/ ------------------------------------------------------ Give permissions to execute the script. #chmod +x /var/www/scripts/callfile.sh Create a template file in /var/www/scripts dir. Test.call ------------------------------------------------------ Channel: SIP/0276510950/0970720101 Application: Playback Data: 00000/callfile/message --------------------------------------------------------- |
...
Call a remote script in dialplan.
Use device comment field for customize CID of outgoing call
...
Double click on a device to edit it
Fill out the “Comment” field and click Save
In users dialplan add the following Custom apps:
Set(Useragent=${SIPCHANINFO(useragent)})
...
Prior to this, you should create dialplans named like this users_${Descript} and another one -- users_default in our example -- for calls don’t match to a device with comment field.
External outgoing call with audio file playback
...