SlideShare una empresa de Scribd logo
MANUAL DEL PROGRAMADORPAQUETE DIALERCONTENIDOINTRODUCCIÓNQUE ES DIALER?
BAJO QUE METODOLOGIA ESTA DESARROLLADO?
LISTADO DE SCRIPTS
DESCRIPCION DE SCRIPTS
LISTADO DE FUNCIONES ADICIONALES
CODIGO FUENTEINTRODUCCION REF DIALER \h  \* MERGEFORMAT  REF DIALER \h  \* MERGEFORMAT  REF DIALER \h  \* MERGEFORMAT El propósito de este manual del programador es dar a conocer al Lector (Programador) todas las referencias, scripts, códigos, variables, funciones y trucos empleados en el desarrollo del programa. Para ello se tratará de forma amena y concisa un repaso de todas las particularidades del programa con el fin que el Lector pueda modificar a su gusto algunos de los valores y parámetros de las funciones expuestas así como también un mejor entendimiento de los diferentes valores que adoptan las variables en ciertos momentos clave del desarrollo y que en adelante podrán ser susceptibles de cambios y reformas según sean las nuevas necesidades que se presenten en el futuro.Este desarrollo fue enfocado a tener un Dialer que se integre a todas las funcionalidades de Switchvox un producto de Asterisk.Todo el feedback de todos los desarrolladores ayudaran a fortalecer esta base de desarrollo y crecer basado en las necesidades del cliente final.QUE ES DIALER?
 REF INTRODUCCION \h  \* MERGEFORMAT  REF INTRODUCCION \h  \* MERGEFORMAT La palabra Dialer es de origen anglosajón y hace referencia a un sistema de llamada telefónica en general. Pero hablando en el ámbito de Internet cuando se habla de los Dialer se refiere a unos programas que conectan a Internet a través de un número a cierto usuario. Pero por lo que respecta a nuestro paquete se refiere a un software de marcación automatizado para call center que enlaza una base de datos ingresada por el usuario y realiza una segmentación de las llamadas al ser distribuidas por el software de manera eficaz y eficiente a los distintos agentes que atenderán los diferentes servicios propios de la campaña. De la misma manera las campañas son los diferentes objetivos de negocio de enlace que se tienen y que proveen una mejor administración, seguridad y control de las campañas y objetivos de negocio dentro del telemercadeo y demás distribuciones de llamadas.BAJO QUE METODOLOGIA ESTA DESARROLLADO? REF METODOLOGIA \h  \* MERGEFORMAT La metodología utilizada para el desarrollo fue bajo la constante interacción de los programas PHP, MySQL, además de los servidores SugarCRM®, Switxhvox® y Asterik®. Por supuesto la comunicación entre los mismos es la base para identificar los diferentes servicios que se pueden emplear con esta herramienta.LISTADO DE SCRIPTS REF ARBOL \h  \* MERGEFORMAT El presente listado de scripts especifica las diferentes referencias entre scripts los cuales no solo transportan algunos datos específicos sino también la posibilidad de trabajar con las diferentes variables de los scripts referenciados para poder llevar a cabo los objetivos del mismo. El listado se encuentra ordenado alfabéticamente lo que permite una mejor búsqueda de los scripts.Agent ConsoleScripts IncluidosHeader.phpScript ActualagentConsoleCampaignScripts Incluidos------Script ActualCampaignCampaignDetailScripts IncluidosHeader.phpFusionCharts_Gen.phpFooter.phpGetCampaignData.phpScript ActualCampaignDetailCampaignEditScripts IncluidosHeader.phpSaveCampaign.phpIndex.phpFooter.phpScript ActualCampaignEditCampaignListScripts IncluidosHeader.phpIndex.phpFooter.phpScript ActualCampaignListCampaignViewScripts IncluidosHeader.phpCampaignEdit.phpFooter.phpScript ActualCampaignViewDbConnScripts IncluidosScript ActualDbConnDialerConfigScripts IncluidosHeader.phpsaveConfig.phpfooter.phpindex.phpScript ActualDialerConfigDncInsertScripts IncluidosHeader.phpsaveDoNotCall.phpindex.phpfooter.phpScript ActualDncInsertDoDialScripts IncluidosdbConn.phpScript ActualDoDialDoDial2Scripts Incluidos---Script ActualDoDial2En_us.langScripts Incluidos----Script ActualEn_us.langField_arraysScripts Incluidos----Script ActualField_arraysFooterScripts IncluidosHeaderScript ActualFooterGetCampaignDataScripts IncluidosdbConn.phpScript ActualGet_CampaignDataScript ActualGlobalGlobalScripts Incluidosapm.phpauthnet.phpswitch.phpexport.phplinkpt.phppmnt.phpprint.phpsecure.phpsugar.phptelecontact.phpticket.phpsession.phpGlobalDScripts IncluidosScript ActualGlobalDHeaderScripts IncluidosdbConn.phpsession.phpDialer.jsCalendar.jsCalendar-es.jsCalendar-setup.jsScript ActualHeaderImportVCardScripts IncluidosVcard.phpIndex.phpXtpl.phpLayout_utils.phpScript ActualImportVCardIndexScripts IncluidosHeader.phpSession.phpScript ActualIndexIvrDialerScripts IncluidosdbConn.phpglobalD.phpScript ActualIvrDialerIvrDialer2Scripts IncluidosdbConn.phpvardefs.phpglobal.phpScript ActualIvrDialer2MainScripts IncluidosCrm.phpVariable.phpMenu.phpEsp_es.phpEng_us.phpScript ActualMainSaveAnswerScripts IncluidosdbConn.phpScript ActualSaveAnswerSaveCallResultScripts IncluidosdbConn.phpScript ActualSaveCallResultSaveCampaignScripts IncluidosdbConn.phpglobalD.phpScript ActualSaveCampaignSaveConfigScripts IncluidosdbConn.phpScript ActualSaveConfigSaveDNCScripts IncluidosdbConn.phpScript ActualSaveDNCSaveDoNotCallScripts IncluidosdbConn.phpglobal.phpScript ActualSaveDoNotCallSaveHangUpScripts IncluidosdbConn.phpScript ActualSaveHangUpSaveShortCallScripts IncluidosdbConn.phpScript ActualSaveShortCallSessionScripts IncluidosentryPoint.phprecorder.phpScript ActualSessionStudioScripts Incluidos-----Script ActualStudioVardefsScripts Incluidos---Script ActualVardefsVariableScripts IncluidosGlobal.phpScript ActualVariableDESCRIPCION DE SCRIPTS REF DESCRIPCION \h  \* MERGEFORMAT La intención es identificar cada uno de los scripts saber que hacen, que entradas necesitan y por ultimo que resultados se obtienen de los mismos. De esta forma simplificar las diferentes opciones que se podrían modificar, borrar o guardar.El listado de los scripts se describe a continuación:NombreVariables de entrada Variables del scriptResultadosDescripciónagentConsole$DBLinkEXTENSIONCaller_id$headerTitle$queryCamp$Camp$extension$caller_id$queryInfoCamp$InfoCamp$rowInfoCamp$rowCamp[]Matriz con los id y telefonos del caller id.Selecciona las campañas activas busca las campañas asociadas al caller_id, y las imprime dentro de una matriz (tabla) los diferentes campos tanto identificadores como los números. campaign---NombreFecha_iniFecha_finHora_iniHora_finRetriesCall_fileBtnSaveEntrada de los datos de la campañaCrea un estilo dentro del script además que recibe los datos de la campaña como lo son nombre, rango fecha, rango hora, reintentos, el archivo de llamadas y los envía a una matriz..campaignDetailId$dbDialerFusionCharts.js$campId$dbDialer$DialerLink$queryDispo$Dispo$totRowsDispo$queryTotCalls$TotCalls$rowTotCalls$strParam$i$FC$acumCalls$rowDispo$queryCalls$Calls$rowCalls$porcent$arrData[][]Muestra en pantalla el status de la llamada, con todos sus atributos en fila y los totales de los mismos con la posibilidad de seleccionar solo las campañas con cierto atributo de estatus. Adicional da la posibilidad de ver la estadística de cierta campaña desplegando el grafico. Toma los datos del Header, recoge los diferentes status para realizar la llamada a la bases de datos o la totalidad de las mismas que es el que se toma por defecto, carga las librerías de graficación en flash, luego imprime la totalidad de las campañas y selecciona los datos para crear el grafico de campaña dependiendo de la campaña selecciona da, muestra según el status la cantidad de llamadas y los totales y por ultimo imprime al logo de la empresa con link al inicio. campaignEditId$DialerLink$campId$queryCamp$Camp$rowCampPermite modificar todos los datos de una campaña seleccionada.Consulta los detalles de la campaña  seleccionada y luego los imprime en la tabla respectiva que muestra los datos obtenidos de la base de datos de la campaña seleccionada y da la opción de modificar todos los datos a excepción del código y guardarlos seguido se tiene el script que configura el calendario. y por ultimo carga el logo con el link del inicio.campaignList$dbDialer$DialerLinkStatusCampaign$queryCampaign$statusId$campaign$queryComplete$Complete$rowComplete$queryIncomplete$InComplete$rowIncomplete$queryDNC$DNC$rowDNC$rowCampaignMuestra la tabla con el listado con todos los datos obtenidos de las Campañas  como lo son los campos id, nombre, inicio, fin Ivr, canales reintentos, éxitos, numero de restricciones, DNC(do not call), estado y la opción del reporte grafico al final con dar clic sobre la imagen.Selecciona la base de datos y con el campo campaña seleccionado, crea dos funciones en javascript, seguido crea la tabla y la llena con los campos seleccionados en la búsqueda luego selecciona la llamadas marcadas por lo menos una vez al igual que las que no han sido marcadas y las que son do not call pero si esta activa muestra todos los detalles de las llamadascampaignViewId$dbDialer$DialerLink$campID$queryCamp$Camp$rowCamp[]Muestra los detalles de la campaña dentro de la tabla preferida. Se consultan los registros de la base de datos que cumplan con el id enviado anteriormente y dependiendo del status seleccionado muestra en pantalla los registros que tengan este atributo y da la oportunidad de editar la misma enviándola al script de edición y por ultimo muestra el logo de la empresa con link al inicio.dbConnLocalhostDcs_call_apic4llc3nt3rdcs_call_center$host$user$pass$dbDialer$DialerLinkConecta con la base de datos.Primero renombra las variables, y crea el aceso de la base de datos.dialerConfig$dbDialer$DialerLink$queryConfig$config$rowConfig[]Muestra los datos de configuración con el servidor switchvox y el parámetro de espera.Accesa a la base de datos, revisa los campos de configuración, guarda los campos de configuración con los datos de url del servidor Switchvox, la contraseña para accesar al api de conexión con el mismo servidor y la variable de espera para la conexión. Además da la opción de guardar que lo envía al script de guardar la configuración. Y por ultimo muestra el logo  de la compañía con link al inicio. dncInsertGuarda un número de DNC.Muestra en pantalla el script de agregar un número al cual no marcar y presenta la entrada validando la existencia del mismo en la base de datos y enviándolo al script de guardar el DNC.doDialIdcampaignIdextNumbcall_center.class$campaignId$extNumb$queryCamp$Camp$rowCamp$Dial$rowDial[]$totRowsDial$phone$apiUrl$queryResult$ResultHace la marcación de los números ingresados  por la base de datos si es posible o muestra el motivo del error.Cambia las variables del id de campaña y la extensión en variables locales, selecciona los datos de la base de datos y si la opción de la campaña es activa entonces verifica que existan datos en las filas de la base de datos y si comprueba la inexistencia de filas por utilizar siendo cambia el estado de la base de datos a terminada y sale del script pero en otro caso realiza la marcación comprobando si se puede marcar en caso contrario muestra por pantalla que no se puede realizar la marcación de la campaña seleccionada todo realizado mediante un script.doDial2PhoneextNumb$apiUrl$ch$resp$xmlIntenta colocar la llamada y recibe un estado de la misma.Obtiene el numero de teléfono y la extensión e intenta colocar la llamada quita el encabezado del archivo envía los datos por medio de http y lo verifica dejando al xml que devuelva una respuesta del estado de la llamada.en_us.lang-----$mod_strings[]Carga de libreriasCarga de librerías según sea el caso que aceptan los lenguajes español e ingles.field_arrays----$fields_arrayAsigna los campos del arreglo llamado fields_arrayAsigna los campos del arreglo como son id, first_name, last_name, account_name, title, email1, phone_work, assigned_user_name, assigned_user_id, lead_source, lead_source_description, refered_by, opportunity_name, opportunity_amount, date_entered, status,invalid_email, \"
campaign_id\"
footer---------Imprime en pantalla el logoImprime en pantalla el logo con un link al inicio.getCampaignDataCampaignStatusdbDialerDialerLink$campaign$status$queryData$Data$cadCsv$rowData[]$filename$fpEs la forma como se empaquetan los resultados de los números marcados o según el status que cada uno tiene.Obtiene los datos de campaña y el status para seleccionar la base de datos y dentro los datos a incluir dentro de la matriz cadCsv comprobando la  existencia de filas las concatena en la matriz $cadCsv para luego abrir un archivo y escribir en él y luego cerrarlo, pues es mas fácil trabajar con archivos locales que directamente con los de la base de datos y por ultimo especifica el tipo de archivo y su empaquetamiento par a mostrar los datos en el formato deseado que en este caso es .csvGlobalneedAuth$apmClass$authnetClass$SwitchClass$exportClass$linkptClass$paymentClass$printClass$secureClass$sugarClass$tcClass$ticketClassDefine los objetos y clases globales del paquete.Define los objetos y clases globales del paquete creando adicionalmente un nuevo objeto para cada clase especificada..globalDFunciones dentro del script:Cad_alea:getDnc:getFedDnc:setDnc:ConstruirPlantillaMarcadoOnOriginateResponseOnLink:UnOnLink:OnHangup:setActId:getActId:getByUnqId:CSV2DBDiferentes funciones con funciones esenciales dentro del códigoSe encuentran los códigos de funciones creación de cadenas aleatorias, obtenciony actualización de id’s creación de plantillas y callback ante un evento.Header$headerTitleEncabezado de la pagina.Configura el encabezado de la página y parte del calendario interno.ImportVCardVcardTmp_nameSizeLeadsLbl_module_nameRequest_string$vcard$recorder$mod_strings$theme$error_msg$theme_path$image_pathGlobales:$app_strings$app_list_strings$current_language$xtplSaca un template con algunos datos extraidos de los datos e la tarjeta y los envía para verificación.Accesa a la Vcard si existe, y luego comprueba su existencia.Index----Muestra el menú principal del Dialer con las principales funciones.Carga las variables correspondientes de los scripts y crea los vínculos a las demás funciones principales del programa dejando hecho el menú principal destacándose la configuración, creación de campaña, listado d campañas y la lista de DNC.ivrDialerdbDialerDialerLink$queryConfig$Config$rowConfig$iTimestamp$sFecha$sHora$queryBroadCast$BroadCast$campaignId$queryCamp$Camp$rowCamp$currTime$queryRingCall$RingCall$queryCurrCalls$CurrCalls$contCalls$rowCurrCalls$queryDial$Dial$totRowsDial$extNumb$ivrExt$dialAs$actionId$apiUrl$queryResultScript que envía los dialer al switchvoz y obtiene un resultado del mismo.Extrae los datos de configuración, al igual que los datos de fecha y hora seguido que realiza un consulta a la base de datos y con el id de la campaña extrae los datos de la misma y en seguida verifica la configuración de la hora esperando hasta las 9 de la noche hora límite de llamadas, luego consulta el número de llamadas activas de la presente campaña luego pasa por los diferentes canales hasta que se llenan los mismos y hace un nuevo ciclo. Luego reordena los registros obtenidos después de no tener el dnc vuelve a actualizar el estado de la campaña y le adjudica la restricción de no llamar después de las nueve de la noche y luego extrae los dnc y se comunica con el api para poder colocar la llamada vuelve a actualizar el estado de la llamada, para luego iniciar la sesión con el servidor del webservice toma los resultados del mismo toma la respuesta por medio del xml obteniendo igualmente el estado y vuelve a actualizar el estado de la llamada.ivrDialer2DbDBLink$campaignId$queryCamp$Camp$rowCamp$actionId$extNumb$apiUrl$ch$resp$xml$statusColoca la llamada dentro del switchvoz y toma el resultado.Selecciona los registros con el id ingresado, Coloca la llamada con los datos obtenidos a través del api, y toma la respuesta del xml y del valor del status.mainSugaruseridSugarlandLang$accesRealiza la validación de usuario del Sugar.Carga los scripts necesarios, valida la entrada del Sugar así como el idioma les da la bienvenida y redirecciona al menú principal del sitio al ser validado el usuario.saveAnsweractionIduniqueId$actionId$uniqueId$queryAnswer$AnswerSalva la respuesta del uniqueId tomando el actionId.Carga los scripts necesarios llama a la base de datos y obtiene la respuesta del uniqueId tomando el actionId.saveCallResultcallIdcampIdphoneresultretriescampId$callId$campId$phone$result$queryResult$ResultSalva los datos del resultado de la llamada.Salva los datos obtenidos de la llamada como el callId, pone, dispoCode, result, TdPhoneNumber saveCampaigndbDialerDialerLink$insertSql$result$dncCont$dncFedContFunción: CSV2DBIngresa todos los datos por medio del post..Ingresa los datos suministrados por el post dentro de la base de datos  posteriormente verifica la cantidad de números que existen dentro de las bases de datos en el DNC interno y federal. Lo último que hace es enviar al script de index.php y mostrar unn aviso de Datos Salvados.saveConfigdbDialerDialerLink$insertSql$resultInserta dentro de la base de datos los datos incluidos a través del Post Script que guarda los datos del DNC.saveDNCactionIduniqueIddbDialerDialerLink$actionId$uniqueId$queryDNC$DNCSalva el DNC en la base de datosEnlaza el script de carga de datos y cambia dentro de la tabla calls a la llamada del actionid con el uniqueid cambia el estado del dnc a 1.saveDoNotCalldbDialerDialerLink$insertSql$resultSalva los nueros, el id y el status de los Do Not Call.Salva los datos en la tabla de los Dont_call con el caller_id, date_income y el status enseguida envía por el post el caller_id, t el estado 1 muestra un mensaje de Datos Salvados y redirecciona al script index.phpsaveHangUpuniqueIddbDBLink$uniqueId$queryHangUp$HangUpSalva los datos del HangUPActualiza los datos del end_time teniendo como referencia el uniqueid. saveShortCallUniqueiddbDialerDialerLink$uniqueId$queryAnswer$AnswerSalva los datos de los ShortCall.Actualiza los datos del status y el end_time de la tabla calls teniendo como referencia el uniqueid.sesión$user_unique_key$server_unique_key$allowed_actions$sugar_config$action$allowed_actions$entryPoint.php$module$current_user$curDir$post_login_nav$screxturl$currdirValida y autentifica la sesión de entrada al Sugar.Valida sesión en el Sugar, establece los caminos de los directorios crea una clase de control de autenticación crea una validación del usuario donde si es verdadera hace al usuario global y autentica el usuario y de forma contraria destruye la sesión igual verifica la opción de recorder si ya fue autenticado antes, procesa un tiempo muerto mientras entra a la autenticación para luego iniciar la misma ya sea para validarla o no.studioCrea unas librerias con unas estructuras de clase definidas e incluidas de otros scripts.Crea unas librerias globales con unas estructuras de clase definidas e incluidas de otros scripts.vardefs$campaignId = 2$channel = SIP/gateway/$channel2 = SIP/redtelecom/11131$ivrExt = 6014$context = dialer$CID = 954XXXXXXX$maxChan = 5$callOffset = 20Define algunas variables estrictamente a su valor pero sin llegar a ser estáticas.Define variables como las especificadas anteriormente.variable $inturl$exturl$screxturl$maintitle$apmtitle$globalminbalance$hexSecureCode$merchant_nameid$auth_net_login_id$auth_net_tran_key$linkpoint_confile$linkpoint_keyfile$linkpoint_host$link_port$Switch_login_id$Switch_passwordDefine algunas variables clave dentro del programa como camino de directorios  Define las variables más usadas dentro del programa como directorios internos y externos, titulo principal, claves de seguridad, accesos autorizados y puntos de enlace. LISTADO DE FUNCIONES ADICIONALES REF FUNCIONES \h  \* MERGEFORMAT Funciones Javascript del programadorInit():Que crea un intervalo de de tiempo luego de llamar a recargar()Recargar(): lo que hace es recargar la pagina actualizando todos los registros utilizados en el actual scriptEstos dos anterioresfunciones se encuentran en el script de campaignList.FusionCharts.jsCad_alea: Crea una cadena aleatoria de un rango definido. Siendo esta función encontrada dentro del script de.GlobalDEntrada:$largoUso:$cadena, $desde_ascii= 50, $hasta_ascii= 122, $no_usar[], $i , $numero_aleat, $cadenagetDnc:Hace llamado a la base de datos y verifica la existencia de Do not call (dnc). Siendo esta función encontrada dentro del script de.GlobalDEntrada:$table, $field, $phone, $DBLinkUso:$queryDNC, $DNC, $totRowsDNC, $dncResultados de getDnc:La variable $dnc con toda la información de la consulta en la base de datos.getFedDnc:Verifica en 4 bases de datos la existencia del Dnc caso en el cual lo retorna con valor 1 confirmando la existencia del mismo en alguna de las bases de datos y en caso contrario retornar cero. Siendo esta función encontrada dentro del script de.GlobalDEntrada:$phone, $DBLinkUso:$dncgetFedDnc:La variable $dnc con toda la información de la consulta en la base de datos.setDnc:Función que extrae en una variable los números de los DNC internos. Siendo esta función encontrada dentro del script de.GlobalDVariablesentrada:$table, $campaignId, $phone, $DBLinkUso:$queryDNC, $DNC, $totRowsDNC, $queryDNCCallsResultados de setdncLa variable $dnc con toda la información de la consulta en la base de datos.ConstruirPlantillaMarcadoCrea la plantilla para el marcado a través del sip zap para este caso. Siendo esta función encontrada dentro del script de.GlobalDEntrada:$sTrunkUso:$infoTrunk, $sPlantilla, $plantillaResultados de ConstruirPlantillaMarcadoLa variables $plantilla que incluye la plantilla de marcado.OnOriginateResponseFuncion que hace globales las variables db, DBLink,  campaignId toma el estado devuelto del uniqueId y si es un éxito se ingresa el llamado en la base de datos. Siendo esta función encontrada dentro del script de.GlobalDVariables:Entrada:$sEvent, $params[], $sServer, $iPort.Uso:$db, $DBLink, $campaign, $actId, $callId, $sStatusResultados de OnOriginateResponseEmite Callback cuando se invoca el originar respuesta.OnLink:Toma los 3 uniqueId intentando actualizar el momento de fin de llamada y su duración en dado caso se tengan tres intentos de marcación. Es la forma como se actualizan las llamadas con status succes. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$sEvent, $params[], $sServer, $iPort.Uso:$campaignId, $uniqueId, $uniqueId1, $uniqueId2, $callId, $OnLinkResultados de OnLink:Actualiza las llamadas con success como estado.UnOnLink:Toma los 3 uniqueId intentando actualizar el momento de fin de llamada y su duración en dado caso que  se tengan tres intentos de marcación. Es la forma como se verifican y actualizan las llamadas con status ShortCall. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$sEvent, $params[], $sServer, $iPort, Uso:$campaignId, $uniqueId, $uniqueId1, $uniqueId2, $queryOnUnlink, $Onunlink, $callIdResultados de UnOnLink:Actualiza las llamadas con ShortCall como valor de estado .OnHangup:Llama a la función OnUnLink con los datos de entrada. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$sEvent, $params, $sServer, $iPortResultados de OnHangup:Llama a la función OnUnLink con los datos de entradasetActId:Hace globales las variables $db, $DBLink y actualiza el Id actual de la campaña. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$callId, $actId, $campaignIdUso:$queryActId, $ActIdsetActId:Actualiza el Id de la campaña seleccionada al ingreso de la función.getActId:Hace globales las variables $db, $DBLink y obtiene el Id actual de la campaña. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$actIdUso:$queryActId$ActId$rowActIdResultados de getActId:Retorna la matriz $rowActId[] con el id especificado a la entrada de la función getByUnqId:Función que hace globales las variables db, DBLink y selecciona la llamada con el uniqueid ingresado al invocar la función siendo esta función encontrada dentro del script de.GlobalDEntrada:$uniqueIdUso:$queryUnqId, $UnqId, $rowUnqId.Resultado de getByUnqId:Devuelve el id de la llamada para el posterior cambio de estado.CSV2DBEs una función para guardar los datos dentro de un archivo llamado $handle de forma local abriendo un archivo para que tenga una mayor facilidad de tratamiento seguido se descartan los registros del DNC tanto interno como federal y por ultimo se insertan los datos en el archivo resultado cierra el archivo abierto y muestra un mensaje de Datos Salvados se encuentra dentro del script de SaveCampaign. VariablesEntrada:$filename.Globales:$DialerLink, $dbDialer, $dncFecCont, $dncCont. Uso:$row, $handle, $num, $data [], $dnc, $dncFedCont, $query, $result.Resultado de CSV2DBSalva los datos de la campaña en un archivo interno llamado $result.CODIGO FUENTE REF CODIGO \h  \* MERGEFORMAT Es el último paso ya que aun se tienen mejoras pendientes pero para motivos de este informe te lo envió con lo que tengo hasta el momento sin que necesariamente tenga que quedar así e igual esta abierto a sugerencias…/* *****************************************************Author :                        Development DepartmentCompany :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description:                    Page-  [CopyRigth]********************************************************** */$headerTitle = \"
Outbound Dialer\"
;include('header.php');// Selecciona las campañas Activas//mysql_select_db($db, $DBLink);// Selecciona todo desde call_center.campaign donde estatus es Activa$queryCamp = \"
SELECT * FROM call_center.campaign WHERE estatus='A'\"
;$Camp = mysql_query($queryCamp, $DBLink) or die(mysql_error());echo \"
    Marcando...\n\"
