<?php
/* Disable cache */
ini_set('soap.wsdl_cache_enabled', 0);
/* Configure variables */
/* IP of the VoipNow server (including port) */
$IP = "192.168.14.30"; //CHANGE
/* Version of the VoipNow product */
$VERSION = '3.0.0'; //CHANGE
/* Authentication token*/
$TOKEN= '1|n_xOgmCNHc_KLnvOh0T_N8yGM8sX.p05|1|B~GqASQvCd.dpq6tjtV.dmkzk6pX~Dnp'; //CHANGE
/* Extended number of the extension you want to add incoming call rules to */
$EXTENDEDNUMBER = '0007*001'; //CHANGE
/* Id of the time interval you want to assign to the rule
* the available ids are the actions of the options of the select which allows you to choose a time interval in the VoipNow interface (from Extension page >> Incoming call rules) */
$INTERVALID = '111'; //CHANGE
/* set SSL context options */
$streamContext = stream_context_create(array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
));
/* Create SOAP client based on WSDL, with trace for debugging */
$client = new SoapClient('https://' . $IP . '/soap2/schema/' . $VERSION . '/voipnowservice.wsdl', array('trace' => 1, 'exceptions' => 1, 'stream_context' => $streamContext));
/* Create authentication headers */
$auth = new stdClass();
$auth->accessToken= $TOKEN;
$userCredentials = new SoapVar($auth, SOAP_ENC_OBJECT, 'http://4psa.com/HeaderData.xsd/' . $VERSION);
$header = new SoapHeader('http://4psa.com/HeaderData.xsd/' . $VERSION, 'userCredentials', $userCredentials, false);
$client->__setSoapHeaders(array($header));
/**
* This function computes a random search report for properties like: 'flow', 'type', 'disposion', 'hangupCause'
*
* @param numeric $intervalID time interval ID
* @param numeric $step how many groups of records can be added once. should be at least 1
*
* @return array a search query array
*/
function computeCallRules($intervalID, $step = 1) {
$actions = array('busy', 'congestion', 'hangup', 'transfer', 'cascade', 'authenticate', 'setCallPriority');
//Rule matches the criteria: o for Match: 0, -1 for Does not match, 1 for Is anonymous and 2 for Is any. Default value: 0
$matches = array('0' => '0', //Match
'1' => '-1', //Does not match
'2' => '1', //Is anonymous
'3' => '2', //Is any
);
//Extension status. 0 for Does not matter, 1 for Registered, -1 for Not Registered.
$extensionStatuses = array('0' => '0', //Does not matter
'1' => '1', //Registered
'2' => '-1', // Not Registered.
);
$call_rules = array();
if ($step >= 1) {
for($i = 0; $i < $step; $i++) {
foreach ($actions as $action) {
$_rule = array(
'match' => $matches[rand(0,3)],
'number' => rand(10000,1000000),
'position' => '2',
'key' => rand(10,100),
'intervalID' => $intervalID,
);
switch ($action) {
case 'transfer':
$_rule += array(
'toNumbers' => array(
'transferNumber' => '11111',
'ring' => rand(3,59),
'call' => rand(0,1),
'askForCaller' => rand(0,1),
'transferFromCallee' =>(rand(3,100)%2 == 1) ? 1:0,
),
/*
'toVoicemail' => array(
'transferNumber' => array('0003*001'),
),
*/
'callStatus' => rand(0,3), //Call status. 0 for Does not matter, 1 for Not Answered, 2 for Rejected, 3 for Busy
'extensionStatus' => $extensionStatuses[rand(0,2)],
'final' => rand(0,1),
);
break;
case 'cascade':
$_rule += array(
'toNumbers' => array(
'number' => '2222',
'ringAfter' => '22',
),
'ring' => rand(3,59),
'final' => rand(0,1),
);
break;
case 'authenticate':
$_rule = array(
'password' => '111',
'soundID' => '1112222222222',
'final' => '1',
);
break;
case 'setCallPriority':
$_rule = array(
'priority' => '1',
);
break;
default:
break;
}
$call_rules[][$action] = $_rule;
}
}
}
return $call_rules;
}
try {
$callRule = array(
'extendedNumber' => $EXTENDEDNUMBER,
'rule' => computeCallRules($INTERVALID)
);
$result = $client->AddCallRulesIn($callRule);
// $result = $client->GetTimeIntervals(array('ID' => 1));
} catch (SoapFault $exception) {
echo "ERROR: <br/>" . $exception->getMessage() . "<br/><br/>";
}
echo "REQUEST:<br/>" . htmlentities($client->__getLastRequest()) . "<br/><br/>";
echo "RESPONSE:<br/>" . htmlentities($client->__getLastResponse()) . "<br/>";
?>
|