SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
DISEÑANDO UNA SOLUCIÓN
MULTI-TENANT CON ASTERISK
JON BONILLA
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
CONTEXTO
‣ VoIP2day2009: El Rombo
‣ 4K2012: Solución softswitch para operadores
‣ EW2013: Arquitecturas de operador de HostedPBX
‣ EW2014: Elastix3 (ElastixMT)
‣ EW2015: Escalabilidad de sistemas VoIP
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
BASADO EN HECHOS REALES
‣ PekePBX
‣ ¿Por qué tuve que desarrollarla?
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
OBJETIVOS
‣ Multitenant (multiempresa)
‣ Completamente orientada a ser manejada por el
usuario: 100% web.
‣ No soporte
‣ No personal cualificado
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
OBJETIVOS
‣ Seguro de vida: Tecnologías usadas
‣ Debian stable
‣ Asterisk 11
‣ Laravel
‣ AngularJS
‣ MySQL



http://www.barnetik.com
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE I: DB
‣ Schema DB. Conceptos y relaciones:
‣ DID, Empresa, 3 niveles de usuario y 3 niveles de
acceso
‣ Destinos y aplicaciones: Usuario, IVR, locuciones,
Sala de conferencia, Moh, Voicemail, Grupos de
extensiones, Números externos, colas de
atención… etc
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE I: DB
‣ Ast_cdr
‣ Ast_musiconhold
‣ Ast_queues
‣ Ast_sippeers
‣ Ast_sipregs
‣ Ast_voicemail
‣ Ast_voicemail_message
‣ doctrine_migration_versions
‣ ext_log_entries
‣ ext_translations
‣ sipdoc_prefijos_internacional
‣ sipdoc_prefijos_nacional
‣ Peke_CDR
‣ Peke_Call_Record
‣ Peke_Company
‣ Peke_Company_Voicemail
‣ Peke_ConferenceRoom
‣ Peke_DID
‣ Peke_Destination
‣ Peke_Group
‣ Peke_Group_User
‣ Peke_IVR
‣ Peke_MOH
‣ Peke_Processing
‣ Peke_SoundPrompt
‣ Peke_User
‣ Peke_User_Voicemail
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
‣ Web MINIMALISTA. No FreePBX
‣ No doc!
‣ Cada rol tiene sus tareas. 3 niveles de acceso
‣ Minimiza las opciones
‣ Responsive!
‣ Dos objetivos: Vender y evitar soporte
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
‣ Administrador de empresa: Le gustan los colores y
las animaciones.
‣ Lo más importante es la configuración de entrantes
INTUITIVA. Son muchas opciones y a más
opciones más fácil es complicar la web.
‣ Recordamos objetivo: No debe tener que
llamarnos en el día a día.
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
‣ Mención aparte para el CDR
‣ El CDR VENDE
‣ Tratad por todos los medios no facturar con él.
Usad un class5 para facturar por trunk de empresa
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
‣ El rol usuario ha de sentirse cómodo
‣ Con el tiempo, querremos que la web de la PBX
sea un tab permanente en el browser.
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE II: LA WEB
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE III: ASTERISK
‣ La configuración se adapta a la web, al db
schema.
‣ Tenemos toda la info en DB → Realtime
‣ ODBC por supuesto
‣ Elegimos Asterisk 11. Y puede que nos
arrepintamos
‣ Cuanto menos carguemos menos cosas pueden
fallar: modules.conf
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE III: ASTERISK
‣ Dialplan
‣ No tiene sentido tener un contexto por empresa.
Debemos separar a nivel de variable
‣ Las entrantes no se pueden discriminar por trunk. Hay
que hacerlo por DID
‣ => Dialplan unificado para todas las empresas.
‣ from-pstn
‣ from-users
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
DESARROLLO PARTE III: ASTERISK
‣ Dialplan
‣ Tenemos que estar leyendo configuraciones en base
de datos continuamente
‣ La mayor parte de las lecturas de DB no requieren
tratamientos complejos sino setear variables de canal
‣ => func_odbc
[from-pstn]
exten => _X.,1,Verbose(Llamada entrante desde la PSTN ${CHANNEL(peername)} al número ${EXTEN})
same => n,Set(CDR(type)=incoming)
same => n,Set(CDR(src_callerid)=${CALLERID(num)})
same => n,Set(CDR(dst_dialed)=${EXTEN})
same => n,Gosub(sub_geolocation_caller,start,1)
same => n,Set(ARRAY(EMPRESA,DIDCUSTOM,DIDID)=${ODBC_DIDEMPRESA(${EXTEN})})
same => n,GotoIf($[${EXISTS(${EMPRESA})}]?:noasignado,1)
same => n,Set(CDR(dst_company)=${EMPRESA})
same => n,Verbose(El DID está asignado a la empresa ${EMPRESA})
same => n,GoSub(sub_record_call,start,1(${EMPRESA},${CDR(type)},${EXTEN},${CALLERID(num)}))
same => n,GotoIf($["${DIDCUSTOM}" == "1"]?sub_custom_${EMPRESA}_${EXTEN},start,1)
same => n,Set(IDTRATAMIENTO=${ODBC_DIDCONFIGURED(${DIDID})})
same => n,GotoIf($[${EXISTS(${IDTRATAMIENTO})}]?:notratamiento,1)
same => n,Agi(peke_processing.php,${IDTRATAMIENTO})
same => n,GotoIf($[${EXISTS(${PROMPT})}]?:destino)
same => n,Playback(${SOUNDPATH}/${EMPRESA}/${PROMPT})
same => n(destino),GoSub(sub_destination,start,1(${EMPRESA},${DESTINATION}))
exten => noasignado,1,Verbose(DID no encontrado o no asignado a empresa)
same => n,Hangup()
exten => notratamiento,1,Verbose(DID no está configurado)
same => n,Hangup()
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
RELEASES
‣ Tenemos la ventaja de controlar todo el
ecosistema. Podemos hacer releases y upgrades
de forma muy sencilla: Hagamos muchas y
pequeñas.
‣ Las nuevas funcionalidades han de venir
determinadas por la necesidad de la solución y no
por la necesidad de una empresa o la de un
comercial. Hay que saber decir NO
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
RELEASES
‣ Asume que vas a reescribir todo el dialplan al
menos dos veces. No esperes a tenerlo todo
perfecto para sacar la versión 1.0
‣ Prepara un roadmap y prepárate para no poder
cumplirlo porque el mercado te dictará las
necesidades. Sacarlo a producción es el mejor
roadmap.
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
FUTURAS RELEASES
‣ Cuando las funciones PBX ya estén estables y maduras…
Salgamos de la PBX y hagamos funciones diferenciadoras:
‣ Módulos:
‣ Salas de MultiVideoconferencia
‣ Chat, compartición de pantalla… centro de comunicaciones de
la empresa: Fidelización.
‣ Integración con sistema de soporte
‣ Integración con CRMs
‣ Etc...
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
FUTURAS RELEASES
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
ESCALABILIDAD
‣ Limitados por: CAPS, Registros, Keepalives
‣ Sacamos los registros a un proxy
‣ Balanceamos los usuarios por nodo de PBX
‣ Sacamos la DB a exterior y compartimos entre todos
los nodos
‣ Sacamos la web al exterior
‣ => Proxy lb/registrar + MySQL + Web Server + N
nodos asterisk para escalar
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
ESCALABILIDAD
DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK
PREGUNTAS?
Jon Bonilla
manwe@sipdoc.net
@jbmanwe