;$extension = $_GET['EXTENSION'];$caller_id = $_GET['caller_id'];// Busca la Campaña que este asociada a este callerid$queryInfoCamp = \"
SELECT * FROM call_center.calls WHERE status='Placing' AND phone='$caller_id' AND id_agent=$extension\"
;$InfoCamp = mysql_query($queryInfoCamp, $DBLink) or die(mysql_error());$rowInfoCamp = mysql_fetch_assoc($InfoCamp);?>      Campaña :           [...]// bucle que imprime en pantalla las lineas de la campaña y tabla seleccionadas while($rowCamp = mysql_fetch_assoc($Camp)){echo \"
{$rowCamp['name']}\"
;}?>                Marcacion A :     //muestra en pantalla la lista de los telefonos?>                     Resultado :           [...]    Exito    Ocupado    Sin Respuesta    Maquina Contestadora    Fallo            \"
 />  \"
/>  \"
/>     .Author :                        Development DepartmentCompany :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description:       Campaign Receive inputs of campaign Page-  [CopyRigth]********************************************************** */?>Untitled Document //Define un estilo.titulos{font-family:\"
trebuchet MS\"
, Verdana, Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold;color:#000000;text-transform:uppercase;}.subtitulos{font-family:\"
trebuchet MS\"
, Verdana, Arial, Helvetica, sans-serif;font-size:12px;font-weight:lighter;color:#000000;text-transform:uppercase;}.style_input{background:#fff;border:1px solid #666;}.input_style{background:#fff;border:1px solid #666;}  LOGO CLIENTE  Crear Nueva Campaña de Marcacion        Codigo :  ###      Nombre :         Rango de fecha :       -            Rango de Hora :       -            Retries :         Archivo de Llamadas :                 /* *****************************************************Author :                        Development DepartmentCompany :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description:                    Campaign's Detail [Report]  Page-  [CopyRigth]********************************************************** */$headerTitle = \"
Listado de Campañas de Marcacion\"
;include('header.php');$campId = $_GET['id'];// Diferentes Status de las llamadas de la campañamysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryDispo = \"
SELECT DISTINCT(status) AS status FROM calls WHERE id_campaign='$campId' ORDER BY status\"
;$Dispo = mysql_query($queryDispo, $DialerLink) or die(mysql_error());$totRowsDispo = mysql_num_rows($Dispo);// Total llamadas de la campaignmysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryTotCalls = \"
SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign='$campId'\"
;$TotCalls = mysql_query($queryTotCalls, $DialerLink) or die(mysql_error());$rowTotCalls = mysql_fetch_assoc($TotCalls);// Librerias necesarias para la graficacion en FLASH// Fusion Chartsinclude(\"
FusionChartsFree/Code/PHPClass/Includes/FusionCharts_Gen.php\"
);echo \"
\"
;echo \"
\"
;?>    Save  Status  Calls    \"
>.$i=0;# Crea el objeto para la Columna del 3D chart$FC = new FusionCharts(\"
Column3D\"
,\"
400\"
,\"
300\"
,\"
ResulTipifica\"
); # Especifica el camino relativo del archivo swf.$FC->setSwfPath(\"
FusionChartsFree/Charts/\"
);# Guarda chart atributos en una variable$strParam=\"
caption=Gestion Cartera;xAxisName=Resultado;yAxisName=Cantidad;rotateNames=1;decimalPrecision=2; formatNumberScale=0\"
;# Set chart attributes$FC->setChartParams($strParam);$acumCalls = 0;//impresion de los datos de las filas y las campañas seleccionadas por el atributo statuswhile($rowDispo = mysql_fetch_assoc($Dispo)){if($rowDispo['status'] == ''){$queryCalls = \"
SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign='$campId' AND status IS NULL\"
;$rowDispo['status'] = 'Not Dialed';}else$queryCalls = \"
SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign='$campId' AND status='{$rowDispo['status']}'\"
;mysql_select_db($dbDialer, $DialerLink) or die(mysql_error());//selecciona base de datos$Calls = mysql_query($queryCalls, $DialerLink) or die(mysql_error());//almacena en calls el llamado hacia la base datos con los campos  especificados$rowCalls = mysql_fetch_assoc($Calls);$porcent = ( $rowCalls['TOTAL'] * 100 ) / $rowTotCalls['TOTAL'];$acumCalls += $rowTotCalls['TOTAL'];?>  \"
 width=\"
25\"
 onClick=\"
framDatos.location.href='getCampaignData.php?campaign=&status=';\"
>    # Add chart data along with category names$arrData[$i][0] = substr($rowDispo['status'],0,10);$arrData[$i][1] = $porcent;$i++;}# llamado a la funcion de clase en PHP FusionCharts para ingresar los datos a la matriz$FC->addChartDataFromArray($arrData); # Render chart$FC->renderChart();?>  \"
 width=\"
25\"
 onClick=\"
framDatos.location.href='getCampaignData.php?campaign=&status=ALL';\"
>  TOTAL    /* *****************************************************Author :                         Development DepartmentCompany :                        TelOnline Corp  www.telonlinecorp.comDate      :                      USA/Colombia, Jan 30 2009Description:                     Campaign's Edit [Report]  Page-  [CopyRigth]********************************************************** */$headerTitle = \"
Crear Nueva Campaña de Marcacion\"
;include('header.php');// Consulta de los detalles de la campaña, que vienen dentro del idmysql_select_db($dbDialer, $DialerLink) or die(mysql_error()); //selecciona la base de datos o envia un errorif(isset($_GET['id']) && $_GET['id']!=''){$campId = $_GET['id'];//mysql_select_db($db, $DBLink);$queryCamp = \"
SELECT * FROM campaign WHERE id=$campId\"
;$Camp = mysql_query($queryCamp, $DialerLink) or die(mysql_error()); //asigna a Camp la consulta o envia un mensae de error$rowCamp = mysql_fetch_assoc($Camp);}else{// maximo consecutivo de campaña//mysql_select_db($db, $DBLink);$queryCamp = \"
SELECT MAX(id) as id FROM campaign\"
;$Camp = mysql_query($queryCamp, $DialerLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);$rowCamp['id'] ++;} //impresion de tabla //Guardar los datos entrados para pasarlos a variables?>        Codigo :           \"
 />        Nombre :   \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />      Rango de fecha :       \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />-    \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />        Rango de Hora :       \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />-    \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />        IVR :       \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />Max Canales :     \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />Retries :     \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />        Dial As extension :       \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />        Archivo de Llamadas :         Estado :                 >[...]  >Detenida  >Activa  >Terminada                         Calendar.setup({    inputField     :    \"
fecha_ini\"
,     // id del campo de texto     ifFormat     :     \"
%Y-%m-%d\"
,     // formato de la fecha que se escriba en el campo de texto     button     :    \"
trigger1\"
     // el id del botón que lanzará el calendario});   Calendar.setup({    inputField     :    \"
fecha_fin\"
,     // id del campo de texto     ifFormat     :     \"
%Y-%m-%d\"
,     // formato de la fecha que se escriba en el campo de texto     button     :    \"
trigger2\"
     // el id del botón que lanzará el calendario});/* *****************************************************Author :                         Development DepartmentCompany :                        TelOnline Corp  www.telonlinecorp.comDate      :                      USA/Colombia, Jan 30 2009Description:                     Campaign's List Detail [Report]  Page-  [CopyRigth]********************************************************** */$headerTitle = \"
Listado de Campañas de Marcacion\"
;include('header.php');//mysql_select_db($db, $DBLink);mysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryCampaign = \"
SELECT * FROM campaign\"
;$statusId = $_GET['status'];if($statusId != '')$queryCampaign .= \"
 WHERE estatus='$statusId'\"
;$Campaign = mysql_query($queryCampaign, $DialerLink) or die(mysql_error());// Consultamos las campaña segun el estado seleccionado?>  function init()  {setInterval(\"
recargar()\"
, 6000);}  function recargar()  {location.reload();}      Id  Nombre  Inicio  Fin  IVR  Chnls  Retries  SUCESSFULL  No. Rest  DNC        >Estado  >Detenida  >Activa  >Terminada    Report.while($rowCampaign = mysql_fetch_assoc($Campaign)){switch($rowCampaign['estatus']){case \"
D\"
 : $rowCampaign['estatus'] = \"
Detenida\"
; break;case \"
A\"
 : $rowCampaign['estatus'] = \"
Activa\"
; break;case \"
T\"
 : $rowCampaign['estatus'] = \"
Terminada\"
; break;}// Seleccionar las llamadas marcadas por lo menos una vezmysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryComplete = \"
SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign={$rowCampaign['id']} AND status='Success'\"
;$Complete = mysql_query($queryComplete, $DialerLink) or die(mysql_error());$rowComplete = mysql_fetch_assoc($Complete);// Seleccionar las llamadas marcadas no han sido marcadasmysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryInComplete = \"
SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign={$rowCampaign['id']} AND status IS NULL\"
;$InComplete = mysql_query($queryInComplete, $DialerLink) or die(mysql_error());$rowInComplete = mysql_fetch_assoc($InComplete);// Seleccionar las llamadas que son DNCmysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryDNC = \"
SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign={$rowCampaign['id']} AND dnc=1\"
;$DNC = mysql_query($queryDNC, $DialerLink) or die(mysql_error());$rowDNC = mysql_fetch_assoc($DNC);?>        '\"
>  '\"
>                          '\"
 />  }?>  //carga de imagen con el logo y link al inicio//cierra la conexion con la base de datos/* *****************************************************Author :                        Development DepartmentCompany :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description:                    Campaign's Views [Report]  Page-  [CopyRigth]********************************************************** */$headerTitle = \"
Crear Nueva Campaña de Marcacion\"
;include('header.php');  // Consultamos los detalles de la campaña,// dependiendo del parametro pasado por idif(isset($_GET['id']) && $_GET['id']!=''){$campId = $_GET['id'];mysql_select_db($dbDialer, $DialerLink);$queryCamp = \"
SELECT * FROM campaign WHERE id=$campId\"
;$Camp = mysql_query($queryCamp, $DialerLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);switch($rowCamp['estatus']){case \"
D\"
 : $rowCamp['estatus'] = \"
Detenida\"
; break;case \"
A\"
 : $rowCamp['estatus'] = \"
Activa\"
; break;case \"
T\"
 : $rowCamp['estatus'] = \"
Terminada\"
; break;}}?>        Codigo :         Nombre :         Rango de fecha :        -                 Rango de Hora :        -                 IVR :       Max Canales :     Retries :             Estado :             '\"
 />  S  /* *****************************************************Author :                       Development DepartmentCompany :                      TelOnline Corp  www.telonlinecorp.comDate      :                    USA/Colombia, Jan 30 2009Description:    Dialer[ db connection ] Page-  [CopyRigth]********************************************************** */// toma las variables globales y las asigna a variables mas cortas$host = \"
localhost\"
; $user = \"
dcs_call_api\"
;$pass = \"
c4llc3nt3r\"
;$dbDialer = \"
dcs_call_center\"
;//accesa a la base de datos con los datos del servidor, usuario y password con una base de datos actual$DialerLink = mysql_connect($host, $user, $pass) or die(mysql_error()); //conecta con la base de datos  o genera un error?>/* *****************************************************Author :                       Development DepartmentCompany :                      TelOnline Corp  www.telonlinecorp.comDate      :                    USA/Colombia, Jan 30 2009Description:    Dialer Config Page-  [CopyRigth]********************************************************** */$headerTitle = \"
Configuracion del Sistema\"
;include('header.php');mysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryConfig = \"
SELECT * FROM config\"
;$Config = mysql_query($queryConfig, $DialerLink) or die(mysql_error());$rowConfig = mysql_fetch_assoc($Config);?>        Switchvox Url :   \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />      Switchvox API Password :   \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />      Failure status time to wait :   \"
 onfocus=\"
this.className='inputFocus';\"
 onblur=\"
this.style.borderColor=''; this.className='input_style';\"
 />              /* *****************************************************Author :                       Development DepartmentCompany :                      TelOnline Corp  www.telonlinecorp.comDate      :                    USA/Colombia, Jan 30 2009Description:    Do not Call add's Page-  [CopyRigth]********************************************************** */$headerTitle = \"
Agregar Numero de DoNotCall\"
;include('header.php');?>        Ani :            **Ingrese el numero de 10 digitos (Ej: 7865331110)                /* *****************************************************Author :                       Development DepartmentCompany :                      TelOnline Corp  www.telonlinecorp.comDate      :                    USA/Colombia, Jan 30 2009Description:    Dial Calls add's Page-  [CopyRigth]********************************************************** */$campaignId = $_GET['campaignId'];$extNumb = $_GET['extNumb'];include('dbConn.php');//mysql_select_db($db, $DBLink);$queryCamp = \"
SELECT * FROM call_center.campaign WHERE id=$campaignId\"
;$Camp = mysql_query($queryCamp, $DBLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);echo \"
\n\"
;if($rowCamp['estatus'] == 'A'){//mysql_select_db($db, $DBLink);$queryDial = \"
SELECT * FROM call_center.calls WHERE id_campaign='$campaignId' AND status IS NULL\"
;$Dial = mysql_query($queryDial, $DBLink) or die(mysql_error());$rowDial = mysql_fetch_assoc($Dial);$totRowsDial = mysql_num_rows($Dial);if($totRowsDial == 0){//mysql_select_db($db, $DBLink);$queryDial = \"
SELECT * FROM call_center.calls WHERE id_campaign=$campaignId AND status NOT IN ('Success', 'Placing', 'Ringing', 'OnQueue', 'OnHold') AND retries $Dial = mysql_query($queryDial, $DBLink) or die(mysql_error());$rowDial = mysql_fetch_assoc($Dial);$totRowsDial = mysql_num_rows($Dial);if($totRowsDial == 0){echo \"
  parent.getEle('TdPhoneNumber').childNodes[0].nodeValue='Campaña Sin Numeros de Marcacion...!!!';\"
;echo \"
\"
;// Actualizamos el estado de la campaign$queryCamp = \"
UPDATE call_center.campaign SET estatus='T' WHERE id=$campaignId\"
;$Camp = mysql_query($queryCamp, $DBLink) or die(mysql_error());exit();}}$phone = $rowDial['phone'];// Colocar llamada$apiUrl = \"
https://sip.domainname.com/api?cmd=call&dial_first=$extNumb&dial_second=$phone\"
;// Actualizar estado de llamada//mysql_select_db($db, $DBLink);$queryResult = \"
UPDATE call_center.calls SET status='Placing', fecha_llamada=NOW(), id_agent=$extNumb WHERE id={$rowDial['id']} AND id_campaign=$campaignId AND $phone='$phone'\"
;$Result = mysql_query($queryResult, $DBLink) or die(mysql_error());echo \"
  parent.getEle('callId').value = '{$rowDial['id']}';\"
;echo \"
  parent.getEle('phone').value = '$phone';\"
;echo \"
  parent.getEle('dispoCode').value = '';\"
;echo \"
  parent.FramAPIDial.location.href='$apiUrl';\n\"
;}else{echo \"
  parent.getEle('TdPhoneNumber').childNodes[0].nodeValue='Campaña no disponible para marcar';\n\"
;echo \"
  parent.location.reload();\n\"
;}//echo \"
  parent.getEle('DivBuscar').style.visibility = 'hidden';\n\"
