vn-asterisk/incoming.php

88 lines
2.1 KiB
PHP
Executable File

#!/usr/bin/php -q
<?php
if (file_exists(__DIR__.'/env.php'))
include_once __DIR__.'/env.php';
require_once 'agi.php';
require_once 'vn-autoload.php';
$app = new Vn\Lib\App('vn-asterisk');
$app->init();
$db = $app->getSysConn();
Agi::init();
// http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/AGI-communication.html
$callerId = Agi::get('agi_callerid');
$countryCode = Agi::get('agi_arg_1');
// Formats the caller phone number
if (preg_match('/^\\+/', $callerId)) {
$callerId = '00'. substr($callerId, 1);
}
elseif (!preg_match('/^00/', $callerId) && $countryCode) {
$prefix = $db->getValue(
'SELECT prefix FROM prefix WHERE country = #',
[$countryCode]
);
if ($prefix)
$callerId = $prefix . $callerId;
}
$countryPrefix = $db->getValue('SELECT defaultPrefix FROM config');
$prefixLen = strlen($countryPrefix);
if (substr($callerId, 0, $prefixLen) === $countryPrefix)
$callerId = substr($callerId, $prefixLen);
// Checks schedules
if ($countryCode) {
$isInSchedule = $db->getValue(
'SELECT COUNT(*) > 0 FROM pbx.schedule
WHERE weekDays & (1 << WEEKDAY(CURDATE()))
AND country = #
AND TIME(NOW()) BETWEEN startTime AND endTime',
[$countryCode]
);
if ($isInSchedule) {
$isOutOfHours = $db->getValue(
'SELECT COUNT(*) > 0 FROM pbx.holiday
WHERE country = #
AND `day` = CURDATE()',
[$countryCode]
);
} else
$isOutOfHours = true;
if ($isOutOfHours) {
Agi::exec('SET VARIABLE MACRO out-of-ours');
exit;
}
}
// Gets the client from the phone number
$clientId = $db->getValue('SELECT clientFromPhone(#)', [$callerId]);
if ($clientId) {
$client = $db->getObject(
'SELECT d.pbxQueue, c.id, d.notificationEmail
FROM vn.client c
JOIN vn.worker w ON w.id = c.salesPersonFk
JOIN vn.business b ON b.id = w.businessFk
JOIN vn.department d ON d.id = b.departmentFk
WHERE c.id= #',[$clientId]
);
if ($client) {
Agi::exec('SET VARIABLE MACRO queue');
Agi::exec("SET VARIABLE ARG1 \"{$client->pbxQueue}\"");
Agi::exec("SET VARIABLE ARG2 \"Client {$client->id}\"");
Agi::exec("SET VARIABLE ARG3 \"{$client->id}\"");
Agi::exec("SET VARIABLE ARG4 \"{$client->notificationEmail}\"");
}
}