Más contenido relacionado

La actualidad más candente

Android起動周りのノウハウ
Android起動周りのノウハウAndroid起動周りのノウハウ
Android起動周りのノウハウ
chancelab
 

La actualidad más candente (20)

Ansible Automation Platform.pdf
Ansible Automation Platform.pdfAnsible Automation Platform.pdf
Ansible Automation Platform.pdf
 
Network Automation with Ansible
Network Automation with AnsibleNetwork Automation with Ansible
Network Automation with Ansible
 
Rust programming-language
Rust programming-languageRust programming-language
Rust programming-language
 
Introduction To Docker
Introduction To  DockerIntroduction To  Docker
Introduction To Docker
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
 
Effective terraform
Effective terraformEffective terraform
Effective terraform
 
Kubernetes
KubernetesKubernetes
Kubernetes
 
AstriCon 2017 - Docker Swarm & Asterisk
AstriCon 2017  - Docker Swarm & AsteriskAstriCon 2017  - Docker Swarm & Asterisk
AstriCon 2017 - Docker Swarm & Asterisk
 
카카오가 가지고 있는 음성처리 기술
카카오가 가지고 있는 음성처리 기술카카오가 가지고 있는 음성처리 기술
카카오가 가지고 있는 음성처리 기술
 
History & Practices for UniRx(EN)
History & Practices for UniRx(EN)History & Practices for UniRx(EN)
History & Practices for UniRx(EN)
 
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
實現 Angular, Docker 與 Kubernetes 持續部署 (NG+2020)
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
Guaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in RustGuaranteeing Memory Safety in Rust
Guaranteeing Memory Safety in Rust
 
