示例#1
0
 public static function dialplan($number)
 {
     $xml = Telephony::getDriver()->xml;
     $destination = $number['Destination'];
     if ($destination instanceof ExternalXfer) {
         $numberOptions = fs::getNumberOptions($number);
         switch ($destination['route_type']) {
             case ExternalXfer::TYPE_SIP:
                 if (empty($destination['route_details']['interface']) or empty($destination['route_details']['sipuri'])) {
                 }
                 $dialstring = 'sofia/sipinterface_' . $destination['route_details']['interface'] . '/' . $destination['route_details']['sipuri'];
                 break;
             case ExternalXfer::TYPE_TRUNK:
                 if (empty($destination['route_details']['trunk']) or empty($destination['route_details']['number'])) {
                 }
                 $dialstring = 'sofia/gateway/trunk_' . $destination['route_details']['trunk'] . '/' . $destination['route_details']['number'];
                 break;
         }
         $dialstring = str_replace(array('/', '@'), array('\\/', '\\@'), $dialstring);
         if (empty($dialstring)) {
             return;
         }
         $xml->update('/action[@application="set"][@bluebox="settingTimeout"]{@data="call_timeout=' . $numberOptions['timeout'] . '"}');
         $xml->update('/action[@application="set"][@bluebox="settingRing"]{@data="ringback=' . $numberOptions['ringtype'] . '"}');
         $xml->update('/action[@application="set"][@bluebox="settingRingXfer"]{@data="transfer_ringback=' . $numberOptions['ringtype'] . '"}');
         if (!empty($destination['plugins']['callerid']['internal_name'])) {
             $xml->update('/action[@application="export"][@bluebox="sipCalleeIdName"]{@data="sip_callee_id_name=' . $destination['plugins']['callerid']['internal_name'] . '"}');
         } else {
             $xml->update('/action[@application="export"][@bluebox="sipCalleeIdName"]{@data="sip_callee_id_name=' . $destination['name'] . '"}');
         }
         $xml->update('/action[@application="export"][@bluebox="sipCalleeIdNumber"]{@data="sip_callee_id_number=' . $number['number'] . '"}');
         $options = array();
         if (arr::get($destination, 'registry', 'ignore_early_media')) {
             $options[] = 'ignore_early_media=true';
         }
         if (arr::get($destination, 'registry', 'require_confirmation')) {
             $options[] = 'group_confirm_file=ivr\\/ivr-accept_reject_voicemail.wav,group_confirm_key=1,leg_timeout=' . arr::get($destination, 'registry', 'require_confirmation_timeout');
         }
         if (count($options) > 0) {
             $options = '{' . implode(',', $options) . '}';
         } else {
             $options = '';
         }
         if (($type = arr::get($destination, 'plugins', 'activefeaturecode', 'type')) && arr::get($destination, 'plugins', 'activefeaturecode', 'type') != '0') {
             switch ($type) {
                 case 'transfer':
                     $fc = arr::get($destination, 'plugins', 'activefeaturecode', 'number');
                     $ext = arr::get($destination, 'plugins', 'activefeaturecode', 'exten');
                     $transfer = fs::getTransferToNumber($ext);
                     $leg = arr::get($destination, 'plugins', 'activefeaturecode', 'leg');
                     $xml->update('/action[@application="set"][@bluebox="afc_app"]{@data="bridge_pre_execute_' . $leg . 'leg_app=bind_digit_action"}');
                     $xml->update('/action[@application="set"][@bluebox="afc_data"]{@data="bridge_pre_execute_' . $leg . 'leg_data=transfer_back,' . $fc . ',exec:transfer,-bleg ' . $transfer . '"}');
                     break;
                 default:
                     break;
             }
         }
         $xml->update('/action[@application="bridge"]{@data="' . $options . $dialstring . '"}');
     }
 }
示例#2
0
文件: device.php 项目: swk/bluebox
 public static function dialplan($number)
 {
     $xml = Telephony::getDriver()->xml;
     $destination = $number['Destination'];
     if ($destination instanceof Device) {
         $domain = '$${location_' . $destination['User']['location_id'] . '}';
         $numberOptions = fs::getNumberOptions($number);
         $xml->update('/action[@application="set"][@bluebox="settingTimeout"]{@data="call_timeout=' . $numberOptions['timeout'] . '"}');
         $xml->update('/action[@application="set"][@bluebox="settingRing"]{@data="ringback=' . $numberOptions['ringtype'] . '"}');
         $xml->update('/action[@application="set"][@bluebox="settingRingXfer"]{@data="transfer_ringback=' . $numberOptions['ringtype'] . '"}');
         if (!empty($destination['plugins']['callerid']['internal_name'])) {
             $xml->update('/action[@application="export"][@bluebox="sipCalleeIdName"]{@data="sip_callee_id_name=' . $destination['plugins']['callerid']['internal_name'] . '"}');
         } else {
             $xml->update('/action[@application="export"][@bluebox="sipCalleeIdName"]{@data="sip_callee_id_name=' . $destination['name'] . '"}');
         }
         $xml->update('/action[@application="export"][@bluebox="sipCalleeIdNumber"]{@data="sip_callee_id_number=' . $number['number'] . '"}');
         $xml->update('/action[@application="bridge"]{@data="user\\/' . $destination['plugins']['sip']['username'] . '@' . $domain . '"}');
     }
 }