;echo \"
\"
;?>/* *****************************************************Author :                       Development DepartmentCompany :                      TelOnline Corp  www.telonlinecorp.comDate      :                    USA/Colombia, Jan 30 2009Description:    Dial(2) Calls add's Page-  [CopyRigth]********************************************************** */$phone = $_GET['phone'];$extNumb = $_GET['extNumb'];// Colocar llamada$apiUrl = \"
https://sip.domainname.com/api?cmd=call&dial_first=$extNumb&dial_second=$phone&response_type=xml\"
;//echo $apiUrl . '';$ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from responsecurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, \"
& \"
 )); // use HTTP POST to send form datacurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Returns response data instead of TRUE(1)### curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment this line if you get no gateway response. ###//var_dump($ch);$resp = curl_exec($ch); //execute post and get resultscurl_close ($ch);$xml = simplexml_load_string($resp);//var_dump($xml);echo 'RESULTADO DE LA LLAMADA : '. $xml->status;?>/* *****************************************************Author :                       Development DepartmentCompany :                      TelOnline Corp  www.telonlinecorp.comDate      :                    USA/Colombia, Jan 30 2009Description:    Language's Selection Page-  [CopyRigth]********************************************************** */// created: 2009-01-19 15:32:39$mod_strings = array (  'VALUE' => 'Wealth',  'LBL_SOCIAL_SECURITY' => 'Social Security #',  'LBL_ADDRESS_INFORMATION' => 'Mailing Address     &     Property Address',  'LBL_PRIMARY_ADDRESS_STREET' => 'Mailing Address Street',  'LBL_PRIMARY_ADDRESS_CITY' => 'Mailing Address City',  'LBL_PRIMARY_ADDRESS_COUNTRY' => 'Mailing Address Country',  'LBL_PRIMARY_ADDRESS_POSTALCODE' => 'Mailing Address Postalcode',  'LBL_PRIMARY_ADDRESS_STATE' => 'Mailing Address State',  'LBL_PRIMARY_ADDRESS_STREET_2' => 'Mailing Address Street 2',  'LBL_PRIMARY_ADDRESS_STREET_3' => 'Mailing Address Street 3',  'LBL_TITLE' => 'Position or Occupation:',  'LBL_DATE_OF_BIRTH' => 'D.O.B.',  'LBL_ALT_ADDRESS_CITY' => 'Property Address City',  'LBL_ALT_ADDRESS_COUNTRY' => 'Property Address Country',  'LBL_ALT_ADDRESS_POSTALCODE' => 'Property Address Postalcode',  'LBL_ALT_ADDRESS_STATE' => 'Property Address State',  'LBL_ALT_ADDRESS_STREET_2' => 'Property Address Street 2',  'LBL_ALT_ADDRESS_STREET_3' => 'Property Address Street 3',  'LBL_ALT_ADDRESS_STREET' => 'Property Address Street',  'LBL_ACCOUNT_NAME' => 'Employer Name:',  'LBL_COBOFIRSTNAME' => 'First Name',  'LBL_COBOLASTNAME' => 'Last Name:',  'LBL_COBOHOMEPHONE' => 'Home Phone:',  'LBL_COBOMOBILEPHONE' => 'Mobile:',  'LBL_COBOWORKPHONE' => 'Office Phone:',  'LBL_COBOOTHERPHONE' => 'Other Phone:',  'LBL_COBOSOCSECNUMB' => 'Social Security #',  'LBL_COBODOB' => 'D.O.B.:',  'LBL_PANEL1' => 'Co-Borrower Information',  'LBL_LOANAMOUNT' => 'Loan Amount:',  'LBL_TERMOFLOAN' => 'Term Of Loan:',  'LBL_INTEREST' => 'Rate:',  'LBL_MONTHLY_PMT' => 'Monthly PMT:',  'LBL_INTERESTTYPE' => 'Type:',  'LBL_LTV' => 'LTV:',  'LBL_SALESPRICE' => 'Sales Price:',  'LBL_APPRAISAL' => 'Appraisal:',  'LBL_TARGET_DTI' => 'Target DTI:',  'LBL_PROPERTY_TYPE' => 'Loan Type:',  'LBL_PROPERTY_USE' => 'Property Use:',  'LBL_PROPERTY_UNITS' => 'Property Type:',  'LBL_PANEL2' => 'Mortgage Information',  'LBL_LOANNUMBER' => 'Loan Number:',  'LBL_EMAIL_ADDRESSES' => '',  'LBL_LENDER' => 'Primary Lender :',  'LBL_CONTACT_INFORMATION' => 'Borrower Information',  'LBL_LENDER2' => 'Second Lender :',  'LBL_LOANAMOUNT2' => 'Loan Amount:',  'LBL_LOAN_NUMBER2' => 'Loan Number:',  'LBL_TERMOFLOAN2' => 'Term Of Loan:',  'LBL_RATE2' => 'Rate:',  'LBL_MONTHLYPAY2' => 'Monthly PMT:',  'LBL_TYPE2' => 'Type:',  'LBL_LTV2' => 'LTV:',  'LBL_SALES_PRICE2' => 'Sales Price:',  'LBL_APPRAISAL2' => 'Appraisal:',  'LBL_TARGET_DTI2' => 'Target DTI:',  'LBL_PROPERTY_TYPE2' => 'Loan Type:',  'LBL_PROPERTY_USE2' => 'Property Use:',  'LBL_PROPERTY_UNITS2' => 'Property Type:',  'LBL_PANEL3' => 'INCOME / EXPENSES',  'LBL_BORR_GROSS_WAGES_MONTHLY' => 'Gross Wages Monthly:',  'LBL_COBOGROSS_WAGES_MONTHLY' => 'Gross Wages Monthly:',  'LBL_BORRUNEMPLOYMENTINCOME' => 'Unemployment Income',  'LBL_COBOUNEMPLYMENTINCOME' => 'Unemployment Income',  'LBL_BORRCHILDSUPPORT' => 'Child Support / Alimony',  'LBL_COBOCHILDSUPPORT' => 'Child Support / Alimony',  'LBL_BORRDISABILITYINCOME' => 'Disability Income / SSI',  'LBL_COBODISABILITYINCOME' => 'Disability Income / SSI',  'LBL_BORRRENTSRECEIVED' => 'Rents Received',  'LBL_COBORENTSRECEIVED' => 'Rents Received',  'LBL_BORROTHER' => 'Other',  'LBL_BORRFEDSTATTAX' => 'Less : Federal and State Tax, FICA',  'LBL_COBOFEFSTDTAX' => 'Less : Federal and State Tax, FICA',  'LBL_BORROTHERDEDUC' => 'Less : Other Deductions (401k, etc)',  'LBL_COBOOTHERDEDUCTIONS' => 'Less : Other Deductions (401k, etc)',  'LBL_BORRCOMISSBONUS' => 'Commissions, Bonus & self-employed income',  'LBL_COBOCOMMISSBONUS' => 'Commissions, Bonus & self-employed income',  'LBL_COBOOTHER' => 'Other:',  'LBL_TYPE' => 'Type',  'LBL_CENSUS' => 'Census',  'LBL_YEAR_LISTED' => 'year listed',  'LBL_WEALTH' => 'Wealth',);?>if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');/********************************************************************************* * SugarCRM is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004 - 2008 SugarCRM Inc. *  * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. *  * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more * details. *  * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. *  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. *  * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. *  * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the \"
Powered by * SugarCRM\"
 logo. If the display of the logo is not reasonably feasible for * technical reasons, the Appropriate Legal Notices must display the words * \"
Powered by SugarCRM\"
. ********************************************************************************//********************************************************************************* * Description:  Contains field arrays that are used for caching * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. Company :                      TelOnline Corp  www.telonlinecorp.com Date      :                    USA/Colombia, Jan 30 2009Contributions :                 Development Department ********************************************************************************/$fields_array['Lead'] = array ('column_fields' => Array(\"
id\"
,\"
refered_by\"
,\"
date_entered\"
,\"
date_modified\"
,\"
modified_user_id\"
,\"
assigned_user_id\"
,\"
created_by\"
,\"
salutation\"
,\"
first_name\"
,\"
last_name\"
,\"
lead_source\"
,\"
lead_source_description\"
,\"
title\"
,\"
department\"
,\"
reports_to_id\"
,\"
do_not_call\"
,\"
phone_home\"
,\"
phone_mobile\"
,\"
phone_work\"
,\"
phone_other\"
,\"
phone_fax\"
,\"
email1\"
,\"
email2\"
,\"
email_opt_out\"
,\"
primary_address_street\"
,\"
primary_address_city\"
,\"
primary_address_state\"
,\"
primary_address_postalcode\"
,\"
primary_address_country\"
,\"
alt_address_street\"
,\"
alt_address_city\"
,\"
alt_address_state\"
,\"
alt_address_postalcode\"
,\"
alt_address_country\"
,\"
description\"
,\"
status\"
,\"
status_description\"
,\"
account_name\"
,\"
account_description\"
,\"
account_id\"
,\"
opportunity_id\"
,\"
contact_id\"
,\"
opportunity_amount\"
,\"
opportunity_name\"
,\"
portal_name\"
,\"
portal_app\"
,\"
invalid_email\"
,\"
campaign_id\"
),        'list_fields' =>  Array('id', 'first_name', 'last_name', 'account_name', 'title', 'email1', 'phone_work', 'assigned_user_name', 'assigned_user_id', 'lead_source', 'lead_source_description', 'refered_by', 'opportunity_name', 'opportunity_amount', 'date_entered', 'status','invalid_email', \"
campaign_id\"
),);?>/* *****************************************************Author :                       Development DepartmentCompany :                      TelOnline Corp  www.telonlinecorp.comDate      :                    USA/Colombia, Jan 30 2009Description:                   Print Logo -  [CopyRigth]********************************************************** */echo \"
  \"
;?>/* *****************************************************Author :                       Development DepartmentCompany :                      TelOnline Corp  www.telonlinecorp.comDate      :                    USA/Colombia, Jan 30 2009Description:                   Dilaer[ db connection ] Page- [CopyRigth]********************************************************** */include('dbConn.php');//obtiene los datos de la campaña y el estatus de la misma$campaign = $_GET['campaign'];$status = $_GET['status'];//selecciona los registros de la campaña y los abremysql_select_db($dbDialer, $DialerLink);$queryData = \"
SELECT * FROM calls WHERE id_campaign=$campaign AND status='$status'\"
;$Data = mysql_query($queryData, $DialerLink) or die(mysql_error());//Ingresa los datos obtenidos en la matriz cadCsv$cadCsv = \"
\"
;while($rowData = mysql_fetch_assoc($Data)){$cadCsv .= $rowData['phone'] . \"
,\n\"
;}//abre, escribe y cierra el archivo con nombre DataCampaign.csv$fileName = \"
DataCampaign.csv\"
;$fp = fopen($fileName, \"
w\"
);fwrite($fp, $cadCsv);fclose($fp);//forma de empaquetar los archivosheader('Content-type: application/force-download');header('Content-Transfer-Encoding: Binary');header('Content-length: '.filesize($fileName));header('Content-disposition: attachment; filename='.basename($fileName));readfile($fileName);?>/* *****************************************************Author :                        Development DepartmentCompany :                    TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description: Tel Online - Module Management [ global obj ]********************************************************** *//* [ Functions Inclution ] */# include(\"
agent.php\"
); ### Agent Management# include(\"
account.php\"
); ### Account Managementinclude(\"
apm.php\"
); ### Account Product Managementinclude(\"
Switch.php\"
); ### Switch Utilitiesinclude(\"
export.php\"
); ### Export Data Utilities# include(\"
ivr.php\"
); ### IVR Utilitiesinclude(\"
print.php\"
); ### Print Management# include(\"
product.php\"
); ### Product Managementinclude(\"
sugar.php\"
); ### SugarCRM Utilitiesinclude(\"
telecontact.php\"
); ### TeleContact Utilitiesinclude(\"
ticket.php\"
); ### Ticketing System Management//echo 'global2';if($needAuth != \"
FALSE\"
)include(\"
session.php\"
);/// Session validate /* [ Functions Definition ] */# $agentClass = new agent();# $accClass = new account();$apmClass = new apm(); $authnetClass = new aim(); $SwitchClass = new Switch(); $exportClass= new exportData();# $ivrClass = new ivr();$linkptClass = new linkpoint(); $paymentClass= new payment();$printClass = new prnt();# $prodClass = new product();$secureClass = new secure();  $sugarClass = new sugar();$tcClass = new telecontact();$ticketClass= new ticket(); ?>/* *****************************************************Author :                        Development DepartmentCompany :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description: Tel Online - Module Management [ global obj ]********************************************************** */// funcion que pide un largo// y retorna una cadena de un largo de entrada predeterminadofunction cad_alea($largo){$cadena=\"
\"
;$desde_ascii = 50;$hasta_ascii = 122;$no_usar = array (58,59,60,61,62,63,64,73,79,91,92,93,94,95,96,108,111);$i=0;while($i {//crea un numero aleatoriomt_srand((double)microtime() * 1000000);$numero_aleat = mt_rand ($desde_ascii, $hasta_ascii);if (!in_array ($numero_aleat, $no_usar)){$cadena = $cadena . chr($numero_aleat);$i++;}}return $cadena;}// funcion que pide una tabla, un campo, un numero y una base de datos// verifca si tiene filas activas y devuelve un valor de falso o verdadero o (0 o 1)function getDnc($table, $field, $phone, $DBLink){$queryDNC = \"
SELECT $field FROM $table WHERE $field='$phone'\"
;$DNC = mysql_query($queryDNC, $DBLink) or die(mysql_error() . ' L6');$totRowsDNC = mysql_num_rows($DNC);if($totRowsDNC > 0)$dnc = \"
1\"
;else$dnc = \"
0\"
;return $dnc;}// funcion que pide un numero de telefono y el enlace de una base de datos// verifica en 4 diferentes bases de datos la existencia del DNCfunction getFedDnc($phone, $DBLink){$dnc = getDnc('CDCenter.DNCClick2MediaCorp', 'AreaCodePhoneNumber', $phone, $DBLink);if($dnc == 1)return $dnc;$dnc = getDnc('CDCenter.DNCDirectCredit', 'AreaCodePhoneNumber', $phone, $DBLink);if($dnc == 1)return $dnc;$dnc = getDnc('CDCenter.DNCTelX3m', 'AreaCodePhoneNumber', $phone, $DBLink);if($dnc == 1)return $dnc;$dnc = getDnc('CDCenter.DNCTelonlineCorp', 'AreaCodePhoneNumber', $phone, $DBLink);if($dnc == 1)return $dnc;}function setDnc($table, $phone, $campaignId, $DBLink){$queryDNC = \"
SELECT AreaCodePhoneNumber FROM CDCenter.$table WHERE AreaCodePhoneNumber='$phone'\"
;$DNC = mysql_query($queryDNC, $DBLink) or die(mysql_error() . ' L6');$totRowsDNC = mysql_num_rows($DNC);if($totRowsDNC > 0){$queryDNCCalls = \"
UPDATE calls SET dnc=1 WHERE phone='$phone' AND id_campaign=$campaignId\"
;$DNCCalls = mysql_query($queryDNCCalls, $DBLink) or die(mysql_error());}return $dnc;}/** * Procedimiento que construye una plantilla de marcado a partir de una  * definición de trunk. Una plantilla de marcado es una cadena de texto de * la forma 'blablabla$OUTNUM$blabla' donde $OUTNUM$ es el lugar en que * debe constar el número saliente que va a marcarse. Por ejemplo, para * trunks de canales ZAP, la plantilla debe ser algo como Zap/g0/$OUTNUM$ *  * @paramstring$sTrunkPatrón que define el trunk a usar por la campaña *  * @returnmixedLa cadena de plantilla de marcado, o NULL en error  */function construirPlantillaMarcado($sTrunk){if (stripos($sTrunk, '$OUTNUM$') !== FALSE){// Este es un trunk personalizado que provee $OUTNUM$ ya preparadoreturn array('TRUNK' => $sTrunk);}elseif (ereg('^SIP/', $sTrunk) || eregi('^Zap/.+', $sTrunk) || ereg('^IAX/', $sTrunk)){// Este es un trunk Zap o SIP. Se debe concatenar el prefijo de marcado // (si existe), y a continuación el número a marcar.$infoTrunk = $this->_leerPropiedadesTrunk($sTrunk);if (is_null($infoTrunk)) return NULL;// SIP/TRUNKLABEL/$OUTNUM$$sPlantilla = $sTrunk.'/';if (isset($infoTrunk['PREFIX'])) $sPlantilla .= $infoTrunk['PREFIX'];$sPlantilla .= '$OUTNUM$';// Agregar información de Caller ID, si está disponible$plantilla = array('TRUNK' => $sPlantilla);if (isset($infoTrunk['CID']) && trim($infoTrunk['CID']) != '')$plantilla['CID'] = $infoTrunk['CID'];return $plantilla;}else{$this->oMainLog->output(\"
ERR: trunk '$sTrunk' es un tipo de trunk desconocido. Actualice su versión de CallCenter.\"
);return NULL;}}    // Callback invocado al recibir el evento OriginateResponsefunction OnOriginateResponse($sEvent, $params, $sServer, $iPort){echo 'OnOriginateResponse CallBack Function ...!!! ' . \"
\n\"
;global $db, $DBLink, $campaignId;if(!isset($params['ActionID']))return FALSE;$actId = $params['ActionID'];$callId = getActId($actId);// Estado devuelto$sStatus = $params['Response'];// Identificador de la llamadaif ($params['Uniqueid'] == '')$params['Uniqueid'] = NULL;// Si es Exito, ingresamos timbrado en la dbif ($sStatus == 'Success')$sStatus = 'Ringing';mysql_select_db($db, $DBLink);$queryResp = \"
UPDATE calls SET status='$sStatus', Uniqueid='{$params['Uniqueid']}', fecha_llamada=NOW(), start_time = NULL, end_time = NULL \"
;$queryResp .= \"
WHERE id_campaign=$campaignId AND id=$callId\"
;$Resp = mysql_query($queryResp, $DBLink) or die(mysql_error() . ' L91');}// Callback invocado al recibir el evento Linkfunction OnLink($sEvent, $params, $sServer, $iPort){echo 'OnLink CallBack Function ...!!! ' . \"
\n\"
;print_r($params);global $db, $DBLink, $campaignId;if($campaignId == '')$campaignId = 2;$uniqueId = $params['Uniqueid'];$callId = getByUnqId($uniqueId);// Actualización de momento de fin de llamada y duración$queryOnUnlink = \"
UPDATE calls SET status='ShortCall', end_time=NOW() WHERE id='$callId'\"
;$OnUnlink = mysql_query($queryOnUnlink, $DBLink) or die(mysql_error() . ' L140');$uniqueId1 = $params['uniqueid1'];$callId = getByUnqId($uniqueId1);$queryOnLink = \"
UPDATE calls SET status='Success', id_agent='801', start_time=NOW(), end_time=NULL, retries=retries+1\"
;$queryOnLink .= \"
 WHERE id='$callId'\"
;$OnLink = mysql_query($queryOnLink, $DBLink) or die(mysql_error() . '' . $queryOnLink . ' L115');$uniqueId2 = $params['uniqueid2'];$callId = getByUnqId($uniqueId2);$queryOnLink = \"
UPDATE calls SET status='Success', id_agent='801', start_time=NOW(), end_time=NULL, retries=retries+1\"
;$queryOnLink .= \"
 WHERE id='$callId'\"
;$OnLink = mysql_query($queryOnLink, $DBLink) or die(mysql_error() . '' . $queryOnLink . ' L115');}// Callback invocado al recibir el evento Unlinkfunction OnUnlink($sEvent, $params, $sServer, $iPort){echo 'OnUnlink CallBack Function ...!!! ' . \"
\n\"
;print_r($params);global $db, $DBLink, $campaignId;if($campaignId == '')$campaignId = 2;$uniqueId = $params['Uniqueid'];$callId = getByUnqId($uniqueId);// Actualización de momento de fin de llamada y duración$queryOnUnlink = \"
UPDATE calls SET status='ShortCall', end_time=NOW() WHERE id='$callId'\"
;$OnUnlink = mysql_query($queryOnUnlink, $DBLink) or die(mysql_error() . ' L140');$uniqueId1 = $params['uniqueid1'];$callId = getByUnqId($uniqueId1);// Actualización de momento de fin de llamada y duración$queryOnUnlink = \"
UPDATE calls SET status='ShortCall', end_time=NOW() WHERE id='$callId'\"
;$OnUnlink = mysql_query($queryOnUnlink, $DBLink) or die(mysql_error() . ' L140');$uniqueId2 = $params['uniqueid2'];$callId = getByUnqId($uniqueId2);// Actualización de momento de fin de llamada y duración$queryOnUnlink = \"
UPDATE calls SET status='ShortCall', end_time=NOW() WHERE id='$callId'\"
;$OnUnlink = mysql_query($queryOnUnlink, $DBLink) or die(mysql_error() . ' L146');}function OnHangup($sEvent, $params, $sServer, $iPort)    {        // Lo siguiente sirve porque tanto Unlink como Hangup comparten un Uniqueid    return OnUnlink($sEvent, $params, $sServer, $iPort);    }function setActId($callId, $actId, $campaignId){global $db, $DBLink;mysql_select_db($db, $DBLink);$queryActId = \"
UPDATE calls SET actionId='$actId' WHERE id=$callId AND id_campaign=$campaignId\"
;$ActId = mysql_query($queryActId, $DBLink) or die(mysql_error() . ' L125');}function getActId($actId){global $db, $DBLink;mysql_select_db($db, $DBLink);$queryActId = \"
SELECT * FROM calls WHERE actionId='$actId'\"
;$ActId = mysql_query($queryActId, $DBLink) or die(mysql_error() . ' L134');$rowActId = mysql_fetch_assoc($ActId);// Retornamos el Id de la llamada para// la actualizacion de los estadosreturn $rowActId['id'];}function getByUnqId($uniqueId){global $db, $DBLink;mysql_select_db($db, $DBLink);$queryUnqId = \"
SELECT * FROM calls WHERE uniqueid='$uniqueId'\"
;$UnqId = mysql_query($queryUnqId, $DBLink) or die(mysql_error() . ' L101');$rowUnqId = mysql_fetch_assoc($UnqId);// Retornamos el Id de la llamada para// la actualizacion de los estadosif($rowUnqId['id'] != '')return $rowUnqId['id'];}?>/* *****************************************************Author :                        Development DepartmentCompany :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description:                    Header Page-  [CopyRigth]********************************************************** *//* Turn output buffering on: */ ob_start();header('Content-Type: text/html; charset=ISO-8859-1');  include('dbConn.php'); //incluye el archivo dbConn de autenticacion de las variables usuario//include(\"
../../db/crm.php\"
); include(\"
session.php\"
); //incluye la verificacion de sesion# Validate SugarCRM & Create Session Variables//$access = $sugarClass->validate( $_GET['sugaruserid'], $_GET['lang'], $sugarcrmconn ); ?>Campaign Manager     /* *****************************************************Author :                        Development DepartmentCompany :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description:                    Card Verification's Page-  [CopyRigth]********************************************************** */if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');/********************************************************************************* * SugarCRM is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004 - 2008 SugarCRM Inc. *  * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. *  * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more * details. *  * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. *  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. *  * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. *  * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the \"
Powered by * SugarCRM\"
 logo. If the display of the logo is not reasonably feasible for * technical reasons, the Appropriate Legal Notices must display the words * \"