Btrfs + Snapper + Samba で作る「以前のバージョン」に戻せるファイルサーバー
Btrfs + Snapper + Samba で作る「以前のバージョン」に戻せるファイルサーバーBtrfs + Snapper + Samba で作る「以前のバージョン」に戻せるファイルサーバー
Btrfs + Snapper + Samba で作る「以前のバージョン」に戻せるファイルサーバー
 
Terraform
TerraformTerraform
Terraform
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...
 
NGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA BroadcastNGINX: Basics & Best Practices - EMEA Broadcast
NGINX: Basics & Best Practices - EMEA Broadcast
 
Android起動周りのノウハウ
Android起動周りのノウハウAndroid起動周りのノウハウ
Android起動周りのノウハウ
 
Kubernetes Controller for Pull Request Based Environment
Kubernetes Controller for Pull Request Based EnvironmentKubernetes Controller for Pull Request Based Environment
Kubernetes Controller for Pull Request Based Environment
 
NGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEANGINX ADC: Basics and Best Practices – EMEA
NGINX ADC: Basics and Best Practices – EMEA
 

Destacado

Escalado de sistemas VoIP Jon Bonilla, Consultor Especializado en VoIP
Escalado de sistemas VoIP Jon Bonilla, Consultor Especializado en VoIPEscalado de sistemas VoIP Jon Bonilla, Consultor Especializado en VoIP
Escalado de sistemas VoIP Jon Bonilla, Consultor Especializado en VoIP
Elastix México
 
Configuración de escenarios reales con asterisk
Configuración de escenarios reales con asteriskConfiguración de escenarios reales con asterisk
Configuración de escenarios reales con asterisk
Diego Llanes
 

Destacado (20)

Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / KamailioEscalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
Escalabilidad “horizontal” en soluciones VoIP basadas en Asterisk / Kamailio
 
Escalado y balanceo de carga de sistemas SIP
Escalado y balanceo de carga de sistemas SIPEscalado y balanceo de carga de sistemas SIP
Escalado y balanceo de carga de sistemas SIP
 
Escalado de sistemas VoIP Jon Bonilla, Consultor Especializado en VoIP
Escalado de sistemas VoIP Jon Bonilla, Consultor Especializado en VoIPEscalado de sistemas VoIP Jon Bonilla, Consultor Especializado en VoIP
Escalado de sistemas VoIP Jon Bonilla, Consultor Especializado en VoIP
 
Configuración de escenarios reales con asterisk
Configuración de escenarios reales con asteriskConfiguración de escenarios reales con asterisk
Configuración de escenarios reales con asterisk
 
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
IVOZ Provider Open Source - La solución VoIP opensource para operadores e int...
 