示例#3
0
文件: device.php 项目: swk/bluebox
 public static function dialplan($number)
 {
     $xml = Telephony::getDriver()->xml;
     $destination = $number['Destination'];
     if ($destination instanceof Device) {
         $domain = '$${location_' . $destination['User']['location_id'] . '}';
         $numberOptions = fs::getNumberOptions($number);
         $xml->update('/action[@application="set"][@bluebox="settingTimeout"]{@data="call_timeout=' . $numberOptions['timeout'] . '"}');
         $xml->update('/action[@application="set"][@bluebox="settingRing"]{@data="ringback=' . $numberOptions['ringtype'] . '"}');
         $xml->update('/action[@application="set"][@bluebox="settingRingXfer"]{@data="transfer_ringback=' . $numberOptions['ringtype'] . '"}');
         if (!empty($destination['plugins']['callerid']['internal_name'])) {
             $xml->update('/action[@application="export"][@bluebox="sipCalleeIdName"]{@data="sip_callee_id_name=' . $destination['plugins']['callerid']['internal_name'] . '"}');
         } else {
             $xml->update('/action[@application="export"][@bluebox="sipCalleeIdName"]{@data="sip_callee_id_name=' . $destination['name'] . '"}');
         }
         $xml->update('/action[@application="export"][@bluebox="sipCalleeIdNumber"]{@data="sip_callee_id_number=' . $number['number'] . '"}');
         if (arr::get($destination, 'plugins', 'sip', 'sip_invite_format') == Sip_Plugin::SIP_FORMAT_DIGITS) {
             $xml->update('/action[@application="export"][@bluebox="settingXmlInviteFormat"]{@data="sip_invite_req_uri=sip:' . $number['number'] . '${regex(${sofia_contact(' . $destination['plugins']['sip']['username'] . '\\@' . $domain . ')}|(\\@.*)|$1)}"}');
         } else {
             $xml->deleteNode('/action[@application="export"][@bluebox="settingXmlInviteFormat"]');
         }
         $condition = '/condition[@field="${privacy_hide_number}"][@expression="false"][@break="never"]';
         $extenRoot = $xml->getExtensionRoot();
         //If allowing multi sip interfaces, then we need to change the @data field with sofia_contact.
         $dataString = 'user\\/' . $destination['plugins']['sip']['username'] . '@' . $domain;
         if (arr::get($destination, 'registry', 'multi_sipinterface')) {
             $dataString = '${sofia_contact(*\\/' . $destination['plugins']['sip']['username'] . '@' . $domain . ')}';
         }
         if (arr::get($destination, 'registry', 'anonymous_reject')) {
             $xml->setXmlRoot($extenRoot . $condition);
             //$xml->update('/action[@application="bridge"]{@data="user\/' .$destination['plugins']['sip']['username'] .'@' .$domain .'"}');
             $xml->update('/action[@application="bridge"]{@data="' . $dataString . '"}');
             $xml->setXmlRoot($extenRoot . '/condition[@bluebox="no_answer"]');
         } else {
             //$xml->update('/action[@application="bridge"]{@data="user\/' .$destination['plugins']['sip']['username'] .'@' .$domain .'"}');
             $xml->update('/action[@application="bridge"]{@data="' . $dataString . '"}');
             $xml->deleteNode($extenRoot . $condition);
             $xml->deleteNode($extenRoot . '/condition[@bluebox="no_answer"]');
         }
     }
 }
示例#4
0
文件: ringgroup.php 项目: swk/bluebox
 public static function dialplan($number)
 {
     $xml = Telephony::getDriver()->xml;
     $destination = $number['Destination'];
     switch ($destination['strategy']) {
         case RingGroup::STRATEGY_SEQUENTIAL:
             $memberSeperator = '|';
             break;
         case RingGroup::STRATEGY_ENTERPRISE:
             $memberSeperator = ':_:';
             break;
         case RingGroup::STRATEGY_PARALLEL:
         default:
             $memberSeperator = ',';
     }
     $numberOptions = fs::getNumberOptions($number);
     $xml->update('/action[@application="set"][@bluebox="settingTimeout"]{@data="call_timeout=' . $numberOptions['timeout'] . '"}');
     $xml->update('/action[@application="set"][@bluebox="settingRing"]{@data="ringback=' . $numberOptions['ringtype'] . '"}');
     $xml->update('/action[@application="set"][@bluebox="settingRingXfer"]{@data="transfer_ringback=' . $numberOptions['ringtype'] . '"}');
     $xml->update('/action[@application="export"][@bluebox="sipCalleeIdName"]{@data="sip_callee_id_name=' . $destination['name'] . '"}');
     $xml->update('/action[@application="export"][@bluebox="sipCalleeIdNumber"]{@data="sip_callee_id_number=' . $number['number'] . '"}');
     $xml->update('/action[@application="export"][@bluebox="settingContinueOnTimeout"]{@data="originate_continue_on_timeout=true"}');
     $dialstring = '';
     foreach ($destination['members'] as $member) {
         if (!empty($member['options']) or !empty($numberOptions['timeout'])) {
             $dialstring .= '[';
             foreach ($member['options'] as $parameter => $value) {
                 $dialstring .= $parameter . '=' . $value . ',';
             }
             if (!empty($numberOptions['timeout'])) {
                 $dialstring .= 'leg_timeout=' . $numberOptions['timeout'];
             }
             $dialstring = rtrim($dialstring, ',') . ']';
         }
         $dialstring .= $member['bridge'] . $memberSeperator;
     }
     $dialstring = substr($dialstring, 0, strlen($memberSeperator) * -1);
     $dialstring = str_replace('/', '\\/', $dialstring);
     $dialstring = str_replace('@', '\\@', $dialstring);
     $xml->update('/action[@application="bridge"]{@data="' . $dialstring . '"}');
 }