NOTA: No subir módulos o actualizaciones que no se hayan probado con anterioridad, esto podría ocasionar daños irreparables y la re-instalación de Elastix. Instalación Standar de Helastix 64bits Versión Estable http://ufpr.dl.sourceforge.net/project/elastix/Elastix%20PBX%20Appliance%20Software/2. 2.0/Elastix-2.2.0-x86_64-bin-01nov2011.iso 1. Instalación. Instalación Estándar para sistema Operativos Centos, muy gráfica e intuitiva, no requiere explicación. 2. Configuración de RED y DNS #setup #reboot #ifconfig Verificar que haya tomado la configuración deseada, el DNS suele no tomarlo en la primera configuración. Se recomienda siempre utilizar el setup para la configuración de red para no originar conflictos en el sistema operativo. 3. Se actualiza: Actualizar con yum #yum update –y “-y da si a todo” #yum install mlocate –y #yum install htop –y 4. Cambiar el códec de las grabaciones Elastix/PBX/PBX configuración/Configuración General/Call recording format. gsm gsm: es el de los que tiene el nivel de compresión más alto Habilitar el Dialing Options Asterisk Dial command options: “tr” Salida=> Asterisk Outbound Dial command options: “Tt” “ t “ : t Permite al que llama transferir una llamada usando la tecla # (o la tecla que se haya onfigurado para esta funcionalidad en el archivo features.conf o por medio de Feature Codes). Comentar que normalmente para realizar las transferencias de llamadas se acostumbran a utilizar las teclas que los terminales tienen para dicha función. Si disponemos de una extensión analógica esta opción nos puede ir bien. “ T ”: T Permite transferir una llamada pulsando la tecla # al que llama (quien origina la llamada) “ r ”: r Emula el tono de llamada al que llama (no es recomendable usar esta opción para llamadas salientes) “w”: w Permite al que llama comenzar a gravar la llamada pulsando las teclas *1 (o la que se haya configurado en el fichero features.conf) “W”: w : Permite al que llama comenzar a gravar la llamada pulsando les teclas *1 (o la que se haya configurado en el fichero features.conf) 5. Cambio de Logos: Para cambiar los logos: => /var/www/html/images/logo_elastix_new3.gif => /var/www/html/images/logo_elastix.png) =>/var/www/html/favicon.ico 6. Ampliación de los menús de monitoreo y Asterisk File Editor => /var/www/html/modules/monitoring/index.pnp Línea 236: $limit = 20; por $limit = 50; Comentar las siguientes líneas para evitar que borren los grabaciones Línea 93 // case 'delete': // $content = deleteRecord($smarty, $module_name, $local_templates_dir, $pDB, $pDBACL, $arrConf, $arrLang); // break; =>/var/www/html/modules/file_editor/index.php Línea: 119 $total = count($arrData); $limit = 25; $offset = 0; por $total = count($arrData); $limit = 300; $offset = 0; =>/var/www/html/modules/cdrreport/index.php Línea 265: $limit = 20; => $limit = 200; Comentar las siguientes líneas para evitar que borren los reports Línea 188 // if (isset($_POST['delete'])) { //if(!isset($sExtension) || $sExtension == "" && !$pACL>isUserAdministratorGroup($_SESSION['elastix_user'])){ // $smarty->assign(array( // 'mb_title' => _tr('ERROR'), // 'mb_message' => _tr("Your username does not have any extension assigned."), //)); // }else{ // if($paramFiltro['date_start'] <= $paramFiltro['date_end']){ // $r = $oCDR->borrarCDRs($paramFiltro); // if (!$r) $smarty->assign(array( // 'mb_title' => _tr('ERROR'), // 'mb_message' => $oCDR->errMsg, // )); // }else{ // $smarty->assign(array( // 'mb_title' => _tr('ERROR'), // 'mb_message' => _tr("Please End Date must be greater than Start Date"), // )); // } // } // } =>/var/www/html/modules/group_permission/index.php Línea 338: $limit = 25; port $limit = 200;) 7. Habilitar usuario como administrador Para lograr que un grupo no administrador pudiera explorar el CDR y las grabaciones, sin tener que incorporar todas las opciones en el panel, hemos tenido que modificar un poco una función de la librería paloSantoACL.class.php, añadiendo la línea if ($username == “operador”) $is=1; a la función isUserAdministratorGroup. /var/www/html/libs/paloSantoACL.class.php linea 905 function isUserAdministratorGroup($username) { $is=false; $idUser = $this->getIdUser($username); if($idUser){ $arrGroup = $this->getMembership($idUser); //$is = array_key_exists(‘administrator’,$arrGroup); } if ($username=="Alfons") $is=1; return $is; } Se habilito un usuario para tener permisos de administrador pero con las restricciones del grupo en el cual se definió. 8. Modificar el demo para que no interfiera con la extensión 1234 Editor de Elastix : BPX/tolos/Asterisk File Editor Trabajar desde Tool – Asterisk File Editor Cambiar extensión demo: /etc/asterisk/extensión_custom.conf 1234 => 12345 [from-internal-custom] exten => 12345,1,Playback(demo-congrats) exten => 12345,2,Hangup() exten => h,1,Hangup() include => agentlogin include => conferences include => calendar-event include => weather-wakeup ; extensions can dial 1234 9. Modificar contraseña del Chan Spy En extensions_override_freepbx.conf (Poner contraseña en la configuración de 555 chanspy) ;[app-chanspy] ;include => app-chanspy-custom ;exten => 555,1,Macro(user-callerid,) ;exten => 555,n,Answer ;exten => 555,n,Authenticate(753) ;exten => 555,n,Wait(1) ;exten => 555,n,ChanSpy() ;exten => 555,n,Hangup ; end of [app-chanspy] No manejar Agregar lo siguiente en extensión_custom.conf [app-chanspy-custom] exten => 5551,1,Answer exten => 5551,n,Authenticate(8523) -? colocar este valor y cambiar el numero de orden exten => 5551,n,Wait(1) exten => 5551,n,Goto(custom-app-enh-chanspy,s,1) exten => 5551,n,Hangup ; end of [app-chanspy-custom] [custom-app-enh-chanspy] exten => s,1,BackGround(please-enter-the) exten => s,n,Read(SPYNUM|extension) exten => s,n,ChanSpy(SIP/${SPYNUM}|wv4) ;end of [custom-app-enh-chanspy] Agregar lo siguiente en extensions_override_freepbx.conf ó extensions_override_elastix.conf: [app-chanspy] include => app-chanspy-custom exten => 555,1,Authenticate(1234) ? colocar la clave deseada exten => 555,n,Read(SPYNUM,extension) exten => 555,n,ChanSpy(SIP/${SPYNUM},wq) Luego al final de la linea agregar: include => app-chanspy include => app-chanspy-custom ; end of [app-chanspy] 10. Configuraciones SIP en FreePBX Elastix Versión 2.2 Corregir el error que aparece borrando del archivo especificado de la configuración y colocándola en Other SIP Settings, al final de la configuración SIP del FreePBX Configurar NAT Según Oficina. “Ver archivos Adjuntos, solo Coris” Se habilitan solo los siguientes codecs de audio: “alaw”, “ulaw” y “gsm”. En Language se pone “es” para que quede en español 11. Configuraciones IAX2 en FreePBX Elastix Versión 2.2 Corregir el error que aparece borrando del archivo especificado de la configuración y colocándola en Other SIP Settings, al final de la configuración SIP del FreePBX Se habilitan solo los siguientes codecs de audio: “alaw”, “ulaw” y “gsm”. En Language se pone “es” para que quede en español En Other IAX Settings: calltokenoptional = 0.0.0.0/0.0.0.0 se definen las IP permitidas maxcallnumbers =16382 12. Instalación del PhpMyAdmin, según manual. Descargar la versión más reciente del phpMyAdmin versíón 2, (par elastix 2.0) - Copiar el contenido en la carpeta /var/www/html/modules/dbadmin -Crear copia del archivo ejemplo de configuración: /var/www/html/modules/dbadmin/config.sample.inc.php guardarlo como: /var/www/html/modules/dbadmin/config.inc.php Copiar el archivo ó Modificar la línea 29: $cfg['Servers'][$i]['auth_type'] = 'cookie'; por $cfg['Servers'][$i]['auth_type'] = 'http'; para acceder al modulo : <dirección de la planta>/modules/dbadmin 13. Instalación del Fop2. – Descargar Modulo Addons – > FOP2 14. Configuración de Milliwatt Agregar en el archivo etc/asterisk/extensions_custom.conf ;Milliwatt [from-internal-custom] exten => 5556,1,Answer exten => 5556,n,Milliwatt() exten => 5556,n,Hangup ;end of [Milliwatt] Permite hacer una prueba de tono contra la planta para saber si hay pérdida de paquetes y verificar la calidad de las llamadas hasta la planta. ;Monos [from-internal-custom] exten => 5557,1,Answer exten => 5557,n,Playback(es/tt-monkeys) exten => 5557,n,Hangup ;end of [Monos] 15. Música en Espera por extensiones Esto permite poner musca en espera personalizada por extensiones, por defecto queda la configuración global, pero se añade una pestaña nueva en cada extensión para configurar la que queramos. Línea 3761 Línea 5921 Ver manual Elastix al ritmo del Merengue pag. 254. 16. Cambio de Clave para ARI – No aplica Agregar en: /etc/amportal.conf ARI_ADMIN_USERNAME=admin ARI_ADMIN_PASSWORD=/*Clave Nueva*/ 17. Cambiar música en espera Utilizar el manual Convertir Audio con SOX Compatible con Asterisk.doc, para realizar la conversión de la música en espera y copiar el archivo resultante en la carpeta: /var/lib/asterisk/mohmp3/ Eliminar los que no se deseen. 18. Aplicaciones FreePBX Instalar solo aplicaciones que requieran actualización y que se hayan comprobado en laboratorio. Custom Contexts: Permite la creación de contextos personalizados por extensión. Bulk Extensions: Permite importar/exportar listados de extensiones, con todas las configuraciones. Requiere la instalación del paquete desde FreePBX 22. Instalar Fail2Ban. Instalar según manual adjunto. 23. Instalación Custom Extension Este módulo permite personalizar contextos por grupos y asignarlo a extensiones. Instalar el modulo desde FreePBX. Lo primero es crear uno, en nuestro caso para Argentina: Context: 4piso Description: Contexto del 4 Piso Aplicar y guardar cambios. Colocar las reglas de marcado que serán permitidas: Dial Rules: XXX XXXX *231+XXXXX. = > Opciones de Asterisk = > Extensiones. = > Añadir prefijo para poder direccionarlo por la troncal que queramos en las rutas de salida. Set All To: Allow => Para que nos seleccione como activos todos los contextos que son mostrados en este módulo. Como lo único que se quiere es definir una troncal específica para ciertas extensiones no haremos más ajustes por el momento. Se debe modificar el functions.inc.php del módulo de Custom Context, para poder ingresar los prefijos Ejemplo: *231+XXXXX, ya que por defecto no lo permite. /var/www/html/admin/modules/customcontexts/functions.inc.php Línea 202 customcontexts_get_config Agregar lo siguiente después de $dialpattern = array_values Línea 249 Las partes en azul fueron adicionadas. //leliogamada inicio $pos3=""; //Deja la variable en blanco cuando no se le agregan prefijos if (false !== ($pos2 = strpos($pattern,"+"))) { // we have a + meaning to not pass the digits on // (ie, 9+NXXXXXX should use the pattern _9NXXXXXX but only pass NXXXXXX, not the leading 9) $pos3 = substr($pattern,0,$pos2); // copia el número de caracteres optenido en $pos2 $pattern = str_replace("+","",$pattern); // remove all +'s $pattern = str_replace($pos3,"",$pattern); // remove all $pos3 } if (!preg_match("/^[0-9*]$/",$pattern)) { // note # is not here, as asterisk doesn't recoginize it as a normal digit, thus it requires _ pattern matching // it's not strictly digits, so it must have patterns, so prepend a _ $pattern = "_".$pattern; } $ext->add($context,$pattern, '', new ext_goto('1',$pos3.'${'.$exten.'}',$context.'_rulematch')); //se adiciona la variable $pos3. que indica el prefijo adicional //leliogamada final Una vez realizado lo anterior vamos a custom context y guardamos nuevamente los cambios. Si todo salio bien debería quedar algo similar a esto en extensions_additional.conf: Al final podemos ver como se agrega el prefijo 200 a la variable Extension de manera automática. NOTA: Para aplicarlo a las extensiones simplemente se ingresa por Elastix a la configuración de la extensión que se quiera afectar y en la pestaña Custom Context que fue agregada seleccionamos que contexto utilizara dicha extensión, en nuestro caso contexto del 4 piso [4piso] include => 4piso-custom include => from-internal-custom include => from-internal-additional include => parkedcalls include => ext-paging include => outrt-9 include => app-cf-busy-off include => outrt-7 include => app-cf-busy-off-any include => outrt-8 include => app-cf-busy-on include => outrt-3 include => app-cf-off include => outrt-4 include => app-cf-off-any include => outrt-5 include => app-cf-on include => outrt-6 include => app-cf-unavailable-off include => outrt-2 include => app-cf-unavailable-on include => outrt-10 include => app-cf-toggle include => app-dialvm include => app-vmmain include => app-dnd-off include => app-dnd-on include => app-dnd-toggle include => app-speeddial include => app-dictate-record include => app-dictate-send include => app-pbdirectory include => app-gabcast include => ext-group include => grps include => app-calltrace include => app-directory include => app-echo-test include => app-speakextennum include => app-speakingclock include => ext-queues include => app-queue-toggle include => ext-meetme include => app-blacklist include => app-fax include => app-callwaiting-cwoff include => app-callwaiting-cwon include => vmblast-grp include => app-recordings include => app-fmf-toggle include => ext-findmefollow include => fmgrps include => app-userlogonoff include => app-pickup include => app-zapbarge include => app-chanspy include => ext-test include => ext-local include => outbound-allroutes include => 4piso_bad-number include => bad-number exten => _XXX,1,Goto(4piso_rulematch,${EXTEN},1) exten => _XXXX,1,Goto(4piso_rulematch,${EXTEN},1) exten => _XXXXX.,1,Goto(4piso_rulematch,200${EXTEN},1) exten => s,1,Macro(hangupcall,) exten => h,1,Macro(hangupcall,) ; end of [4piso] 24. Activar ftp Arrancamos el servicio #service vsftpd start Iniciando vsftpd para vsftpd: [ OK ] # chkconfig --list Muestra un listado de los servicios y cuales están activos. Debemos activar vsftpd en los siguientes servicios: 5, 3, 4, 5 #chkconfig --level 2 vsftpd on #chkconfig --level 3 vsftpd on #chkconfig --level 4 vsftpd on #chkconfig --level 5 vsftpd on Editar el archivo /etc/vsftpd/vsftpd.conf anonymous_enable=NO chroot_list_enable=YES # (default follows) chroot_list_file=/etc/vsftpd/chroot_list Para que solo se permitan los usuarios que están en la jaula chroot_list Se crea el usuario y se le asigna el home: #adduser --home /backups/ backups carpeta backups y usuario backups 25. Configuración Para Ordenar Grabaciones de llamadas y acceso desde Elastix Crear el script en Linux con las siguientes características. Script_inicial.sh for i in $( find -name "*.???" -print |xargs -i{} ls {} ); do DATE=`date -r $i +'%Y/%m/%d'` mkdir -p $DATE mv $i ./$DATE done Corremos este para ordenar las grabaciones que existan en el momento. Crear el script en Linux con las siguientes características. Script_cron.sh cd /var/spool/asterisk/monitor for i in $( find -maxdepth 1 -name "*.???" -print |xargs -i{} ls {} ); do DATE=`date -r $i +'%Y/%m/%d'` mkdir -p $DATE mv $i ./$DATE done Con este Script se programa la tarea en el crontab -e #crontab –e 0 */1 * * * /var/spool/asterisk/monitor/script_cron.sh Esto hace correr el scrip cada hora todos los días. La siguiente configuración en el módulo de monitoring de Elastix permitirá accesar las grabaciones en las carpetas que se organizaran por fecha. El archivo a modificar es: /var/www/html/modules/monitoring/index.php Agregar o modificar Línea 266, en la función reportMonitoring $arrTmp[1] = date('d M Y',strtotime($value['calldate'])); $arrTmp[2] = date('H:i:s',strtotime($value['calldate'])); //Alfons-Se crea una variable con la información de la fecha de creación del archivo en el formato año, mes, día //Inicio fecha_archivo $fecha_archivo[1]= date('Y/m/d',strtotime($value['calldate'])); //Fin fecha_archivo if(!isset($value['src']) || $value['src']=="") Línea 305, en la función reportMonitoring agregar lo siguiente (azul) if ($namefile != 'deleted') { //Alfons-Se agrega la variable con la fecha del archivo al link que se mostrara en el reporte &fecha_dir=$fecha_archivo[1] $recordingLink = "<a href=\"javascript:popUp('index.php?menu=$module_name&action=display_record&id=$file&raw mode=yes&fecha_dir=$fecha_archivo[1]',350,100);\">"._tr("Listen")."</a>&nbsp;"; //Alfons-Se agrega la variable con la fecha del archivo al link que se mostrara en el reporte &fecha_dir=$fecha_archivo[1] $recordingLink .= "<a href='?menu=$module_name&action=download&id=$file&rawmode=yes&fecha_dir=$fecha_arc hivo[1]' >"._tr("Download")."</a>"; $recordingLink .= "<a href='?menu=$module_name&action=download&id=$file&rawmode=yes&fecha_dir=$fecha_arc hivo[1]' >"._tr("Download")."</a>"; } else { $recordingLink = ''; } $arrTmp[7] = $recordingLink; $arrData[] = $arrTmp; } Línea 359, en la función downloadFile agregar lo siguiente (azul) //Se modifica la variable $path y se le agrega $fecha_archivo y "/" para que al descargar tome la ruta que se le dio en linux Ejemplo: /2011/12/28 //el resto de la ruta es el que este por defecto //Inicio Path $fecha_archivo = getParameter("fecha_dir"); $path = $path_record.$file; //línea original $caracter_esp="/"; $path = $path_record.$fecha_archivo.$caracter_esp.$file; //Fin Path Línea 423, en la función display_record agregar lo siguiente (Azul) $path_record = $arrConf['records_dir']; //Alfons-Se crea la variable fecha_archivo_play en esta funsion display_record para cargar en esta los datos de la fecha de creación del archivo $fecha_archivo_play = getParameter("fecha_dir"); $sContenido=""; Línea 435, en la función downloadFile agregar lo siguiente (azul) //Alfons-Se pone $fecha_dir=fecha_archivo_play al link que se le envia al popup de Java. $sContenido=<<<contenido <embed src='index.php?menu=$module_name&action=download&id=$file&rawmode=yes&fecha_dir=$f echa_archivo_play' width=300, height=20 autoplay=true loop=false></embed><br> contenido; 26. Cambio CRD Ver Archivo Adjunto. 27. Configuración de Troncales Dundi Ver Archivo Adjunto. 28. Exportación de CDR de más de 40000 registros /etc/php.d/elastix.ini ;Enable greater limits for FreePBX upload_max_filesize = 20M memory_limit = 128M ;Enable greater limits for FreePBX upload_max_filesize = 500M memory_limit = 1024M 29. Cambio en el IVR para aceptar marcación a otros BPX /etc/asterisk/extensions_override_freepbx.conf Agregar: #include extensions_override_alfons.conf Crear el archivo: /etc/asterisk/extensions_override_alfons [ivr-3-custom] exten => _XXXX,1,SayDigits(${EXTEN::}) exten => _XXXX,n,GotoIf($["${EXTEN}" < "9999"]?uno:dos) exten => _XXXX,n(uno),Dial(Local/${EXTEN}@from-internal) exten => _XXXX,n(dos),Playback(silence/1&pbx-invalid) exten => _XXXX,n(dos),Goto(ivr-3,i,1) exten => _XXXX,n,Hangup NOTA: No subir módulos o actualizaciones que no se hayan probado con anterioridad, esto podría ocasionar daños irreparables y la re-instalación de Elastix.