SEO en WordPress
SEO en WordPressSEO en WordPress
SEO en WordPress
 
Proxy SIP en Entornos PBX
Proxy SIP en Entornos PBXProxy SIP en Entornos PBX
Proxy SIP en Entornos PBX
 
Introducción a varnish cache (@irontec)
Introducción a varnish cache (@irontec)Introducción a varnish cache (@irontec)
Introducción a varnish cache (@irontec)
 
Proxy
ProxyProxy
Proxy
 
Servidor de Correo Postfix/Dovecot
Servidor de Correo Postfix/Dovecot Servidor de Correo Postfix/Dovecot
Servidor de Correo Postfix/Dovecot
 
Servidor de correo
Servidor de correoServidor de correo
Servidor de correo
 
IPTABLES y SQUID‏
IPTABLES y SQUID‏IPTABLES y SQUID‏
IPTABLES y SQUID‏
 
Proxy presentacion
Proxy presentacionProxy presentacion
Proxy presentacion
 
Herramientas de Monitorizacion y Administracion Web
Herramientas de Monitorizacion y Administracion WebHerramientas de Monitorizacion y Administracion Web
Herramientas de Monitorizacion y Administracion Web
 
Servidores
ServidoresServidores
Servidores
 
Guia instalacion y configuracion nagios
Guia instalacion y configuracion nagiosGuia instalacion y configuracion nagios
Guia instalacion y configuracion nagios
 
Tecnología Móvil en Latinoamérica
Tecnología Móvil en Latinoamérica Tecnología Móvil en Latinoamérica
Tecnología Móvil en Latinoamérica
 
Proxy Squid en Ubuntu
Proxy Squid en UbuntuProxy Squid en Ubuntu
Proxy Squid en Ubuntu
 
Instalación y Configuración de un Servidor Proxy en Linux Ubuntu
Instalación y Configuración de un Servidor Proxy en Linux UbuntuInstalación y Configuración de un Servidor Proxy en Linux Ubuntu
Instalación y Configuración de un Servidor Proxy en Linux Ubuntu
 
Configuracion proxy Windows server 2008
Configuracion proxy Windows server 2008Configuracion proxy Windows server 2008
Configuracion proxy Windows server 2008
 

Similar a Diseño de PBX multitenant basada en Asterisk

MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB
 

Similar a Diseño de PBX multitenant basada en Asterisk (20)

Originstack esp v2.5
Originstack esp v2.5Originstack esp v2.5
Originstack esp v2.5
 
ORIGIN STACK EL APLIANCE DE VIRTUALIZACIÓN ENTERPRISE
ORIGIN STACK EL APLIANCE DE VIRTUALIZACIÓN ENTERPRISE ORIGIN STACK EL APLIANCE DE VIRTUALIZACIÓN ENTERPRISE
ORIGIN STACK EL APLIANCE DE VIRTUALIZACIÓN ENTERPRISE
 
Tips en la instalación de Dynamics 365 Finance and Operations On Premise - LBD
Tips en la instalación de Dynamics 365 Finance and Operations On Premise - LBDTips en la instalación de Dynamics 365 Finance and Operations On Premise - LBD
Tips en la instalación de Dynamics 365 Finance and Operations On Premise - LBD
 
Virtualización de Escritorios: De vuelta al mainframe pero mejor!
Virtualización de Escritorios: De vuelta al mainframe pero mejor!Virtualización de Escritorios: De vuelta al mainframe pero mejor!
Virtualización de Escritorios: De vuelta al mainframe pero mejor!
 
Buenas prácticas GeneXus - GXTour Chile 2016
Buenas prácticas GeneXus - GXTour Chile 2016Buenas prácticas GeneXus - GXTour Chile 2016
Buenas prácticas GeneXus - GXTour Chile 2016
 
Buenas prácticas GeneXus - GXTour Chile 2016
Buenas prácticas GeneXus - GXTour Chile 2016Buenas prácticas GeneXus - GXTour Chile 2016
Buenas prácticas GeneXus - GXTour Chile 2016
 
