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 . '"}'); } }
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 . '"}'); } }
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"]'); } } }
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 . '"}'); }