#!/usr/bin/php -q 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}\""); } }