visual fox pro
visual fox provisual fox pro
visual fox pro
 
Sesión 10: Desarrollo de Aplicaciones Web Con Web Dynpro & Flex
Sesión 10: Desarrollo de Aplicaciones Web Con Web Dynpro & FlexSesión 10: Desarrollo de Aplicaciones Web Con Web Dynpro & Flex
Sesión 10: Desarrollo de Aplicaciones Web Con Web Dynpro & Flex
 
Webinar Adistec Intel + VMware VSAN
Webinar Adistec Intel + VMware VSANWebinar Adistec Intel + VMware VSAN
Webinar Adistec Intel + VMware VSAN
 
Optimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-MemoryOptimización de aplicaciones web con base de datos NoSQL In-Memory
Optimización de aplicaciones web con base de datos NoSQL In-Memory
 
2-Maquinas+Virtuales+y+Contenedores.pdf
2-Maquinas+Virtuales+y+Contenedores.pdf2-Maquinas+Virtuales+y+Contenedores.pdf
2-Maquinas+Virtuales+y+Contenedores.pdf
 
Javier Gallego. Autoridad Portuaria de Valencia. Caso usuario. Semanainformat...
Javier Gallego. Autoridad Portuaria de Valencia. Caso usuario. Semanainformat...Javier Gallego. Autoridad Portuaria de Valencia. Caso usuario. Semanainformat...
Javier Gallego. Autoridad Portuaria de Valencia. Caso usuario. Semanainformat...
 
Luis Manuel Rodriguez. EMC Base10. Proteja sus máquinas virtuales con Recover...
Luis Manuel Rodriguez. EMC Base10. Proteja sus máquinas virtuales con Recover...Luis Manuel Rodriguez. EMC Base10. Proteja sus máquinas virtuales con Recover...
Luis Manuel Rodriguez. EMC Base10. Proteja sus máquinas virtuales con Recover...
 
beroNet GmbH_ES
beroNet GmbH_ESberoNet GmbH_ES
beroNet GmbH_ES
 
Introducción a la Nube Nativa - v1.0es (2021/03)
Introducción a la Nube Nativa - v1.0es (2021/03)Introducción a la Nube Nativa - v1.0es (2021/03)
Introducción a la Nube Nativa - v1.0es (2021/03)
 
Qnap nas training latam 2016 0810
Qnap nas training latam 2016 0810Qnap nas training latam 2016 0810
Qnap nas training latam 2016 0810
 
Training LATAM
Training LATAMTraining LATAM
Training LATAM
 
QNAP Presentación 2016
QNAP Presentación 2016QNAP Presentación 2016
QNAP Presentación 2016
 
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
MongoDB y Microservicios Parte 1: Power Microservices con Docker, Kubernetes,...
 
Tips en la instalación de Dynamics 365 FO - LBD, 365 Saturday
Tips en la instalación de Dynamics 365 FO - LBD, 365 SaturdayTips en la instalación de Dynamics 365 FO - LBD, 365 Saturday
Tips en la instalación de Dynamics 365 FO - LBD, 365 Saturday
 

Último

2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
EncomiendasElSherpa
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
GuillermoBarquero7
 

Último (6)

ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOSESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
ESCRITORIO DE WINDOWS 11 Y SUS ELEMENTOS
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
Trabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - OfimáticaTrabajo de Powerpoint - Unsaac - Ofimática
Trabajo de Powerpoint - Unsaac - Ofimática
 
Caso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business CentralCaso de Exito LPL Projects Logistics Spain y Business Central
Caso de Exito LPL Projects Logistics Spain y Business Central
 
2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx2da. Clase Mecanografía e introducción a Excel (2).pptx
2da. Clase Mecanografía e introducción a Excel (2).pptx
 
Evaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdfEvaluación del riesgo tecnologías informáticas.pdf
Evaluación del riesgo tecnologías informáticas.pdf
 