Powered by SugarCRM\"
. ********************************************************************************/ /* formulario de la verificacion de la tarjeta de credito */if(isset($_FILES['vcard']['tmp_name'])) {if (!empty($_FILES['vcard']['tmp_name']) &&  isset($_FILES['vcard']['size']) && $_FILES['vcard']['size'] > 0) {require_once('include/vCard.php');$vcard = new vCard();$record = $vcard->importVCard($_FILES['vcard']['tmp_name'],'Leads');header(\"
Location: index.php?action=DetailView&module=Leads&record=$record\"
);    exit(); } else {header(\"
Location: index.php?action=ImportVCard&module=Leads\"
);    exit(); }}else{require_once('XTemplate/xtpl.php');echo \"
\n\n\"
;echo get_module_title($mod_strings['LBL_MODULE_NAME'], $mod_strings['LBL_MODULE_NAME'].\"
 \"
.$mod_strings['LBL_IMPORT_VCARD'], true); echo \"
\n\n\"
;global $theme;$error_msg = '';$theme_path=\"
themes/\"
.$theme.\"
/\"
;$image_path=$theme_path.\"
images/\"
;require_once($theme_path.'layout_utils.php');global $app_strings;global $app_list_strings;global $current_language;$mod_strings = return_module_language($current_language, 'Leads');$xtpl=new XTemplate ('modules/Contacts/ImportVCard.html');$xtpl->assign(\"
MOD\"
, $mod_strings);$xtpl->assign(\"
APP\"
, $app_strings);$xtpl->assign(\"
IMAGE_PATH\"
, $image_path);$xtpl->assign(\"
PRINT_URL\"
, \"
index.php?\"
.$GLOBALS['request_string']);$xtpl->assign(\"
HEADER\"
, $mod_strings['LBL_IMPORT_VCARD']);$xtpl->assign(\"
MODULE\"
, $_REQUEST['module']);if ($error_msg != ''){$xtpl->assign(\"
ERROR\"
, $error_msg);$xtpl->parse(\"
main.error\"
);}$xtpl->parse(\"
main\"
);$xtpl->out(\"
main\"
); }?>/* *****************************************************Author :                          Development DepartmentCompany :                         TelOnline Corp  www.telonlinecorp.comDate      :                       Colombia, Jan 30 2009Description:                      Index Page-  [CopyRigth]********************************************************** */$headerTitle = \"
\"
;include('header.php'); //incluye el php de encabezado?>           Admin Panel           Dialer Config      Crear Campaña      Listado de Campañas      DoNotCall List       /* *****************************************************Author :                          Development DepartmentCompany :                         TelOnline Corp  www.telonlinecorp.comDate      :                       Colombia, Jan 30 2009Description:                      IVR Dialer Page-  [CopyRigth]********************************************************** */// revisar el listado de llamadas y // sacar 100 num para marcarinclude('dbConn.php');//include('vardefs.php');include('globalD.php');//require('phpagi.php');//require('phpagi-asmanager.php');// Parametros de configuracionmysql_select_db($dbDialer, $DialerLink);$queryConfig = \"
SELECT * FROM config\"
;$Config = mysql_query($queryConfig, $DialerLink) or die(mysql_error());$rowConfig = mysql_fetch_assoc($Config);// consulta las campaigns activas// con rango de operacion en la hora actual// maximo 3 campaign para la presente iteracion$iTimestamp = time();$sFecha = date('Y-m-d', $iTimestamp);$sHora = date('H:i:s', $iTimestamp);mysql_select_db($db, $DialerLink);$queryBroadCast = \"
SELECT id FROM campaign\"
;$queryBroadCast .= \"
 WHERE datetime_init = '$sFecha' \"
;$queryBroadCast .= \"
 AND estatus = 'A' AND ( (daytime_init  '$sHora') \"
;$queryBroadCast .= \"
 OR (daytime_init > daytime_end AND ('$sHora' $queryBroadCast .= \"
 AND queue IS NOT NULL\"
;$queryBroadCast .= \"
 ORDER BY RAND()\"
;$queryBroadCast .= \"
 LIMIT 0,3\"
;$BroadCast = mysql_query($queryBroadCast, $DialerLink) or die(mysql_error());while($rowBroadCast = mysql_fetch_assoc($BroadCast)){// Campaign actual para trabajar el FOR$campaignId = $rowBroadCast['id'];echo $campaignId . \"
\n\"
;// Detalles de la campaign actualmysql_select_db($db, $DialerLink);$queryCamp = \"
SELECT * FROM campaign WHERE id=$campaignId\"
;$Camp = mysql_query($queryCamp, $DialerLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);for($i=0; $i{//echo 'Ciclo For '. $i . \"
\n\"
;// codigo estatico, debe cambiar con el // Time Zone del Area Code$hr = date(\"
H\"
);if($hr == '21'){echo 'Son las 9' . \"
\n\"
;exit();}// Actualizar las llamadas \"
Pegadas\"
 de la presente llamada// \"
Llamada Pegada\"
, status Ringing -> con mas de 1 min$currTime = time();$queryRingCall = \"
UPDATE calls SET status='Failed', retries=retries+1 WHERE id_campaign='$campaignId' AND status='Ringing' AND TIME_TO_SEC(TIMEDIFF(NOW(), fecha_llamada))>{$rowConfig['hangUp_time']}\"
;echo $queryRingCall . \"
\n\"
;//echo $queryRingCall;$RingCall = mysql_query($queryRingCall, $DialerLink) or die(mysql_error());/**********************///echo 'Curr Calls ' . $i . \"
\n\"
;// Consultar el numero de llamadas activas de la presente campañamysql_select_db($dbDialer, $DialerLink);$queryCurrCalls = \"
SELECT COUNT(*) AS TOTAL FROM calls WHERE status IN ('Placing', 'Ringing') AND id_campaign='$campaignId'\"
;$queryCurrCalls .= \"
 UNION \"
;$queryCurrCalls .= \"
SELECT COUNT(*) AS TOTAL FROM calls WHERE status='Success' AND start_time IS NOT NULL AND end_time IS NULL AND id_campaign='$campaignId'\"
;echo $queryCurrCalls . \"
\n\"
;$CurrCalls = mysql_query($queryCurrCalls, $DialerLink) or die(mysql_error());//echo 'Before WhileCurr ' . $i . \"
\n\"
;$contCalls = 0 ;while($rowCurrCalls = mysql_fetch_assoc($CurrCalls)){$contCalls += $rowCurrCalls['TOTAL'];}//echo 'After WhileCurr ' . $contCalls . \"
\n\"
;// Si hemos excedido el numero max de canales// no podemos generar esta llamada, por consiguiente debemos // pasar a la siguiente iteracion del cicloif($contCalls >=  $rowCamp['max_canales']){echo $contCalls . '  -- Max Channels -- ' . $rowCamp['max_canales'] . \"
\n\"
;sleep(5);break;}mysql_select_db($dbDialer, $DialerLink);//$queryDial = \"
SELECT * FROM calls WHERE SUBSTRING(phone) IN ('305', '786', '954', '754', '561') AND id_campaign='$campaignId' AND status IS NULL AND dnc=0\"
;$queryDial = \"
SELECT * FROM calls WHERE id_campaign='$campaignId' AND status IS NULL AND dnc=0 \"
;/*// Agregamos condicion de DNC Interno$queryDial .= \"
 AND phone NOT IN ( \"
;$queryDial .= \"
  SELECT AreaCodePhoneNumber FROM CDCenter.DONOTCALL \"
;$queryDial .= \"
  )\"
;*//*// Agregamos condicion de DNC Federal$queryDial .= \"
 AND phone NOT IN ( \"
;$queryDial .= \"
  SELECT AreaCodePhoneNumber FROM CDCenter.DNCClick2MediaCorp \"
;$queryDial .= \"
  )\"
;$queryDial .= \"
 AND phone NOT IN ( \"
;$queryDial .= \"
  SELECT AreaCodePhoneNumber FROM CDCenter.DNCDirectCredit \"
;$queryDial .= \"
  )\"
;$queryDial .= \"
 AND phone NOT IN ( \"
;$queryDial .= \"
  SELECT AreaCodePhoneNumber FROM CDCenter.DNCTelX3m \"
;$queryDial .= \"
  )\"
;$queryDial .= \"
 AND phone NOT IN ( \"
;$queryDial .= \"
  SELECT AreaCodePhoneNumber FROM CDCenter.DNCTelonlineCorp \"
;$queryDial .= \"
  )\"
;*/$queryDial .= \"
 ORDER BY RAND() LIMIT 0, {$rowCamp['max_canales']}\"
;//echo 'Query : ' . $queryDial . \"
\n\"
;$Dial = mysql_query($queryDial, $DialerLink) or die(mysql_error() . ' L22');$totRowsDial = mysql_num_rows($Dial);if($totRowsDial == 0){mysql_select_db($dbDialer, $DialerLink);$queryDial = \"
SELECT * FROM calls WHERE id_campaign=$campaignId AND status NOT IN ('Success', 'Placing', 'Ringing', 'OnQueue', 'OnHold') AND retries $queryDial .= \"
 ORDER BY RAND() LIMIT 0, {$rowCamp['max_canales']}\"
;//$queryDial .= \"
   ORDER BY RAND() LIMIT 0, $maxChan\"
;$Dial = mysql_query($queryDial, $DialerLink) or die(mysql_error() . $queryDial . ' --  L30');$totRowsDial = mysql_num_rows($Dial);}if($totRowsDial == 0){// Actualiza el estado de la campaign$queryFinish = \"
UPDATE campaign SET estatus='T' WHERE id=$campaignId\"
;$Finish = mysql_query($queryFinish, $DialerLink) or die(mysql_error());}while($rowDial = mysql_fetch_assoc($Dial)){echo 'Phone : ' . $rowDial['phone'] . \"
\n\"
;$hr = date(\"
H\"
);if($hr == '21'){echo 'Son las 9' . \"
\n\"
;exit();}//extrae todos los DNC de las bases de datossetDnc('DONOTCALL', $rowDial['phone'], $campaignId, $DialerLink);setDnc('DNCClick2MediaCorp', $rowDial['phone'], $campaignId, $DialerLink);setDnc('DNCDirectCredit', $rowDial['phone'], $campaignId, $DialerLink);setDnc('DNCTelX3m', $rowDial['phone'], $campaignId, $DialerLink);setDnc('DNCTelonlineCorp', $rowDial['phone'], $campaignId, $DialerLink);$extNumb = $rowDial['phone'];$ivrExt = $rowCamp['queue'];$dialAs = $rowCamp['dialAs_exten'];$actionId = cad_alea(10);// Coloca llamada//$apiUrl = \"
https://sip.domainname.com/api?cmd=call&dial_first=$extNumb&dial_second=$ivrExt&response_type=xml\"
;$apiUrl = \"
{$rowConfig['swvx_url']}/api?cmd=call\"
;$apiUrl .= \"
&dial_first=$extNumb&dial_second=$ivrExt\"
;$apiUrl .= \"
&admin=1&password={$rowConfig['api_passwd']}\"
;$apiUrl .= \"
&dial_as=$dialAs&response_type=xml\"
;$apiUrl .= \"
&var_actionId=$actionId&var_CalledNumber=$extNumb\"
;echo $apiUrl;// Actualizar estado de llamadamysql_select_db($dbDialer, $DialerLink);$queryResult = \"
UPDATE calls SET status='Placing', fecha_llamada=NOW(), actionId='$actionId' WHERE id={$rowDial['id']} AND id_campaign=$campaignId\"
;$Result = mysql_query($queryResult, $DialerLink) or die(mysql_error() . ' L52' );// Inicia la session con el servidor del webservice$ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from responsecurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, \"
& \"
 )); // use HTTP POST to send form datacurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Returns response data instead of TRUE(1)$resp = curl_exec($ch); //execute post and get resultscurl_close ($ch);$xml = simplexml_load_string($resp);var_dump($xml) . \"
\n\"
;if($xml->status == 'success')$status = \"
Ringing\"
;else$status = $xml->status;// Actualizar estado de llamadamysql_select_db($dbDialer, $DialerLink);$queryResult = \"
UPDATE calls SET status='$status', fecha_llamada=NOW(), retries=retries+1 WHERE id={$rowDial['id']} AND id_campaign=$campaignId\"
;$Result = mysql_query($queryResult, $DialerLink) or die(mysql_error() . ' L52' );}sleep(4);}}mysql_close($DialerLink);?>/* *****************************************************Author :                          Development DepartmentCompany :                         TelOnline Corp  www.telonlinecorp.comDate      :                       Colombia, Jan 30 2009Description:                      IVR Dialer's Page-  [CopyRigth]********************************************************** */// revisa el listado de llamadas y // saca 100 num para marcarinclude('dbConn.php');include('vardefs.php');include('global.php');//require('phpagi.php');//require('phpagi-asmanager.php');$campaignId = \"
9\"
;mysql_select_db($db, $DBLink);$queryCamp = \"
SELECT * FROM campaign WHERE id=$campaignId\"
;$Camp = mysql_query($queryCamp, $DBLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);//for($i=0; $i{$hr = date(\"
H\"
);if($hr == '21'){echo 'Son las 9';exit();}/*mysql_select_db($db, $DBLink);//$queryDial = \"
SELECT * FROM calls WHERE SUBSTRING(phone) IN ('305', '786', '954', '754', '561') AND id_campaign='$campaignId' AND status IS NULL AND dnc=0\"
;$queryDial = \"
SELECT * FROM calls WHERE id_campaign='$campaignId' AND status IS NULL AND dnc=0\"
;$queryDial .= \"
 LIMIT 0, $maxChan\"
;$Dial = mysql_query($queryDial, $DBLink) or die(mysql_error() . ' L22');$totRowsDial = mysql_num_rows($Dial);if($totRowsDial == 0){mysql_select_db($db, $DBLink);$queryDial = \"
SELECT * FROM calls WHERE id_campaign=$campaignId AND status NOT IN ('Success', 'Placing', 'Ringing', 'OnQueue', 'OnHold') AND retries $queryDial .= \"
 LIMIT 0, $maxChan\"
;$Dial = mysql_query($queryDial, $DBLink) or die(mysql_error() . ' L30');$totRowsDial = mysql_num_rows($Dial);}$rowDial = mysql_fetch_assoc($Dial);$extNumb = $rowDial['phone'];*/// Colocar llamada//$apiUrl = \"
https://sip.domainname.com/api?cmd=call&dial_first=$extNumb&dial_second=$ivrExt&response_type=xml\"
;$actionId = cad_alea(10);$extNumb = \"
786xxxxxxx\"
;$apiUrl = \"
https://sip.domainname.com/api?cmd=call\"
;$apiUrl .= \"
&dial_first=$extNumb&dial_second=$ivrExt\"
;$apiUrl .= \"
&admin=1&password=48d456e0a08081ee9\"
;$apiUrl .= \"
&dial_as=8001&response_type=xml\"
;$apiUrl .= \"
&var_actionId=$actionId&var_dialedNumber=$extNumb\"
;echo $apiUrl . \"
\n\"
;/*// Actualizar estado de llamadamysql_select_db($db, $DBLink);$queryResult = \"
UPDATE calls SET status='Placing', fecha_llamada=NOW(), id_agent='800' WHERE id={$rowDial['id']} AND id_campaign=$campaignId\"
;$Result = mysql_query($queryResult, $DBLink) or die(mysql_error() . ' L52' );*/// Inicia la session con el servidor del webservice$ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from responsecurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, \"
& \"
 )); // use HTTP POST to send form datacurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Returns response data instead of TRUE(1)$resp = curl_exec($ch); //execute post and get resultsvar_dump($resp) . '\n';curl_close ($ch);$xml = simplexml_load_string($resp);var_dump($xml) . '\n';if($xml->status == 'success')$status = \"
Ringing\"
;/*// Actualizar estado de llamadamysql_select_db($db, $DBLink);$queryResult = \"
UPDATE calls SET status='$status', fecha_llamada=NOW() WHERE id={$rowDial['id']} AND id_campaign=$campaignId\"
;$Result = mysql_query($queryResult, $DBLink) or die(mysql_error() . ' L52' );sleep($callOffset);*/}?>/* *****************************************************Company :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description:                    Main Page -  [CopyRigth]********************************************************** *//* Turn output buffering on: */ ob_start();include(\"
../../db/crm.php\"
); include(\"
../global/obj/variable.php\"
); # Validate SugarCRM & Create Session Variables$access = $sugarClass->validate( $_GET['sugaruserid'], $_GET['lang'], $sugarcrmconn ); # Definicion del valor de las variables del lenguajeif ( $_SESSION['sugarlang'] == \"
esp\"
 ) { include(\"
language/esp_es.php\"
); } else { include(\"
language/eng_us.php\"
); } ?> \"
.$_SESSION['sugarname'].\"
\"
; ?>frameborder=\"
0\"
 style=\"
width:100%;margin-top:0;visibility:visible\"
>/* *****************************************************Author :                          Development DepartmentCompany :                         TelOnline Corp  www.telonlinecorp.comDate      :                       Colombia, Jan 30 2009Description:                      Save Answer UniqueId Page-  [CopyRigth]********************************************************** */include('dbConn.php');$actionId = $_GET['actionId'];$uniqueId = $_GET['uniqueId'];mysql_select_db($dbDialer, $DialerLink);$queryAnswer = \"
UPDATE calls SET status='Success', start_time=NOW(), uniqueid='$uniqueId' WHERE actionId='$actionId'\"
;$Answer = mysql_query($queryAnswer, $DialerLink) or die(mysql_error());?>/* *****************************************************Author :                          Development DepartmentCompany :                         TelOnline Corp  www.telonlinecorp.comDate      :                       Colombia, Jan 30 2009Description:                      Save Answer Page-  [CopyRigth]********************************************************** */include('dbConn.php');// variables$callId = $_GET['callId'];$campId = $_GET['campId'];$phone = $_GET['phone'];$result = $_GET['result'];//actualiza la base de datos mysql_select_db($db, $DBLink);$queryResult = \"
UPDATE calls SET status='$result', retries=retries+1 WHERE id=$callId AND id_campaign=$campId AND $phone='$phone'\"
;$Result = mysql_query($queryResult, $DBLink) or die(mysql_error());//salva los datosecho \"
\n\"
;echo \"
  alert('Datos Salvados...!!');\n\"
;echo \"
  parent.getEle('callId').value = '';\n\"
;echo \"
  parent.getEle('phone').value = '';\n\"
;echo \"
  parent.getEle('dispoCode').value = '';\n\"
;echo \"
  parent.getEle('result').value = '';\n\"
;echo \"
  parent.getEle('TdPhoneNumber').childNodes[0].nodeValue = '';\n\"
;echo \"
\n\"
;?>/* *****************************************************Author :                        Development DepartmentCompany :                       TelOnline Corp  www.telonlinecorp.comDate      :                     USA/Colombia, Jan 30 2009Description:    Campaign's Save Page-  [CopyRigth]********************************************************** *//*function getDnc($table, $phone, $DBLink){$queryDNC = \"
SELECT AreaCodePhoneNumber FROM CDCenter.$table WHERE AreaCodePhoneNumber='$phone'\"
;$DNC = mysql_query($queryDNC, $DBLink) or die(mysql_error() . ' L6');$totRowsDNC = mysql_num_rows($DNC);if($totRowsDNC > 0)$dnc = \"
1\"
;else$dnc = \"
0\"
;return $dnc;}*/include('dbConn.php');include('globalD.php');//ingresa dentro de la base de datos actual todos los datos suministrados.mysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$insertSql = \"
INSERT INTO campaign (id, name, datetime_init, datetime_end, daytime_init, daytime_end, retries, queue, max_canales, estatus, dialAs_exten) \"
;$insertSql .= \"
VALUES ({$_POST['id']}, '{$_POST['nombre']}', '{$_POST['fecha_ini']}', '{$_POST['fecha_fin']}', '{$_POST['hora_ini']}', '{$_POST['hora_fin']}', '{$_POST['retries']}', '{$_POST['queue']}', '{$_POST['max_canales']}', '{$_POST['estatus']}', '{$_POST['dialAs_exten']}' )\"
;$insertSql .= \"
 ON DUPLICATE KEY UPDATE datetime_init='{$_POST['fecha_ini']}', datetime_end='{$_POST['fecha_fin']}', daytime_init='{$_POST['hora_ini']}', daytime_end='{$_POST['hora_fin']}', retries='{$_POST['retries']}', queue='{$_POST['queue']}', max_canales='{$_POST['max_canales']}', estatus='{$_POST['estatus']}', dialAs_exten='{$_POST['dialAs_exten']}'\"
