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

Dockers and kubernetes
Dockers and kubernetesDockers and kubernetes
Dockers and kubernetesDr Ganesh Iyer
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et DockerStephane Manciot
 
OpenStack and Kubernetes - A match made for Telco Heaven
OpenStack and Kubernetes - A match made for Telco HeavenOpenStack and Kubernetes - A match made for Telco Heaven
OpenStack and Kubernetes - A match made for Telco HeavenTrinath Somanchi
 
Introduction and Deep Dive Into Containerd
Introduction and Deep Dive Into ContainerdIntroduction and Deep Dive Into Containerd
Introduction and Deep Dive Into ContainerdKohei Tokunaga
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
Virtual Machines and Docker
Virtual Machines and DockerVirtual Machines and Docker
Virtual Machines and DockerDanish Khakwani
 
Kubernetes and service mesh application
Kubernetes  and service mesh applicationKubernetes  and service mesh application
Kubernetes and service mesh applicationThao Huynh Quang
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 
Containers technologies
Containers technologiesContainers technologies
Containers technologiesJoris Bonnefoy
 
ESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxaissamjadli
 
Build web apps with react js
Build web apps with react jsBuild web apps with react js
Build web apps with react jsdhanushkacnd
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsJulien Wittouck
 

La actualidad más candente (20)

Dockers and kubernetes
Dockers and kubernetesDockers and kubernetes
Dockers and kubernetes
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
DevOps avec Ansible et Docker
DevOps avec Ansible et DockerDevOps avec Ansible et Docker
DevOps avec Ansible et Docker
 
OpenStack and Kubernetes - A match made for Telco Heaven
OpenStack and Kubernetes - A match made for Telco HeavenOpenStack and Kubernetes - A match made for Telco Heaven
OpenStack and Kubernetes - A match made for Telco Heaven
 
Intro to docker
Intro to dockerIntro to docker
Intro to docker
 
Docker
DockerDocker
Docker
 
Introduction and Deep Dive Into Containerd
Introduction and Deep Dive Into ContainerdIntroduction and Deep Dive Into Containerd
Introduction and Deep Dive Into Containerd
 
Docker Introduction
Docker IntroductionDocker Introduction
Docker Introduction
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Virtual Machines and Docker
Virtual Machines and DockerVirtual Machines and Docker
Virtual Machines and Docker
 
Docker.pptx
Docker.pptxDocker.pptx
Docker.pptx
 
Containers and Docker
Containers and DockerContainers and Docker
Containers and Docker
 
Kubernetes and service mesh application
Kubernetes  and service mesh applicationKubernetes  and service mesh application
Kubernetes and service mesh application
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
Introduccion a React
Introduccion a ReactIntroduccion a React
Introduccion a React
 
Containers technologies
Containers technologiesContainers technologies
Containers technologies
 
ESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptxESTEM_ReactJS_S1.pptx
ESTEM_ReactJS_S1.pptx
 
Medium 시작하기
Medium 시작하기 Medium 시작하기
Medium 시작하기
 
Build web apps with react js
Build web apps with react jsBuild web apps with react js
Build web apps with react js
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 

Destacado

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 / KamailioIrontec
 
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 SIPPaloSanto Solutions
 
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 VoIPElastix 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 asteriskDiego Llanes
 
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...Irontec
 
Proxy SIP en Entornos PBX
Proxy SIP en Entornos PBXProxy SIP en Entornos PBX
Proxy SIP en Entornos PBXJon Bonilla
 
Introducción a varnish cache (@irontec)
Introducción a varnish cache (@irontec)Introducción a varnish cache (@irontec)
Introducción a varnish cache (@irontec)Irontec
 
Servidor de Correo Postfix/Dovecot
Servidor de Correo Postfix/Dovecot Servidor de Correo Postfix/Dovecot
Servidor de Correo Postfix/Dovecot Javier Martin Rivero
 
Servidor de correo
Servidor de correoServidor de correo
Servidor de correoxllauca
 
IPTABLES y SQUID‏
IPTABLES y SQUID‏IPTABLES y SQUID‏
IPTABLES y SQUID‏ingpuma
 
Herramientas de Monitorizacion y Administracion Web
Herramientas de Monitorizacion y Administracion WebHerramientas de Monitorizacion y Administracion Web
Herramientas de Monitorizacion y Administracion Webmaesefernando
 
Servidores
ServidoresServidores
Servidoresinfrit30
 
Guia instalacion y configuracion nagios
Guia instalacion y configuracion nagiosGuia instalacion y configuracion nagios
Guia instalacion y configuracion nagiosPedro Alcaraz Díaz
 
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 ESET Latinoamérica
 
Proxy Squid en Ubuntu
Proxy Squid en UbuntuProxy Squid en Ubuntu
Proxy Squid en Ubuntujferrer1974
 
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 UbuntuMarcelo Alcivar
 
Configuracion proxy Windows server 2008
Configuracion proxy Windows server 2008Configuracion proxy Windows server 2008
Configuracion proxy Windows server 2008teresi0101
 

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

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 Telecomputer
 
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 - LBDJuan Fabian
 
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!Andres Mauricio Mujica Zalamea
 
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 2016Guillermo González
 
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 2016Guillermo González
 
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 & FlexBiz Partner
 
Webinar Adistec Intel + VMware VSAN
Webinar Adistec Intel + VMware VSANWebinar Adistec Intel + VMware VSAN
Webinar Adistec Intel + VMware VSANCTO314
 
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-MemoryGonzalo Chacaltana
 
2-Maquinas+Virtuales+y+Contenedores.pdf
2-Maquinas+Virtuales+y+Contenedores.pdf2-Maquinas+Virtuales+y+Contenedores.pdf
2-Maquinas+Virtuales+y+Contenedores.pdfJoseMartinez309639
 
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...COIICV
 
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...COIICV
 
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)Young Suk Ahn Park
 
Qnap nas training latam 2016 0810
Qnap nas training latam 2016 0810Qnap nas training latam 2016 0810
Qnap nas training latam 2016 0810QNAP Systems, Inc.
 
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
 
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 SaturdayJuan Fabian
 

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

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 200Opentix
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 

Último (7)

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
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 

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