Diseño de PBX multitenant basada en Asterisk

  • 1. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK JON BONILLA
  • 2. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK CONTEXTO ‣ VoIP2day2009: El Rombo ‣ 4K2012: Solución softswitch para operadores ‣ EW2013: Arquitecturas de operador de HostedPBX ‣ EW2014: Elastix3 (ElastixMT) ‣ EW2015: Escalabilidad de sistemas VoIP
  • 3. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK BASADO EN HECHOS REALES ‣ PekePBX ‣ ¿Por qué tuve que desarrollarla?
  • 4. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK OBJETIVOS ‣ Multitenant (multiempresa) ‣ Completamente orientada a ser manejada por el usuario: 100% web. ‣ No soporte ‣ No personal cualificado
  • 5. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK OBJETIVOS ‣ Seguro de vida: Tecnologías usadas ‣ Debian stable ‣ Asterisk 11 ‣ Laravel ‣ AngularJS ‣ MySQL
 
 http://www.barnetik.com
  • 6. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE I: DB ‣ Schema DB. Conceptos y relaciones: ‣ DID, Empresa, 3 niveles de usuario y 3 niveles de acceso ‣ Destinos y aplicaciones: Usuario, IVR, locuciones, Sala de conferencia, Moh, Voicemail, Grupos de extensiones, Números externos, colas de atención… etc
  • 7. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE I: DB ‣ Ast_cdr ‣ Ast_musiconhold ‣ Ast_queues ‣ Ast_sippeers ‣ Ast_sipregs ‣ Ast_voicemail ‣ Ast_voicemail_message ‣ doctrine_migration_versions ‣ ext_log_entries ‣ ext_translations ‣ sipdoc_prefijos_internacional ‣ sipdoc_prefijos_nacional ‣ Peke_CDR ‣ Peke_Call_Record ‣ Peke_Company ‣ Peke_Company_Voicemail ‣ Peke_ConferenceRoom ‣ Peke_DID ‣ Peke_Destination ‣ Peke_Group ‣ Peke_Group_User ‣ Peke_IVR ‣ Peke_MOH ‣ Peke_Processing ‣ Peke_SoundPrompt ‣ Peke_User ‣ Peke_User_Voicemail
  • 8. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB ‣ Web MINIMALISTA. No FreePBX ‣ No doc! ‣ Cada rol tiene sus tareas. 3 niveles de acceso ‣ Minimiza las opciones ‣ Responsive! ‣ Dos objetivos: Vender y evitar soporte
  • 9. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 10. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 11. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB ‣ Administrador de empresa: Le gustan los colores y las animaciones. ‣ Lo más importante es la configuración de entrantes INTUITIVA. Son muchas opciones y a más opciones más fácil es complicar la web. ‣ Recordamos objetivo: No debe tener que llamarnos en el día a día.
  • 12. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 13. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 14. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 15. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 16. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 17. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB ‣ Mención aparte para el CDR ‣ El CDR VENDE ‣ Tratad por todos los medios no facturar con él. Usad un class5 para facturar por trunk de empresa
  • 18. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 19. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB ‣ El rol usuario ha de sentirse cómodo ‣ Con el tiempo, querremos que la web de la PBX sea un tab permanente en el browser.
  • 20. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE II: LA WEB
  • 21. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE III: ASTERISK ‣ La configuración se adapta a la web, al db schema. ‣ Tenemos toda la info en DB → Realtime ‣ ODBC por supuesto ‣ Elegimos Asterisk 11. Y puede que nos arrepintamos ‣ Cuanto menos carguemos menos cosas pueden fallar: modules.conf
  • 22. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE III: ASTERISK ‣ Dialplan ‣ No tiene sentido tener un contexto por empresa. Debemos separar a nivel de variable ‣ Las entrantes no se pueden discriminar por trunk. Hay que hacerlo por DID ‣ => Dialplan unificado para todas las empresas. ‣ from-pstn ‣ from-users
  • 23. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK DESARROLLO PARTE III: ASTERISK ‣ Dialplan ‣ Tenemos que estar leyendo configuraciones en base de datos continuamente ‣ La mayor parte de las lecturas de DB no requieren tratamientos complejos sino setear variables de canal ‣ => func_odbc
  • 24. [from-pstn] exten => _X.,1,Verbose(Llamada entrante desde la PSTN ${CHANNEL(peername)} al número ${EXTEN}) same => n,Set(CDR(type)=incoming) same => n,Set(CDR(src_callerid)=${CALLERID(num)}) same => n,Set(CDR(dst_dialed)=${EXTEN}) same => n,Gosub(sub_geolocation_caller,start,1) same => n,Set(ARRAY(EMPRESA,DIDCUSTOM,DIDID)=${ODBC_DIDEMPRESA(${EXTEN})}) same => n,GotoIf($[${EXISTS(${EMPRESA})}]?:noasignado,1) same => n,Set(CDR(dst_company)=${EMPRESA}) same => n,Verbose(El DID está asignado a la empresa ${EMPRESA}) same => n,GoSub(sub_record_call,start,1(${EMPRESA},${CDR(type)},${EXTEN},${CALLERID(num)})) same => n,GotoIf($["${DIDCUSTOM}" == "1"]?sub_custom_${EMPRESA}_${EXTEN},start,1) same => n,Set(IDTRATAMIENTO=${ODBC_DIDCONFIGURED(${DIDID})}) same => n,GotoIf($[${EXISTS(${IDTRATAMIENTO})}]?:notratamiento,1) same => n,Agi(peke_processing.php,${IDTRATAMIENTO}) same => n,GotoIf($[${EXISTS(${PROMPT})}]?:destino) same => n,Playback(${SOUNDPATH}/${EMPRESA}/${PROMPT}) same => n(destino),GoSub(sub_destination,start,1(${EMPRESA},${DESTINATION})) exten => noasignado,1,Verbose(DID no encontrado o no asignado a empresa) same => n,Hangup() exten => notratamiento,1,Verbose(DID no está configurado) same => n,Hangup()
  • 25. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK RELEASES ‣ Tenemos la ventaja de controlar todo el ecosistema. Podemos hacer releases y upgrades de forma muy sencilla: Hagamos muchas y pequeñas. ‣ Las nuevas funcionalidades han de venir determinadas por la necesidad de la solución y no por la necesidad de una empresa o la de un comercial. Hay que saber decir NO
  • 26. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK RELEASES ‣ Asume que vas a reescribir todo el dialplan al menos dos veces. No esperes a tenerlo todo perfecto para sacar la versión 1.0 ‣ Prepara un roadmap y prepárate para no poder cumplirlo porque el mercado te dictará las necesidades. Sacarlo a producción es el mejor roadmap.
  • 27. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK FUTURAS RELEASES ‣ Cuando las funciones PBX ya estén estables y maduras… Salgamos de la PBX y hagamos funciones diferenciadoras: ‣ Módulos: ‣ Salas de MultiVideoconferencia ‣ Chat, compartición de pantalla… centro de comunicaciones de la empresa: Fidelización. ‣ Integración con sistema de soporte ‣ Integración con CRMs ‣ Etc...
  • 28. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK FUTURAS RELEASES
  • 29. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK ESCALABILIDAD ‣ Limitados por: CAPS, Registros, Keepalives ‣ Sacamos los registros a un proxy ‣ Balanceamos los usuarios por nodo de PBX ‣ Sacamos la DB a exterior y compartimos entre todos los nodos ‣ Sacamos la web al exterior ‣ => Proxy lb/registrar + MySQL + Web Server + N nodos asterisk para escalar
  • 30. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK ESCALABILIDAD
  • 31. DISEÑANDO UNA SOLUCIÓN MULTI-TENANT CON ASTERISK PREGUNTAS? Jon Bonilla manwe@sipdoc.net @jbmanwe