;$result = mysql_query($insertSql, $DialerLink) or die(mysql_error() . ' L23');if(!empty($_FILES['call_file']['tmp_name']))CSV2DB('call_file');$dncCont = 0;$dncFedCont = 0;function CSV2DB($filename){global $DialerLink, $dbDialer, $dncFedCont, $dncCont;if (FALSE == empty($_FILES[$filename]['tmp_name'])){ $row = 1; $handle = fopen($_FILES[$filename]['tmp_name'], \"
r\"
); while (($data = fgetcsv($handle, 1000, \"
,\"
))!== FALSE){ $num = count($data); // echo \"
 $num fields in line $row:
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox
Dialer Programing Asterisk Switchvox

Más contenido relacionado

PDF
UDA-Componentes RUP. Reporting
PDF
UDA-Componentes RUP. Validación
PDF
Manual abap
PDF
Forecast PRO - clasificación abc para focalizar su trabajo
PDF
UDA-Componentes RUP. Formulario
PPTX
International business
PDF
020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)
ODT
Carta de Principios do CAVE - Coletivo Alternativa Verde
UDA-Componentes RUP. Reporting
UDA-Componentes RUP. Validación
Manual abap
Forecast PRO - clasificación abc para focalizar su trabajo
UDA-Componentes RUP. Formulario
International business
020915 PUBLIC RELEASE EEOC CHARGE AGAINST 1ST HERITAGE CREDIT (Malay)
Carta de Principios do CAVE - Coletivo Alternativa Verde

Destacado (14)

PDF
Projects Titles on embedded
PDF
BARACK OBAMA- UNDERSTANDING WILLIE LYNCH (Hindi)
PDF
desmond_resume
PDF
YOUR RIGHT & DUTY TO TAKE ACTION BROCHURE - HINDI
DOC
Proposta de organizacao de Coletivo de abastecimento em Milano Italia
PDF
Jan 7, 2013: Global Product Management Talk on Iterative Product Development
PPTX
D O N E Powerpoint
PPTX
my Design profile
PPT
Corporate Social Responsibility
PDF
GRI Certificate
PDF
Marketing Your Business to Investors - Steven Rogers - Launch Workplaces
PPTX
#FIRMday Manchester March 19th 2015 Capita_Write Research Workforce Horizons
PDF
K1 embedding big data & analytics into the business to deliver sustainable value
Projects Titles on embedded
BARACK OBAMA- UNDERSTANDING WILLIE LYNCH (Hindi)
desmond_resume
YOUR RIGHT & DUTY TO TAKE ACTION BROCHURE - HINDI
Proposta de organizacao de Coletivo de abastecimento em Milano Italia
Jan 7, 2013: Global Product Management Talk on Iterative Product Development
D O N E Powerpoint
my Design profile
Corporate Social Responsibility
GRI Certificate
Marketing Your Business to Investors - Steven Rogers - Launch Workplaces
#FIRMday Manchester March 19th 2015 Capita_Write Research Workforce Horizons
K1 embedding big data & analytics into the business to deliver sustainable value
Publicidad

Similar a Dialer Programing Asterisk Switchvox (20)

PDF
Call Center en Elastix
PPTX
PPTX
Curso migración de aplicaciones nsl nk90 a tmp
PDF
Manual ASercom
PPTX
Openvix Presentacion Esp
PDF
Soluciones Contact center Dialapplet 2014 Mayo folleto.
PDF
Callmaster
PDF
MANUAL PARA CONFIGURACIÓN DE ELASTIX
PDF
Ic Web Admin Campaigns And Users 5.00
PDF
Instalacion de Elastix
PPTX
Elastix como solucion asterisk
PPTX
Exposición 8
PDF
cotizacion call center tecnicom para hospital
PDF
Software de VOIP
DOCX
PDF
Manual instalación e implementación de Elastix
PDF
ers para una pagina de viajes
PPTX
inConcert Allegro
PPT
Soluciones Callcenter Dialapplet 2014 Mayo presentación.
DOC
Asterisk
Call Center en Elastix
Curso migración de aplicaciones nsl nk90 a tmp
Manual ASercom
Openvix Presentacion Esp
Soluciones Contact center Dialapplet 2014 Mayo folleto.
Callmaster
MANUAL PARA CONFIGURACIÓN DE ELASTIX
Ic Web Admin Campaigns And Users 5.00
Instalacion de Elastix
Elastix como solucion asterisk
Exposición 8
cotizacion call center tecnicom para hospital
Software de VOIP
Manual instalación e implementación de Elastix
ers para una pagina de viajes
inConcert Allegro
Soluciones Callcenter Dialapplet 2014 Mayo presentación.
Asterisk
Publicidad

Último (20)

PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
MANUAL de recursos humanos para ODOO.pdf
PPTX
El uso de las TIC en la vida cotidiana..
PDF
Maste clas de estructura metálica y arquitectura
PDF
Diapositiva proyecto de vida, materia catedra
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
TRABAJO DE TECNOLOGIA.pdf...........................
PPTX
Presentación de Redes de Datos modelo osi
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
Curso de generación de energía mediante sistemas solares
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
Influencia-del-uso-de-redes-sociales.pdf
PPTX
Propuesta BKP servidores con Acronis1.pptx
Historia Inteligencia Artificial Ana Romero.pptx
historia_web de la creacion de un navegador_presentacion.pptx
MANUAL de recursos humanos para ODOO.pdf
El uso de las TIC en la vida cotidiana..
Maste clas de estructura metálica y arquitectura
Diapositiva proyecto de vida, materia catedra
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
TRABAJO DE TECNOLOGIA.pdf...........................
Presentación de Redes de Datos modelo osi
capacitación de aire acondicionado Bgh r 410
Power Point Nicolás Carrasco (disertación Roblox).pptx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Curso de generación de energía mediante sistemas solares
El-Gobierno-Electrónico-En-El-Estado-Bolivia
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Influencia-del-uso-de-redes-sociales.pdf
Propuesta BKP servidores con Acronis1.pptx

Dialer Programing Asterisk Switchvox

  • 1. MANUAL DEL PROGRAMADORPAQUETE DIALERCONTENIDOINTRODUCCIÓNQUE ES DIALER?
  • 2. BAJO QUE METODOLOGIA ESTA DESARROLLADO?
  • 5. LISTADO DE FUNCIONES ADICIONALES
  • 6. CODIGO FUENTEINTRODUCCION REF DIALER \h \* MERGEFORMAT REF DIALER \h \* MERGEFORMAT REF DIALER \h \* MERGEFORMAT El propósito de este manual del programador es dar a conocer al Lector (Programador) todas las referencias, scripts, códigos, variables, funciones y trucos empleados en el desarrollo del programa. Para ello se tratará de forma amena y concisa un repaso de todas las particularidades del programa con el fin que el Lector pueda modificar a su gusto algunos de los valores y parámetros de las funciones expuestas así como también un mejor entendimiento de los diferentes valores que adoptan las variables en ciertos momentos clave del desarrollo y que en adelante podrán ser susceptibles de cambios y reformas según sean las nuevas necesidades que se presenten en el futuro.Este desarrollo fue enfocado a tener un Dialer que se integre a todas las funcionalidades de Switchvox un producto de Asterisk.Todo el feedback de todos los desarrolladores ayudaran a fortalecer esta base de desarrollo y crecer basado en las necesidades del cliente final.QUE ES DIALER?
  • 7. REF INTRODUCCION \h \* MERGEFORMAT REF INTRODUCCION \h \* MERGEFORMAT La palabra Dialer es de origen anglosajón y hace referencia a un sistema de llamada telefónica en general. Pero hablando en el ámbito de Internet cuando se habla de los Dialer se refiere a unos programas que conectan a Internet a través de un número a cierto usuario. Pero por lo que respecta a nuestro paquete se refiere a un software de marcación automatizado para call center que enlaza una base de datos ingresada por el usuario y realiza una segmentación de las llamadas al ser distribuidas por el software de manera eficaz y eficiente a los distintos agentes que atenderán los diferentes servicios propios de la campaña. De la misma manera las campañas son los diferentes objetivos de negocio de enlace que se tienen y que proveen una mejor administración, seguridad y control de las campañas y objetivos de negocio dentro del telemercadeo y demás distribuciones de llamadas.BAJO QUE METODOLOGIA ESTA DESARROLLADO? REF METODOLOGIA \h \* MERGEFORMAT La metodología utilizada para el desarrollo fue bajo la constante interacción de los programas PHP, MySQL, además de los servidores SugarCRM®, Switxhvox® y Asterik®. Por supuesto la comunicación entre los mismos es la base para identificar los diferentes servicios que se pueden emplear con esta herramienta.LISTADO DE SCRIPTS REF ARBOL \h \* MERGEFORMAT El presente listado de scripts especifica las diferentes referencias entre scripts los cuales no solo transportan algunos datos específicos sino también la posibilidad de trabajar con las diferentes variables de los scripts referenciados para poder llevar a cabo los objetivos del mismo. El listado se encuentra ordenado alfabéticamente lo que permite una mejor búsqueda de los scripts.Agent ConsoleScripts IncluidosHeader.phpScript ActualagentConsoleCampaignScripts Incluidos------Script ActualCampaignCampaignDetailScripts IncluidosHeader.phpFusionCharts_Gen.phpFooter.phpGetCampaignData.phpScript ActualCampaignDetailCampaignEditScripts IncluidosHeader.phpSaveCampaign.phpIndex.phpFooter.phpScript ActualCampaignEditCampaignListScripts IncluidosHeader.phpIndex.phpFooter.phpScript ActualCampaignListCampaignViewScripts IncluidosHeader.phpCampaignEdit.phpFooter.phpScript ActualCampaignViewDbConnScripts IncluidosScript ActualDbConnDialerConfigScripts IncluidosHeader.phpsaveConfig.phpfooter.phpindex.phpScript ActualDialerConfigDncInsertScripts IncluidosHeader.phpsaveDoNotCall.phpindex.phpfooter.phpScript ActualDncInsertDoDialScripts IncluidosdbConn.phpScript ActualDoDialDoDial2Scripts Incluidos---Script ActualDoDial2En_us.langScripts Incluidos----Script ActualEn_us.langField_arraysScripts Incluidos----Script ActualField_arraysFooterScripts IncluidosHeaderScript ActualFooterGetCampaignDataScripts IncluidosdbConn.phpScript ActualGet_CampaignDataScript ActualGlobalGlobalScripts Incluidosapm.phpauthnet.phpswitch.phpexport.phplinkpt.phppmnt.phpprint.phpsecure.phpsugar.phptelecontact.phpticket.phpsession.phpGlobalDScripts IncluidosScript ActualGlobalDHeaderScripts IncluidosdbConn.phpsession.phpDialer.jsCalendar.jsCalendar-es.jsCalendar-setup.jsScript ActualHeaderImportVCardScripts IncluidosVcard.phpIndex.phpXtpl.phpLayout_utils.phpScript ActualImportVCardIndexScripts IncluidosHeader.phpSession.phpScript ActualIndexIvrDialerScripts IncluidosdbConn.phpglobalD.phpScript ActualIvrDialerIvrDialer2Scripts IncluidosdbConn.phpvardefs.phpglobal.phpScript ActualIvrDialer2MainScripts IncluidosCrm.phpVariable.phpMenu.phpEsp_es.phpEng_us.phpScript ActualMainSaveAnswerScripts IncluidosdbConn.phpScript ActualSaveAnswerSaveCallResultScripts IncluidosdbConn.phpScript ActualSaveCallResultSaveCampaignScripts IncluidosdbConn.phpglobalD.phpScript ActualSaveCampaignSaveConfigScripts IncluidosdbConn.phpScript ActualSaveConfigSaveDNCScripts IncluidosdbConn.phpScript ActualSaveDNCSaveDoNotCallScripts IncluidosdbConn.phpglobal.phpScript ActualSaveDoNotCallSaveHangUpScripts IncluidosdbConn.phpScript ActualSaveHangUpSaveShortCallScripts IncluidosdbConn.phpScript ActualSaveShortCallSessionScripts IncluidosentryPoint.phprecorder.phpScript ActualSessionStudioScripts Incluidos-----Script ActualStudioVardefsScripts Incluidos---Script ActualVardefsVariableScripts IncluidosGlobal.phpScript ActualVariableDESCRIPCION DE SCRIPTS REF DESCRIPCION \h \* MERGEFORMAT La intención es identificar cada uno de los scripts saber que hacen, que entradas necesitan y por ultimo que resultados se obtienen de los mismos. De esta forma simplificar las diferentes opciones que se podrían modificar, borrar o guardar.El listado de los scripts se describe a continuación:NombreVariables de entrada Variables del scriptResultadosDescripciónagentConsole$DBLinkEXTENSIONCaller_id$headerTitle$queryCamp$Camp$extension$caller_id$queryInfoCamp$InfoCamp$rowInfoCamp$rowCamp[]Matriz con los id y telefonos del caller id.Selecciona las campañas activas busca las campañas asociadas al caller_id, y las imprime dentro de una matriz (tabla) los diferentes campos tanto identificadores como los números. campaign---NombreFecha_iniFecha_finHora_iniHora_finRetriesCall_fileBtnSaveEntrada de los datos de la campañaCrea un estilo dentro del script además que recibe los datos de la campaña como lo son nombre, rango fecha, rango hora, reintentos, el archivo de llamadas y los envía a una matriz..campaignDetailId$dbDialerFusionCharts.js$campId$dbDialer$DialerLink$queryDispo$Dispo$totRowsDispo$queryTotCalls$TotCalls$rowTotCalls$strParam$i$FC$acumCalls$rowDispo$queryCalls$Calls$rowCalls$porcent$arrData[][]Muestra en pantalla el status de la llamada, con todos sus atributos en fila y los totales de los mismos con la posibilidad de seleccionar solo las campañas con cierto atributo de estatus. Adicional da la posibilidad de ver la estadística de cierta campaña desplegando el grafico. Toma los datos del Header, recoge los diferentes status para realizar la llamada a la bases de datos o la totalidad de las mismas que es el que se toma por defecto, carga las librerías de graficación en flash, luego imprime la totalidad de las campañas y selecciona los datos para crear el grafico de campaña dependiendo de la campaña selecciona da, muestra según el status la cantidad de llamadas y los totales y por ultimo imprime al logo de la empresa con link al inicio. campaignEditId$DialerLink$campId$queryCamp$Camp$rowCampPermite modificar todos los datos de una campaña seleccionada.Consulta los detalles de la campaña seleccionada y luego los imprime en la tabla respectiva que muestra los datos obtenidos de la base de datos de la campaña seleccionada y da la opción de modificar todos los datos a excepción del código y guardarlos seguido se tiene el script que configura el calendario. y por ultimo carga el logo con el link del inicio.campaignList$dbDialer$DialerLinkStatusCampaign$queryCampaign$statusId$campaign$queryComplete$Complete$rowComplete$queryIncomplete$InComplete$rowIncomplete$queryDNC$DNC$rowDNC$rowCampaignMuestra la tabla con el listado con todos los datos obtenidos de las Campañas como lo son los campos id, nombre, inicio, fin Ivr, canales reintentos, éxitos, numero de restricciones, DNC(do not call), estado y la opción del reporte grafico al final con dar clic sobre la imagen.Selecciona la base de datos y con el campo campaña seleccionado, crea dos funciones en javascript, seguido crea la tabla y la llena con los campos seleccionados en la búsqueda luego selecciona la llamadas marcadas por lo menos una vez al igual que las que no han sido marcadas y las que son do not call pero si esta activa muestra todos los detalles de las llamadascampaignViewId$dbDialer$DialerLink$campID$queryCamp$Camp$rowCamp[]Muestra los detalles de la campaña dentro de la tabla preferida. Se consultan los registros de la base de datos que cumplan con el id enviado anteriormente y dependiendo del status seleccionado muestra en pantalla los registros que tengan este atributo y da la oportunidad de editar la misma enviándola al script de edición y por ultimo muestra el logo de la empresa con link al inicio.dbConnLocalhostDcs_call_apic4llc3nt3rdcs_call_center$host$user$pass$dbDialer$DialerLinkConecta con la base de datos.Primero renombra las variables, y crea el aceso de la base de datos.dialerConfig$dbDialer$DialerLink$queryConfig$config$rowConfig[]Muestra los datos de configuración con el servidor switchvox y el parámetro de espera.Accesa a la base de datos, revisa los campos de configuración, guarda los campos de configuración con los datos de url del servidor Switchvox, la contraseña para accesar al api de conexión con el mismo servidor y la variable de espera para la conexión. Además da la opción de guardar que lo envía al script de guardar la configuración. Y por ultimo muestra el logo de la compañía con link al inicio. dncInsertGuarda un número de DNC.Muestra en pantalla el script de agregar un número al cual no marcar y presenta la entrada validando la existencia del mismo en la base de datos y enviándolo al script de guardar el DNC.doDialIdcampaignIdextNumbcall_center.class$campaignId$extNumb$queryCamp$Camp$rowCamp$Dial$rowDial[]$totRowsDial$phone$apiUrl$queryResult$ResultHace la marcación de los números ingresados por la base de datos si es posible o muestra el motivo del error.Cambia las variables del id de campaña y la extensión en variables locales, selecciona los datos de la base de datos y si la opción de la campaña es activa entonces verifica que existan datos en las filas de la base de datos y si comprueba la inexistencia de filas por utilizar siendo cambia el estado de la base de datos a terminada y sale del script pero en otro caso realiza la marcación comprobando si se puede marcar en caso contrario muestra por pantalla que no se puede realizar la marcación de la campaña seleccionada todo realizado mediante un script.doDial2PhoneextNumb$apiUrl$ch$resp$xmlIntenta colocar la llamada y recibe un estado de la misma.Obtiene el numero de teléfono y la extensión e intenta colocar la llamada quita el encabezado del archivo envía los datos por medio de http y lo verifica dejando al xml que devuelva una respuesta del estado de la llamada.en_us.lang-----$mod_strings[]Carga de libreriasCarga de librerías según sea el caso que aceptan los lenguajes español e ingles.field_arrays----$fields_arrayAsigna los campos del arreglo llamado fields_arrayAsigna los campos del arreglo como son id, first_name, last_name, account_name, title, email1, phone_work, assigned_user_name, assigned_user_id, lead_source, lead_source_description, refered_by, opportunity_name, opportunity_amount, date_entered, status,invalid_email, \" campaign_id\" footer---------Imprime en pantalla el logoImprime en pantalla el logo con un link al inicio.getCampaignDataCampaignStatusdbDialerDialerLink$campaign$status$queryData$Data$cadCsv$rowData[]$filename$fpEs la forma como se empaquetan los resultados de los números marcados o según el status que cada uno tiene.Obtiene los datos de campaña y el status para seleccionar la base de datos y dentro los datos a incluir dentro de la matriz cadCsv comprobando la existencia de filas las concatena en la matriz $cadCsv para luego abrir un archivo y escribir en él y luego cerrarlo, pues es mas fácil trabajar con archivos locales que directamente con los de la base de datos y por ultimo especifica el tipo de archivo y su empaquetamiento par a mostrar los datos en el formato deseado que en este caso es .csvGlobalneedAuth$apmClass$authnetClass$SwitchClass$exportClass$linkptClass$paymentClass$printClass$secureClass$sugarClass$tcClass$ticketClassDefine los objetos y clases globales del paquete.Define los objetos y clases globales del paquete creando adicionalmente un nuevo objeto para cada clase especificada..globalDFunciones dentro del script:Cad_alea:getDnc:getFedDnc:setDnc:ConstruirPlantillaMarcadoOnOriginateResponseOnLink:UnOnLink:OnHangup:setActId:getActId:getByUnqId:CSV2DBDiferentes funciones con funciones esenciales dentro del códigoSe encuentran los códigos de funciones creación de cadenas aleatorias, obtenciony actualización de id’s creación de plantillas y callback ante un evento.Header$headerTitleEncabezado de la pagina.Configura el encabezado de la página y parte del calendario interno.ImportVCardVcardTmp_nameSizeLeadsLbl_module_nameRequest_string$vcard$recorder$mod_strings$theme$error_msg$theme_path$image_pathGlobales:$app_strings$app_list_strings$current_language$xtplSaca un template con algunos datos extraidos de los datos e la tarjeta y los envía para verificación.Accesa a la Vcard si existe, y luego comprueba su existencia.Index----Muestra el menú principal del Dialer con las principales funciones.Carga las variables correspondientes de los scripts y crea los vínculos a las demás funciones principales del programa dejando hecho el menú principal destacándose la configuración, creación de campaña, listado d campañas y la lista de DNC.ivrDialerdbDialerDialerLink$queryConfig$Config$rowConfig$iTimestamp$sFecha$sHora$queryBroadCast$BroadCast$campaignId$queryCamp$Camp$rowCamp$currTime$queryRingCall$RingCall$queryCurrCalls$CurrCalls$contCalls$rowCurrCalls$queryDial$Dial$totRowsDial$extNumb$ivrExt$dialAs$actionId$apiUrl$queryResultScript que envía los dialer al switchvoz y obtiene un resultado del mismo.Extrae los datos de configuración, al igual que los datos de fecha y hora seguido que realiza un consulta a la base de datos y con el id de la campaña extrae los datos de la misma y en seguida verifica la configuración de la hora esperando hasta las 9 de la noche hora límite de llamadas, luego consulta el número de llamadas activas de la presente campaña luego pasa por los diferentes canales hasta que se llenan los mismos y hace un nuevo ciclo. Luego reordena los registros obtenidos después de no tener el dnc vuelve a actualizar el estado de la campaña y le adjudica la restricción de no llamar después de las nueve de la noche y luego extrae los dnc y se comunica con el api para poder colocar la llamada vuelve a actualizar el estado de la llamada, para luego iniciar la sesión con el servidor del webservice toma los resultados del mismo toma la respuesta por medio del xml obteniendo igualmente el estado y vuelve a actualizar el estado de la llamada.ivrDialer2DbDBLink$campaignId$queryCamp$Camp$rowCamp$actionId$extNumb$apiUrl$ch$resp$xml$statusColoca la llamada dentro del switchvoz y toma el resultado.Selecciona los registros con el id ingresado, Coloca la llamada con los datos obtenidos a través del api, y toma la respuesta del xml y del valor del status.mainSugaruseridSugarlandLang$accesRealiza la validación de usuario del Sugar.Carga los scripts necesarios, valida la entrada del Sugar así como el idioma les da la bienvenida y redirecciona al menú principal del sitio al ser validado el usuario.saveAnsweractionIduniqueId$actionId$uniqueId$queryAnswer$AnswerSalva la respuesta del uniqueId tomando el actionId.Carga los scripts necesarios llama a la base de datos y obtiene la respuesta del uniqueId tomando el actionId.saveCallResultcallIdcampIdphoneresultretriescampId$callId$campId$phone$result$queryResult$ResultSalva los datos del resultado de la llamada.Salva los datos obtenidos de la llamada como el callId, pone, dispoCode, result, TdPhoneNumber saveCampaigndbDialerDialerLink$insertSql$result$dncCont$dncFedContFunción: CSV2DBIngresa todos los datos por medio del post..Ingresa los datos suministrados por el post dentro de la base de datos posteriormente verifica la cantidad de números que existen dentro de las bases de datos en el DNC interno y federal. Lo último que hace es enviar al script de index.php y mostrar unn aviso de Datos Salvados.saveConfigdbDialerDialerLink$insertSql$resultInserta dentro de la base de datos los datos incluidos a través del Post Script que guarda los datos del DNC.saveDNCactionIduniqueIddbDialerDialerLink$actionId$uniqueId$queryDNC$DNCSalva el DNC en la base de datosEnlaza el script de carga de datos y cambia dentro de la tabla calls a la llamada del actionid con el uniqueid cambia el estado del dnc a 1.saveDoNotCalldbDialerDialerLink$insertSql$resultSalva los nueros, el id y el status de los Do Not Call.Salva los datos en la tabla de los Dont_call con el caller_id, date_income y el status enseguida envía por el post el caller_id, t el estado 1 muestra un mensaje de Datos Salvados y redirecciona al script index.phpsaveHangUpuniqueIddbDBLink$uniqueId$queryHangUp$HangUpSalva los datos del HangUPActualiza los datos del end_time teniendo como referencia el uniqueid. saveShortCallUniqueiddbDialerDialerLink$uniqueId$queryAnswer$AnswerSalva los datos de los ShortCall.Actualiza los datos del status y el end_time de la tabla calls teniendo como referencia el uniqueid.sesión$user_unique_key$server_unique_key$allowed_actions$sugar_config$action$allowed_actions$entryPoint.php$module$current_user$curDir$post_login_nav$screxturl$currdirValida y autentifica la sesión de entrada al Sugar.Valida sesión en el Sugar, establece los caminos de los directorios crea una clase de control de autenticación crea una validación del usuario donde si es verdadera hace al usuario global y autentica el usuario y de forma contraria destruye la sesión igual verifica la opción de recorder si ya fue autenticado antes, procesa un tiempo muerto mientras entra a la autenticación para luego iniciar la misma ya sea para validarla o no.studioCrea unas librerias con unas estructuras de clase definidas e incluidas de otros scripts.Crea unas librerias globales con unas estructuras de clase definidas e incluidas de otros scripts.vardefs$campaignId = 2$channel = SIP/gateway/$channel2 = SIP/redtelecom/11131$ivrExt = 6014$context = dialer$CID = 954XXXXXXX$maxChan = 5$callOffset = 20Define algunas variables estrictamente a su valor pero sin llegar a ser estáticas.Define variables como las especificadas anteriormente.variable $inturl$exturl$screxturl$maintitle$apmtitle$globalminbalance$hexSecureCode$merchant_nameid$auth_net_login_id$auth_net_tran_key$linkpoint_confile$linkpoint_keyfile$linkpoint_host$link_port$Switch_login_id$Switch_passwordDefine algunas variables clave dentro del programa como camino de directorios Define las variables más usadas dentro del programa como directorios internos y externos, titulo principal, claves de seguridad, accesos autorizados y puntos de enlace. LISTADO DE FUNCIONES ADICIONALES REF FUNCIONES \h \* MERGEFORMAT Funciones Javascript del programadorInit():Que crea un intervalo de de tiempo luego de llamar a recargar()Recargar(): lo que hace es recargar la pagina actualizando todos los registros utilizados en el actual scriptEstos dos anterioresfunciones se encuentran en el script de campaignList.FusionCharts.jsCad_alea: Crea una cadena aleatoria de un rango definido. Siendo esta función encontrada dentro del script de.GlobalDEntrada:$largoUso:$cadena, $desde_ascii= 50, $hasta_ascii= 122, $no_usar[], $i , $numero_aleat, $cadenagetDnc:Hace llamado a la base de datos y verifica la existencia de Do not call (dnc). Siendo esta función encontrada dentro del script de.GlobalDEntrada:$table, $field, $phone, $DBLinkUso:$queryDNC, $DNC, $totRowsDNC, $dncResultados de getDnc:La variable $dnc con toda la información de la consulta en la base de datos.getFedDnc:Verifica en 4 bases de datos la existencia del Dnc caso en el cual lo retorna con valor 1 confirmando la existencia del mismo en alguna de las bases de datos y en caso contrario retornar cero. Siendo esta función encontrada dentro del script de.GlobalDEntrada:$phone, $DBLinkUso:$dncgetFedDnc:La variable $dnc con toda la información de la consulta en la base de datos.setDnc:Función que extrae en una variable los números de los DNC internos. Siendo esta función encontrada dentro del script de.GlobalDVariablesentrada:$table, $campaignId, $phone, $DBLinkUso:$queryDNC, $DNC, $totRowsDNC, $queryDNCCallsResultados de setdncLa variable $dnc con toda la información de la consulta en la base de datos.ConstruirPlantillaMarcadoCrea la plantilla para el marcado a través del sip zap para este caso. Siendo esta función encontrada dentro del script de.GlobalDEntrada:$sTrunkUso:$infoTrunk, $sPlantilla, $plantillaResultados de ConstruirPlantillaMarcadoLa variables $plantilla que incluye la plantilla de marcado.OnOriginateResponseFuncion que hace globales las variables db, DBLink, campaignId toma el estado devuelto del uniqueId y si es un éxito se ingresa el llamado en la base de datos. Siendo esta función encontrada dentro del script de.GlobalDVariables:Entrada:$sEvent, $params[], $sServer, $iPort.Uso:$db, $DBLink, $campaign, $actId, $callId, $sStatusResultados de OnOriginateResponseEmite Callback cuando se invoca el originar respuesta.OnLink:Toma los 3 uniqueId intentando actualizar el momento de fin de llamada y su duración en dado caso se tengan tres intentos de marcación. Es la forma como se actualizan las llamadas con status succes. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$sEvent, $params[], $sServer, $iPort.Uso:$campaignId, $uniqueId, $uniqueId1, $uniqueId2, $callId, $OnLinkResultados de OnLink:Actualiza las llamadas con success como estado.UnOnLink:Toma los 3 uniqueId intentando actualizar el momento de fin de llamada y su duración en dado caso que se tengan tres intentos de marcación. Es la forma como se verifican y actualizan las llamadas con status ShortCall. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$sEvent, $params[], $sServer, $iPort, Uso:$campaignId, $uniqueId, $uniqueId1, $uniqueId2, $queryOnUnlink, $Onunlink, $callIdResultados de UnOnLink:Actualiza las llamadas con ShortCall como valor de estado .OnHangup:Llama a la función OnUnLink con los datos de entrada. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$sEvent, $params, $sServer, $iPortResultados de OnHangup:Llama a la función OnUnLink con los datos de entradasetActId:Hace globales las variables $db, $DBLink y actualiza el Id actual de la campaña. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$callId, $actId, $campaignIdUso:$queryActId, $ActIdsetActId:Actualiza el Id de la campaña seleccionada al ingreso de la función.getActId:Hace globales las variables $db, $DBLink y obtiene el Id actual de la campaña. Siendo esta función encontrada dentro del script de.GlobalDVariablesEntrada:$actIdUso:$queryActId$ActId$rowActIdResultados de getActId:Retorna la matriz $rowActId[] con el id especificado a la entrada de la función getByUnqId:Función que hace globales las variables db, DBLink y selecciona la llamada con el uniqueid ingresado al invocar la función siendo esta función encontrada dentro del script de.GlobalDEntrada:$uniqueIdUso:$queryUnqId, $UnqId, $rowUnqId.Resultado de getByUnqId:Devuelve el id de la llamada para el posterior cambio de estado.CSV2DBEs una función para guardar los datos dentro de un archivo llamado $handle de forma local abriendo un archivo para que tenga una mayor facilidad de tratamiento seguido se descartan los registros del DNC tanto interno como federal y por ultimo se insertan los datos en el archivo resultado cierra el archivo abierto y muestra un mensaje de Datos Salvados se encuentra dentro del script de SaveCampaign. VariablesEntrada:$filename.Globales:$DialerLink, $dbDialer, $dncFecCont, $dncCont. Uso:$row, $handle, $num, $data [], $dnc, $dncFedCont, $query, $result.Resultado de CSV2DBSalva los datos de la campaña en un archivo interno llamado $result.CODIGO FUENTE REF CODIGO \h \* MERGEFORMAT Es el último paso ya que aun se tienen mejoras pendientes pero para motivos de este informe te lo envió con lo que tengo hasta el momento sin que necesariamente tenga que quedar así e igual esta abierto a sugerencias…/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Page- [CopyRigth]********************************************************** */$headerTitle = \" Outbound Dialer\" ;include('header.php');// Selecciona las campañas Activas//mysql_select_db($db, $DBLink);// Selecciona todo desde call_center.campaign donde estatus es Activa$queryCamp = \" SELECT * FROM call_center.campaign WHERE estatus='A'\" ;$Camp = mysql_query($queryCamp, $DBLink) or die(mysql_error());echo \" Marcando...\n\" ;$extension = $_GET['EXTENSION'];$caller_id = $_GET['caller_id'];// Busca la Campaña que este asociada a este callerid$queryInfoCamp = \" SELECT * FROM call_center.calls WHERE status='Placing' AND phone='$caller_id' AND id_agent=$extension\" ;$InfoCamp = mysql_query($queryInfoCamp, $DBLink) or die(mysql_error());$rowInfoCamp = mysql_fetch_assoc($InfoCamp);?> Campaña :  [...]// bucle que imprime en pantalla las lineas de la campaña y tabla seleccionadas while($rowCamp = mysql_fetch_assoc($Camp)){echo \" {$rowCamp['name']}\" ;}?> Marcacion A :  //muestra en pantalla la lista de los telefonos?>   Resultado :  [...] Exito Ocupado Sin Respuesta Maquina Contestadora Fallo \" /> \" /> \" /> .Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Campaign Receive inputs of campaign Page- [CopyRigth]********************************************************** */?>Untitled Document //Define un estilo.titulos{font-family:\" trebuchet MS\" , Verdana, Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold;color:#000000;text-transform:uppercase;}.subtitulos{font-family:\" trebuchet MS\" , Verdana, Arial, Helvetica, sans-serif;font-size:12px;font-weight:lighter;color:#000000;text-transform:uppercase;}.style_input{background:#fff;border:1px solid #666;}.input_style{background:#fff;border:1px solid #666;} LOGO CLIENTE Crear Nueva Campaña de Marcacion Codigo : ### Nombre : Rango de fecha : - Rango de Hora : - Retries : Archivo de Llamadas : /* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Campaign's Detail [Report] Page- [CopyRigth]********************************************************** */$headerTitle = \" Listado de Campañas de Marcacion\" ;include('header.php');$campId = $_GET['id'];// Diferentes Status de las llamadas de la campañamysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryDispo = \" SELECT DISTINCT(status) AS status FROM calls WHERE id_campaign='$campId' ORDER BY status\" ;$Dispo = mysql_query($queryDispo, $DialerLink) or die(mysql_error());$totRowsDispo = mysql_num_rows($Dispo);// Total llamadas de la campaignmysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryTotCalls = \" SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign='$campId'\" ;$TotCalls = mysql_query($queryTotCalls, $DialerLink) or die(mysql_error());$rowTotCalls = mysql_fetch_assoc($TotCalls);// Librerias necesarias para la graficacion en FLASH// Fusion Chartsinclude(\" FusionChartsFree/Code/PHPClass/Includes/FusionCharts_Gen.php\" );echo \" \" ;echo \" \" ;?> Save Status Calls \" >.$i=0;# Crea el objeto para la Columna del 3D chart$FC = new FusionCharts(\" Column3D\" ,\" 400\" ,\" 300\" ,\" ResulTipifica\" ); # Especifica el camino relativo del archivo swf.$FC->setSwfPath(\" FusionChartsFree/Charts/\" );# Guarda chart atributos en una variable$strParam=\" caption=Gestion Cartera;xAxisName=Resultado;yAxisName=Cantidad;rotateNames=1;decimalPrecision=2; formatNumberScale=0\" ;# Set chart attributes$FC->setChartParams($strParam);$acumCalls = 0;//impresion de los datos de las filas y las campañas seleccionadas por el atributo statuswhile($rowDispo = mysql_fetch_assoc($Dispo)){if($rowDispo['status'] == ''){$queryCalls = \" SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign='$campId' AND status IS NULL\" ;$rowDispo['status'] = 'Not Dialed';}else$queryCalls = \" SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign='$campId' AND status='{$rowDispo['status']}'\" ;mysql_select_db($dbDialer, $DialerLink) or die(mysql_error());//selecciona base de datos$Calls = mysql_query($queryCalls, $DialerLink) or die(mysql_error());//almacena en calls el llamado hacia la base datos con los campos especificados$rowCalls = mysql_fetch_assoc($Calls);$porcent = ( $rowCalls['TOTAL'] * 100 ) / $rowTotCalls['TOTAL'];$acumCalls += $rowTotCalls['TOTAL'];?> \" width=\" 25\" onClick=\" framDatos.location.href='getCampaignData.php?campaign=&status=';\" > # Add chart data along with category names$arrData[$i][0] = substr($rowDispo['status'],0,10);$arrData[$i][1] = $porcent;$i++;}# llamado a la funcion de clase en PHP FusionCharts para ingresar los datos a la matriz$FC->addChartDataFromArray($arrData); # Render chart$FC->renderChart();?> \" width=\" 25\" onClick=\" framDatos.location.href='getCampaignData.php?campaign=&status=ALL';\" > TOTAL /* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Campaign's Edit [Report] Page- [CopyRigth]********************************************************** */$headerTitle = \" Crear Nueva Campaña de Marcacion\" ;include('header.php');// Consulta de los detalles de la campaña, que vienen dentro del idmysql_select_db($dbDialer, $DialerLink) or die(mysql_error()); //selecciona la base de datos o envia un errorif(isset($_GET['id']) && $_GET['id']!=''){$campId = $_GET['id'];//mysql_select_db($db, $DBLink);$queryCamp = \" SELECT * FROM campaign WHERE id=$campId\" ;$Camp = mysql_query($queryCamp, $DialerLink) or die(mysql_error()); //asigna a Camp la consulta o envia un mensae de error$rowCamp = mysql_fetch_assoc($Camp);}else{// maximo consecutivo de campaña//mysql_select_db($db, $DBLink);$queryCamp = \" SELECT MAX(id) as id FROM campaign\" ;$Camp = mysql_query($queryCamp, $DialerLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);$rowCamp['id'] ++;} //impresion de tabla //Guardar los datos entrados para pasarlos a variables?> Codigo :  \" /> Nombre :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" /> Rango de fecha :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" />- \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" /> Rango de Hora :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" />- \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" /> IVR :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" />Max Canales :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" />Retries :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" /> Dial As extension :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" /> Archivo de Llamadas :  Estado :  >[...] >Detenida >Activa >Terminada Calendar.setup({ inputField : \" fecha_ini\" , // id del campo de texto ifFormat : \" %Y-%m-%d\" , // formato de la fecha que se escriba en el campo de texto button : \" trigger1\" // el id del botón que lanzará el calendario}); Calendar.setup({ inputField : \" fecha_fin\" , // id del campo de texto ifFormat : \" %Y-%m-%d\" , // formato de la fecha que se escriba en el campo de texto button : \" trigger2\" // el id del botón que lanzará el calendario});/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Campaign's List Detail [Report] Page- [CopyRigth]********************************************************** */$headerTitle = \" Listado de Campañas de Marcacion\" ;include('header.php');//mysql_select_db($db, $DBLink);mysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryCampaign = \" SELECT * FROM campaign\" ;$statusId = $_GET['status'];if($statusId != '')$queryCampaign .= \" WHERE estatus='$statusId'\" ;$Campaign = mysql_query($queryCampaign, $DialerLink) or die(mysql_error());// Consultamos las campaña segun el estado seleccionado?> function init() {setInterval(\" recargar()\" , 6000);} function recargar() {location.reload();} Id Nombre Inicio Fin IVR Chnls Retries SUCESSFULL No. Rest DNC >Estado >Detenida >Activa >Terminada Report.while($rowCampaign = mysql_fetch_assoc($Campaign)){switch($rowCampaign['estatus']){case \" D\" : $rowCampaign['estatus'] = \" Detenida\" ; break;case \" A\" : $rowCampaign['estatus'] = \" Activa\" ; break;case \" T\" : $rowCampaign['estatus'] = \" Terminada\" ; break;}// Seleccionar las llamadas marcadas por lo menos una vezmysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryComplete = \" SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign={$rowCampaign['id']} AND status='Success'\" ;$Complete = mysql_query($queryComplete, $DialerLink) or die(mysql_error());$rowComplete = mysql_fetch_assoc($Complete);// Seleccionar las llamadas marcadas no han sido marcadasmysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryInComplete = \" SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign={$rowCampaign['id']} AND status IS NULL\" ;$InComplete = mysql_query($queryInComplete, $DialerLink) or die(mysql_error());$rowInComplete = mysql_fetch_assoc($InComplete);// Seleccionar las llamadas que son DNCmysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryDNC = \" SELECT COUNT(*) AS TOTAL FROM calls WHERE id_campaign={$rowCampaign['id']} AND dnc=1\" ;$DNC = mysql_query($queryDNC, $DialerLink) or die(mysql_error());$rowDNC = mysql_fetch_assoc($DNC);?> '\" > '\" > '\" /> }?> //carga de imagen con el logo y link al inicio//cierra la conexion con la base de datos/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Campaign's Views [Report] Page- [CopyRigth]********************************************************** */$headerTitle = \" Crear Nueva Campaña de Marcacion\" ;include('header.php'); // Consultamos los detalles de la campaña,// dependiendo del parametro pasado por idif(isset($_GET['id']) && $_GET['id']!=''){$campId = $_GET['id'];mysql_select_db($dbDialer, $DialerLink);$queryCamp = \" SELECT * FROM campaign WHERE id=$campId\" ;$Camp = mysql_query($queryCamp, $DialerLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);switch($rowCamp['estatus']){case \" D\" : $rowCamp['estatus'] = \" Detenida\" ; break;case \" A\" : $rowCamp['estatus'] = \" Activa\" ; break;case \" T\" : $rowCamp['estatus'] = \" Terminada\" ; break;}}?> Codigo :  Nombre :  Rango de fecha :  - Rango de Hora :  - IVR :  Max Canales :  Retries :  Estado :  '\" /> S /* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Dialer[ db connection ] Page- [CopyRigth]********************************************************** */// toma las variables globales y las asigna a variables mas cortas$host = \" localhost\" ; $user = \" dcs_call_api\" ;$pass = \" c4llc3nt3r\" ;$dbDialer = \" dcs_call_center\" ;//accesa a la base de datos con los datos del servidor, usuario y password con una base de datos actual$DialerLink = mysql_connect($host, $user, $pass) or die(mysql_error()); //conecta con la base de datos o genera un error?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Dialer Config Page- [CopyRigth]********************************************************** */$headerTitle = \" Configuracion del Sistema\" ;include('header.php');mysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$queryConfig = \" SELECT * FROM config\" ;$Config = mysql_query($queryConfig, $DialerLink) or die(mysql_error());$rowConfig = mysql_fetch_assoc($Config);?> Switchvox Url :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" /> Switchvox API Password :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" /> Failure status time to wait :  \" onfocus=\" this.className='inputFocus';\" onblur=\" this.style.borderColor=''; this.className='input_style';\" /> /* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Do not Call add's Page- [CopyRigth]********************************************************** */$headerTitle = \" Agregar Numero de DoNotCall\" ;include('header.php');?> Ani :  **Ingrese el numero de 10 digitos (Ej: 7865331110) /* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Dial Calls add's Page- [CopyRigth]********************************************************** */$campaignId = $_GET['campaignId'];$extNumb = $_GET['extNumb'];include('dbConn.php');//mysql_select_db($db, $DBLink);$queryCamp = \" SELECT * FROM call_center.campaign WHERE id=$campaignId\" ;$Camp = mysql_query($queryCamp, $DBLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);echo \" \n\" ;if($rowCamp['estatus'] == 'A'){//mysql_select_db($db, $DBLink);$queryDial = \" SELECT * FROM call_center.calls WHERE id_campaign='$campaignId' AND status IS NULL\" ;$Dial = mysql_query($queryDial, $DBLink) or die(mysql_error());$rowDial = mysql_fetch_assoc($Dial);$totRowsDial = mysql_num_rows($Dial);if($totRowsDial == 0){//mysql_select_db($db, $DBLink);$queryDial = \" SELECT * FROM call_center.calls WHERE id_campaign=$campaignId AND status NOT IN ('Success', 'Placing', 'Ringing', 'OnQueue', 'OnHold') AND retries $Dial = mysql_query($queryDial, $DBLink) or die(mysql_error());$rowDial = mysql_fetch_assoc($Dial);$totRowsDial = mysql_num_rows($Dial);if($totRowsDial == 0){echo \" parent.getEle('TdPhoneNumber').childNodes[0].nodeValue='Campaña Sin Numeros de Marcacion...!!!';\" ;echo \" \" ;// Actualizamos el estado de la campaign$queryCamp = \" UPDATE call_center.campaign SET estatus='T' WHERE id=$campaignId\" ;$Camp = mysql_query($queryCamp, $DBLink) or die(mysql_error());exit();}}$phone = $rowDial['phone'];// Colocar llamada$apiUrl = \" https://sip.domainname.com/api?cmd=call&dial_first=$extNumb&dial_second=$phone\" ;// Actualizar estado de llamada//mysql_select_db($db, $DBLink);$queryResult = \" UPDATE call_center.calls SET status='Placing', fecha_llamada=NOW(), id_agent=$extNumb WHERE id={$rowDial['id']} AND id_campaign=$campaignId AND $phone='$phone'\" ;$Result = mysql_query($queryResult, $DBLink) or die(mysql_error());echo \" parent.getEle('callId').value = '{$rowDial['id']}';\" ;echo \" parent.getEle('phone').value = '$phone';\" ;echo \" parent.getEle('dispoCode').value = '';\" ;echo \" parent.FramAPIDial.location.href='$apiUrl';\n\" ;}else{echo \" parent.getEle('TdPhoneNumber').childNodes[0].nodeValue='Campaña no disponible para marcar';\n\" ;echo \" parent.location.reload();\n\" ;}//echo \" parent.getEle('DivBuscar').style.visibility = 'hidden';\n\" ;echo \" \" ;?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Dial(2) Calls add's Page- [CopyRigth]********************************************************** */$phone = $_GET['phone'];$extNumb = $_GET['extNumb'];// Colocar llamada$apiUrl = \" https://sip.domainname.com/api?cmd=call&dial_first=$extNumb&dial_second=$phone&response_type=xml\" ;//echo $apiUrl . '';$ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from responsecurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, \" & \" )); // use HTTP POST to send form datacurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Returns response data instead of TRUE(1)### curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // uncomment this line if you get no gateway response. ###//var_dump($ch);$resp = curl_exec($ch); //execute post and get resultscurl_close ($ch);$xml = simplexml_load_string($resp);//var_dump($xml);echo 'RESULTADO DE LA LLAMADA : '. $xml->status;?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Language's Selection Page- [CopyRigth]********************************************************** */// created: 2009-01-19 15:32:39$mod_strings = array ( 'VALUE' => 'Wealth', 'LBL_SOCIAL_SECURITY' => 'Social Security #', 'LBL_ADDRESS_INFORMATION' => 'Mailing Address & Property Address', 'LBL_PRIMARY_ADDRESS_STREET' => 'Mailing Address Street', 'LBL_PRIMARY_ADDRESS_CITY' => 'Mailing Address City', 'LBL_PRIMARY_ADDRESS_COUNTRY' => 'Mailing Address Country', 'LBL_PRIMARY_ADDRESS_POSTALCODE' => 'Mailing Address Postalcode', 'LBL_PRIMARY_ADDRESS_STATE' => 'Mailing Address State', 'LBL_PRIMARY_ADDRESS_STREET_2' => 'Mailing Address Street 2', 'LBL_PRIMARY_ADDRESS_STREET_3' => 'Mailing Address Street 3', 'LBL_TITLE' => 'Position or Occupation:', 'LBL_DATE_OF_BIRTH' => 'D.O.B.', 'LBL_ALT_ADDRESS_CITY' => 'Property Address City', 'LBL_ALT_ADDRESS_COUNTRY' => 'Property Address Country', 'LBL_ALT_ADDRESS_POSTALCODE' => 'Property Address Postalcode', 'LBL_ALT_ADDRESS_STATE' => 'Property Address State', 'LBL_ALT_ADDRESS_STREET_2' => 'Property Address Street 2', 'LBL_ALT_ADDRESS_STREET_3' => 'Property Address Street 3', 'LBL_ALT_ADDRESS_STREET' => 'Property Address Street', 'LBL_ACCOUNT_NAME' => 'Employer Name:', 'LBL_COBOFIRSTNAME' => 'First Name', 'LBL_COBOLASTNAME' => 'Last Name:', 'LBL_COBOHOMEPHONE' => 'Home Phone:', 'LBL_COBOMOBILEPHONE' => 'Mobile:', 'LBL_COBOWORKPHONE' => 'Office Phone:', 'LBL_COBOOTHERPHONE' => 'Other Phone:', 'LBL_COBOSOCSECNUMB' => 'Social Security #', 'LBL_COBODOB' => 'D.O.B.:', 'LBL_PANEL1' => 'Co-Borrower Information', 'LBL_LOANAMOUNT' => 'Loan Amount:', 'LBL_TERMOFLOAN' => 'Term Of Loan:', 'LBL_INTEREST' => 'Rate:', 'LBL_MONTHLY_PMT' => 'Monthly PMT:', 'LBL_INTERESTTYPE' => 'Type:', 'LBL_LTV' => 'LTV:', 'LBL_SALESPRICE' => 'Sales Price:', 'LBL_APPRAISAL' => 'Appraisal:', 'LBL_TARGET_DTI' => 'Target DTI:', 'LBL_PROPERTY_TYPE' => 'Loan Type:', 'LBL_PROPERTY_USE' => 'Property Use:', 'LBL_PROPERTY_UNITS' => 'Property Type:', 'LBL_PANEL2' => 'Mortgage Information', 'LBL_LOANNUMBER' => 'Loan Number:', 'LBL_EMAIL_ADDRESSES' => '', 'LBL_LENDER' => 'Primary Lender :', 'LBL_CONTACT_INFORMATION' => 'Borrower Information', 'LBL_LENDER2' => 'Second Lender :', 'LBL_LOANAMOUNT2' => 'Loan Amount:', 'LBL_LOAN_NUMBER2' => 'Loan Number:', 'LBL_TERMOFLOAN2' => 'Term Of Loan:', 'LBL_RATE2' => 'Rate:', 'LBL_MONTHLYPAY2' => 'Monthly PMT:', 'LBL_TYPE2' => 'Type:', 'LBL_LTV2' => 'LTV:', 'LBL_SALES_PRICE2' => 'Sales Price:', 'LBL_APPRAISAL2' => 'Appraisal:', 'LBL_TARGET_DTI2' => 'Target DTI:', 'LBL_PROPERTY_TYPE2' => 'Loan Type:', 'LBL_PROPERTY_USE2' => 'Property Use:', 'LBL_PROPERTY_UNITS2' => 'Property Type:', 'LBL_PANEL3' => 'INCOME / EXPENSES', 'LBL_BORR_GROSS_WAGES_MONTHLY' => 'Gross Wages Monthly:', 'LBL_COBOGROSS_WAGES_MONTHLY' => 'Gross Wages Monthly:', 'LBL_BORRUNEMPLOYMENTINCOME' => 'Unemployment Income', 'LBL_COBOUNEMPLYMENTINCOME' => 'Unemployment Income', 'LBL_BORRCHILDSUPPORT' => 'Child Support / Alimony', 'LBL_COBOCHILDSUPPORT' => 'Child Support / Alimony', 'LBL_BORRDISABILITYINCOME' => 'Disability Income / SSI', 'LBL_COBODISABILITYINCOME' => 'Disability Income / SSI', 'LBL_BORRRENTSRECEIVED' => 'Rents Received', 'LBL_COBORENTSRECEIVED' => 'Rents Received', 'LBL_BORROTHER' => 'Other', 'LBL_BORRFEDSTATTAX' => 'Less : Federal and State Tax, FICA', 'LBL_COBOFEFSTDTAX' => 'Less : Federal and State Tax, FICA', 'LBL_BORROTHERDEDUC' => 'Less : Other Deductions (401k, etc)', 'LBL_COBOOTHERDEDUCTIONS' => 'Less : Other Deductions (401k, etc)', 'LBL_BORRCOMISSBONUS' => 'Commissions, Bonus & self-employed income', 'LBL_COBOCOMMISSBONUS' => 'Commissions, Bonus & self-employed income', 'LBL_COBOOTHER' => 'Other:', 'LBL_TYPE' => 'Type', 'LBL_CENSUS' => 'Census', 'LBL_YEAR_LISTED' => 'year listed', 'LBL_WEALTH' => 'Wealth',);?>if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');/********************************************************************************* * SugarCRM is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004 - 2008 SugarCRM Inc. * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the \" Powered by * SugarCRM\" logo. If the display of the logo is not reasonably feasible for * technical reasons, the Appropriate Legal Notices must display the words * \" Powered by SugarCRM\" . ********************************************************************************//********************************************************************************* * Description: Contains field arrays that are used for caching * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. * All Rights Reserved. Company : TelOnline Corp www.telonlinecorp.com Date : USA/Colombia, Jan 30 2009Contributions : Development Department ********************************************************************************/$fields_array['Lead'] = array ('column_fields' => Array(\" id\" ,\" refered_by\" ,\" date_entered\" ,\" date_modified\" ,\" modified_user_id\" ,\" assigned_user_id\" ,\" created_by\" ,\" salutation\" ,\" first_name\" ,\" last_name\" ,\" lead_source\" ,\" lead_source_description\" ,\" title\" ,\" department\" ,\" reports_to_id\" ,\" do_not_call\" ,\" phone_home\" ,\" phone_mobile\" ,\" phone_work\" ,\" phone_other\" ,\" phone_fax\" ,\" email1\" ,\" email2\" ,\" email_opt_out\" ,\" primary_address_street\" ,\" primary_address_city\" ,\" primary_address_state\" ,\" primary_address_postalcode\" ,\" primary_address_country\" ,\" alt_address_street\" ,\" alt_address_city\" ,\" alt_address_state\" ,\" alt_address_postalcode\" ,\" alt_address_country\" ,\" description\" ,\" status\" ,\" status_description\" ,\" account_name\" ,\" account_description\" ,\" account_id\" ,\" opportunity_id\" ,\" contact_id\" ,\" opportunity_amount\" ,\" opportunity_name\" ,\" portal_name\" ,\" portal_app\" ,\" invalid_email\" ,\" campaign_id\" ), 'list_fields' => Array('id', 'first_name', 'last_name', 'account_name', 'title', 'email1', 'phone_work', 'assigned_user_name', 'assigned_user_id', 'lead_source', 'lead_source_description', 'refered_by', 'opportunity_name', 'opportunity_amount', 'date_entered', 'status','invalid_email', \" campaign_id\" ),);?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Print Logo - [CopyRigth]********************************************************** */echo \" \" ;?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Dilaer[ db connection ] Page- [CopyRigth]********************************************************** */include('dbConn.php');//obtiene los datos de la campaña y el estatus de la misma$campaign = $_GET['campaign'];$status = $_GET['status'];//selecciona los registros de la campaña y los abremysql_select_db($dbDialer, $DialerLink);$queryData = \" SELECT * FROM calls WHERE id_campaign=$campaign AND status='$status'\" ;$Data = mysql_query($queryData, $DialerLink) or die(mysql_error());//Ingresa los datos obtenidos en la matriz cadCsv$cadCsv = \" \" ;while($rowData = mysql_fetch_assoc($Data)){$cadCsv .= $rowData['phone'] . \" ,\n\" ;}//abre, escribe y cierra el archivo con nombre DataCampaign.csv$fileName = \" DataCampaign.csv\" ;$fp = fopen($fileName, \" w\" );fwrite($fp, $cadCsv);fclose($fp);//forma de empaquetar los archivosheader('Content-type: application/force-download');header('Content-Transfer-Encoding: Binary');header('Content-length: '.filesize($fileName));header('Content-disposition: attachment; filename='.basename($fileName));readfile($fileName);?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Tel Online - Module Management [ global obj ]********************************************************** *//* [ Functions Inclution ] */# include(\" agent.php\" ); ### Agent Management# include(\" account.php\" ); ### Account Managementinclude(\" apm.php\" ); ### Account Product Managementinclude(\" Switch.php\" ); ### Switch Utilitiesinclude(\" export.php\" ); ### Export Data Utilities# include(\" ivr.php\" ); ### IVR Utilitiesinclude(\" print.php\" ); ### Print Management# include(\" product.php\" ); ### Product Managementinclude(\" sugar.php\" ); ### SugarCRM Utilitiesinclude(\" telecontact.php\" ); ### TeleContact Utilitiesinclude(\" ticket.php\" ); ### Ticketing System Management//echo 'global2';if($needAuth != \" FALSE\" )include(\" session.php\" );/// Session validate /* [ Functions Definition ] */# $agentClass = new agent();# $accClass = new account();$apmClass = new apm(); $authnetClass = new aim(); $SwitchClass = new Switch(); $exportClass= new exportData();# $ivrClass = new ivr();$linkptClass = new linkpoint(); $paymentClass= new payment();$printClass = new prnt();# $prodClass = new product();$secureClass = new secure(); $sugarClass = new sugar();$tcClass = new telecontact();$ticketClass= new ticket(); ?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Tel Online - Module Management [ global obj ]********************************************************** */// funcion que pide un largo// y retorna una cadena de un largo de entrada predeterminadofunction cad_alea($largo){$cadena=\" \" ;$desde_ascii = 50;$hasta_ascii = 122;$no_usar = array (58,59,60,61,62,63,64,73,79,91,92,93,94,95,96,108,111);$i=0;while($i {//crea un numero aleatoriomt_srand((double)microtime() * 1000000);$numero_aleat = mt_rand ($desde_ascii, $hasta_ascii);if (!in_array ($numero_aleat, $no_usar)){$cadena = $cadena . chr($numero_aleat);$i++;}}return $cadena;}// funcion que pide una tabla, un campo, un numero y una base de datos// verifca si tiene filas activas y devuelve un valor de falso o verdadero o (0 o 1)function getDnc($table, $field, $phone, $DBLink){$queryDNC = \" SELECT $field FROM $table WHERE $field='$phone'\" ;$DNC = mysql_query($queryDNC, $DBLink) or die(mysql_error() . ' L6');$totRowsDNC = mysql_num_rows($DNC);if($totRowsDNC > 0)$dnc = \" 1\" ;else$dnc = \" 0\" ;return $dnc;}// funcion que pide un numero de telefono y el enlace de una base de datos// verifica en 4 diferentes bases de datos la existencia del DNCfunction getFedDnc($phone, $DBLink){$dnc = getDnc('CDCenter.DNCClick2MediaCorp', 'AreaCodePhoneNumber', $phone, $DBLink);if($dnc == 1)return $dnc;$dnc = getDnc('CDCenter.DNCDirectCredit', 'AreaCodePhoneNumber', $phone, $DBLink);if($dnc == 1)return $dnc;$dnc = getDnc('CDCenter.DNCTelX3m', 'AreaCodePhoneNumber', $phone, $DBLink);if($dnc == 1)return $dnc;$dnc = getDnc('CDCenter.DNCTelonlineCorp', 'AreaCodePhoneNumber', $phone, $DBLink);if($dnc == 1)return $dnc;}function setDnc($table, $phone, $campaignId, $DBLink){$queryDNC = \" SELECT AreaCodePhoneNumber FROM CDCenter.$table WHERE AreaCodePhoneNumber='$phone'\" ;$DNC = mysql_query($queryDNC, $DBLink) or die(mysql_error() . ' L6');$totRowsDNC = mysql_num_rows($DNC);if($totRowsDNC > 0){$queryDNCCalls = \" UPDATE calls SET dnc=1 WHERE phone='$phone' AND id_campaign=$campaignId\" ;$DNCCalls = mysql_query($queryDNCCalls, $DBLink) or die(mysql_error());}return $dnc;}/** * Procedimiento que construye una plantilla de marcado a partir de una * definición de trunk. Una plantilla de marcado es una cadena de texto de * la forma 'blablabla$OUTNUM$blabla' donde $OUTNUM$ es el lugar en que * debe constar el número saliente que va a marcarse. Por ejemplo, para * trunks de canales ZAP, la plantilla debe ser algo como Zap/g0/$OUTNUM$ * * @paramstring$sTrunkPatrón que define el trunk a usar por la campaña * * @returnmixedLa cadena de plantilla de marcado, o NULL en error */function construirPlantillaMarcado($sTrunk){if (stripos($sTrunk, '$OUTNUM$') !== FALSE){// Este es un trunk personalizado que provee $OUTNUM$ ya preparadoreturn array('TRUNK' => $sTrunk);}elseif (ereg('^SIP/', $sTrunk) || eregi('^Zap/.+', $sTrunk) || ereg('^IAX/', $sTrunk)){// Este es un trunk Zap o SIP. Se debe concatenar el prefijo de marcado // (si existe), y a continuación el número a marcar.$infoTrunk = $this->_leerPropiedadesTrunk($sTrunk);if (is_null($infoTrunk)) return NULL;// SIP/TRUNKLABEL/$OUTNUM$$sPlantilla = $sTrunk.'/';if (isset($infoTrunk['PREFIX'])) $sPlantilla .= $infoTrunk['PREFIX'];$sPlantilla .= '$OUTNUM$';// Agregar información de Caller ID, si está disponible$plantilla = array('TRUNK' => $sPlantilla);if (isset($infoTrunk['CID']) && trim($infoTrunk['CID']) != '')$plantilla['CID'] = $infoTrunk['CID'];return $plantilla;}else{$this->oMainLog->output(\" ERR: trunk '$sTrunk' es un tipo de trunk desconocido. Actualice su versión de CallCenter.\" );return NULL;}} // Callback invocado al recibir el evento OriginateResponsefunction OnOriginateResponse($sEvent, $params, $sServer, $iPort){echo 'OnOriginateResponse CallBack Function ...!!! ' . \" \n\" ;global $db, $DBLink, $campaignId;if(!isset($params['ActionID']))return FALSE;$actId = $params['ActionID'];$callId = getActId($actId);// Estado devuelto$sStatus = $params['Response'];// Identificador de la llamadaif ($params['Uniqueid'] == '')$params['Uniqueid'] = NULL;// Si es Exito, ingresamos timbrado en la dbif ($sStatus == 'Success')$sStatus = 'Ringing';mysql_select_db($db, $DBLink);$queryResp = \" UPDATE calls SET status='$sStatus', Uniqueid='{$params['Uniqueid']}', fecha_llamada=NOW(), start_time = NULL, end_time = NULL \" ;$queryResp .= \" WHERE id_campaign=$campaignId AND id=$callId\" ;$Resp = mysql_query($queryResp, $DBLink) or die(mysql_error() . ' L91');}// Callback invocado al recibir el evento Linkfunction OnLink($sEvent, $params, $sServer, $iPort){echo 'OnLink CallBack Function ...!!! ' . \" \n\" ;print_r($params);global $db, $DBLink, $campaignId;if($campaignId == '')$campaignId = 2;$uniqueId = $params['Uniqueid'];$callId = getByUnqId($uniqueId);// Actualización de momento de fin de llamada y duración$queryOnUnlink = \" UPDATE calls SET status='ShortCall', end_time=NOW() WHERE id='$callId'\" ;$OnUnlink = mysql_query($queryOnUnlink, $DBLink) or die(mysql_error() . ' L140');$uniqueId1 = $params['uniqueid1'];$callId = getByUnqId($uniqueId1);$queryOnLink = \" UPDATE calls SET status='Success', id_agent='801', start_time=NOW(), end_time=NULL, retries=retries+1\" ;$queryOnLink .= \" WHERE id='$callId'\" ;$OnLink = mysql_query($queryOnLink, $DBLink) or die(mysql_error() . '' . $queryOnLink . ' L115');$uniqueId2 = $params['uniqueid2'];$callId = getByUnqId($uniqueId2);$queryOnLink = \" UPDATE calls SET status='Success', id_agent='801', start_time=NOW(), end_time=NULL, retries=retries+1\" ;$queryOnLink .= \" WHERE id='$callId'\" ;$OnLink = mysql_query($queryOnLink, $DBLink) or die(mysql_error() . '' . $queryOnLink . ' L115');}// Callback invocado al recibir el evento Unlinkfunction OnUnlink($sEvent, $params, $sServer, $iPort){echo 'OnUnlink CallBack Function ...!!! ' . \" \n\" ;print_r($params);global $db, $DBLink, $campaignId;if($campaignId == '')$campaignId = 2;$uniqueId = $params['Uniqueid'];$callId = getByUnqId($uniqueId);// Actualización de momento de fin de llamada y duración$queryOnUnlink = \" UPDATE calls SET status='ShortCall', end_time=NOW() WHERE id='$callId'\" ;$OnUnlink = mysql_query($queryOnUnlink, $DBLink) or die(mysql_error() . ' L140');$uniqueId1 = $params['uniqueid1'];$callId = getByUnqId($uniqueId1);// Actualización de momento de fin de llamada y duración$queryOnUnlink = \" UPDATE calls SET status='ShortCall', end_time=NOW() WHERE id='$callId'\" ;$OnUnlink = mysql_query($queryOnUnlink, $DBLink) or die(mysql_error() . ' L140');$uniqueId2 = $params['uniqueid2'];$callId = getByUnqId($uniqueId2);// Actualización de momento de fin de llamada y duración$queryOnUnlink = \" UPDATE calls SET status='ShortCall', end_time=NOW() WHERE id='$callId'\" ;$OnUnlink = mysql_query($queryOnUnlink, $DBLink) or die(mysql_error() . ' L146');}function OnHangup($sEvent, $params, $sServer, $iPort) { // Lo siguiente sirve porque tanto Unlink como Hangup comparten un Uniqueid return OnUnlink($sEvent, $params, $sServer, $iPort); }function setActId($callId, $actId, $campaignId){global $db, $DBLink;mysql_select_db($db, $DBLink);$queryActId = \" UPDATE calls SET actionId='$actId' WHERE id=$callId AND id_campaign=$campaignId\" ;$ActId = mysql_query($queryActId, $DBLink) or die(mysql_error() . ' L125');}function getActId($actId){global $db, $DBLink;mysql_select_db($db, $DBLink);$queryActId = \" SELECT * FROM calls WHERE actionId='$actId'\" ;$ActId = mysql_query($queryActId, $DBLink) or die(mysql_error() . ' L134');$rowActId = mysql_fetch_assoc($ActId);// Retornamos el Id de la llamada para// la actualizacion de los estadosreturn $rowActId['id'];}function getByUnqId($uniqueId){global $db, $DBLink;mysql_select_db($db, $DBLink);$queryUnqId = \" SELECT * FROM calls WHERE uniqueid='$uniqueId'\" ;$UnqId = mysql_query($queryUnqId, $DBLink) or die(mysql_error() . ' L101');$rowUnqId = mysql_fetch_assoc($UnqId);// Retornamos el Id de la llamada para// la actualizacion de los estadosif($rowUnqId['id'] != '')return $rowUnqId['id'];}?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Header Page- [CopyRigth]********************************************************** *//* Turn output buffering on: */ ob_start();header('Content-Type: text/html; charset=ISO-8859-1'); include('dbConn.php'); //incluye el archivo dbConn de autenticacion de las variables usuario//include(\" ../../db/crm.php\" ); include(\" session.php\" ); //incluye la verificacion de sesion# Validate SugarCRM & Create Session Variables//$access = $sugarClass->validate( $_GET['sugaruserid'], $_GET['lang'], $sugarcrmconn ); ?>Campaign Manager /* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Card Verification's Page- [CopyRigth]********************************************************** */if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');/********************************************************************************* * SugarCRM is a customer relationship management program developed by * SugarCRM, Inc. Copyright (C) 2004 - 2008 SugarCRM Inc. * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation with the addition of the following permission added * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, see http://www.gnu.org/licenses or write to the Free * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the \" Powered by * SugarCRM\" logo. If the display of the logo is not reasonably feasible for * technical reasons, the Appropriate Legal Notices must display the words * \" Powered by SugarCRM\" . ********************************************************************************/ /* formulario de la verificacion de la tarjeta de credito */if(isset($_FILES['vcard']['tmp_name'])) {if (!empty($_FILES['vcard']['tmp_name']) && isset($_FILES['vcard']['size']) && $_FILES['vcard']['size'] > 0) {require_once('include/vCard.php');$vcard = new vCard();$record = $vcard->importVCard($_FILES['vcard']['tmp_name'],'Leads');header(\" Location: index.php?action=DetailView&module=Leads&record=$record\" ); exit(); } else {header(\" Location: index.php?action=ImportVCard&module=Leads\" ); exit(); }}else{require_once('XTemplate/xtpl.php');echo \" \n\n\" ;echo get_module_title($mod_strings['LBL_MODULE_NAME'], $mod_strings['LBL_MODULE_NAME'].\" \" .$mod_strings['LBL_IMPORT_VCARD'], true); echo \" \n\n\" ;global $theme;$error_msg = '';$theme_path=\" themes/\" .$theme.\" /\" ;$image_path=$theme_path.\" images/\" ;require_once($theme_path.'layout_utils.php');global $app_strings;global $app_list_strings;global $current_language;$mod_strings = return_module_language($current_language, 'Leads');$xtpl=new XTemplate ('modules/Contacts/ImportVCard.html');$xtpl->assign(\" MOD\" , $mod_strings);$xtpl->assign(\" APP\" , $app_strings);$xtpl->assign(\" IMAGE_PATH\" , $image_path);$xtpl->assign(\" PRINT_URL\" , \" index.php?\" .$GLOBALS['request_string']);$xtpl->assign(\" HEADER\" , $mod_strings['LBL_IMPORT_VCARD']);$xtpl->assign(\" MODULE\" , $_REQUEST['module']);if ($error_msg != ''){$xtpl->assign(\" ERROR\" , $error_msg);$xtpl->parse(\" main.error\" );}$xtpl->parse(\" main\" );$xtpl->out(\" main\" ); }?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : Colombia, Jan 30 2009Description: Index Page- [CopyRigth]********************************************************** */$headerTitle = \" \" ;include('header.php'); //incluye el php de encabezado?> Admin Panel Dialer Config Crear Campaña Listado de Campañas DoNotCall List /* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : Colombia, Jan 30 2009Description: IVR Dialer Page- [CopyRigth]********************************************************** */// revisar el listado de llamadas y // sacar 100 num para marcarinclude('dbConn.php');//include('vardefs.php');include('globalD.php');//require('phpagi.php');//require('phpagi-asmanager.php');// Parametros de configuracionmysql_select_db($dbDialer, $DialerLink);$queryConfig = \" SELECT * FROM config\" ;$Config = mysql_query($queryConfig, $DialerLink) or die(mysql_error());$rowConfig = mysql_fetch_assoc($Config);// consulta las campaigns activas// con rango de operacion en la hora actual// maximo 3 campaign para la presente iteracion$iTimestamp = time();$sFecha = date('Y-m-d', $iTimestamp);$sHora = date('H:i:s', $iTimestamp);mysql_select_db($db, $DialerLink);$queryBroadCast = \" SELECT id FROM campaign\" ;$queryBroadCast .= \" WHERE datetime_init = '$sFecha' \" ;$queryBroadCast .= \" AND estatus = 'A' AND ( (daytime_init '$sHora') \" ;$queryBroadCast .= \" OR (daytime_init > daytime_end AND ('$sHora' $queryBroadCast .= \" AND queue IS NOT NULL\" ;$queryBroadCast .= \" ORDER BY RAND()\" ;$queryBroadCast .= \" LIMIT 0,3\" ;$BroadCast = mysql_query($queryBroadCast, $DialerLink) or die(mysql_error());while($rowBroadCast = mysql_fetch_assoc($BroadCast)){// Campaign actual para trabajar el FOR$campaignId = $rowBroadCast['id'];echo $campaignId . \" \n\" ;// Detalles de la campaign actualmysql_select_db($db, $DialerLink);$queryCamp = \" SELECT * FROM campaign WHERE id=$campaignId\" ;$Camp = mysql_query($queryCamp, $DialerLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);for($i=0; $i{//echo 'Ciclo For '. $i . \" \n\" ;// codigo estatico, debe cambiar con el // Time Zone del Area Code$hr = date(\" H\" );if($hr == '21'){echo 'Son las 9' . \" \n\" ;exit();}// Actualizar las llamadas \" Pegadas\" de la presente llamada// \" Llamada Pegada\" , status Ringing -> con mas de 1 min$currTime = time();$queryRingCall = \" UPDATE calls SET status='Failed', retries=retries+1 WHERE id_campaign='$campaignId' AND status='Ringing' AND TIME_TO_SEC(TIMEDIFF(NOW(), fecha_llamada))>{$rowConfig['hangUp_time']}\" ;echo $queryRingCall . \" \n\" ;//echo $queryRingCall;$RingCall = mysql_query($queryRingCall, $DialerLink) or die(mysql_error());/**********************///echo 'Curr Calls ' . $i . \" \n\" ;// Consultar el numero de llamadas activas de la presente campañamysql_select_db($dbDialer, $DialerLink);$queryCurrCalls = \" SELECT COUNT(*) AS TOTAL FROM calls WHERE status IN ('Placing', 'Ringing') AND id_campaign='$campaignId'\" ;$queryCurrCalls .= \" UNION \" ;$queryCurrCalls .= \" SELECT COUNT(*) AS TOTAL FROM calls WHERE status='Success' AND start_time IS NOT NULL AND end_time IS NULL AND id_campaign='$campaignId'\" ;echo $queryCurrCalls . \" \n\" ;$CurrCalls = mysql_query($queryCurrCalls, $DialerLink) or die(mysql_error());//echo 'Before WhileCurr ' . $i . \" \n\" ;$contCalls = 0 ;while($rowCurrCalls = mysql_fetch_assoc($CurrCalls)){$contCalls += $rowCurrCalls['TOTAL'];}//echo 'After WhileCurr ' . $contCalls . \" \n\" ;// Si hemos excedido el numero max de canales// no podemos generar esta llamada, por consiguiente debemos // pasar a la siguiente iteracion del cicloif($contCalls >= $rowCamp['max_canales']){echo $contCalls . ' -- Max Channels -- ' . $rowCamp['max_canales'] . \" \n\" ;sleep(5);break;}mysql_select_db($dbDialer, $DialerLink);//$queryDial = \" SELECT * FROM calls WHERE SUBSTRING(phone) IN ('305', '786', '954', '754', '561') AND id_campaign='$campaignId' AND status IS NULL AND dnc=0\" ;$queryDial = \" SELECT * FROM calls WHERE id_campaign='$campaignId' AND status IS NULL AND dnc=0 \" ;/*// Agregamos condicion de DNC Interno$queryDial .= \" AND phone NOT IN ( \" ;$queryDial .= \" SELECT AreaCodePhoneNumber FROM CDCenter.DONOTCALL \" ;$queryDial .= \" )\" ;*//*// Agregamos condicion de DNC Federal$queryDial .= \" AND phone NOT IN ( \" ;$queryDial .= \" SELECT AreaCodePhoneNumber FROM CDCenter.DNCClick2MediaCorp \" ;$queryDial .= \" )\" ;$queryDial .= \" AND phone NOT IN ( \" ;$queryDial .= \" SELECT AreaCodePhoneNumber FROM CDCenter.DNCDirectCredit \" ;$queryDial .= \" )\" ;$queryDial .= \" AND phone NOT IN ( \" ;$queryDial .= \" SELECT AreaCodePhoneNumber FROM CDCenter.DNCTelX3m \" ;$queryDial .= \" )\" ;$queryDial .= \" AND phone NOT IN ( \" ;$queryDial .= \" SELECT AreaCodePhoneNumber FROM CDCenter.DNCTelonlineCorp \" ;$queryDial .= \" )\" ;*/$queryDial .= \" ORDER BY RAND() LIMIT 0, {$rowCamp['max_canales']}\" ;//echo 'Query : ' . $queryDial . \" \n\" ;$Dial = mysql_query($queryDial, $DialerLink) or die(mysql_error() . ' L22');$totRowsDial = mysql_num_rows($Dial);if($totRowsDial == 0){mysql_select_db($dbDialer, $DialerLink);$queryDial = \" SELECT * FROM calls WHERE id_campaign=$campaignId AND status NOT IN ('Success', 'Placing', 'Ringing', 'OnQueue', 'OnHold') AND retries $queryDial .= \" ORDER BY RAND() LIMIT 0, {$rowCamp['max_canales']}\" ;//$queryDial .= \" ORDER BY RAND() LIMIT 0, $maxChan\" ;$Dial = mysql_query($queryDial, $DialerLink) or die(mysql_error() . $queryDial . ' -- L30');$totRowsDial = mysql_num_rows($Dial);}if($totRowsDial == 0){// Actualiza el estado de la campaign$queryFinish = \" UPDATE campaign SET estatus='T' WHERE id=$campaignId\" ;$Finish = mysql_query($queryFinish, $DialerLink) or die(mysql_error());}while($rowDial = mysql_fetch_assoc($Dial)){echo 'Phone : ' . $rowDial['phone'] . \" \n\" ;$hr = date(\" H\" );if($hr == '21'){echo 'Son las 9' . \" \n\" ;exit();}//extrae todos los DNC de las bases de datossetDnc('DONOTCALL', $rowDial['phone'], $campaignId, $DialerLink);setDnc('DNCClick2MediaCorp', $rowDial['phone'], $campaignId, $DialerLink);setDnc('DNCDirectCredit', $rowDial['phone'], $campaignId, $DialerLink);setDnc('DNCTelX3m', $rowDial['phone'], $campaignId, $DialerLink);setDnc('DNCTelonlineCorp', $rowDial['phone'], $campaignId, $DialerLink);$extNumb = $rowDial['phone'];$ivrExt = $rowCamp['queue'];$dialAs = $rowCamp['dialAs_exten'];$actionId = cad_alea(10);// Coloca llamada//$apiUrl = \" https://sip.domainname.com/api?cmd=call&dial_first=$extNumb&dial_second=$ivrExt&response_type=xml\" ;$apiUrl = \" {$rowConfig['swvx_url']}/api?cmd=call\" ;$apiUrl .= \" &dial_first=$extNumb&dial_second=$ivrExt\" ;$apiUrl .= \" &admin=1&password={$rowConfig['api_passwd']}\" ;$apiUrl .= \" &dial_as=$dialAs&response_type=xml\" ;$apiUrl .= \" &var_actionId=$actionId&var_CalledNumber=$extNumb\" ;echo $apiUrl;// Actualizar estado de llamadamysql_select_db($dbDialer, $DialerLink);$queryResult = \" UPDATE calls SET status='Placing', fecha_llamada=NOW(), actionId='$actionId' WHERE id={$rowDial['id']} AND id_campaign=$campaignId\" ;$Result = mysql_query($queryResult, $DialerLink) or die(mysql_error() . ' L52' );// Inicia la session con el servidor del webservice$ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from responsecurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, \" & \" )); // use HTTP POST to send form datacurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Returns response data instead of TRUE(1)$resp = curl_exec($ch); //execute post and get resultscurl_close ($ch);$xml = simplexml_load_string($resp);var_dump($xml) . \" \n\" ;if($xml->status == 'success')$status = \" Ringing\" ;else$status = $xml->status;// Actualizar estado de llamadamysql_select_db($dbDialer, $DialerLink);$queryResult = \" UPDATE calls SET status='$status', fecha_llamada=NOW(), retries=retries+1 WHERE id={$rowDial['id']} AND id_campaign=$campaignId\" ;$Result = mysql_query($queryResult, $DialerLink) or die(mysql_error() . ' L52' );}sleep(4);}}mysql_close($DialerLink);?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : Colombia, Jan 30 2009Description: IVR Dialer's Page- [CopyRigth]********************************************************** */// revisa el listado de llamadas y // saca 100 num para marcarinclude('dbConn.php');include('vardefs.php');include('global.php');//require('phpagi.php');//require('phpagi-asmanager.php');$campaignId = \" 9\" ;mysql_select_db($db, $DBLink);$queryCamp = \" SELECT * FROM campaign WHERE id=$campaignId\" ;$Camp = mysql_query($queryCamp, $DBLink) or die(mysql_error());$rowCamp = mysql_fetch_assoc($Camp);//for($i=0; $i{$hr = date(\" H\" );if($hr == '21'){echo 'Son las 9';exit();}/*mysql_select_db($db, $DBLink);//$queryDial = \" SELECT * FROM calls WHERE SUBSTRING(phone) IN ('305', '786', '954', '754', '561') AND id_campaign='$campaignId' AND status IS NULL AND dnc=0\" ;$queryDial = \" SELECT * FROM calls WHERE id_campaign='$campaignId' AND status IS NULL AND dnc=0\" ;$queryDial .= \" LIMIT 0, $maxChan\" ;$Dial = mysql_query($queryDial, $DBLink) or die(mysql_error() . ' L22');$totRowsDial = mysql_num_rows($Dial);if($totRowsDial == 0){mysql_select_db($db, $DBLink);$queryDial = \" SELECT * FROM calls WHERE id_campaign=$campaignId AND status NOT IN ('Success', 'Placing', 'Ringing', 'OnQueue', 'OnHold') AND retries $queryDial .= \" LIMIT 0, $maxChan\" ;$Dial = mysql_query($queryDial, $DBLink) or die(mysql_error() . ' L30');$totRowsDial = mysql_num_rows($Dial);}$rowDial = mysql_fetch_assoc($Dial);$extNumb = $rowDial['phone'];*/// Colocar llamada//$apiUrl = \" https://sip.domainname.com/api?cmd=call&dial_first=$extNumb&dial_second=$ivrExt&response_type=xml\" ;$actionId = cad_alea(10);$extNumb = \" 786xxxxxxx\" ;$apiUrl = \" https://sip.domainname.com/api?cmd=call\" ;$apiUrl .= \" &dial_first=$extNumb&dial_second=$ivrExt\" ;$apiUrl .= \" &admin=1&password=48d456e0a08081ee9\" ;$apiUrl .= \" &dial_as=8001&response_type=xml\" ;$apiUrl .= \" &var_actionId=$actionId&var_dialedNumber=$extNumb\" ;echo $apiUrl . \" \n\" ;/*// Actualizar estado de llamadamysql_select_db($db, $DBLink);$queryResult = \" UPDATE calls SET status='Placing', fecha_llamada=NOW(), id_agent='800' WHERE id={$rowDial['id']} AND id_campaign=$campaignId\" ;$Result = mysql_query($queryResult, $DBLink) or die(mysql_error() . ' L52' );*/// Inicia la session con el servidor del webservice$ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_HEADER, 0); // set to 0 to eliminate header info from responsecurl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Returns response data instead of TRUE(1)curl_setopt($ch, CURLOPT_POSTFIELDS, rtrim( $fields, \" & \" )); // use HTTP POST to send form datacurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Returns response data instead of TRUE(1)$resp = curl_exec($ch); //execute post and get resultsvar_dump($resp) . '\n';curl_close ($ch);$xml = simplexml_load_string($resp);var_dump($xml) . '\n';if($xml->status == 'success')$status = \" Ringing\" ;/*// Actualizar estado de llamadamysql_select_db($db, $DBLink);$queryResult = \" UPDATE calls SET status='$status', fecha_llamada=NOW() WHERE id={$rowDial['id']} AND id_campaign=$campaignId\" ;$Result = mysql_query($queryResult, $DBLink) or die(mysql_error() . ' L52' );sleep($callOffset);*/}?>/* *****************************************************Company : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Main Page - [CopyRigth]********************************************************** *//* Turn output buffering on: */ ob_start();include(\" ../../db/crm.php\" ); include(\" ../global/obj/variable.php\" ); # Validate SugarCRM & Create Session Variables$access = $sugarClass->validate( $_GET['sugaruserid'], $_GET['lang'], $sugarcrmconn ); # Definicion del valor de las variables del lenguajeif ( $_SESSION['sugarlang'] == \" esp\" ) { include(\" language/esp_es.php\" ); } else { include(\" language/eng_us.php\" ); } ?> \" .$_SESSION['sugarname'].\" \" ; ?>frameborder=\" 0\" style=\" width:100%;margin-top:0;visibility:visible\" >/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : Colombia, Jan 30 2009Description: Save Answer UniqueId Page- [CopyRigth]********************************************************** */include('dbConn.php');$actionId = $_GET['actionId'];$uniqueId = $_GET['uniqueId'];mysql_select_db($dbDialer, $DialerLink);$queryAnswer = \" UPDATE calls SET status='Success', start_time=NOW(), uniqueid='$uniqueId' WHERE actionId='$actionId'\" ;$Answer = mysql_query($queryAnswer, $DialerLink) or die(mysql_error());?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : Colombia, Jan 30 2009Description: Save Answer Page- [CopyRigth]********************************************************** */include('dbConn.php');// variables$callId = $_GET['callId'];$campId = $_GET['campId'];$phone = $_GET['phone'];$result = $_GET['result'];//actualiza la base de datos mysql_select_db($db, $DBLink);$queryResult = \" UPDATE calls SET status='$result', retries=retries+1 WHERE id=$callId AND id_campaign=$campId AND $phone='$phone'\" ;$Result = mysql_query($queryResult, $DBLink) or die(mysql_error());//salva los datosecho \" \n\" ;echo \" alert('Datos Salvados...!!');\n\" ;echo \" parent.getEle('callId').value = '';\n\" ;echo \" parent.getEle('phone').value = '';\n\" ;echo \" parent.getEle('dispoCode').value = '';\n\" ;echo \" parent.getEle('result').value = '';\n\" ;echo \" parent.getEle('TdPhoneNumber').childNodes[0].nodeValue = '';\n\" ;echo \" \n\" ;?>/* *****************************************************Author : Development DepartmentCompany : TelOnline Corp www.telonlinecorp.comDate : USA/Colombia, Jan 30 2009Description: Campaign's Save Page- [CopyRigth]********************************************************** *//*function getDnc($table, $phone, $DBLink){$queryDNC = \" SELECT AreaCodePhoneNumber FROM CDCenter.$table WHERE AreaCodePhoneNumber='$phone'\" ;$DNC = mysql_query($queryDNC, $DBLink) or die(mysql_error() . ' L6');$totRowsDNC = mysql_num_rows($DNC);if($totRowsDNC > 0)$dnc = \" 1\" ;else$dnc = \" 0\" ;return $dnc;}*/include('dbConn.php');include('globalD.php');//ingresa dentro de la base de datos actual todos los datos suministrados.mysql_select_db($dbDialer, $DialerLink) or die(mysql_error());$insertSql = \" INSERT INTO campaign (id, name, datetime_init, datetime_end, daytime_init, daytime_end, retries, queue, max_canales, estatus, dialAs_exten) \" ;$insertSql .= \" VALUES ({$_POST['id']}, '{$_POST['nombre']}', '{$_POST['fecha_ini']}', '{$_POST['fecha_fin']}', '{$_POST['hora_ini']}', '{$_POST['hora_fin']}', '{$_POST['retries']}', '{$_POST['queue']}', '{$_POST['max_canales']}', '{$_POST['estatus']}', '{$_POST['dialAs_exten']}' )\" ;$insertSql .= \" ON DUPLICATE KEY UPDATE datetime_init='{$_POST['fecha_ini']}', datetime_end='{$_POST['fecha_fin']}', daytime_init='{$_POST['hora_ini']}', daytime_end='{$_POST['hora_fin']}', retries='{$_POST['retries']}', queue='{$_POST['queue']}', max_canales='{$_POST['max_canales']}', estatus='{$_POST['estatus']}', dialAs_exten='{$_POST['dialAs_exten']}'\" ;$result = mysql_query($insertSql, $DialerLink) or die(mysql_error() . ' L23');if(!empty($_FILES['call_file']['tmp_name']))CSV2DB('call_file');$dncCont = 0;$dncFedCont = 0;function CSV2DB($filename){global $DialerLink, $dbDialer, $dncFedCont, $dncCont;if (FALSE == empty($_FILES[$filename]['tmp_name'])){ $row = 1; $handle = fopen($_FILES[$filename]['tmp_name'], \" r\" ); while (($data = fgetcsv($handle, 1000, \" ,\" ))!== FALSE){ $num = count($data); // echo \" $num fields in line $row: