# Introducción a OMniLeads

<figure><img src="/files/zKCfQSEIPOpGVOAKCLv8" alt=""><figcaption></figcaption></figure>

[OMniLeads](https://www.omnileads.net/) es una innovadora solución de software de código abierto que aprovecha la tecnología WebRTC (WebRTC) para potenciar los centros de contacto. Diseñado y pensando en la versatilidad, OMniLeads admite una amplia gama de **canales de comunicación, incluidos voz, vídeo, WhatsApp Chat & Voice, Redes Sociales y Campañas de Email,** además de sumar Herramientas de Colaboración y Text-To-Speech (TTS) para generación de Audios Personalizados de plataforma.&#x20;

<figure><img src="/files/kvndXv4aUHYUtKjPcpXH" alt=""><figcaption></figcaption></figure>

Ésto lo convierte en una opción ideal para las organizaciones que buscan gestionar e implementar estrategias eficientes de servicio al cliente omnicanal.&#x20;

Además, pone a disposición métricas, reportes e indicadores, supervisión real-time de agentes, módulos de auditorías para backoffice, y demás funcionalidades avanzadas de QA, gestión de contactos y campañas.

El hecho de contar con tecnología [WebRTC](https://www.webrtc.org/) lo hace ideal para cursar la canalidad de Voz y Video con agentes tanto en modalidad onsite como home-office, debido a la eficiencia y seguridad criptográfica que implica la tecnología WebRTC en su operación por defecto, al momento de mantener sesiones a través de Internet.

Por otro lado, la administración y gestión mediante un acceso 100% Web, hace el camino más simple a la hora de resolver una estrategia omnicanal con herramientas colaborativas.

<figure><img src="/files/REy8OSIJipfxZXjWLj5t" alt=""><figcaption></figcaption></figure>

Los diferentes perfiles de usuarios (agentes, supervisores, administradores o clientes) acceden a OMniLeads desde cualquier navegador web moderno. Al no requerir del uso de aplicaciones de escritorio (*softphones*), no es necesario realizar las típicas configuraciones sobre las estaciones de trabajo de los agentes de Contact Center. Tan sólo con acceder a la dirección web HTTPS donde reside la aplicación, tanto agentes como supervisores pueden estar online gestionando comunicaciones con los clientes. Ésta facilidad, implica una gran ventaja a la hora de brindar servicios de cloud CCaaS (Contact Center as a Service).

OMniLeads puede adaptarse a una compañía u organización que necesita montar su propio Contact Center integrado a su central PBX, así como también escalar hacia compañías que brindan servicios de Customer Contact (BPO - Business Process Outsourcing), ya sea en entornos on-premise así como también en despliegues en cloud.

<figure><img src="/files/5CpHSqlBKYxHh2d8qNVB" alt=""><figcaption><p>Esquema Básico</p></figcaption></figure>

### ¿Cómo la obtengo?

El [repositorio](https://gitlab.com/omnileads/omldeploytool) se encuentra disponible en GitLab, para su libre descarga, instalación, modificación y uso del software.

### ¿Cómo lo instalo?

En la sección Instalación de OMniLeads se aborda éste asunto, presentando los pasos a seguir para instalar la aplicación bajo ciertos esquemas que se mencionan en el mismo documento.

### ¿Cómo me capacito?

Ésta documentación cubre todos los aspectos del producto, desde cuestiones técnicas inherentes al Administrador (DevOps), hasta aspectos funcionales orientados a los agentes, supervisores o líderes del Contact Center.

El usuario, entusiasta o empresa afin puede tener acceso a [Trainings Profesionales Sin Costo](https://www.omnileads.net/slides), con el objetivo de profundizar en la materia y know-how del producto.

### Características generales

* [Características generales de OMniLeads](/introduccion-a-omnileads/caracteristicas-generales-de-omnileads)
  * [WebRTC - Tecnología subyacente de OMniLeads](/introduccion-a-omnileads/caracteristicas-generales-de-omnileads#webrtc-tecnologia-subyacente-de-omnileads)
  * [Características y funcionalidades de OMniLeads](/introduccion-a-omnileads/caracteristicas-generales-de-omnileads#caracteristicas-y-funcionalidades-de-omnileads)
  * [OMniLeads como Contact Center integrado a una PBX basada en SIP](/introduccion-a-omnileads/caracteristicas-generales-de-omnileads#omnileads-como-contact-center-integrado-a-una-pbx-basada-en-sip)
  * [OMniLeads en una compañía de servicios de Customer Contact](/introduccion-a-omnileads/caracteristicas-generales-de-omnileads#omnileads-en-una-compania-de-servicios-de-customer-contact)
  * [OMniLeads para carriers o proveedores de cloud PBX](/introduccion-a-omnileads/caracteristicas-generales-de-omnileads#omnileads-para-carriers-o-proveedores-de-cloud-pbx)

### Arquitectura

En ésta sección, se introduce la arquitectura del proyecto, junto a la descripción de todos sus componentes:

* [Arquitectura y componentes](/introduccion-a-omnileads/arquitectura-y-componentes)
  * [Descripción de cada componente](/introduccion-a-omnileads/arquitectura-y-componentes#descripcion-de-cada-componente)
  * [Deploy y variables de entorno](/introduccion-a-omnileads/arquitectura-y-componentes#deploy-y-variables-de-entorno)
  * [El potencial de acudir a cloud-init como provisioner](/introduccion-a-omnileads/arquitectura-y-componentes#el-potencial-de-acudir-a-cloud-init-como-provisioner)

### Instalación

En éste capítulo, se cubren todos los tipos de instalación de la aplicación:

* [Instalación de OMniLeads](/instalacion-de-omnileads)
  * [Deploy de OMniLeads OnPremise](/instalacion-de-omnileads#deploy-de-omnileads-onpremise)
  * [Deploy de OMniLeads OnPremise Alta Disponibilidad](/instalacion-de-omnileads#deploy-de-omnileads-onpremise-alta-disponibilidad)
  * [Deploy de OMniLeads sobre DigitalOcean](/instalacion-de-omnileads#deploy-de-omnileads-sobre-digitalocean)
  * [Deploy de OMniLeads basado en Terraform](/instalacion-de-omnileads#deploy-de-omnileads-basado-en-terraform)

### Seguridad

En ésta sección, se plantean las configuraciones mínimas a realizar para que la aplicación se ejecute en un marco de seguridad mínima recomendada:

* [Consideraciones sobre seguridad](/consideraciones-sobre-seguridad)

### Configuración inicial

En éste capítulo, se plantean las configuraciones escenciales a realizar una vez que dejamos instalada una instancia de OMniLeads:

* [Configuración inicial](/configuracion-inicial#configuracion-inicial)
  * [Roles y permisos](/configuracion-inicial#roles-y-permisos)
  * [Usuarios](/configuracion-inicial#usuarios)
  * [Grupos de agentes](/configuracion-inicial#grupos-de-agentes)
  * [Adicionar paquetes de audios en otros idiomas](/configuracion-inicial#adicionar-paquetes-de-audios-en-otros-idiomas)
  * [Música de espera](/configuracion-inicial#musica-de-espera)
  * [Pausas](/configuracion-inicial#pausas)
  * [Primer login de agente](/configuracion-inicial#primer-login-de-agente)
  * [Registro de la instancia](/configuracion-inicial#registro-de-la-instancia)
  * [Addons comerciales disponibles](/configuracion-inicial#addons-comerciales-disponibles)

### Campañas

Toda comunicación entre «el exterior» y un agente de OMniLeads, es encapsulado dentro de una campaña. En éste capítulo, se aborda todo lo inherente a la gestión de campañas entrantes y salientes (manuales, preview y dialer):

* [Campañas telefónicas](/campanas-de-contacto)
  * [Calificaciones](/campanas-de-contacto#calificaciones)
  * [Base de contactos](/campanas-de-contacto#base-de-contactos)
  * [Configuración de restricciones sobre campos de contactos](/campanas-de-contacto#configuracion-de-restricciones-sobre-campos-de-contactos)
  * [Formularios](/campanas-de-contacto#formularios)
  * [Campañas, calificaciones y formularios](/campanas-de-contacto#campanas-calificaciones-y-formularios)
  * [Campañas manuales](/campanas-de-contacto#campanas-manuales)
  * [Campañas preview](/campanas-de-contacto#campanas-preview)
  * [Campañas con Discador](/campanas-de-contacto#campanas-con-discador-predictivo)
  * [Campañas entrantes](/campanas-de-contacto#campanas-entrantes)
  * [Plantillas de campaña](/campanas-de-contacto#plantillas-de-campana)
  * [Interacción con sistemas de gestión externos](/campanas-de-contacto#interaccion-con-sistemas-de-gestion-externos)

### Auditoría de gestiones de agentes

Cada vez que un agente genera una *gestión positiva* con un contacto, existe la posibilidad de auditar la misma desde el *módulo de auditorías*:

* [Auditoría de gestiones (backoffice)](/auditoria-de-gestiones)

### Gestiones del administrador IT

En éste capítulo, se cubren algunas tareas inherentes al administrador técnico de OMniLeads. Cuestiones como la configuración de bajo nivel del módulo de discador predictivo, gestión de actualizaciones, backup and restore, y cambio de dirección IP de la plataforma, son tratadas en éste capítulo de la documentación:

* [Gestiones del administrador IT](/gestiones-del-administrador-it)
  * [Variables de entorno](/gestiones-del-administrador-it#variables-de-entorno)
  * [Configuración del módulo de *Discador predictivo*](/gestiones-del-administrador-it#configuracion-del-modulo-de-discador-predictivo)
  * [Cambiar certificados SSL](/gestiones-del-administrador-it#cambiar-certificados-ssl)
  * [Resetear contraseña web de admin](/gestiones-del-administrador-it#resetear-contrasena-web-de-admin)
  * [Backup & Restore](/gestiones-del-administrador-it#backup-restore-de-base-de-datos)
  * [Actualizaciones](/gestiones-del-administrador-it#actualizaciones)
  * [Cambios de los parámetros de red (Hostname y/o Dirección IP) y cambios de contraseñas de servicios](/gestiones-del-administrador-it#cambios-de-los-parametros-de-red-hostname-y-o-direccion-ip-y-cambios-de-contrasenas-de-servicios)
  * [Desbloqueo de usuarios](/gestiones-del-administrador-it#desbloqueo-de-usuarios)
  * [Recovery & Takeover nodo PostgreSQL HA](/gestiones-del-administrador-it#recovery-and-takeover-nodo-postgresql-ha)
  * [Desinstalación de OMniLeads](/gestiones-del-administrador-it#desinstalacion-de-omnileads)

### OMniLeads RESTful API

En ésta sección, se puede encontrar todas las especificaciones de la API Rest del sistema:

* [OMniLeads RESTful API](/omnileads-restful-api-pro)
  * [Endpoint de Login](/omnileads-restful-api-pro#endpoint-de-login)
  * [Endpoint obtener estructura de Base de Datos de Contactos](/omnileads-restful-api-pro#endpoint-obtener-estructura-de-base-de-datos-de-contactos)
  * [Endpoint creacion de contacto](/omnileads-restful-api-pro#endpoint-creacion-de-contacto)
  * [Endpoint de Generación de llamadas](/omnileads-restful-api-pro#endpoint-de-generacion-de-llamadas)
  * [Endpoint listado de opciones de calificación](/omnileads-restful-api-pro#endpoint-listado-de-opciones-de-calificacion)
  * [Endpoint listado de calificaciones](/omnileads-restful-api-pro#endpoint-listado-de-calificaciones)
  * [Endpoint crear nueva calificación](/omnileads-restful-api-pro#endpoint-crear-nueva-calificacion)
  * [Endpoint crear nuevo contacto y asignarle calificación](/omnileads-restful-api-pro#endpoint-crear-nuevo-contacto-y-asignarle-calificacion)
  * [Endpoint para modificar una calificación existente](/omnileads-restful-api-pro#endpoint-para-modificar-una-calificacion-existente)
  * [API de Sesión de Agente en Asterisk](/omnileads-restful-api-pro#api-de-sesion-de-agente-en-asterisk)
  * [Endpoint para obtener las credenciales SIP de Agente](/omnileads-restful-api-pro#endpoint-para-obtener-las-credenciales-sip-de-agente)


# Características Generales de OMniLeads

### Tecnología subyacente de OMniLeads

Antes de citar los casos de uso, ponemos énfasis en repasar los beneficios de la tecnología WebRTC, núcleo de OMniLeads.

WebRTC dota a un navegador web de la posibilidad de mantener comunicaciones real-time de voz, video, chat y compartición de pantalla. OMniLeads se nutre de ésta tecnología para nuclear las comunicaciones y la interfaz de gestión web, evitando el uso de aplicaciones de escritorio «softphones», lo cual otorga una inmediatez en términos de «click and work» en el alta usuarios, ya que a partir de un login web, dichos usuarios están en línea procesando comunicaciones.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/what_is_webrtc.png" alt=""><figcaption></figcaption></figure>

Algunas de las principales ventajas de WebRTC son las siguientes:

* Se minimizan los puntos de fallo en las estaciones de trabajo.
* Se minimizan las tareas del helpdesk y por ende, la demanda del personal de soporte/sistemas.
* Se trabaja con los codecs de audio Opus y video VP8, ambos concebidos para una máxima performance en entornos de Internet (codecs internet nativos).
* A nivel seguridad, todas las comunicaciones viajan cifradas de manera obligatoria, en términos de señalización y media.

### Características y funcionalidades de OMniLeads

Actualmente, OMniLeads facilita una gestión sólida y soporte telefónico mediante varios tipos de campañas:

✅ Campañas entrantes: administra de manera eficiente las llamadas entrantes y enrútelas a los agentes adecuados.&#x20;

✅ Campañas Preview: prepara a los agentes con información relevante antes de realizar una llamada.&#x20;

✅ Campañas Manuales: proporciona herramientas para que los agentes se comuniquen manualmente con los clientes con facilidad.&#x20;

✅ Campañas de Discador Automático: incorpora un potente discador interno 100% Open Source, además de integraciones con otros discadores de mercado.

✅ Reciclado de campañas por calificación de agente y/o status telefónico.

✅ Cambio de base de contactos para seguir discando ininterrumpidamente.

✅ Videollamadas basadas en web: campañas de videollamadas directamente desde páginas web.

✅ Compartir pantalla entre agente y cliente a partir de Videollamadas.

✅ Integración con WhatsApp Business: amplia su alcance y accesibilidad con las capacidades de comunicación de [WhatsApp Business de Meta](https://business.whatsapp.com/).

✅ Consola de Agente y Supervisor basada en WebRTC.&#x20;

✅ Diferentes perfiles de usuario: administrador, administrador supervisor, cliente supervisor y agente.

✅ Detección de contestador automático.&#x20;

✅ Grabación completa de llamadas.&#x20;

✅ Informes de productividad.&#x20;

✅ Supervisión en tiempo real.&#x20;

✅ Creación sencilla de formularios web.&#x20;

✅ Gestión de Calificaciones.

✅ Integración con CRM/ERP a través de la API RestFull.

✅ Modo Agentes Remotos.&#x20;

✅ Integración con centralita PBX

&#x20;✅ Soporte de Text-To-Speech (TTS) para generación de Audios Personalizados.

✅ Listo para virtualizar! OMniLeads fue concebido como una tecnología orientada a los entornos de virtualización.

✅ Listo para escalar! OMniLeads ofrece escenarios de Cluster Horizontal y HA (High Availability)

✅ **Versión Enterprise** para cuentas exigentes: dota a la plataforma de una "Capa Empresarial" para segmentos verticales y cuentas exigentes.

✅ Orientación 100% a Contact Center. No se trata de un software de PBX con agregados de reportería y/o supervisión. La aplicación fue concebida desde cero, y como una plataforma orientada y optimizada para funcionalidades de Contact Center.

Con **Whatsapp Business**, puede:

✅ Tener varios usuarios chateando en el mismo número de WhatsApp.&#x20;

✅ Conéctarse a múltiples cuentas de WhatsApp y recibir todos los mensajes en un solo lugar.

✅ Crear y chatear con nuevos contactos sin tocar el celular.&#x20;

✅ Enviar y recibir mensajes&#x20;

✅ Enviar y Recibir multimedia (imágenes/audio/documentos).&#x20;

✅ Llamadas Inbound desde Whatsapp Business API (NEW)

### OMniLeads como Contact Center integrado a una PBX basada en SIP

OMniLeads resulta ideal para las compañías que demandan funcionalidades típicas de Contact Center, que el sistema PBX no llega a cubrir por su propia naturaleza. Por lo tanto, OMniLeads surge como una alternativa para complementar dicha central PBX, desde una instancia independiente (bare-metal host, virtual machine o infraestructura de cloud) integrada a la PBX, permitiendo el fluir de las comunicaciones entre ambos componentes, de manera fiable, segura y transparente.

Se plantea expandir el paradigma tradicional de adquisición de un stack de software de reportería/supervisión instalado sobre la PBX, para en lugar de ello, desplegar una completa aplicación de Contact Center independiente (utiliza su propio Asterisk), que permite a su vez una integración sencilla con el software de PBX, de manera tal que podamos derivar una opción del IVR de la PBX hacia una campaña entrante de OMniLeads, o bien realizar una transferencia desde una extensión de la PBX hacia OMniLeads, o viceversa.

Las ventajas que se hacen notables, son:

* Evitar el coste económico que involucran las licencias de software de las típicas herramientas complementarias del mercado, que dotan a la PBX de algunas funcionalidades de *reporting y supervisión* de colas.
* Evitar el coste en términos de performance del core de telefonía *PBX* sacrificada para correr complejos reportes y herramientas de monitoreo, que implica ejecutar un «módulo de call center» sobre el sistema PBX.

En operaciones donde hay una gran demanda de extracción de reportes, o bien donde se necesita escalar en términos de agentes, es sumamente sencillo desplegar OMniLeads *out of the box*, ya sea en una VM, VPS o server dedicado, sin perder la integración con la PBX.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/oml_and_pbx.png" alt=""><figcaption></figcaption></figure>

### OMniLeads en una compañía de servicios de Customer Contact

Bajo éste escenario, OMniLeads puede trabajar como núcleo de comunicaciones de un Contact Center con agentes que van entre las decenas y centenas. Así, OMniLeads puede manejar múltiples troncales SIP a la vez, con sus pertinentes enrutamientos entrantes y salientes de comunicaciones.

En éstos contextos, la escalabilidad es un requisito básico, ya que las operaciones son muy dinámicas y pueden demandar picos de usuarios conectados trabajando en simultáneo. La escalabilidad se garantiza a partir de concebir nuestra solución de manera tal que pueda ser fácilmente desplegada en modalidad de cluster de alta disponibilidad.

A su vez, la API RestFull permite generar fácilmente CRMs o web workflows para cada campaña, de manera tal de ajustarse a los requisitos del cliente que terceriza la cartera.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/oml_bpo.png" alt=""><figcaption></figcaption></figure>

### OMniLeads para carriers o proveedores de cloud PBX

Si la necesidad es implementar un servicio de CCaaS (Contact Center as a Service), OMniLeads resulta ideal a partir de la ventaja otorgada por WebRTC y Docker como tecnología de base.

Podemos citar ventajas como las siguientes:

* **WebRTC** elimina la necesidad de instalar aplicaciones softphone para escritorio, ya que la voz y el video fluye a través del browser de los agentes y supervisores. Ésto elimina un punto de falla y mantenimiento sobre las estaciones de trabajo.
* Los **codecs** implementados para audio y video son Opus y VP8, ambos diseñados para funcionar en Internet, los cuales se adaptan dinámicamente al ancho de banda disponible, lo que evita los incómodos entrecortes de llamadas de la VoIP convencional.
* **Seguridad**: El intercambio de información entre las estaciones de trabajo y la instancia de OML en cloud, se encuentra encriptado bajo los estándares HTTPS, sRTP y dTLS.
* [Kamailio](https://www.kamailio.org/) es parte del core de comunicaciones de OMniLeads. Se trata de un Proxy-SIP de avanzadas prestaciones y crucial para brindar seguridad a servidores de VoIP y video de acceso público en Internet.
* La arquitectura de Contenedores permite desplegar OMniLeads fácilmente abstrayendo la infraestructura subyacente, y permitiendo sin problemas correr en Cloud proviers como  Amazon, Google Cloud, Digital Ocean, OVH, Linode, etc.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/what_is_webrtc_oml.png" alt=""><figcaption></figcaption></figure>


# Arquitectura y componentes

<figure><img src="/files/HhpK9ZRCkNBZDEC7phEE" alt=""><figcaption></figcaption></figure>

## Arquitectura y componentes

OMniLeads es una aplicación basada en múltiples componentes que residen en repositorios individuales de GitLab, donde se almacena el código fuente y/o de configuración, los scripts de build, deploy y pipelines CI/CD.

Si bien al momento de ejecutar una instancia de OMniLeads los componentes interactúan como una unidad a través de conexiones TCP/IP, la realidad es que cada uno es una entidad propia con su repositorio GitLab y ciclo DevOps.

A nivel de build, cada componente se distribuye a partir de **contenedores** (imágenes).&#x20;

Podemos pensar a cada componente como una pieza de un rompecabezas con sus atributos:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_component.png" alt=""><figcaption></figcaption></figure>

### Descripción de cada componente

A continuación, se describe cada componente:

* **OMLApp** (<https://gitlab.com/omnileads/ominicontacto>): La aplicación web (Python/Django) está contenida en OMLApp.

  Nginx es el webserver que recibe las peticiones HTTPS y redirecciona hacia OMLApp (Django/UWSGI) dichas solicitudes. OMLApp interactúa con varios componentes, ya sea para almacenar/aprovisionar configuración, así como también en la generación de llamadas, o a la hora de devolver vistas de reportes y supervisión de agentes/campañas.

  OMLApp utiliza PostgreSQL como motor SQL, Redis como caché y para aprovisionar la configuración de Asterisk, ya sea a través de archivos .conf así como también generando ciertas estructuras clave/valor que son consultadas por Asterisk en tiempo real a la hora de procesar llamadas sobre campañas. OMLApp se conecta a la interfaz AMI de Asterisk para generar llamadas y recargar alguna que otra configuración, también realiza conexiones hacia la API de WombatDialer cuando es necesario generar campañas con discado predictivo.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_omlapp.png" alt=""><figcaption></figcaption></figure>

* **Asterisk** (<https://gitlab.com/omnileads/omlacd>): OMniLeads se basó en el framework Asterisk como base del ACD (Distribuidor Automático de Llamadas). Se encarga de la implementación de lógica de negocio (campañas telefónicas, grabaciones, reportes y métricas de la canalidad telefónica). A nivel de networking, Asterisk recibe peticiones AMI desde OMLApp y desde WombatDialer, mientras que necesita ejecutar conexiones hacia PostgresSQL para dejar logs, hacia Redis para consultar parámetros de campañas aprovisionados desde de OMLApp, y también necesita acceder a Nginx para el establecimiento del Websocket utilizado para traer el contenido de archivos de configuración contenidos en Asterisk (etc/asterisk) y generados desde OMLApp.

![\_images/arq\_omlacd.png](https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_omlacd.png)

* **Kamailio** (<https://gitlab.com/omnileads/omlkamailio>): Éste componente es utilizado en conjunto con RTPEngine (WebRTC bridge) a la hora de gestionar comunicaciones WebRTC (SIP over WSS) contra los usuarios agentes, mientras mantiene sesiones (SIP over UDP) contra Asterisk. Kamailio recibe los REGISTERs generados por el webphone (JSSIP) desde los agentes, por lo tanto se encarga de la labor de *registro y localización* de usuarios utilizando Redis para almacenar la dirección de red de cada usuario.

  Para Asterisk, todos los agentes se encuentran disponibles en la URI de Kamailio, por lo que Kamailio recibe INVITEs (UDP 5060) desde Asterisk cuando éste requiere *ubicar* algún agente para conectar una llamada. Finalmente, cabe mencionar el hecho de que Kamailio genera conexiones hacia RTPEngine (TCP 22222) solicitando un *SDP* a la hora de establecer sesiones SIP entre Asterisk VoIP y los agentes WebRTC.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_omlkamailio.png" alt=""><figcaption></figcaption></figure>

* **RTPEngine** (<https://gitlab.com/omnileads/omlrtpengine>): OMniLeads se apoya en RTPEngine a la hora del *transcoding y bridge* entre la tecnología WebRTC y la tecnología VoIP desde el punto de vista del *audio*. El componente mantiene canales de audio *sRTP-WebRTC* con los usuarios agentes por un lado, mientras que por el otro establece canales *RTP-VoIP* contra Asterisk. RTPEngine recibe conexiones desde Kamailio al puerto 22222.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_omlrtpengine.png" alt=""><figcaption></figcaption></figure>

* **Nginx** (<https://gitlab.com/omnileads/omlnginx>): El web server del proyecto es Nginx, y tiene como tarea recibir la peticiones *TCP 443* por parte de los usuarios, así como también desde algunos componentes como Asterisk. Por un lado, Nginx es invocado cada vez que un usuario accede a la URL del ambiente desplegado. Si las peticiones de los usuarios tienen como destino renderizar alguna vista de la aplicación web *Django*, entonces *Nginx* redirecciona la petición a *UWSGI*, mientras que si las peticiones de los usuarios tienen como destino el REGISTER de su webphone JSSIP, entonces *Nginx* redirecciona la petición hacia Kamailio (para establecer un *websocket SIP*). También, *Nginx* es invocado por *Asterisk* a la hora de establecer el websocket contra el *Websocket-Python* de OMniLeads, que aprovisiona la configuración proporcionada desde *OMLApp*.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_omlnginx.png" alt=""><figcaption></figcaption></figure>

* **Python websocket** (<https://gitlab.com/omnileads/omnileads-websockets>): OMniLeads se apoya en un servidor de websockets (basado en Python), utilizado para dejar corriendo tareas en segundo plano (reportes y generación de CSVs) y recibir una notificación asíncrona cuando la tarea se haya completado, lo cual optimiza el desempeño de la aplicación. A su vez, es utilizado como *puente* entre *OMLApp* y *Asterisk* en el aprovisionamiento de la configuración de archivos .conf (etc/asterisk).

  Al iniciar Asterisk, se lanza un proceso que establece el *websocket* contra dicho componente, y a partir de allí, recibe notificaciones cada vez que se proporcionan cambios en la configuración. En su configuración por defecto, levanta el puerto *TCP 8000*, y las conexiones recibidas son siempre redirigidas desde *Nginx*.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_omlws.png" alt=""><figcaption></figcaption></figure>

* **Redis** (<https://gitlab.com/omnileads/omlredis>): *Redis* es utilizado con 3 fines bien concretos. Por un lado, como caché para almacenar resultados de queries recurrentes implicadas en las vistas de supervisión de campañas y agentes; por otro lado se utiliza como *DB* para la presencia y localización de los usuarios; y finalmente para el almacenamiento de la configuración de *Asterisk* (etc/asterisk/) así como también de los parámetros de configuración implicados en cada módulo (campañas, troncales, rutas, IVR, etc.), reemplazando a la alternativa nativa de *Asterisk* (*AstDB*).

![\_images/arq\_omlredis.png](https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_omlredis.png)

* **PostgreSQL** (<https://gitlab.com/omnileads/omlpgsql>): *PGSQL* es el motor de DB SQL utilizado por OMniLeads. A partir de allí, se materializan todos los reportes y métricas del sistema. También allí, se almacena toda la información de configuración que debe persistir en el tiempo. Recibe conexiones en su puerto *TCP 5432* desde los componentes *OMLApp* (lectura/escritura) y desde *Asterisk* (escritura de logs).

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_omlpgsql.png" alt=""><figcaption></figcaption></figure>

### Deploy y variables de entorno

Habiendo procesado la exposición anterior sobre la función de cada componente y sus interacciones en términos del networking, pasamos a abordar el asunto del *deploy*.

Cada componente cuenta con un *bash script* y *Ansible playbook* que permiten la materialización del componente, ya sea sobre un Linux-Host dedicado o bien conviviendo con otros componentes en un mismo host.

Ésto es gracias al hecho de que la *Ansible playbook* puede ser invocada desde el *bash script* llamado *first\_boot\_installer.tpl*, en el caso de acudir al mismo como *provisioner* de un Linux-Host dedicado para hostear el componente dentro del marco de un *cluster*, así como también importada por la *Ansible playbook* del componente *OMLApp* a la hora de desplegar varios componentes en el mismo host donde corre la aplicación *OMLApp*.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_deploy_cluster_aio.png" alt=""><figcaption></figcaption></figure>

Por lo tanto, concluimos en el hecho de que cada componente puede, o bien existir en un host standalone, o también convivir con OMLApp en el mismo host. Éstas posibilidades son contempladas por el método de instalación.

Dicho método de instalación está completamente basado en **variables de entorno** que se generan en el deploy y tienen como finalidad entre otras cosas, contener las direcciones de red y puerto de cada componente necesario para lograr la interacción. Es decir, todos los archivos de configuración de cada componente de OMniLeads, *buscan* a su par invocando variables de entorno de OS. Por ejemplo, el componente Asterisk apunta sus AGIs a la envvar **$REDIST\_HOST** y **$REDIS\_PORT** a la hora de intentar generar una conexión hacia *Redis*.

Gracias a las variables de entorno, se logra una compatibilidad entre los enfoques bare-metal y contenedores docker, es decir que podemos desplegar OMniLeads instalando todos los componentes en un host, distribuyendo los mismos en varios hosts o directamente sobre contenedores Docker.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_envvars_deploy.png" alt=""><figcaption></figcaption></figure>

El hecho de aprovisionar los parámetros de configuración vía variables de entorno, y además considerando la posibilidad de desplegar siempre la aplicación resguardando los datos que deben persistir (grabaciones de llamadas y DB PostgreSQL) sobre recursos montados sobre el sistema de archivos de Linux que aloja cada componente, podemos entonces plantear el hecho de trabajar con infraestructura inmutable como opción si así lo quisiéramos. Podemos fácilmente destruir y recrear cada componente, sin perder los datos importantes a la hora de hacer un redimensionamiento del componente o plantear actualizaciones. Podremos simplemente descartar el host donde corre una versión y desplegar uno nuevo con la última actualización.

Tenemos el potencial del abordaje que plantea el paradigma de infraestructura como código o infraestructura inmutable, planteado desde la perspectiva de las nuevas generaciones IT que operan dentro de la cultura DevOps. Éste enfoque es algo opcional, ya que se puede manejar actualizaciones desde la óptica más tradicional sin tener que destruir la instancia que aloja el componente.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/arq_envvars_deploy_2.png" alt=""><figcaption></figcaption></figure>

###


# Instalación de OMniLeads

{% embed url="<https://youtu.be/a-oeSKaOWU4?si=WttsooxIeXRG_W0u>" %}
OMniLEads Quick Install
{% endembed %}

## Instalación de OMniLeads

Antes de avanzar con la instalación, se recomienda leer y entender la sección [Arquitectura y componentes](/introduccion-a-omnileads/arquitectura-y-componentes).

Desde los inicios del Proyecto, las instalaciones se han basado en sistemas operativos CentOS7. Sin embargo, dada su pronta fecha de expiración (end-of-life), el equipo de OMniLeads ha trabajado arduamente para soportar sistemas operativos modernos como *Ubuntu Server, Debian Server, Rocky Linux, entre otros.*

A partir de la adopción de una Arquitecturas basada en Contenedores y métodos de instalación totalmente automatizados, las tareas de Administración y Mantenimiento IT se han simplificado de manera significativa debido a la clara abstracción de las dependencias de capas subyacentes.

Describiremos a continuación los diferentes escenarios correspondientes a formatos desplegables. No obstante, mayor información se podrá encontrar en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).<br>

* [Correr OMniLeads con Docker](/instalacion-de-omnileads/deploy-utilizando-docker): Permite correr la aplicación en una estación de trabajo (Mac, Linux, Windows) o en un Linux Host, con una configuración mínima y funcional "todo en uno".
* [Correr OMniLeads con Automatización Ansible](/instalacion-de-omnileads/deploy-utilizando-ansible): Permite correr la aplicación en cualquier sistema operativo Linux moderno con soporte de [Podman](https://docs.podman.io/en/latest/). Bajo este formato, es posible manejar cientos de instancias en paralelo gracias a los bondades de Ansible.

###


# Deploy utilizando Docker

En el siguiente apartado abordaremos los pasos necesarios para tener OMniLeads corriendo en entornos dockerizados.

Se requiere contar con Docker-Engine instalado en el ambiente a desplegar (Linux, Mac, o Win$):

* [Docker Install documentation](https://docs.docker.com/get-docker/)

y el siguiente repositorio clonado:

```
git clone https://gitlab.com/omnileads/omldeploytool.git
cd omldeploytool/docker-compose
```

## OMniLeads & Docker Compose <a href="#user-content-omnileads-docker-compose" id="user-content-omnileads-docker-compose"></a>

Este entorno es ideal para un Testing Inicial o Prueba de Concepto ("PoC") local, debido a su rápido despliegue. Sin embargo no es recomendado para entornos productivos.

En este directorio, encontraremos 3 entornos de Docker Compose:

* **test-env**: se utiliza para lanzar el stack de manera local mediante Docker Desktop.
* **prod-env**: se utiliza para lanzar el stack en un VPS (Virtual Private Server) o VM (Virtual Machine).
* **dev-env**: se utiliza para lanzar el stack de desarrollo (development) de manera local mediante Docker Desktop.

Para cualquiera de los casos, se precisa crear un archivo .env a partir de copiar el archivo env de ejemplo, provisto por el escenario elegido. A modo de ejemplo, intentaremos lanzar "test-env":

```
$ cp env test-env/.env
$ cd test-env
$ docker-compose up -d
$ ../oml_manage --reset_pass
$ ../oml_manage --init_env
```

Una vez que el entorno esté corriendo, simplemente se accede a la Suite mediante <https://localhost> con user y password "admin".

* [Docker Desktop](/instalacion-de-omnileads/deploy-utilizando-docker/deploy-en-docker-destkop)
* [Docker en VPS Cloud o VM](/instalacion-de-omnileads/deploy-utilizando-docker/deploy-en-docker-para-vps-cloud-o-vm)
* [Docker en VPS Cloud o VM utilizando Bucket Externo](/instalacion-de-omnileads/deploy-utilizando-docker/deploy-en-docker-para-vps-cloud-o-vm-con-bucket-externo)


# Deploy en Docker-Destkop

Para este escenario, no resulta mandatorio trabajar sobre el archivo de variables. Simplemente se procede con la ejecución de la instancia a partir del siguiente comando:

```
$ docker-compose up -d 
```

Arribaremos a un resultado como el que se muestra en pantalla:

<figure><img src="/files/AIi3BX4ioprm51hhFg2Q" alt=""><figcaption></figcaption></figure>

En el apartado de [First Login](/instalacion-de-omnileads/first-login), se pueden revisar los pasos necesarios para obtener el primer acceso a la UI con usuario Administrador.

### Configurando Wombat Dialer <a href="#pstn_emulator" id="pstn_emulator"></a>

\
[Wombat Dialer](https://www.wombatdialer.com) es un software de terceros y no forma parte del stack FLOSS de OMniLeads. Sin embargo, es una opción válida para implementar una lógica de campaña de marcación predictiva. \
\
El archivo docker-compose.yml incluye el servicio Wombat Dialer & MariaDB (su backend SQL), por lo que está disponible para configuración e integración accediendo a localhost o a su Dirección IP según convenga: <https://localhost:8082>/wombat o <https://your\\_VM\\_VPS\\_IP:8082/wombat>.

Los otros escenarios no implementan Wombat Dialer de forma predeterminada, por lo que si desea implementar Wombat Dialer en producción, deberá tener una VM/VPS para instalar el marcador allí y luego configurarlo para que funcione con OMniLeads. \
\
Consulte nuestra documentación oficial en la sección de [Creación de Campañas Dialer.](/gestiones-del-administrador-it#configuracion-del-modulo-de-discador-predictivo)

Nota: al configurar las credenciales iniciales de mariadb, el password raíz es **admin123**, luego, en la conexión AMI, la dirección del servidor es **acd**.

### Simulando llamadas desde/hacia PSTN sobre Docker-Desktop <a href="#pstn_emulator" id="pstn_emulator"></a>

Adicional al despliegue de componentes de OMniLeads, se agrega a la lista de arriba un container "emulador de red pública pstn" (pstn-emulator). De esta manera, se pueden realizar llamadas via OMniLeads y forzar diferentes resultados de acuerdo al número telefónico discado. A su vez, también es posible simular llamadas entrantes por línea de comandos.

**Reglas de Plan de Discado para Llamadas Salientes:**

* Cualquier número discado que finalice con 0: PSTN devolverá una señal BUSY (ocupado).
* Cualquier número discado que finalice con 1: PSTN atenderá la llamada y reproducirá audios de ejemplo.
* Cualquier número discado que finalice con 2: PSTN atenderá la llamada, reproducirá un audio corto y luego cortará (simulando un corte del contacto).
* Cualquier número discado que finalice con 3: PSTN atenderá la llamada luego de 35 segundos de Ringing.
* Cualquier número discado que finalice con 5: PSTN enviará una señal de Ringing durante 120 segundos y luego cortará (simulando un evento de NO\_ANSWER).
* Cualquier número discado que finalice con 9: PSTN enviará una señal de Congestión.

**Generando llamadas entrantes hacia OMniLeads:**

```
./oml_manage --call_generate
```

La ejecución de este script permitirá la generación de una llamada entrante, que se derivará a la campaña por default creada en el [apartado de generación de datos de testing](/instalacion-de-omnileads/first-login#user-content-create-some-testing-data).&#x20;

**Registrando un SIP Phone para simular llamadas hacia OMniLeads:**

También es posible registrar un clásico "Softphone" al PSTN-Emulator para interaccionar con la Suite de OMniLeads y simular llamadas.

Las credenciales por default de la cuenta SIP se pueden verificar a continuación:

* username: 1234567&#x20;
* secret: omnileads&#x20;
* domain: YOUR\_HOSTNAME (cambiar el valor "YOUR\_HOSTNAME" el correspondiente al nombre de host o Dirección IP del entorno)
* port: el puerto por default para el PSTN Emulator es el UDP 6060.

A partir de esta configuración, ya es posible enviar llamadas desde el SIP Phone al DID 01177660010, como así también generar contacto desde un agente hacia el PSTN Number 1234567 (número del abonado registrado al SIP Phone).

<figure><img src="/files/Ag89qHfeB4uWsY5Q7FGl" alt=""><figcaption></figcaption></figure>

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# Deploy en Docker para VPS Cloud o VM

Ya se ha visto como levantar OMniLeads utilizando Docker Dekstop. Sin embargo, para ambientes que utilicen Virtual Machines (VM) o Virtual Private Servers (VPS), es preciso trabajar sobre algunas variables de configuración.

Para ello, dentro del Linux Host haremos uso del script de despliegue **deploy.sh** de nuestro repositorio "prod-env" mediante el siguiente comando:

```
$ curl -o deploy.sh -L "https://gitlab.com/omnileads/omldeploytool/-/raw/main/docker-compose/prod-env/deploy.sh?ref_type=heads" && chmod +x deploy.sh
$ export DOCKER_ENGINE_IPV4=X.X.X.X && ./deploy.sh
```

Una vez que el entorno es iniciado, se puede proceder al login de plataforma accediendo a la URL <https://X.X.X.X>, utilizando username y password "admin".

<mark style="color:red;">**Importante para entornos detrás de NAT**</mark>

Dado que el protocolo VoIP es sensible a ambientes de NAT (Network Address Translation), y dado que OMniLeads es usualmente desplegado a partir de una IP LAN, ciertos ajustes son necesarios para asegurar conectividad en sus componentes.

Específicamente, para conectar a PBXs y/o Session Border Controllers (SBCs) mediante SIP Trunk y permitir acceso de usuario mediante internet, se debe considerar agregar la IP de NAT mediante argumento. Ésto se muestra en el siguiente ejemplo:

```
$ curl -o deploy.sh -L "https://gitlab.com/omnileads/omldeploytool/-/raw/main/docker-compose/prod-env/deploy.sh?ref_type=heads" && chmod +x deploy.sh
$ export DOCKER_ENGINE_IPV4=X.X.X.X NAT_IPV4=Z.Z.Z.Z && ./deploy.sh
```

<figure><img src="/files/os7yt4i9zKcJJSsNg6St" alt=""><figcaption></figcaption></figure>

En el apartado de [First Login](/instalacion-de-omnileads/first-login), se pueden revisar los pasos necesarios para obtener el primer acceso a la UI con usuario Administrador.

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# Deploy en Docker para VPS Cloud o VM con Bucket Externo

Para este escenario, similar al de la sección anterior, se consideran variables extras referentes a la configuración de un Bucket de Almacenamiento Externo (Object Storage).

Consideraremos la definición del Object Storage a utilizar a partir de las variables **BUCKET\_URL** (dirección url del bucket externo), **BUCKET\_ACCESS\_KEY** y **BUCKET\_SECRET\_KEY** (para las credenciales de acceso), **BUCKET\_REGION** (para la región) y **BUCKET\_NAME** (para el nombre del bucket definido en el cloud provider).  Estas variables entran en juego en los archivos .yml referentes a cada entorno.

En cualquier caso, una vez parametrizados, podemos proceder a bajar los servicios o levantarlos nuevamente mediante instrucciones de Docker-Compose.

```
$ docker-compose down
$ docker-compose up -d  
```

<figure><img src="/files/Evia3CnbNlMYX81tCIVA" alt=""><figcaption></figcaption></figure>

En el apartado de [First Login](/instalacion-de-omnileads/first-login), se pueden revisar los pasos necesarios para obtener el primer acceso a la UI con usuario Administrador.

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# Deploy utilizando Ansible

En el siguiente apartado abordaremos los pasos necesarios para tener OMniLeads corriendo en entornos contenerizados bajo [Podman](https://docs.podman.io/en/latest/).

Es requisito fundamental contar con una distribución de Linux con Podman instalado (3.0.0 or higher). En la actualidad, sistemas operativos modernos como Debian, Ubuntu, Rocky, o Alma Linux, tienen repositorios activados que permiten su descarga.

<mark style="color:red;">Nota: Si se trabaja sobre un VPS con una IP Pública, es mandatorio contar con una interface de red dedicada a una IP Privada.</mark>

Para ello procedemos a clonar el repositorio del Deploy Manager del proyecto y nos posicionamos en la carpeta de Ansible:

```
git clone https://gitlab.com/omnileads/omldeploytool.git
cd omldeploytool/ansible
```

Es importante destacar que el uso del Deploy Manager con Ansible nos permitirá múltiples acciones administrativas:

* crear nuevas instancias
* llevar adelante procesos de upgrades & rollbacks
* llevar proceos de Disaster Recovery: backups & restores
* administrar cientos de instancias de OMniLleads en paralelo, mediante archivos de inventario

<figure><img src="/files/oH31lSl5snFhRXXrnO8F" alt=""><figcaption></figcaption></figure>

Para cada instancia operativa, una colección de componentes es invocada mediante los servicios de SystemD, cada uno de ellos ejecutándose en un contenedor. También es posible agrupar dichos contenedores en instancias físicas separadas (cluster horizontal) y darles características de redundancia y disponibilidad (cluster HA).

Debajo se puede apreciar un bosquejo de la arquitectura basada en contenedores y sus componentes involucrados:

&#x20;

<figure><img src="/files/bhjGFQ7esEpmc2LoTTis" alt=""><figcaption></figcaption></figure>

### Bash Script y Ansible como piezas clave 📋 <a href="#bash-ansible" id="bash-ansible"></a>

Una instancia de OMniLeads es desplegada en un Linux server utilizando SystemD y Podman, a partir de un Bash Script que se alimenta de variables de entorno y utiliza un set de archivos de Ansible para automatización (Playbooks + Templates).&#x20;

Este bash script será el responsable de la ejecución de múltiples acciones sobre uno o más  tenants al mismo tiempo. Básicamente, busca el archivo de inventario de acuerdo a la ubicación especificada en la línea de comando y a partir de allí lanza el Playbook "raíz" de Ansible (matrix.yml).

Ejecutando el siguiente comando, podemos interpretar sus posibles usos:

```
./deploy.sh --help
```

Si el objetivo es correr instalaciones, upgrades, backups o restores, se deben especificar 2 parametros fundamentales:

* **--action=**
* **--tenant=**

En el siguinte ejemplo, el script llevará a cabo una acción de instalación sobre la carpeta "tenant-folder", en cuyo interior contiene el archivo de inventario correspondiente con la descripción y parametrización de su/s tenant/s.

```
./deploy.sh --action=install --tenant=<tenant-folder>
```

### Systemd & Podman para gestión de componentes 🔧 <a href="#podman-systemd" id="podman-systemd"></a>

Bajo este método de instalación, contaremos con la posibilidad de manejar contenedores (componentes) como servicios tradicionales de SystemD.

```
systemctl start component
systemctl restart component
systemctl stop component
```

Detrás de cada acción disparada por el comando systemctl, un contenedor de Podman es lanzado, parado o reiniciado. Este contenedor es el resultado de una imágen invocada a partir de las variables de entorno configuradas en el deployment.

Debajo se expone un ejemplo, en el que observamos el archivo SystemD para el componente de Nginx: */etc/systemd/system/nginx.service*:

```
[Unit]
Description=Podman container-oml-nginx-server.service
Documentation=man:podman-generate-systemd(1)
Wants=network-online.target
After=network-online.target
RequiresMountsFor=%t/containers

[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
TimeoutStopSec=70
ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run \
  --cidfile=%t/%n.ctr-id \
  --cgroups=no-conmon \
  --sdnotify=conmon \
  --replace \
  --detach \
  --network=host \
  --env-file=/etc/default/nginx.env \
  --name=oml-nginx-server \
  --volume=/etc/omnileads/certs:/etc/omnileads/certs \
  --volume=django_static:/opt/omnileads/static \
  --volume=django_callrec_zip:/opt/omnileads/asterisk/var/spool/asterisk/monitor \
  --volume=nginx_logs:/var/log/nginx/ \
  --rm  \
  docker.io/omnileads/nginx:230215.01
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify
NotifyAccess=all

[Install]
WantedBy=default.target
```

Nginx, a su vez, tendrá su archivo de variables de entorno definidas de la siguiente manera: */etc/default/nginx.env*:

```
DJANGO_HOSTNAME=172.16.101.221
DAPHNE_HOSTNAME=172.16.101.221

KAMAILIO_HOSTNAME=localhost
WEBSOCKETS_HOSTNAME=172.16.101.221
ENV=prodenv

S3_ENDPOINT=http://172.16.101.221:9000
```

### Pasemos a la acción! <a href="#podman-systemd" id="podman-systemd"></a>

Dependiendo de la estructura del archivo de inventario y de sus variables definidas, OMniLeads puede ser desplegado de manera remota en 3 esquemas posibles:

* [Correr OMniLeads All in One con Podman & Systemd](/instalacion-de-omnileads/deploy-utilizando-ansible/deploy-en-aio-all-in-one): Todos los componentes representados en contenedores se despliegan en el mismo Linux Host.&#x20;
* [Correr OMniLeads Cluster con Podman & Systemd](/instalacion-de-omnileads/deploy-utilizando-ansible/deploy-en-ait-all-in-three)**:** Los componentes se agrupan en una estructura de Cluster Horizontal (útil para alto tráfico o escenarios de alta carga).
* [Correr OMniLeads Cluster HA con Podman & Systemd](/instalacion-de-omnileads/deploy-utilizando-ansible/deploy-en-ha-high-availability)**:** Los componentes se agrupan en dos nodos Activo-Pasivo para soporte de Alta Disponibilidad.


# Deploy en AIO (All-In-One)

<figure><img src="/files/li6jQZG2yTKFFZFDeTUI" alt=""><figcaption></figcaption></figure>

## OMniLeads en un Linux Host "All In One" <a href="#aio-deploy" id="aio-deploy"></a>

Mediante este método de instalación, es posible desplegar la Suite de OMniLeads en un único Linu Host con todos sus componentes involucrados de manera local (localhost):

<figure><img src="/files/QmikEOmtxStCjXFAfabe" alt=""><figcaption></figcaption></figure>

Para ello, se require una instancia de Linux (con cualquier sistema operativo moderno) con acceso a Internet. Dado que Ansible utiliza un proceso de conexión SSH (secure shell) para acceder a la instancia y ejecutar su playbook, es requisito obligatorio contar con la llave pública SSH y el archivo known\_hosts configurado oportunamente.

### Comprendiendo el Archivo de Inventario <a href="#pstn_emulator" id="pstn_emulator"></a>

Debajo se especifica un archivo de inventario genérico para un típico despliegue en el esquema AIO. **En su primera sección** se listan los diferentes hosts por tenant y por tipo de deployment a ejecutar (aio\_instances):

<figure><img src="/files/4P1YU7wZwsz1EbWX5Fmt" alt=""><figcaption></figcaption></figure>

**En su segunda sección**, el archivo de inventario permite parametrizar variables de entorno necesarias para la acción. <mark style="color:red;">Nota: Por default, todas ellas afectan de manera directa a TODAS las instancias declaradas, a menos que una variable (o grupo de variables) sea especificada en la sección del host (o grupo de hosts) en cuestión.</mark>

Finalmente, **la última sección** comprende a la agrupación de hosts en función de la arquitectura seleccionada. En nuestro caso, bajo la etiqueta *omnileads\_aio* se listaria la/s instancia/s AIO que se pretende/n deployar.

Las etiquetas de *omnileads\_data, omnileads\_voice*, etc. refieren a etiquetas de despliegues de Cluster Horizontal y Cluster HA, que se verán en próximas secciones). Debajo se muestra un ejemplo:

```
#############################################################################################################
# -- In this section the hosts are grouped based on the type of deployment (AIO, Cluster & Cluster HA).     #
#############################################################################################################

omnileads_aio: ####### <<<<<<<<<<<< USTED ESTA AQUI! <<<<<<<<<<<<<<<
  hosts:
    #tenant_example_1:
    #tenant_example_2:
    #tenant_example_3:
    #tenant_example_4:
    #tenant_example_7_aio_A:
    #tenant_example_7_aio_B:

################################################    
omnileads_data:
  hosts:
    #tenant_example_5_data:  
    
omnileads_voice:
  hosts:
    #tenant_example_5_voice:

omnileads_app:
  hosts:
    #tenant_example_5_app:

################################################
ha_omnileads_sql:
  hosts:
    #tenant_example_7_sql_A:
    #tenant_example_7_sql_B:

```

### Ahora sí, manos a la Obra! <a href="#pstn_emulator" id="pstn_emulator"></a>

Como primer paso, procedemos a crear la carpeta **instances** en el directorio raíz. Seguido a ello, en su interior crearemos una subcarpeta donde alojaremos el archivo de inventario de ejemplo provisto por el repositorio:

<mark style="color:red;">Nota: Si bien estamos dentro de un repositorio versionado, el nombre "instances" está reservado y es ignorado por el repositorio a partir del archivo .gitignore.</mark>

<pre><code><strong>mkdir instances
</strong>mkdir instances/onpremise_oml
cp inventory.yml instances/onpremise_oml
</code></pre>

De acuerdo a lo comprendido en las secciones del archivo de inventario, declararemos nuestra futura instancia de OMniLeads en la sección de aio. En nuestro caso, usaremos el nombre de ejemplo "algarrobo" para definir el tenant:

```
algarrobo:
  tenant_id: algarrobo
  ansible_host: 190.19.150.18
  omni_ip_lan: 172.16.101.44
  infra_env: lan
```

Es importante especificar el escenario en el que se trabajará. Si usaremos un VPS, el entorno a configurar será "cloud", y será "lan" si se usa una Virtual Machine. Definiremos para ello la variable de entorno **infra\_env** según sea el caso: "cloud" (por default) o "lan".

Las variables **tenant\_id** (nombre del tenant), **ansible\_host** (dirección IP que deberá alcanzar Ansible para ejecutar la Playbook) y **omni\_ip\_lan** (dirección IP privada de la interface lan) son mandatorias para especificar al tenant. A su vez, las variables **bucket\_url** y **postgres\_host** deben quedar comentadas, de manera tal que tanto PostgreSQL como MinIO Object Storage sean instaladas dentro de la instancia.

Finalmente, debemos asegurarnos de que la última sección contenga al tenant dentro del grupo *omnileads\_aio*. Debajo un ejemplo sobre nuestro tenant "algarrobo":

```
#############################################################################################################
# -- In this section the hosts are grouped based on the type of deployment (AIO, Cluster & Cluster HA).     #
#############################################################################################################

omnileads_aio:
  hosts:
    algarrobo:
    #tenant_example_3:
    #tenant_example_4:
    #tenant_example_2:

omnileads_data:
  hosts:
    #tenant_example_5_data:
    #tenant_example_6_data:
    
omnileads_voice:
  hosts:
    #tenant_example_5_voice:
    #tenant_example_6_voice:

omnileads_app:
  hosts:
    #tenant_example_5_app:
    #tenant_example_6_app:
```

Con el archivo de inventario configurado, procedemos a ejecutar la acción de instalación del nuevo tenant:

```
./deploy.sh --action=install --tenant=onpremise_oml
```

En el apartado de [First Login](/instalacion-de-omnileads/first-login), se pueden revisar los pasos necesarios para obtener el primer acceso a la UI con usuario Administrador.

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# Deploy en AIT (All-In-Three)

<figure><img src="/files/K29ghe7q3ptzUv2yQmaf" alt=""><figcaption></figcaption></figure>

## OMniLeads en un Cluster Horizontal <a href="#aio-deploy" id="aio-deploy"></a>

Mediante este método de instalación, es posible desplegar la Suite de OMniLeads en una disposición de Cluster Horizontal, agrupando contenedores según el siguiente esquema:

<figure><img src="/files/GqMCRMV62jf5PBmwkFen" alt=""><figcaption></figcaption></figure>

Para ello, se requiren de tres instancias de Linux (con cualquier sistema operativo moderno) con acceso a Internet. Dado que Ansible utiliza un proceso de conexión SSH (secure shell) para acceder a la instancia y ejecutar su playbook, es requisito obligatorio contar con la llave pública SSH y el archivo known\_hosts configurado oportunamente en cada host.

### Comprendiendo el Archivo de Inventario <a href="#pstn_emulator" id="pstn_emulator"></a>

Debajo se especifica un archivo de inventario genérico para un típico despliegue en el esquema AIT. **En su primera sección** se listan los diferentes hosts por tenant y por tipo de deployment a ejecutar (cluster\_instances):

<figure><img src="/files/d3LJuDZ1BKvdNrRXZf9a" alt=""><figcaption></figcaption></figure>

**En su segunda sección**, el archivo de inventario permite parametrizar variables de entorno necesarias para la acción. <mark style="color:red;">Nota: Por default, todas ellas afectan de manera directa a TODAS las instancias declaradas, a menos que una variable (o grupo de variables) sea especificada en la sección del host (o grupo de hosts) en cuestión.</mark>

Finalmente, **la última sección** comprende a la agrupación de hosts en función de la arquitectura seleccionada. En nuestro caso, bajo las etiquetas *omnileads\_data, omnileads\_voice y omnileads\_app* se listarian los hosts correspondientes a la/s instancia/s que se pretende/n deployar.

Debajo se muestra un ejemplo:

```
#############################################################################################################
# -- In this section the hosts are grouped based on the type of deployment (AIO, Cluster & Cluster HA).     #
#############################################################################################################

omnileads_aio: 
  hosts:
    #tenant_example_1:
    #tenant_example_2:
    #tenant_example_3:
    #tenant_example_4:
    #tenant_example_7_aio_A:
    #tenant_example_7_aio_B:

################################################    
omnileads_data:   ####### <<<<<<<<<<<< USTED ESTA AQUI! <<<<<<<<<<<<<<<
  hosts:
    #tenant_example_5_data:  
    
omnileads_voice:
  hosts:
    #tenant_example_5_voice:

omnileads_app:
  hosts:
    #tenant_example_5_app:

################################################
ha_omnileads_sql:
  hosts:
    #tenant_example_7_sql_A:
    #tenant_example_7_sql_B:

```

### Ahora sí, manos a la Obra! <a href="#pstn_emulator" id="pstn_emulator"></a>

Como primer paso, procedemos a crear la carpeta **instances** en el directorio raíz. Seguido a ello, en su interior crearemos una subcarpeta donde alojaremos el archivo de inventario de ejemplo provisto por el repositorio:

<mark style="color:red;">Nota: Si bien estamos dentro de un repositorio versionado, el nombre "instances" está reservado y es ignorado por el repositorio a partir del archivo .gitignore.</mark>

<pre><code><strong>mkdir instances
</strong>mkdir instances/omlcluster
cp inventory.yml instances/omlcluster
</code></pre>

De acuerdo a lo comprendido en las secciones del archivo de inventario, declararemos nuestra futura instancia de OMniLeads en AIT en la sección de cluster. En nuestro caso, usaremos el nombre de ejemplo "tala" para definir el tenant:

```
cluster_instances:
  children:
    tala:
      hosts:
        tala_data:
          ansible_host: 172.16.101.41
          omni_ip_lan: 172.16.101.41
          ansible_ssh_port: 22
        tala_voice:
          ansible_host: 172.16.101.42
          omni_ip_lan: 172.16.101.42
          ansible_ssh_port: 22
        tala_app:
          ansible_host: 172.16.101.43
          omni_ip_lan: 172.16.101.43
          ansible_ssh_port: 22
      vars:
        tenant_id: tala
        data_host: 172.16.101.41
        voice_host: 172.16.101.42
        application_host: 172.16.101.43
        infra_env: lan

```

Es importante especificar el escenario en el que se trabajará. Si usaremos un VPS, el entorno a configurar será "cloud", y será "lan" si se usa una Virtual Machine. Definiremos para ello la variable de entorno **infra\_env** según sea el caso: "cloud" (por default) o "lan".

Las variables **tenant\_id** (nombre del tenant), **ansible\_host** (dirección IP que deberá alcanzar Ansible para ejecutar la Playbook) y **omni\_ip\_lan** (dirección IP privada de la interface lan) son mandatorias para especificar al tenant. A su vez, las variables **bucket\_url** y **postgres\_host** deben quedar comentadas, de manera tal que tanto PostgreSQL como MinIO Object Storage sean instaladas dentro de la instancia \_data.

Finalmente, debemos asegurarnos de que la última sección contenga al tenant dentro de sus grupos correspondientes (\_*data, \_*&#x76;oice y \_app). Debajo un ejemplo sobre nuestro tenant "tala":

```
#############################################################################################################
# -- In this section the hosts are grouped based on the type of deployment (AIO, Cluster & Cluster HA).     #
#############################################################################################################

omnileads_aio:
  hosts:
    #tenant_example_1:
    #tenant_example_2:
    #tenant_example_3:
    #tenant_example_4:

omnileads_data:
  hosts:
    tala_data:    
    
omnileads_voice:
  hosts:
    tala_voice:

omnileads_app:
  hosts:
    tala_app:
```

Con el archivo de inventario configurado, procedemos a ejecutar la acción de instalación del nuevo tenant:

```
./deploy.sh --action=install --tenant=omlcluster
```

En el apartado de [First Login](/instalacion-de-omnileads/first-login), se pueden revisar los pasos necesarios para obtener el primer acceso a la UI con usuario Administrador.

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# Deploy en HA (High Availability)

<figure><img src="/files/kOtYvgHcgOUu73aWtcgV" alt=""><figcaption></figcaption></figure>

## OMniLeads en un Cluster HA <a href="#aio-deploy" id="aio-deploy"></a>

Mediante este método de instalación, es posible desplegar la Suite de OMniLeads en una disposición de Cluster de Alta Disponibilidad, agrupando contenedores según el siguiente esquema:

<figure><img src="/files/fTFWOFuKNVg8jfPXhv2t" alt=""><figcaption></figcaption></figure>

Para ello, se requieren de cuatro instancias de Linux (con cualquier sistema operativo moderno) con acceso a Internet. Dado que Ansible utiliza un proceso de conexión SSH (secure shell) para acceder a la instancia y ejecutar su playbook, es requisito obligatorio contar con la llave pública SSH y el archivo known\_hosts configurado oportunamente en cada host.

### Comprendiendo el Archivo de Inventario <a href="#pstn_emulator" id="pstn_emulator"></a>

Debajo se especifica un archivo de inventario genérico para un típico despliegue en el esquema de Cluster HA. **En su primera sección** se listan los diferentes hosts por tenant y por tipo de deployment a ejecutar (ha\_instances):

<figure><img src="/files/gY4YBFIDp3m7K9GhTlOj" alt=""><figcaption></figcaption></figure>

**En su segunda sección**, el archivo de inventario permite parametrizar variables de entorno necesarias para la acción. <mark style="color:red;">Nota: Por default, todas ellas afectan de manera directa a TODAS las instancias declaradas, a menos que una variable (o grupo de variables) sea especificada en la sección del host (o grupo de hosts) en cuestión.</mark>

Finalmente, **la última sección** comprende a la agrupación de hosts en función de la arquitectura seleccionada. En nuestro caso, bajo las etiquetas *omnileads\_aio y ha\_omnileads\_sql,* se listarian los hosts correspondientes a la/s instancia/s que se pretende/n deployar ("\_*aio" hará referencia a los nodos A y B de HA para Aplicación, mientras que "\_sql" hará referencia a los nodos read-only y read-write de PostgreSQL*).

Debajo se muestra un ejemplo:

```
#############################################################################################################
# -- In this section the hosts are grouped based on the type of deployment (AIO, Cluster & Cluster HA).     #
#############################################################################################################

omnileads_aio: 
  hosts:
    #tenant_example_1:
    #tenant_example_2:
    #tenant_example_3:
    #tenant_example_4:
    #tenant_example_7_aio_A:
    #tenant_example_7_aio_B:

################################################    
omnileads_data:   
  hosts:
    #tenant_example_5_data:  
    
omnileads_voice:
  hosts:
    #tenant_example_5_voice:

omnileads_app:
  hosts:
    #tenant_example_5_app:

################################################
ha_omnileads_sql:
  hosts:
    #tenant_example_7_sql_A:
    #tenant_example_7_sql_B:

```

### Ahora sí, manos a la Obra! <a href="#pstn_emulator" id="pstn_emulator"></a>

Como primer paso, procedemos a crear la carpeta **instances** en el directorio raíz. Seguido a ello, en su interior crearemos una subcarpeta donde alojaremos el archivo de inventario de ejemplo provisto por el repositorio:

<mark style="color:red;">Nota: Si bien estamos dentro de un repositorio versionado, el nombre "instances" está reservado y es ignorado por el repositorio a partir del archivo .gitignore.</mark>

<pre><code><strong>mkdir instances
</strong>mkdir instances/omlclusterha
cp inventory.yml instances/omlclusterha
</code></pre>

De acuerdo a lo comprendido en las secciones del archivo de inventario, declararemos nuestra futura instancia de OMniLeads en HA en la sección de ha\_instances. En nuestro caso, usaremos el nombre de ejemplo "eucalipto" para definir el tenant:

```
    ha_instances:
      children:
        eucalipto:
          hosts:
            eucalipto_sql_A:
              tenant_id: eucalipto_sql_A
              ansible_host: 172.16.101.101
              omni_ip_lan: 172.16.101.101              
              ha_rol: main
            eucalipto_sql_B:
              tenant_id: eucalipto_sql_B
              ansible_host: 172.16.101.102
              omni_ip_lan: 172.16.101.102
              ha_rol: backup
            eucalipto_aio_A:
              tenant_id: eucalipto_aio_A
              ansible_host: 172.16.101.109
              omni_ip_lan: 172.16.101.109
              ha_rol: main
            eucalipto_aio_B:
              tenant_id: eucalipto_aio_B
              ansible_host: 172.16.101.110
              omni_ip_lan: 172.16.101.110
              ha_rol: backup              
          vars:            
            infra_env: lan
            omnileads_ha: true
            ha_vip_nic: ens18
            netaddr: 172.16.101.0/16
            netprefix: 16
            ha_vip_nic: ens18             
            postgres_1: 172.16.101.101
            postgres_2: 172.16.101.102
            aio_1: 172.16.101.109
            aio_2: 172.16.101.110
            omnileads_vip: 172.16.101.200
            postgres_rw_vip: 172.16.101.201
            postgres_ro_vip: 172.16.101.202
            bucket_url: https://172.16.101.100:9000
            bucket_access_key: mYLcr7sdsahfaklsdx5vEbe7PO
            bucket_secret_key: v1Dl34Q29Bv6ruaWSjkdhajskhdajks7cUAEvSVfAtvGkR
            bucket_name: eucalipto


```

Es importante especificar el escenario en el que se trabajará. Si usaremos un VPS, el entorno a configurar será "cloud", y será "lan" si se usa una Virtual Machine. Definiremos para ello la variable de entorno **infra\_env** según sea el caso: "cloud" (por default) o "lan".

Las variables **tenant\_id** (nombre del tenant) y **ansible\_host** (dirección IP que deberá alcanzar Ansible para ejecutar la Playbook) son mandatorias para especificar al tenant. A su vez, se listan un conjunto de variables necesarias para el correcto funcionamieto del cluster HA:

* ha\_vip\_nic: este parámetro hace referencia a la IP virtual a asignar al cluster. En un entorno de alta disponiblidad debemos indicar a cada nodo del cluster su condición inicial (ha\_rol), de esta manera se especifica el nombre de la NIC sobre la cual la VIP se establecerá.
* omnileads\_ha: este parámetro instruye a Ansible a correr ciertas tasks de playbook relacionadas a configuración de HA
* netaddr y netprefix: parámetros utilizados para describir la red y máscara del entorno.
* postgres\_1: dirección IP del nodo 1 de PostgreSQL
* postgres\_2: dirección IP del nodo 2 de PostgreSQL
* aio\_1: dirección IP del nodo 1 de App
* aio\_2: dirección IP del nodo 2 de App
* omnileads\_vip: dirección IP virtual para el acceso HTTPS del cluster HA
* postgres\_rw\_vip: dirección IP del nodo RW (read-write) de PostgreSQL
* postgres\_ro\_vip: dirección IP del nodo RO (read-only) de PostgreSQL
* bucket\_url: la url del bucket externo (object storage)

El resto de los paráemtros se pueden customizar a gusto.

Finalmente, debemos asegurarnos de que la última sección contenga a los hosts del cluster correspondiente al tenant HA (tanto en \_*aio como en* \_sql). Debajo un ejemplo sobre nuestro tenant "eucalipto":

```
#############################################################################################################
# -- In this section the hosts are grouped based on the type of deployment (AIO, Cluster & Cluster HA).     #
#############################################################################################################

omnileads_aio:
  hosts:
    #tenant_example_1:
    #tenant_example_2:
    #tenant_example_3:
    #tenant_example_4:
    eucalipto_aio_A:
    eucalipto_aio_B:

################################################    
omnileads_data:
  hosts:
    #tenant_example_5_data:  
    
omnileads_voice:
  hosts:
    #tenant_example_5_voice:

omnileads_app:
  hosts:
    #tenant_example_5_app:

################################################
ha_omnileads_sql:
  hosts:
    eucalipto_sql_A:
    eucalipto_sql_B:

```

Con el archivo de inventario configurado, procedemos a ejecutar la acción de instalación del nuevo tenant:

```
./deploy.sh --action=install --tenant=omlclusterha
```

En el apartado de [First Login](/instalacion-de-omnileads/first-login), se pueden revisar los pasos necesarios para obtener el primer acceso a la UI con usuario Administrador.

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# Backups, Restores, Upgrades y Rollbacks

## Realizando un Backup <a href="#backups" id="backups"></a>

Los archivos de backup involucran por un lado, archivos de configuración personalizados de Asterisk (/etc/asterisk/custom). Por otro lado, se efectúa un respaldo de la Base de Datos Relacional de Postgres.&#x20;

Para correr un backup, se debe ejecutar el siguiente script:

```
./deploy.sh --action=backup --tenant=<tenant-folder>
```

Dicho respaldo es depositado en el Bucket asociado a la instancia durante su proceso de despliegue. Recordemos que los escenarios expuestos permiten incorporar MinIO como bucket por default, o bien sumar soluciones populares de Cloud Providers orientadas a Object Storage, como Spaces (Digital Ocean) o S3 (Amazon).

Dentro del bucket, se observará una carpeta de backup con un archivo .sql precedido por el timestamp de ejecución (marca de tiempo). A su vez, otro directorio contará con los respaldos de Asterisk correspondientes.

<figure><img src="/files/FslAUdeiEqsjwPFVasZj" alt=""><figcaption></figcaption></figure>

## Realizando un Recovery <a href="#restore" id="restore"></a>

Frente a un escenario de Disaster, es posible proceder a un Fresh Install de una instancia productiva y aplicar una acción de restauración de información desde un backup (Recovery).

Para que ésto suceda de manera efectiva, debemos modificar los últimos dos parámetros del inventory.yml correspondiente a nuestra carpeta de tenants. Ésto último es necesario para indicar que el bucket no maneja certificados confiables, y para configurar el timestamp del backup a restaurar:

```
restore_file_timestamp: 1681215859 
```

De esta manera, ejecutando el siguiente script con la action "restore", se procederá a reinstaurar el backup tomado en el paso previo sobre la nueva instancia desplegada y contar asi con un ambiente recuperado:

```
./deploy.sh --action=restore --tenant=<tenant-folder>
```

## &#x20;<a href="#upgrades" id="upgrades"></a>

## Realizando un Upgrade <a href="#upgrades" id="upgrades"></a>

El Equipo de OMniLeads construye imágenes de todos los componentes que conforman su arquitectura (builds). Los mismos están hosteados en Docker Hub en el siguiente enlace:

{% embed url="<https://hub.docker.com/repositories/omnileads>" fullWidth="false" %}

Es importante diferenciar el Repositorio principal de Aplicación (Web) del resto de los repositorios de componentes (asterisk, rtpengine, kamailio, nginx, websockets y postgres).

La Web App utiliza una semántica de definición de releases que implica RC (releases candidatos) y STABLE (releases aptos para ambientes productivos), como se observa a continuación:

```
pre-release-X.Y.Z
X.Y.Z
```

Sin embargo, el resto de los componentes utilizan semánticas de fechas seguidas por el número de versión de dicho release, por ejemplo:

```
230204.01
```

Cada vez que un release de WebApp es liberado, el mismo se disponibiliza por medio de una imágen en el registro de containers (Container Registry). A su vez el archivo el archivo **Releases-Notes.md** en la raiz del repositorio es actualizado para contemplar un correcto "mapping" entre las versiones de los componentes y la versión del Release de aplicación.

Por lo tanto, para aplicar actualizaciones de manera correcta es importante "traernos" los últimos cambios correspondientes a la rama estable. Ésto lo logramos con el siguiente comando:

```
git fetch all
git pull origin main
git checkout release-2.3.1
```

A partir de alli, el próximo paso es actualizar el archivo inventory.yml (correspondiente al tenant) con la versión "target". Por ejemplo, "2.X.X" en la captura debajo:

```
omnileads_img: docker.io/omnileads/omlapp:250201.01
asterisk_img: docker.io/omnileads/asterisk:250102.01
```

Por último, procedemos a ejecutar el script con la acción "upgrade" a los efectos de proceder a la actualización del/de el/los componente/s en cuestión.

```
./deploy.sh --action=upgrade --tenant=<tenant_folder>
```

## Realizando un Rollback <a href="#rollback" id="rollback"></a>

El uso de Contenedores en OMniLeads permite ejecutar procedimientos de rollbacks de manera rápida y segura. De esta manera podemos recuperar las versiones previas a la actualización en caso la misma no haya generado resultados satisfactorios.

```
omnileads_img: docker.io/omnileads/omlapp:240117.01
asterisk_img: docker.io/omnileads/asterisk:240102.01
```

Con el inventory.yml modificado, es posible entonces volver a la versión previa al cambio:

```
./deploy.sh --action=upgrade --tenant=tenant_name_folder
```

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# Migración desde CentOS7

## Migrando OMniLeads desde CentOS-7 🔄 <a href="#upgrade_from_centos7" id="upgrade_from_centos7"></a>

Desde los inicios del Proyecto, las instalaciones se han basado en sistemas operativos CentOS7. Sin embargo, dada su pronta fecha de expiración (end-of-life), el equipo de OMniLeads ha trabajado arduamente para soportar sistemas operativos modernos como *Ubuntu Server, Debian Server, Rocky Linux, entre otros.*

A partir de la adopción de una Arquitecturas basada en Contenedores y métodos de instalación totalmente automatizados, las tareas de Administración y Mantenimiento IT se han simplificado de manera significativa debido a la clara abstracción de las dependencias de capas subyacentes.

Para lograr una correcta migración desde una instancia OMniLeads en CentOS7 hacia su arquitectura basada en contenedores, es necesario realizar un Fresh Install de OMniLeads sobre otro host (o grupo de hosts según el método de instalación involucrado) asegurando que las variables listadas en el inventory.yml deben tener la necesaria correspondencia con su contraparte en la instancia de CentOS7. A saber:

* ami\_user
* ami\_password
* postgres\_password
* postgres\_database
* postgres\_user
* dialer\_user
* dialer\_password

*IMPORTANTE:* Para el procedimiento, debemos considerar que la versión de la imágen de Postgres a desplegar con OMniLeads debe ser "omnileads/postgres:230624.01". Por lo tanto, se debe agregar el siguiente cambio en la variable de groupvars\_all/all inherente al servicio:&#x20;

```
#################### containers img tag  ################################

#postgres_img: docker.io/postgres:14.9-bullseye
postgres_img: docker.io/omnileads/postgres:230624.01
```

En OMniLeads sobre CentOS7, se debe ejecutar el siguiente comando a los efectos de obtener el backup de archivos correspondientes. Es importante aclarar que el backup resultante será subido al correspondiente Object Storage que la nueva instancia de OMniLeads utilizó en su despliegue "fresh":

```
export NOMBRE_BACKUP=some_file_name
pg_dump -h ${PGHOST} -p ${PGPORT} -U ${PGUSER} -Fc -b -v -f /tmp/${NOMBRE_BACKUP}.sql -d ${PGDATABASE} --no-acl
export AWS_ACCESS_KEY_ID=$your_new_instance_bucket_key
export AWS_SECRET_ACCESS_KEY=$your_new_instance_bucket_secret_key
export S3_BUCKET_NAME=$your_new_instance_bucket_name
```

Como hemos visto en la sección de Backups, el objetivo sería poder restaurar los backups de audios personalizados, audios telefónicos, backup de base de datos, etc, sobre el nuevo deploy de OMniLeads.

Para migrar la información a un OMniLeads bajo el método de instalación AIO, exportamos la variable de S3\_ENDPOINT como se muestra a continuación:

```
export S3_ENDPOINT=http://$OML_AIO_IP:9000 
```

Para el caso de un OMniLeads bajo el método de instalación AIT (cluster), exportamos la variable de S3\_ENDPOINT de la siguiente manera:

```
export S3_ENDPOINT=http://$OML_DATA_IP:9000 
```

Si en cambio, se decide por utilizar un Object Storage Externo, el dato lo deberemos obtener desde el proveedor correspondiente:

```
export S3_ENDPOINT=https://$object_storage_url 
```

Finalmente, procedemos a subir todos los backups desde OMniLeads sobre CentOS7 jacia el Bucket definido en el paso anterior:

```
aws --endpoint ${S3_ENDPOINT} s3 sync /opt/omnileads/media_root s3://${S3_BUCKET_NAME}/media_root
aws --endpoint ${S3_ENDPOINT} s3 sync /opt/omnileads/asterisk/var/spool/asterisk/monitor/ s3://${S3_BUCKET_NAME}
aws --endpoint ${S3_ENDPOINT} s3 cp /tmp/pgsql-backup-$NOMBRE_BACKUP.sql  s3://${S3_BUCKET_NAME}/backup/
```

## Restaurando la información  <a href="#upgrade_from_centos7" id="upgrade_from_centos7"></a>

debemos modificar los últimos dos parámetros del inventory.yml correspondiente a nuestra carpeta de tenants. Ésto último es necesario para indicar que el bucket no maneja certificados confiables, y para configurar el timestamp del backup a restaurar:

```
restore_file_timestamp: $NOMBRE_BACKUP 
```

De esta manera, ejecutando el siguiente script con la action "restore", se procederá a reinstaurar el backup tomado en el paso previo sobre la nueva instancia desplegada y contar asi con un ambiente migrado:

```
./deploy.sh --action=restore --tenant=<tenant-folder>
```

Ahora, se debe revertir a la imágen original de Postgres, lo cual implica restabelcer el contenido de group\_vars/all a su estado previo:

```
#################### containers img taf  ################################

postgres_img: docker.io/postgres:14.9-bullseye
#postgres_img: omnileads/postgres:230624.01
```

Finalmente, ejecutamos el upgrade:

```
./deploy.sh --action=upgrade --tenant=$your_inventory_folder_name
```

## Personalizaciones de Asterisk Dialplan <a href="#asterisk_customizations" id="asterisk_customizations"></a>

OMniLeads se basa en contenedores (imágenes), por lo tanto todo cambio de código efectuado dentro del container es "efímero".&#x20;

Para dotar al sistema de modificaciones permanentes (dialplan, scripts, configuraciones particulares), se recomienda utilizar imágenes personalizadas. Un ejemplo de cómo lograr dicho objetivo se expone en el siguiente [repo](https://gitlab.com/omnileads/acd-customizations-example/).

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# OMniLeads Enterprise

Qué es OMniLeads Enterprise?

OMniLeads Enterprise es una Suite de Contact Center de "Carril Empresarial" basada en el Open Core de OMniLeads e impulsada por la innovación y colaboración de una gran Comunidad de Usuarios.

Este producto cuenta con el respaldo comercial y de ingeniería del Patrocinador y Fabricante [Freetech Solutions](https://www.freetechsolutions.com.ar), lo que garantiza a los clientes el mejor rendimiento disponible. Además, añade una capa de módulos empresariales, como Reportes de Alto Impacto, Wallboard de Tiempo Real, Encuestas de CX Automatizadas, White Labeling, Videollamadas, Integración con Whatsapp Business, Discador Predictivo/Progresivo, entre otros.

Esta versión puede ser implementada de manera muy sencilla, tan sólo referenciando la imágen comercial del contenedor de aplicación en el archivo de inventario mediante el agregado del string "-enterprise":

```
omnileads_img: docker.io/omnileads/omlapp:231227.01-enterprise
```

**Ésto permite pasarse de Community a Enterprise (y visceversa) de manera ágil y sin instalaciones extras ni pérdidas de información.**

Registrando la instancia y activando una Subscripción con el Vendor, ya se cuenta con la solución de Carril Empresarial disponible y sin procedimientos extras.&#x20;

Para solicitar una Demo, siga las instrucciones desde aquí: <https://www.omnileads.net/demo-omnileads>.


# Deploy en Entornos de Desarrollo

Se requiere contar con Docker-Engine instalado en el ambiente de desarrollo a desplegar (de ahora en mas, "devenv"). El mismo puede ser desplegado en diferentes sistemas operativos, como Linux, Mac, o Win$:

* [Docker Install documentation](https://docs.docker.com/get-docker/)

Acto seguido, se procede al clonado del repositorio para trabajar en su configuración y despliegue. Es importante accesar al directorio de development-env para ejecutar el deploy:

```
git clone https://gitlab.com/omnileads/omldeploytool.git
cd omldeploytool/development-env/
```

El entorno de desarrollo ("devenv") de OMniLeads plantea un docker-compose.yml que mapea algunos repositorios dentro de algunos contenedores.

Tomamos como ejemplo el código de Django; allí se puede observar cómo el código dentro del servicio app se mapea.

```
volumes:
  - ${REPO_PATH}/omlapp/:/opt/omnileads/ominicontacto/
```

El deploy del entorno implica la creación de un directorio de nombre *omnileads-repos* para allí clonar todos los repositorios de los componentes de OMniLeads.

Para levantar el entorno de desarrollo se deberá ejecutar por única vez el script de deploy.sh tal cual se indica debajo:

```
$ ./deploy.sh --os_host= --gitlab_clone=
```

Donde os\_host puede ser: "*linux"*, "*mac"* o "*win"*. Mientras que gitlab\_clone puede equivaler a "*ssh"* o "*https"* a la hora de elegir por el método que se utilizará para clonar los repos.

Además de clonar los repos, el deploy.sh se encarga de setear MinIO (Object Storage) para que las grabaciones y media\_root (django) operen bajo un bucket provisto por el propio servicio de MinIO.

Debajo una salida de ejemplo al momento de utilizar el método "https" de clonado, y su correspondiente lanzamiento de containers:

<figure><img src="/files/rTyfAWMljplt9mx4qBrc" alt=""><figcaption></figcaption></figure>

### Reset de Django pass <a href="#user-content-reset-django-pass" id="user-content-reset-django-pass"></a>

```
./manage.sh --reset_pass
```

### Inicializar entorno con datos de pruebas <a href="#user-content-inicializar-entorno-con-datos-de-pruebas" id="user-content-inicializar-entorno-con-datos-de-pruebas"></a>

```
./manage.sh --init_env
```

### Variables <a href="#user-content-variables" id="user-content-variables"></a>

Todas las variables implicadas en el docker-compose se pueden leer/editar sobre el archivo .env.

### Build de imágenes <a href="#user-content-build-de-imagenes" id="user-content-build-de-imagenes"></a>

Los servicios: nginx, rtpengine, acd (asterisk), kamailio y app presentan la posibilidad de ser buildeados desde el compose. Por ejemplo:

```
docker-compose build app
```

En el apartado de [First Login](/instalacion-de-omnileads/first-login), se pueden revisar los pasos necesarios para obtener el primer acceso a la UI con usuario Administrador.

Para mayor información, sugerimos visitar la documentación expuesta en el [repositorio oficial del proyecto](https://gitlab.com/omnileads/omldeploytool).


# First Login

### Login como usuario Administrador <a href="#post_install" id="post_install"></a>

Antes del primer login, es necesario resetear el password del usuario admin mediante el siguiente comando dentro del directorio de docker-compose:

```
./oml_manage --reset_pass
```

Luego se accede a través del browser a la URL de la instancia deployada con las credenciales por default. En el caso de haber deployado Docker-Desktop en un entorno local, ingresaremos con localhost, o bien mediante la Dirección IP si el entorno es remoto:

<https://localhost> o <https://your_VM_VPS>\_IP

Default Admin User & Pass:

```
admin
admin
```

En el primer login con dichas credenciales, se procederá al cambio de password:

<figure><img src="/files/hRYeh8JdDqa6MlilkO78" alt=""><figcaption></figcaption></figure>

### El script oml\_manage <a href="#user-content-the-oml_manage-script" id="user-content-the-oml_manage-script"></a>

Este script es utilizado para acciones administrativas, tales como leer logs de contenedores, borrar tablas de Postgres, entre otras posibles tareas:

```
./oml_manage --help
```

### Creando Datos Iniciales para Testing <a href="#user-content-create-some-testing-data" id="user-content-create-some-testing-data"></a>

A partir del siguiente script, es posible generar datos inciales en la instancia (como agentes y campañas de test), con el objetivo de agilizar el setting inicial del entorno.

```
./oml_manage --init_env
```

En el caso de la creación de datos de prueba, el script permite generar agentes y campañas de test listas para su utilización:

<figure><img src="/files/UoaCTKKA0k5lv24twMF0" alt=""><figcaption></figcaption></figure>


# Certificados TLS/SSL

## Aprovisionamiento de certificados TLS/SSL 🔐 <a href="#tls-cert-provisioning" id="tls-cert-provisioning"></a>

A partir de la variable "certs" presente en el archivo de inventario, es posible indicar certificados SSL específicos diferentes a los "autofirmados" generados en el procedimiento de instalación por default.

Las posibles opciones son:

* **selfsigned**: desplegará un certificado autofirmado (no es recomendado para ambientes de producción).
* **custom**: si la idea es implementar certificados propios, se deben colocar dentro de instances/tenant\_folder los archivos correspondientes al certificado y su clave privada bajo los nombres: cert.pem y key.pem.
* **certbot**: desplegará una instancia con un certificado generado por Let's Encrypt SSL.

Cuando trabajamos con certificados autogenerados usando Certbot, debemos asegurar que nuestra instancia cuente con un FQDN válido (Fully Qualified Domain Name) y su correspondiente resolución de nombres DNS.&#x20;

Adicional a ello, el puerto 80 debe estar accesible desde la CA en Internet (Certificate Authority), y debemos contar con un email válido para poder recibir renovaciones desde el proveedor Let's Encrypt.

```
certs: certbot
fqdn: omlinstance.domain.com
notification_email: your_email@domain.com
```

Todos los métodos aplican tanto para instalaciones nuevas como para actualizaciones, *a excepción de Certbot (no disponible en procedimientos de upgrades).*


# Monitoreo y Observabilidad

## Observability 🔎 <a href="#observability" id="observability"></a>

Al desplegar instancias OMniLeads basadas en contenedores, el proceso de instalación y despliegue incorpora algunos componentes clave a la hora de hablar de Monitoring. Estos servicios permiten no solamente obtener métricas orientadas al sistema operativo anfitrión, sino también extender el alcance de observabilidad al resto de los componentes: redis, postgres, asterisk, entre otros, y centralizar los logs en el Stack de Observabilidad.

A partir de este hecho, es posible contar con un **Centro de Observabilidad Multi-Instancia** con el objetivo de centralizar el monitoreo de los diferentes componentes (métricas y logs), de múltiples tenants al mismo tiempo.&#x20;

Ésto es posible gracias a las bondades de [Prometheus](https://prometheus.io/) (exportación de métricas) por un lado, y a [Loki](https://grafana.com/oss/loki/) y [Promtail](https://grafana.com/docs/loki/latest/send-data/promtail/) (centralización de logs) por el otro.

* **Loki**: utilizado para almacenar archivos de logs provenientes de loscomponentes de OMniLeads, como ser djando, nginx, kamailio, etc.
* **Promtail**: utilizado para parsear los archivos de logs de sistema y aplicación y enviarlos a Loki DB.

<figure><img src="/files/swEk2QYJASKI2KLOqbK1" alt=""><figcaption></figcaption></figure>

## Un verdadero Centro de Monitoreo! <a href="#observability" id="observability"></a>

De esta manera, el área tecnológica o de IT de una empresa o un carrier cloud puede invocar mediante [Grafana/Prometheus](https://grafana.com/) las fuentes de datos proveniente de los tenants desplegados para luego construir Dashboards de Observabilidad y ofrecer análisis de logs almacenados en las bases de datos de Loki.

Esto permite observar "al detalle" ambientes productivos de OMniLeads, y dota al Team de SREs / DevOps Engineers de la suficiente información para actuar proactivamente con sus clientes.&#x20;

<figure><img src="/files/aohjpWQx7IBQ8v97BrMQ" alt=""><figcaption></figcaption></figure>

Centralized observability.


# Consideraciones de Seguridad

OMniLeads es una aplicación que combina tecnologías Web (https), WebRTC (wss & sRTP) y VoIP (SIP & RTP).  Esto implica cierta complejidad a la hora de desplegarlo en producción bajo un escenario de exposición a Internet.&#x20;

<figure><img src="/files/2Fwov2JfRBizWFMnVwjq" alt=""><figcaption></figcaption></figure>

\
En el lado Web de las cosas lo ideal es implementar un Reverse Proxy o Load Balancer delante de OMnileads, es decir expuesto a Internet (TCP 443) y que reenvíe las solicitudes al Nginx del stack de OMniLeads. \
\
En cuanto a VoIP, cuando se conecta a la PSTN a través de VoIP, es ideal para operar detrás de un SBC (Session Border Controller) expuesto a Internet.\
\
Sin embargo, podemos utilizar de manera inteligente la tecnología **Cloud Firewall** cuando operamos sobre VPS expuestos a Internet. A continuación, se muestran las reglas de firewall que se aplicarán en la instancia All In One:

* 443/TCP Nginx: aquí es donde se procesan las solicitudes Web/WebRTC a Nginx. El puerto 443 se puede abrir a todo Internet.&#x20;
* 20000-30000/UDP: WebRTC sRTP RTPengine: este rango de puertos se puede abrir a todo Internet.&#x20;
* 5060/UDP Asterisco: Aquí es donde se procesan las solicitudes SIP para llamadas entrantes de los ITSP. Este puerto debe abrirse restringiendo por origen en la(s) IP(s) del(de los) proveedor(es) de terminación PSTN SIP.&#x20;
* 40000-50000/UDP VoIP RTP Asterisk: este rango de puertos debe abrirse restringiendo por origen en las IP de los proveedores de terminación PSTN SIP.&#x20;
* 9090/TCP Prometheus (opcional, solo si vas a monitorear con grafana y prometheus): Aquí es donde se procesan las conexiones provenientes de la central de monitoreo, más precisamente de Prometheus Master. Este puerto se puede abrir restringiendo por origen en la IP del centro de monitoreo.&#x20;
* 3100/TCP Loki (opcional, solo si vas a centralizar logs de contenedores con grafana y loki): aquí es donde se procesan las conexiones provenientes de la central de monitoreo, más precisamente de Grafana. Este puerto se puede abrir restringiendo por origen en la IP del centro de monitoreo.


# Configuración inicial

## Configuración inicial

Luego de atravesar el proceso de [Instalación de OMniLeads](/instalacion-de-omnileads), asumimos que la aplicación se encuentra instalada y disponible en la correspondiente URL, por lo que en ésta sección se plantean los pasos esenciales de configuración post-instalación.

<figure><img src="/files/HUDnLWJwGp3fQJ7FXiLJ" alt=""><figcaption></figcaption></figure>

### Registro de la instancia

Éste paso no es obligatorio, ya que el sistema puede funcionar perfectamente sin realizar un registro. Sin embargo, el Proceso de Registración permite un fácil acceso a servicios del fabricante, como así también una mejor trazabilidad a la hora de reportar bugs o requests de nuevos features de software.&#x20;

También resulta necesario tener la instancia registrada a la hora de adquirir un Addon Comercial o Suscribir la plataforma al Soporte de Fabricante.

A futuro, aquellos integradores certificados (que han aprobado el programa de certificación oficial de OMniLeads), a partir de registrar la instancia, podrán firmar la instalación con el código de certificación, logrando así dejar una constancia de que la plataforma ha sido desplegada y configurada por un *Ingeniero IT* certificado por el fabricante.

<figure><img src="/files/1LatFf4AzHp6vY6UBhnR" alt=""><figcaption></figcaption></figure>

Se deben completar los campos allí solicitados, y luego se recibirá un e-mail con el código de la instancia:

<figure><img src="/files/4dXG2lw4XE21f6sDJI0B" alt=""><figcaption></figcaption></figure>

Luego, cada vez que ingresemos a la sección de registro a partir del menú *Ayuda -> Registrarse*, se obtendrá una salida que informa el hecho de haber registrado ya la instancia:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/initial_settings_14.png" alt=""><figcaption></figcaption></figure>

El registro de la instancia pide como valores obligatorios el nombre del usuario o empresa, la dirección de e-mail y la contraseña, siendo opcional el campo de teléfono.

Una vez que se ha registrado la instancia satisfactoriamente, se le enviará un e-mail a la dirección ingresada con el valor de la clave asignada a la instancia. En caso de que quiera que se le reenvíe el e-mail con la llave de la instancia una vez registrado, puede usar el botón «Reenviar llave».

Es importante tener en cuenta que si quiere registrar varias instancias con una misma dirección de e-mail, debe ingresar también la misma contraseña. En otro caso, use una dirección de e-mail diferente.

### Roles y permisos

A éste módulo, se accede a partir del menú *Usuarios y grupos -> Roles y permisos*.

En ésta sección del módulo citado, se puede listar los roles predefinidos del sistema, verificar los permisos específicos de cada rol, y finalmente crear nuevos roles personalizados con ciertos privilegios o limitaciones según las necesidades.

<figure><img src="/files/aEBmNs9YVAfc7UzNSrY4" alt=""><figcaption></figcaption></figure>

A continuación, se listan los roles predefinidos:

* **Cliente Webphone**: Éste rol, si bien viene creado por defecto, sólamente se utiliza cuando se adquiere e instala el addon [Click2Call](https://www.omnileads.net/click2call).
* **Agente**: Los usuarios generados y asignados a éste rol, podrán acceder a la consola de agente, con todos los permisos que ello implica (acceso al webphone para disparar llamadas, posibilidad de ejecutar pausas, acceso a agenda y grabaciones del agente, entre otros).
* **Referente**: Los usuarios generados y asignados a éste rol, podrán sólo listar todas las campañas, consultar reportes generales de agentes y llamadas, acceder a la supervisión de agentes y campañas.
* **Supervisor**: Los usuarios generados y asignados a éste rol, podrán trabajar con todas las campañas a las que estén asignados (crear, modificar, eliminar y listar), así como acceder a la supervisión y reportes generales de llamadas y agentes. También podrán buscar grabaciones de sus campañas, listar y subir bases de contactos y acceder al módulo de telefonía, donde podrán trabajar con algunas secciones. A su vez, podrá editar y eliminar agentes que él mismo haya creado, independientemente de si están asignados a sus campañas. El rol de supervisor puede otorgar "Permisos para Ver" a otros supervisores (a cualquier otro supervisor independientemente de si los creó o no) sólo sobre campañas que él mismo haya creado. Sin embargo, no podrá asignar supervisores a campañas que no haya creado.
* **Gerente**: Los usuarios generados y asignados a éste rol, podrán realizar todas las acciones de un supervisor, y además podrán visualizar el módulo de Auditorías.
* **Administrador**: Los usuarios generados y asignados a éste rol, tienen acceso completo a todo el sistema. Sólamente los administradores pueden editar o borrar usuarios con perfil Administrador.

Para generar un *rol personalizado*, se debe acceder al menú *Usuarios y grupos -> Roles y permisos -> Crear rol*. Al nuevo rol se le asigna un nombre y luego se marcan los permisos que tendrá. Para no iniciar desde cero, el usuario puede partir de una base de permisos de cierto perfil, y luego seguir personalizando (añadiendo o limitando permisos) hasta dejar su rol listo.

A continuación, se ejemplifica la creación de un nuevo rol:

* Creación de un nuevo rol: Se crea un nuevo rol y se asigna un nombre al mismo.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/users_and_roles_02.png" alt=""><figcaption></figcaption></figure>

Desde el combo de opciones del nuevo rol creado, se puede *imitar permisos de otro rol* ya existente, o bien *aplicar permisos de otro rol* ya existente. La diferencia radica en que la primer opción pone los mismos permisos del rol existente, mientras que la segunda opción suma los permisos del rol existente, a los permisos que ya han sido seleccionados en el nuevo rol.

<figure><img src="/files/7ml1W1kNOnXKu8rOv4hZ" alt=""><figcaption></figcaption></figure>

* Guardado del nuevo rol: Finalmente, se guarda el nuevo rol creado.

<figure><img src="/files/GgbiVq1b149Wsrwylf8c" alt=""><figcaption></figcaption></figure>

### Usuarios

Vamos a diferenciar entre usuarios del tipo «Agente» y usuarios del tipo «Administrativos». Los usuarios *Agente* son quienes gestionan las comunicaciones, y los usuarios *Administrativos* gestionan la aplicación (Administrador, Supervisor, Referente, Gerente, etc.).

Importante

Antes de crear un usuario *Agente*, debe existir al menos un *Grupo de agentes*.

Para crear un usuario, se debe acceder al menú *Usuarios y grupos -> Lista de usuarios -> Nuevo usuario*.

<figure><img src="/files/vJvQaZhfDN0fgS0AwOyb" alt=""><figcaption></figcaption></figure>

Allí, se despliega un formulario a completar con los datos del nuevo usuario. Dentro de dicho forumlario, desde la opción *Rol del usuario*, se determinará si el nuevo usuario será del tipo «Agente» o «Administrativo», de acuerdo al rol que se asocie al usuario creado.

Avanzando en el Wizard, se procede a la *Selección de Campañas*, donde la vista permite seleccionar (por Tipo) las campañas a las que se asociará el usuario creado. De esta manera, al clickear en Finalizar, el usuario queda apto para operar en la plataforma:

<figure><img src="/files/CMjEsQ7to5qOAxmrZPJE" alt=""><figcaption><p>Selección de Campañas</p></figcaption></figure>

### Importación de Usuarios

Desde la versión 2.4.0 ya es posible importar usuarios en bulk (masivamente), a partir de subir un archivo CSV clickando en el botón "*Importar Lista de Usuarios (CSV)*".&#x20;

Es importante remarcar que el proceso asociado a la carga masiva exige un formato de CSV (columnas) cuya cabecera debe seguir un formato específico para su correcto parseo:

*Username, First Name, Last Name, Profile, Email, Password, Group, Auth*

*Nota: El botón de "Descargar Lista de usuarios (CSV)" ya ofrece dicha estructura. Ésto facilita procesos de importación/exportación futuros.*

<figure><img src="/files/FcmDkIYF6FdfUoMpmUsj" alt=""><figcaption></figcaption></figure>

### Clonar agentes

Para lograr agilidad a la hora de crear recursos en el sistema, la vista de Usuarios permite clonar agentes conservando tanto sus campañas asignadas como su configuración de grupo.&#x20;

De esta manera el administrador y/o supervisor puede ahorrar un valioso tiempo de configuración sin tener que repetir acciones por cada recurso creado:

<figure><img src="/files/AsWN6HYJfLPRQ23rZ1GD" alt=""><figcaption></figcaption></figure>

### Grupos de agentes

En ésta sección, se administran los grupos de agentes, grupos que serán invocados en diferentes módulos del sistema, como puede ser a la hora de asignar usuarios a campañas, o en la extracción de reportes, así como también en el módulo de supervisión.

**Creación de grupo de agentes**

Para crear un grupo de agentes, se debe acceder al menú *Usuarios y grupos -> Nuevo grupo de agentes*.

<figure><img src="/files/FlJPQZ4Zh5Z7eISu6Ice" alt=""><figcaption></figcaption></figure>

Los campos allí desplegados, son los siguientes:

* **Nombre:** Es el nombre que se desea asignar al grupo de agentes.
* **Despausar automáticamente:** Para comprender éste parámetro, debemos explicar que en OMniLeads, luego de cada llamada (de cualquier naturaleza) procesada por un agente, el mismo es forzado a ingresar en una pausa ACW (After Call Work), en la cual permanece inactivo para las campañas asignadas, de manera tal que pueda completar la calificación de la llamada actual y terminar su gestión. Ahora bien, para salir de dicha pausa inducida por el sistema, existen 2 posibilidades, y allí es donde entra nuestro parámetro, ya que por un lado si dejamos el valor en «0» el agente debe salir explícitamente de la pausa para seguir operando, pero si colocamos un número (por ejemplo, 5 segundos), ésto implica que el agente asignado a éste grupo, luego de caer en una pausa inducida ACW, el sistema lo vuelva a dejar online a los X segundos (según lo indicado en «Despausar automáticamente»). Éste parámetro se puede manejar desde el grupo de agentes, o bien desde una configuración de la campaña, que se mencionará más adelante.&#x20;
* **Conjunto de pausas:** Aquí se presenta la posibilidad de asignar un grupo de pausas (previamente creado) al grupo de agentes, para que así los agentes que formen parte de dicho grupo, no visualicen todas las pausas, sino únicamente aquellas que forman parte del grupo de pausas asignado.
* **Auto atender entrantes:** Si éste valor está checkeado, entonces las llamadas provenientes de campañas entrantes serán conectadas al agente sin brindar la posibilidad de notificación (ring) y opción de atender por parte del agente.
* **Auto atender dialer:** Si éste valor está checkeado, entonces las llamadas provenientes de campañas con discador predictivo serán conectadas al agente sin brindar la posibilidad de notificación (ring) y opción de atender por parte del agente.
* **Forzar calificación:** Si éste valor está checkeado, entonces todas las llamadas que realice o reciba el agente, deberán ser calificadas antes de volver a estar operativo el agente. Al seleccionar ésta opción, se deshabilita la posibilidad de despausar automáticamente al agente, ya que pasa a ser obligatoria la calificación.
* **Forzar despausa:** Si la opción de «Forzar calificación» está habilitada, entonces se ofrece ésta segunda opción para forzar la despausa, una vez calificada la llamada. Si éste valor no está checkeado, el agente tendrá que retomar operación de manera explícita luego de calificar la llamada.
* **Llamada fuera de campaña:** Si éste valor está checkeado, permitirá al agente realizar llamadas que no encuadren dentro de ninguna campaña, teniendo en cuenta que las mismas, no dejarán registro de reportería, grabaciones, etc.
* **Permitir el acceso a las grabaciones:** Si éste valor está checkeado, el agente tendrá acceso a la búsqueda, descarga y escucha de sus propias grabaciones.
* **Permitir el acceso al dashboard:** Si éste valor está checkeado, el agente tendrá acceso al dashboard sobre su gestión.
* **Permitir la activación de On-Hold:** Si éste valor está checkeado, se permitirá al agente poner una llamada en espera.
* **Ver temporizadores en consola:** Si éste valor está checkeado, el agente podrá ver los tiempos de operación y pausa que figuran en la esquina superior izquierda de la consola de agente.
* **Limitar agendas personales:** Si éste valor está checkeado, se puede introducir la cantidad máxima de agendas personales que puede manejar un agente.
* **Limitar agendas personales en días:** Si éste valor está checkeado, se puede introducir la cantidad máxima de días que se permitirá al agente usar, a la hora de agendar una llamada. Es decir, el agente podrá agendar llamadas dentro de la ventana de N días configurado a partir de éste parámetro.
* **Acceso a los contactos como agente:** Si éste valor está checkeado, el agente tendrá acceso a la lista de contactos, desde la consola de agente.
* **Acceso a las agendas como agente:** Si éste valor está checkeado, el agente tendrá acceso a la agenda, desde la consola de agente.
* **Acceso a las calificaciones como agente:** Si éste valor está checkeado, el agente tendrá acceso al listado de calificaciones gestionadas, desde la consola de agente.
* **Acceso a las campañas preview como agente:** Si éste valor está checkeado, el agente tendrá acceso al listado de campañas preview a las cuales se encuentra asignado, desde la consola de agente.
* **Permiso de uso de la canalidad Whatsapp:** En caso exista integración con Whatsapp Business, este skill permite tener acceso al envío/recepción de mensajes de Whatsapp.
* **Permiso de uso de la canalidad Meta Messenger:** En caso exista integración con Meta Messenger de Facebook, este skill permite tener acceso al envío/recepción de mensajes de desde una Landing Page de Meta configurada en la plataforma.
* **Restringir Tipos de Llamadas Manuales:** este checkbox permite personalizar los tipos de campaña que serán desplegados a la hora de intentar efectuar una llamada manual en nombre de campaña, por parte del agente.

### Adicionar paquetes de audios en otros idiomas

Los audios genéricos que los agentes o teléfonos externos escucharán vienen por defecto en inglés, siendo configurables en las rutas entrantes o rutas salientes, de manera tal que si el canal telefónico se encuentra con alguna indicación a través de un audio genérico dentro del flujo de una llamada, éste podrá ser reproducido de acuerdo al idioma indicado.

Si la instancia precisa utilizar otros idiomas, se pueden instalar los mismos a través de la sección *Recursos -> Audios -> Paquetes de Audio de Asterisk*, en donde se podrán adicionar nuevos idiomas.

<figure><img src="/files/vbQ1p2jDK5rIzL4gBCNn" alt=""><figcaption></figcaption></figure>

Al seleccionar el idioma deseado y presionar la opción «Guardar», se descargará e instalará dicho paquete de idioma.

### Música de espera

Dentro del módulo *Recursos* -> *Audios -> Listas de Música de espera*, se permite gestionar *listas de reproducción* con archivos en el formato *wav 16 bits*. Las listas aquí generadas, podrán ser utilizadas en las *campañas entrantes* a la hora de poner a los llamantes en cola de espera. Cabe destacar, que no podrán eliminarse playlists que estén en uso por alguna campaña o que tengan archivos asignados.

<figure><img src="/files/UAwBJMzahpImQMaJuxdZ" alt=""><figcaption></figcaption></figure>

Una vez creada una nueva lista, deberán agregarse las músicas deseadas, a través de archivos en formato **.wav** a cargarse desde su computadora. Sólo estarán disponibles para su uso en campañas entrantes las playlists que tengan al menos una música cargada.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_playlist_edit.png" alt=""><figcaption></figcaption></figure>

### Pausas

Los agentes pueden entrar en una pausa cada vez que deseen quedar desafectados para atender nuevas comunicaciones, de manera tal que se evita que una campaña entrante o con discador predictivo, le entregue una nueva llamada. Además, los estados de pausa son útiles para registrar productividad y medir los tiempos de sesión del agente.

Las pausas las pueden generar los usuarios con dicho permiso, y pueden ser del tipo «Recreativas» o «Productivas».

**Creación de pausas**

Para generar una nueva pausa, se debe acceder al menú *Pausas -> Listado de pausas -> Nuevo*:

<figure><img src="/files/zSxwV1BeDIB3BZ4mcoq5" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Wkg4ftyTTTRlOmhoRZzT" alt=""><figcaption></figcaption></figure>

Desde el formulario que se despliega, se asigna un nombre, se selecciona el tipo de pausa, y se guardan los cambios.

A la hora de presentar los reportes de sesión de agente, las pausas totalizadas se dividen en pausas recreativas y pausas productivas, lo cual permite medir la productividad de nuestros agentes de una manera más exacta.

**Creación de conjuntos de pausas**

Los grupos de pausas permiten, como su nombre lo indica, agrupar determinadas pausas creadas previamente, para ser asignadas a grupos de agentes. De ésta manera, los agentes que formen parte de un determinado grupo de agentes, con un determinado grupo de pausas, podrán utilizar sólamente las pausas de dicho grupo desde su consola de agente, y no tendrán acceso a todas las pausas que se hayan dado de alta en el sistema.

Para generar un conjunto de pausas, se debe acceder al menú *Pausas -> Conjuntos de pausas -> Nuevo*:

<figure><img src="/files/YeIb6MxskwMHeceIpG66" alt=""><figcaption></figcaption></figure>

Desde el formulario que se despliega, se asigna un nombre, se agregan pausas creadas previamente al nuevo grupo, y se guardan los cambios.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/initial_settings_18.png" alt=""><figcaption></figcaption></figure>

### Primer login de agente

Importante

Tener en cuenta que para obtener un login exitoso, debemos contar con un **MICRÓFONO disponible** en la estación de trabajo desde la cual se ha realizado el login de agente. Si ésto no se cumple, entonces el login será defectuoso.

Una vez que accedemos con nuestro agente, si todo va bien, se desplegará un popup que solicita el permiso para tomar control del micrófono:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/initial_settings_10.png" alt=""><figcaption></figcaption></figure>

Al habilitar el permiso, debemos escuchar un audio que el sistema reproduce, indicando el login exitoso:

<figure><img src="/files/euSdIxrJ7AhqLopFH4O7" alt=""><figcaption></figcaption></figure>


# Autenticación LDAP

### Configuración de Autenticación Externa

Para Operaciones en las que sea una exigencia la autenticación de usuario mediante Sistemas Externos, OmniLeads añade a partir del Release Oficial 1.32 la Autenticación mediante protoclo [LDAP (Protocolo Ligero de Acceso a Directorios, por sus siglas en inglés)](https://es.wikipedia.org/wiki/Protocolo_ligero_de_acceso_a_directorios).

Este método de autenticación permite a la plataforma autenticar cada acceso de usuario mediante un servicio externo LDAP, como ser [OpenLDAP](https://www.openldap.org/) o [Active Directory de Microsoft](https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ldap/lightweight-directory-access-protocol-ldap-api).

Para configurar la Autenticación Externa basada en LDAP, el administrador debe dirigirse al Menú Seguridad → Autenticación, y configurar las opciones correspondientes a su entorno:

<figure><img src="/files/bJdFelZXG6Fgnthmvf4t" alt=""><figcaption></figcaption></figure>

* **Tipo**: En el que seleccionará LDAP (en futuros releases, se anexarán otros mecanismos de autenticación externa).
* **Servidor**: La URI de contactación del servidor, anteponiendo protocolo y especificando Dirección IP o FQDN (full hostname) y puerto, tal como se muestra en la imágen.
* **Base DN**: Distinguished Name o “nombre distiniguido”, describe la ruta base en el árbol de información que llevará al protocolo al resultado deseado de la búsqueda.
* **Activación**: opción de activación de la feature.
* **Check de Simple Authentication AD**: este checkbox utiliza formatos de username del tipo user\@dominio, a la hora de joinear a servicios de LDAP basados en Microsoft Active Directory. &#x20;

En el ejemplo, “172.16.102.101” hace referencia a la Direccón de Red del servidor donde se aloja el Backend externo de autenticación ([OpenLdap](https://openldap.org/) o [Microsoft Active Directo](https://learn.microsoft.com/es-es/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview)[ry](https://learn.microsoft.com/es-es/windows-server/identity/ad-ds/get-started/virtual-dc/active-directory-domain-services-overview)). A su vez, “:10389” indica el puerto donde dicho servicio se expone.

Por otro lado, el campo **BaseDN** hace referencia al “Nombre Distinguido” que se utilizará de base para explorar rápidamente el **DIT** (Directory Information Tree) y encontrar el resultado de la búsqueda.

En el ejemplo, el string “*dc=planetexpress, dc=com*” comprende campos **DC** (elemento de acceso del dominio) que utiliza el mapa del sistema de nombres de dominio o **DNS** (domain name server). Sin embargo, este campo puede ser tan extenso como se requiera, como ser Nombre de la Empresa (O), Unidades Organizativas (OU) y/o Nombre Común (cn) para grupos de usuarios.

Debajo se expone un ejemplo basado en [Microsoft Active Directory](https://learn.microsoft.com/en-us/previous-versions/windows/desktop/ldap/lightweight-directory-access-protocol-ldap-api). Si la cuenta de un usuario está en el contenedor o recurso ldap *Usuarios*, la información de enlace *Base DN* resultaría ser: “*cn=users,dc=pantac2,dc=org*”.

Para este caso, al activar el checkbox de Simple Authentication previamente descripto, las credenciales transmitidas a Active Directory se expresan con el formato username\@dominio, donde "dominio" se lo sustituye por los campos de acceso a dominio -DC- (<usuario@pantac2.org>, en el ejemplo).

<figure><img src="/files/0skaCLC66yoNiPUF2JDg" alt=""><figcaption><p>Ejemplo de Nombre Distinguido Base</p></figcaption></figure>

### Métodos de Activación

Al Activar la autenticación por protocolo LDAP, los mecanismos de Activación pueden ser:

* **Todos:** todos los usuarios se configurarán con la autenticación externa por default.
* **Todos menos Admin**: todos los usuarios se configurarán con la autenticación externa por default, menos el usuario Admin del sistema.
* **Manual (default activo)**: cada nuevo usuario heredará de manera forzada la autenticación externa a la hora de ser dado de alta en el sistema. Sin embargo el administrador puede modificar la configuración de dicho usuario en todo momento.
* **Manual (default inactivo)**: cada nuevo usuario heredará la autenticación "Legacy" a la hora de ser dado de alta en el sistema. Sin embargo el administrador puede modificar la configuración del usuario en todo momento.

Para poder verificar la configuración de autenticación de usuarios, basta con dirigirse a la vista de Usuarios del sistema y revisar la columna Autenticación, tal como se muestra en la siguiente imágen:

<figure><img src="/files/XQiaxLyvMBsJAtdQpIDZ" alt=""><figcaption></figcaption></figure>

A su vez, tanto para crear usuarios nuevos como para editar existentes, el administrador puede modificar su manera de accesar al sistema por medio de la vista detallada del usuario.

La autenticación externa se podrá activar en la vista de usuario siempre y cuando exista un servicio de autenticación externa configurado en el menú de Seguridad del sistema, tal cual se ha explicado en el apartado anterior:

<figure><img src="/files/5g83u95eYns3jTcDilOw" alt=""><figcaption></figcaption></figure>

### Autenticando contra servicios de LDAP:&#x20;

Si la Autenticación de Sistema Externo está activada sobre un usuario y éste último efectúa un Login en el sistema, **OMniLeads** utilizará dicho *Backend de Autenticación Externa* para accesar.&#x20;

<mark style="color:red;">IMPORTANTE: dado que OMniLeads delega la autenticación a otra entidad, es importante que</mark> <mark style="color:red;"></mark>*<mark style="color:red;">el usuario esté creado en el sistema de directorios externo, de manera tal que la autenticación se lleve adelante consistentemente</mark>*<mark style="color:red;">.</mark>&#x20;

Si el proceso de autenticación no es satisfactorio, el usuario recibirá un mensaje de error de acceso; caso contrario podrá hacer uso normal de la plataforma.

En el caso de que el servicio de LDAP se encuentre caído y el usuario Admin también utilice LDAP como método de acceso, tendrá chances de recuperar su acceso al sistema mediante un comando ejecutado por el usuario root del Sistema Operativo (superusuario):

`source /opt/omnileads/virtualenv/bin/activate`

*`cd /opt/omnileads/ominicontacto`*

*`python3 manage.py desactivar_autenticacion_externa`*


# Video Llamadas (Pro)

### OMniLeads Enterprise - Webphone Client <a href="#omnileads-enterprise-webphone-client" id="omnileads-enterprise-webphone-client"></a>

<figure><img src="/files/J6YvgecMSrYa0Q1Ige0Q" alt=""><figcaption></figcaption></figure>

\
El módulo comercial de Video Llamadas disponible en [OMniLeads Enterprise](/instalacion-de-omnileads/omnileads-enterprise), permite embeber en su página web un widget ligero, para permitir que sus clientes llamen a su negocio **solo con un click**, sin otra herramienta más que el **web browser**.

#### &#x20;<a href="#requisitos" id="requisitos"></a>

#### Requisitos <a href="#requisitos" id="requisitos"></a>

1. Una instancia de OMniLeads Enterprise

> * **release-1.3.2** minimamente instalado para el **release-1.0.0** del webphone client.
> * **release-1.5.0** minimamente instalado para el **release-2.0.0** del webphone client.
> * **release-1.7.0** minimamente instalado para el **release-3.0.0** del webphone client.
> * **release-1.12.0** minimamente instalado para el **release-3.5.0** del webphone client.

Importante

Esta instancia **debe ser** accesible desde Internet y debe trabajar con **certificados confiables**. Puede observar la documentación de OMnileads que habla sobre como instalar un servidor en la nube: OMniLeads Cloud.

1. La pagina web donde va a embeber el webphone tiene que estar usando HTTPS (Requisito de WebRTC).

Nota

A partir de la versión 3.5.0 existe la posibilidad de hacer Videollamada.


# Configuración Inicial

#### Pasos para instalar el módulo WebphoneClient en OMniLeads <a href="#pasos-para-instalar-el-modulo-webphoneclient-en-omnileads" id="pasos-para-instalar-el-modulo-webphoneclient-en-omnileads"></a>

1. Descargue desde [AQUI](https://fts-public-packages.s3.sa-east-1.amazonaws.com/webphone_client_app/webphone_client_app-latest.tar.gz) el Demo Web de Webphone Client, que lo acompañará a revisar ejemplos para montar código HTML/JS en su Web Pública.
2. Ingrese con su cuenta de admin en [https://OML\_HOST/admin/](https://oml_host/admin/). En la sección «Constance» clickee en «Config»

<figure><img src="/files/cKIqmKsOk2WYZ8h7F7KH" alt=""><figcaption></figcaption></figure>

1. Setear la variable *WEBPHONE\_CLIENT\_ENABLED* a True, clickeando en el box. Esto habilitará el módulo.
2. Setear la variable *WEBPHONE\_CLIENT\_TTL*. El tiempo de vida de las credenciales del webphonees de 1200 segundos (20 minutos)
3. Setear la variable *WEBPHONE\_VIDEO\_DOMAIN* con el servidor de jitsi a utilizar en caso de que quiera permitir llamadas de video.

<figure><img src="/files/ONu2Z61VhJszEzlsqeqG" alt=""><figcaption></figcaption></figure>

Luego hacer click en «Save»

#### Registro de Key OMniLeads <a href="#registro-de-key-omnileads" id="registro-de-key-omnileads"></a>

Es condición necesaria que la instancia esté registrada, acción que se efectúa desde el Menú Ayuda>Registrar del panel de Administración:

<figure><img src="/files/D9UrO3CtW0CDtl3nUcuQ" alt=""><figcaption></figcaption></figure>

Webphone Client Pro está disponible para versiones de OmniLeads 1.3.2 o superiores. Si tiene dudas en cómo obtener la key de activación, contacte a [info@omnileads.net](mailto:info%40omnileads.net).

#### Configurando el WebPhone client <a href="#configurando-el-webphone-client" id="configurando-el-webphone-client"></a>

Con la variable WEBPHONE\_CLIENT\_ENABLED seteada en True, ahora puede crear un usuario WebphoneClient, logueandose a OMniLeads como admin:

1. Ir a Usuarios y Grupos –> Nuevo usuario. Escoger el rol «Webphone Client» para este usuario.

<figure><img src="/files/e1s9S0vskOeY8wQ04bQc" alt=""><figcaption></figcaption></figure>

2. Puede ver el usuario creado en Usuarios y Grupos –> WebphoneClients

<figure><img src="/files/ksH7BMzWgCiOxkBiSODC" alt=""><figcaption></figcaption></figure>

Nota

Recuerde el usuario y contraseña de este usuario. Los va a necesitar para para poder obtener las credenciales SIP de login usando la API de OMniLeads.

#### Acerca del Licenciamiento <a href="#acerca-del-licenciamiento" id="acerca-del-licenciamiento"></a>

Webphone Client es un módulo comercial, motivo por el cual su funcionamiento está sujeto a la activación de producto a partir de la vinculación de una key (llave de acceso) con el Servidor de Llaves.

El esquema de licenciamiento es de carácter permanente (key definitiva), y se brinda 1 año de actualizaciones para cobertura de bug-fixing y nuevas features sobre el release instalado. En caso de precisar upgrades de releases superado el año de la compra, se puede actualizar la key a un costo módico.

La key permite activar el módulo en 1 (una) sola instancia a la vez, y no está sujeta a la cantidad de agentes operando en la plataforma.

Si tiene dudas en cómo obtener la key de activación, contacte a [info@omnileads.net](mailto:info%40omnileads.net).


# Wordpress Plugin

### WordPress plugin <a href="#wordpress-plugin" id="wordpress-plugin"></a>

Creamos un sencillo plugin de WordPress, así usted puede insertar el WebPhone client como un Widget, en cualquier parte de su página web. El plugin aun no ha sido publicado en el repositorio de wordpress, por lo que tiene que ser instalado manualmente:

#### Installation <a href="#installation" id="installation"></a>

1. En la página de administración de Wordpress ir a Plugin -> Añadir nuevo y subir el archivo *oml-webphone-client.zip*.
2. Click en el botón «Instalar» y esperar a que instale.
3. Una vez instalado Activar el plugin en la lista de plugins.

#### Configuración <a href="#configuracion" id="configuracion"></a>

1. Ir a Settings -> OMniLeads WebphoneClient, allí va a configurar su webphone client con las credenciales del Usuario WebPhone Cliente que usted creó en su instancia OMniLeads. Luego ingrese la URL de la API.

<figure><img src="/files/8vOBXn0x87o2PWkeumw5" alt=""><figcaption></figcaption></figure>

1. Una vez configurado esto, ir al menu Widget, donde verá que disponible el «OML WebphoneClient Widget». Aquí se van a configurar mas cosas:

<figure><img src="/files/cLdalS143AXbtZK6FYZs" alt=""><figcaption></figcaption></figure>

* **Titulo:** un titulo para su webphone
* **KamailioHost:** la IP LAN de su instancia de OMniLeads. **Si nosotros estamos hosteando el OMniLeads preguntenos por este parámetro**
* **Opciones de estilo:** el nombre de los IDs y clases para crear un diseño custom del webphone usando CSS. Observe la seccion [Changelog](https://oml-videophone-webrtc-plugin.readthedocs.io/es/latest/changelog.html#about-webphone-design)
* **Botones de llamada:** puede insertar un máximo de cuatro botones de llamada. Acá configura el número a llamar y el nombre que va a tener el botón.

1. Click en guardar para salvar la configuración y ya puede observar en su página el widget insertado.

#### Actualización de plugin <a href="#actualizacion-de-plugin" id="actualizacion-de-plugin"></a>

Para actualizar el plugin es necesario primero:

1. En la página de administración de Wordpress ir a Plugin encontrar el plugin OMniLeads Webphone Addon
2. Desactivar y eliminar el plugin
3. Volver a instalarlo con el .zip actualizado.

Nota

Es necesario volver a configurar los datos en Settings -> OMniLeads WebphoneClient, pues el plugin se ha desinstalado y vuelto a instalar.

[AnteriorEmbebiendo el Webphone](broken://pages/2wnRb7UsyT8fwaopGqaG)[SiguienteWebphone Demo](broken://pages/QmmMP0Zpl8mXZzYTfkFD)

Última actualización hace 1 año


# Webphone Demo

### WebPhone Demo <a href="#webphone-demo" id="webphone-demo"></a>

Este es una demo de como funciona el webphone, utilizando Flask como backend. Todo el contenido esta en la carpeta *demo*. Para ejecutar este código ud debe:

1. Editar el objeto config en el archivo *views.py* con la configuración de su OMniLeads

```
config = {
     'URL_API_CREDENTIALS': 'https://OML_HOST/api/v1/webphone/credentials/', // Your OML instance
     'client_username': 'client_username',   // Your OML WebPhone Client User username.
     'client_password': 'clientpassword',    // Your OML WebPhone Client User password.
}
```

1. Editar estas variables en el archivo *templates/index.html*

```
'KamailioHost': "X.X.X.X", // This is the LAN IP of you OMniLeads instance
'WebSocketPort': "443", // This is the port you se to connect via Web browser to your OMniLeads instance
'WebSocketHost': "domain.example.com", // This is the domain name you use to connect via Web browser to your OMniLeads instance
```

1. Instalar flask y correrlo localmente

```
$ pip install Flask
$ pip install pyopenssl
$ cd demo/
$ FLASK_APP=webphone.py FLASK_DEBUG=1 flask run --cert=adhoc
```

Por ultimo, navegar a:

<https://localhost:5000/>

[AnteriorWordpress Plugin](broken://pages/ZJGdbqzerPXOJhz6tDHN)SiguienteAuditoría de gestiones

Última actualización hace 1 año


# Embebiendo el Webphone

### Embebiendo el webphone a su página web <a href="#embebiendo-el-webphone-a-su-pagina-web" id="embebiendo-el-webphone-a-su-pagina-web"></a>

**Si su página web esta hosteada en el CMS Wordpress vaya directamente a esta sección:** [WordPress plugin](https://oml-videophone-webrtc-plugin.readthedocs.io/es/latest/wordpress.html#about-wordpress-plugin)

#### Incluyendo el código JavaScript del webphone a su index.html <a href="#incluyendo-el-codigo-javascript-del-webphone-a-su-index.html" id="incluyendo-el-codigo-javascript-del-webphone-a-su-index.html"></a>

1. Copie todos los archivos .js dentro de la carpeta */static/js* a su web server. Puede observar un template del archivo index.html en *demo/templates/index.html* para saber que debe modificar en su página si quiere agregar el WebPhone. De todas maneras vamos a describir que hacer:
2. Incluir todos los archivos .js en el html de su página, como se ve en el index.html del demo.

Importante

Mantener el orden de los archivos .js como se muestra a continuación.

```
{
  <script type="text/javascript" src="js/jquery-3.3.1.slim.min.js"></script>
  <script type="text/javascript" src="js/state-machine-min" ></script>
  <script type="text/javascript" src="js/jssip.js" ></script>
  <script type="text/javascript" src="js/mustache-3.0.2.min.js" ></script>
  <script type="text/javascript" src="js/phoneJsTemplate.js" ></script>
  <script type="text/javascript" src="js/phoneJsFSM.js" ></script>
  <script type="text/javascript" src="js/phoneJsView.js" ></script>
  <script type="text/javascript" src="js/miniPhoneJs.js"></script>
  <script type="text/javascript" src="js/phoneJsController.js"></script>
  <script type="text/javascript" src="js/jitsi_external_api.js"></script>
}
```

1. Incluir el siguiente bloque \<script>\</script>, donde se encuentra el contexto del módulo JavaScript. A continuación, está la explicación de las variables:

```
{
  <script type="text/javascript">
   var phone_controller = undefined;
   var miniPhoneConfig = {
     'sip_user': "<<sip_user>>",    // The sip User obtained from the POST request to the API
     'sip_password': "<<sip_password>>",    // The sip Password obtained from the POST request to the API
     'KamailioHost': "X.X.X.X",     // The LAN IP of your OMniLeads instance
     'WebSocketPort': "443",    // The Port you use to connect in web URL
     'WebSocketHost': "OML_HOST",    // The DNS you use to conect in web URL
     'container_id': 'webphone-container',  // The ID of the <div> containing all the webphone
     'container_class': 'webphone-body',    // The class of the <div> containing all the webphone
     'webphone_keys_id': 'webphone_keys',   // The ID of the <div> containing all the webphone buttons
     'phone_key_pad_id': 'phone_key_pad',   // The ID of the <div> containing the numpad
     'phone_actions_id': 'phone_actions',   // The ID of the <div> containing the buttons for make the calls
     'non_phone_actions_id': 'non_phone_actions', // The ID of the DIV containing the non calls buttons (show numpad and end call)
     'footer_img_id': 'footer_img_id',  // The ID of the DIV containing the footer (FTS logo)
     'video_container_id': 'video_container_id', // The ID of the div used for displaying the Video Call
     'reload_video_id': 'reload_video_id',       // The ID of the reload video <button>
     'images': {
       'video_green': '/path/to/img', // The path to the video_green image
       'phone_green': '/path/to/img', // The path to the phone_green image
       'phone_red': '/path/to/img',  // The path to the phone_red image
       'powered_by': '/path/to/img',  // The path to the powered_by image
       'numpad': '/path/to/img',  // The path to the numpad image
       'reload_video': '/path/to/img', // The path to the reload_video image
     }
     'buttons_class': 'key_pad_button',   // The class of the <div> containting the buttons of the numpad
     'show_keypad_button_id': 'show_key_pad', // The ID of the <div> containing the button "Toggle Keypad"
     'destinations': [                        // These are the buttons that are going to launch the calls, you must to configure the number to call in 'phone', and the 'name' to be displayed
       {'phone': '01155001121', 'name': 'Sales', 'index': '0'},
       {'phone': '01177660011', 'name': 'Help Desk', 'index': '1'},
       {'phone': '01177660012', 'name': 'Suggestions', 'index': '2'},
     ],
     'video_channels': [                      // These are the buttons that are going to launch video calls, you must to configure the number to call in 'phone', and the 'name' to be displayed
       {'phone': '01155001121', 'name': 'Video Sales', 'index': '0'},
       {'phone': '01177660011', 'name': 'Video Help Desk', 'index': '1'},
       {'phone': '01177660012', 'name': 'Video Suggestions', 'index': '2'},
     ],
     'extra_headers': [                       // SIP headers you want to add to the INVITE of call
       'OML-client: 110022993388',
       'X-Bar: bar',
     ],
     'video': {
       'width': 640,        // The width of the video call container
       'height': 480,       // The height of the video call container
       'video_domain':  "<<video_domain>>",    // The video_domain obtained from the POST request to the API
     }
}
```

#### Cambiando el contenido del html del WebPhone <a href="#cambiando-el-contenido-del-html-del-webphone" id="cambiando-el-contenido-del-html-del-webphone"></a>

Observe el archivo phoneJstemplate.js dentro de *demo/static/js/*. Este archivo define una variable que va a renderizar/generar el contenido html del webphone. Esto es posible gracias a una librería de JavaScript llamada [mustache](https://mustache.github.io/).

Ud puede cambiar el template HTML a su gusto pero no puede modificar las variables de mustache, las cuales estan definidas de esta manera: **{{{{webphone\_keys\_id}}}}**

#### Obteniendo las credenciales SIP de login a traves de la API de OMniLeads <a href="#obteniendo-las-credenciales-sip-de-login-a-traves-de-la-api-de-omnileads" id="obteniendo-las-credenciales-sip-de-login-a-traves-de-la-api-de-omnileads"></a>

El usuario y contraseña ingresados para el Usuario Webphone Client son usados para obtener las credenciales SIP, con el fin de loguearse al sistema telefónico dentro de OMniLeads. OMniLeads provee una API para obtener estas credenciales, que luego serán usadas por el WebPhone. Para obtenerlas, tiene que hacer un request POST hacia esta URL: “[https://OML\_HOST/api/v1/webphone/credentials/](https://oml_host/api/v1/webphone/credentials/)” usando un Esquema de Autenticación Básica.

Nota

Las credenciales SIP que da la API son efimeras. Se vuelven obsoletas luego del tiempo establecido por la variable *WEBPHONE\_CLIENT\_TTL*. Las credenciales se refrescan cada vez que la API es consultada, y esto ocurre cada vez que un cliente hace una llamada desde el webphone. Se setea por default 20 minutos porque consideramos que una llamada en promedio dura eso, pero si en su negocio algunas llamadas duran mas, considere incrementar el valor de esta variable.

Este es un ejemplo de una request hacia la URL de la API usango Postman. Es solo para mostrar la respuesta de la API:<br>

<figure><img src="/files/0PFJAbUTVHOjQiQf4hMF" alt=""><figcaption></figcaption></figure>

Puede observar un ejemplo del código en python para conectarse a la API y obtener las credenciales en este archivo: *demo/views.py*

#### Cambiando el diseño del webphone <a href="#cambiando-el-diseno-del-webphone" id="cambiando-el-diseno-del-webphone"></a>

El DOM para esta aplicación es el siguiente:

<figure><img src="/files/DSDrz2DZGxiVJMunPniL" alt=""><figcaption></figcaption></figure>

Con este DOM ud puede configurar los ID’s y clases que desee, y puede usarlos en su archivo .css para cambiar el diseño por default que trae el webphone.

[Next ](https://oml-videophone-webrtc-plugin.readthedocs.io/es/latest/wordpress.html)[Previous](https://oml-videophone-webrtc-plugin.readthedocs.io/es/latest/oml_configuration.html)


# CX Survey (Pro)

{% embed url="<https://youtu.be/Q0Utw0MqrwI>" %}

El módulo de Encuestas Post-Interacción, disponible en [OMniLeads Enterprise](/instalacion-de-omnileads/omnileads-enterprise), le permitirá medir la CX de su cliente a partir de encuestas de satisfacción automáticas y omnicanales.

### Gestión de encuestas[](https://i-survey-addon.readthedocs.io/es/latest/survey_create.html#gestion-de-encuestas) <a href="#gestion-de-encuestas" id="gestion-de-encuestas"></a>

#### Audios[](https://i-survey-addon.readthedocs.io/es/latest/survey_create.html#audios) <a href="#audios" id="audios"></a>

Cada encuesta confeccionada implica 3 clases audios a reproducir:

* Saludo inicial
* Despedida
* Preguntas

Antes de crear nuestras encuestas, debemos asegurarnos de subir previamente los audios involucrados en la misma utilizando el módulo de audios de OMniLeads: *Telefonía -Audios - Audios personalizados*.

Una vez disponibles los audios con los que vamos a confeccionar nuestra encuesta, entonces avanzamos !

#### Nueva encuesta[](https://i-survey-addon.readthedocs.io/es/latest/survey_create.html#nueva-encuesta) <a href="#nueva-encuesta" id="nueva-encuesta"></a>

El Addon i-Survey se debe visualizar dentro del Menú principal:

<figure><img src="/files/rle7D7D8ciffMIwVGBG9" alt=""><figcaption></figcaption></figure>

Desde allí podemos generar una nueva encuesta:

![](/files/SREcchgSv19IWWf2PpvP)

La primera vista de creación de encuestas implica los siguientes campos:

* **Nombre**: El nombre que va a llevar la nueva encuesta.
* **Timeout**: El tiempo de tolerancia en el que se espera una respuesta DTMF como interacción.
* **Time retry**: El tiempo en que va a esperar para volver a reproducir cada pregunta.
* **Retry**: La cantidad de veces que va a tolerar una respuesta no listada como opción.
* **Start audio**: El audio que se dispara como bienvenida en cada llamada transferida a la encuesta.
* **End audio**: El audio que se dispara al momento de finalizar la encuesta.

Una vez completado el formulario la encuesta pasa a estar disponible para seguir su confección, asignación y posterior publicación.

![](/files/vuze7H0Mysse7fyCcpXt)

#### Confección de preguntas[](https://i-survey-addon.readthedocs.io/es/latest/survey_create.html#confeccion-de-preguntas) <a href="#confeccion-de-preguntas" id="confeccion-de-preguntas"></a>

En el orden correcto primero debemos generar todas las preguntas que va a confeccionar nuestra encuesta, para luego comenzar a asociar las posibles respuestas sobre cada pregunta y sus acciones a disparar. Ahora nos vamos a centrar en las preguntas, para ello se hace click en el ícono que lleva un “?” dentro de la encuesta en cuestión.

Para ejemplificar se considera una encuesta de satisfacción post-atención de dos preguntas:

Como se puede observar en la confección de la pregunta solamente se debe indicar el audio a reproducir, un nombre a la pregunta, una descripción y luego indicar si se trata de la primera pregunta de la encuesta por un lado y si la pregunta es ponderable, es decir que se debe promediar la respuesta en los reportes.

* **Cómo calificaría el nivel de atención recibido del 1 al 5**

![](/files/xFzj9A6pACxv2Mu1R5oM)

* **El motivo de su llamado fue resuelto**

![](/files/tBXZba6HstmoR2A8IkK0)

#### Confección de las respuestas de cada pregunta[](https://i-survey-addon.readthedocs.io/es/latest/survey_create.html#confeccion-de-las-respuestas-de-cada-pregunta) <a href="#confeccion-de-las-respuestas-de-cada-pregunta" id="confeccion-de-las-respuestas-de-cada-pregunta"></a>

Una vez generadas todas las preguntas, se deben crear las respuestas esperadas por cada pregunta junto a la acción que debe disparar cada una de éstas. Siguiendo el ejemplo planteado, se cuenta con dos preguntas:

![](/files/hWnoZiQjGsMSkTqj6r3e)

A continuación se trabaja con la confección de respuestas para la pregunta inicial:

![](/files/yfc9Gejdm14CaXEmLyoV)

Como se puede observar se trata de asociar cada DTMF esperado como respuesta con una acción:

* Finalizar
* Repetir
* Próxima pregunta

Es decir que el hecho de recibir como interacción el DTMF esperado por un lado *califica* la interacción y por el otro dispara una de las acciones citadas. Como podemos observar, cada una de las respuestas llevan a reproducir la próxima pregunta, osea la pregunta número dos de la encuesta.

![](/files/yNq4C260OvSnoJvtjiuy)

Nota

Esto no necesariamente debe ser así, en un ejemplo más complejo se podrían anidar muchas preguntas en diferentes niveles formando un árbol de la complejidad que se desee.

La segunda y última pregunta de nuestro ejemplo:

![](https://docs.freetechsolutions.com.ar/~gitbook/image?url=https%3A%2F%2Fi-survey-addon.readthedocs.io%2Fes%2Flatest%2F_images%2Fsurvey_create_09.png\&width=768\&dpr=4\&quality=100\&sign=ac56f6f1\&sv=1)

Cada una de las respuestas a ésta pregunta, tiene como acción terminar con la encuesta.

#### Asignación a campaña y publicación de la encuesta a producción:[](https://i-survey-addon.readthedocs.io/es/latest/survey_create.html#asignacion-a-campana-y-publicacion-de-la-encuesta-a-produccion) <a href="#asignacion-a-campana-y-publicacion-de-la-encuesta-a-produccion" id="asignacion-a-campana-y-publicacion-de-la-encuesta-a-produccion"></a>

Se debe asociar la encuesta con una campaña.

![](/files/3sl8G4pe6Y7xa9rQaJJK)

Nota

Solo se puede asociar una encuesta a una campaña. No es viable asociar una encuesta a más de una campaña.

Finalmente para dejar en producción la encuesta se la debe publicar.

![](/files/l8mE8TWqhCewWdAvtx48)

![](/files/Q7rxhCWgXQn57VrbTuKd)

#### Transferencia de la llamada a la encuesta[](https://i-survey-addon.readthedocs.io/es/latest/survey_create.html#transferencia-de-la-llamada-a-la-encuesta) <a href="#transferencia-de-la-llamada-a-la-encuesta" id="transferencia-de-la-llamada-a-la-encuesta"></a>

En versiones anteriores, las llamadas se transferian a encuesta manualmente mediante un botón de "Transferir a Encuesta". A partir de 2.6.3 este proceso ya es automático al cortar la llamada por parte del agente.


# Reportería

### Reportes de Encuestas[](https://i-survey-addon.readthedocs.io/es/latest/survey_reports.html#reportes-de-encuestas) <a href="#reportes-de-encuestas" id="reportes-de-encuestas"></a>

#### Filtros de Reportes[](https://i-survey-addon.readthedocs.io/es/latest/survey_reports.html#filtros-de-reportes) <a href="#filtros-de-reportes" id="filtros-de-reportes"></a>

Al clickear sobre el ícono de reportes, se despliega el Filtro Avanzado del módulo de Encuestas, donde se pueden seleccionar:

* Rango de Fechas: Período de tiempo para la evaluación de resultados de la encuesta de calidad.
* Campañas: la campaña involucrada en la encuesta.
* Agentes: los agentes que se auditan a partir de la encuesta.
* Grupos: los grupos de agentes que se auditan a partir de la encuesta.

![](/files/QIB4NawMMUgI5RfgF3O9)

Al presionar sobre el botón «Buscar», se despliegan los múltiples resultados relacionados a la encuesta disparada. Por otro lado el botón «Descargar CSV» permite obtener un archivo en formato CSV/Excel a partir del cual se obtiene una sábana de registros con sus archivos de audio y las opciones seleccionadas en cada una de las secciones de la encuesta.

#### Resultados de Reporte[](https://i-survey-addon.readthedocs.io/es/latest/survey_reports.html#resultados-de-reporte) <a href="#resultados-de-reporte" id="resultados-de-reporte"></a>

A la hora de evaluar los reportes de encuestas, partimos de una serie de Tabs que organizan la información en diferentes secciones:

* Reporte General: ofrece cantidades de llamadas derivadas a encuesta, completadas, parcialmente completadas y abandonadas durante la reproducción de los audios asociados.

![](/files/HNAQ2ibpKsKkVZTUpCrz)

* Calificaciones por Pregunta: para cada pregunta de la encuesta confeccionada, se grafican las diferentes calificaciones efectuadas por el llamante a la hora de responder la encuesta.

![](/files/HApQJUWTBJcZmRoipvqV)

* Respuestas por Agente: para cada pregunta de la encuesta confeccionada, se grafican las diferentes opciones seleccionadas por el llamante, por agente.

![](/files/g2PZxrQdsFhCvmqTDKNx)

* Respuestas por Fecha: para cada pregunta de la encuesta confeccionada, se grafican las diferentes opciones seleccionadas por el llamante, por fecha.

![](/files/Sgxnoman8dc2r4xT1S5J)

* Promedios por Agente: para cada pregunta «ponderada», se obtiene el promedio de las opciones seleccionadas por el llamante, por agente.
* Promedios por Fecha: para cada pregunta «ponderada», se obtiene el promedio de las opciones seleccionadas por el llamante, por dia.

Es importante aclarar que cada una de las secciones de reportes presentadas en las diferentes vistas, es exportable a CSV/EXcel para su correcto análisis.

![](/files/ZT9yezdUlSjxnCq8B6oP)

![](/files/NhfsQndv22s80oF7U50Y)


# Reportes Premium (Pro)

### Reportería Avanzada <a href="#reporteria-avanzada" id="reporteria-avanzada"></a>

{% embed url="<https://youtu.be/kPBRH40TgKE>" %}

#### Que es el Reporting Pro? <a href="#que-es-el-reporting-pro" id="que-es-el-reporting-pro"></a>

Reporting Pro es un módulo comercial disponible en [OMniLeads Enterprise](/instalacion-de-omnileads/omnileads-enterprise), clave a la hora de obtener precisión en las mediciones analíticas de actividad de un Contact Center. Este Addon permite generar múltiples métricas de productividad y eficiencia, a la vez que combina la información estadística con el objeto de ofrecer mayor “granularidad” a la hora del despliegue de información, lo que permite una mejora sustancial en la presentación de la información para la toma de decisiones. Dentro del compendio de métricas existentes, se incluyen:

* Identificación de números llamantes o números discados
* Distribución por Campaña, Horario, Mes, Semana, Dia y Hora.
* Detalle de llamadas atendidas por Campaña, Agente, Horario
* Detalle de llamadas fallidas
* Número de intentos
* Tiempos de Waiting Totales y Promedios
* Tiempos al Habla Totales y Promedios
* Tiempos de Sesión Totales y Promedios
* Tiempos de Pausa Totales y Promedios
* Disponibilidad de Agentes: Tiempos de Inicio-Fin para Sesiones y Pausas
* Número de Agentes por Día y Hora
* Motivos de Desconexión para cada llamada establecida, por Campaña
* Motivos de No Conexión para cada intento de llamada, por Campaña
* Horarios de llamadas y destinos de enrutamiento, con sus correspondientes tiempos de espera y estados de finalización.
* Exhaustiva Granularidad de Filtrado: por Tipo de Campaña, Por Campaña, Por Grupos de Agentes y/o Agentes Invidivuales, Por teléfono y/o ID de Llamada, por Tipo de Conexión, por Franja Horaria continua o No Contigua.
* Ajustes por Zona horaria (ideal para sedes en zonas geográficas diferentes)
* Nivel de Servicio personalizable.
* Exportación de Resultados a CSV
* Descarga y Escucha de Grabaciones desde reporte.

#### Requisitos <a href="#requisitos" id="requisitos"></a>

1. Una instancia de OMniLeads Enterprise

* **release-1.5.0** minimamente instalado para el **release-1.1.0** del Premium Reports.
* **release-1.12.0** minimamente instalado para el **release-1.2.0** del Premium Reports.
* **release-1.14.0** minimamente instalado para el **release-1.3.0** del Premium Reports.
* **release-1.24.0** minimamente instalado para el **release-1.3.7** del Premium Reports.

AnteriorSupervisión[SiguienteCómo lo Obtengo?](https://3667390847-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FqQ4bFJhI3nNWFv4zXBw2%2Fuploads%2FE8urxzpFMf4Yf5TKEvDM%2Fcomo%20lo%20obtengo?alt=media)

Última actualización hace 1 año


# Reportes de Actividad

### Reportes <a href="#reportes" id="reportes"></a>

#### Reportes de Actividad <a href="#reportes-de-actividad" id="reportes-de-actividad"></a>

Una vez que el Addon fue activado de manera satisfactoria, el menú de Administración desplegará el apartado correspondiente:\ <br>

<figure><img src="/files/47Ppgct1jYWblOZKZS8I" alt=""><figcaption></figcaption></figure>

La primer pantalla ofrece un Panel de Filtrado amplio, que podemos dividirlo en 2 partes:

**Parámetros Fijos**\ <br>

<figure><img src="/files/2jgzFAq7SH9wrgByAE7L" alt=""><figcaption></figcaption></figure>

* **Tipo de Campaña:** permite seleccionar el tipo de campaña, si es Entrante, Saliente Manual, Saliente Dialer, Saliente Preview, Todas.
* **Campañas específicas:** el tipo de campaña pre-selecciona los nombres de campaña relacionados al tipo de campaña. Se puede seleccionar Todas, una o varias al mismo tiempo.
* **Grupos de Agente:** selecciona el grupo de agentes previamente creado por el Administrador.
* **Agentes específicos:** permite seleccionar agentes específicos de la/s campaña/s en cuestión.
* **Inclusión de Llamadas Manuales:** es posible excluir o incluir a gusto las llamadas del tipo Manual que hayan efectuado los agentes en nombre de la campaña.
* **Número Telefónico:** permite el filtrado por CallerID o número telefónico del prospecto.
* **CallID de Llamada:** vincula la variable de Asterisk que identifica la llamada, a los fines técnicos de seguimiento de canal.
* **Tipo de Conexión:** permite filtrar por las Fallidas (llamadas que no se pudieron establecer), las Exitosas (llamadas conectadas y satisfactorias), o Todas.

**Parámetros Temporales**\ <br>

<figure><img src="/files/J6V5qG0K4zAfLSpTpRJH" alt=""><figcaption></figcaption></figure>

* **Fecha de Inicio:** fecha de inicio de la búsqueda.
* **Fecha Fin:** fecha de fin de la búsqueda.
* **Dias de la Semana:** dia/s de la semana en la que se ejecuta el filtro.
* **Rango Horario contiguo y no contiguo:** permite agregar uno o más rangos horarios no contiguos, selección muy útil a la hora de obtener estadísticas por grupos horarios.
* **Ajuste de Zona Horaria:** parámetro de offset que se pre-selecciona con el objetivo de desfasar el horario en función de la región donde se encuentre el grupo de agentes en cuestión, y cuya zona horaria difiera de la correspondiente a la instancia.
* **Service Level:** permite la selección de un nivel de servicio distribuido en bloques de segundos, con el objetivo de contabilizar las llamadas atendidas en cada bloque de interés.

Última actualización hace 11 meses


# Analizando Resultados

### Analizando resultados <a href="#analizando-resultados" id="analizando-resultados"></a>

Luego de seleccionar las opciones de filtrado correspondiente y Aplicar la búsqueda, los resultados se obtienen a través de la disposición que se muestra debajo. La distribución general permite obtener información respecto a la cantidad de llamadas atendidas, cantidad de llamadas perdidas o no atendidas, y promedios en función del período seleccionado.\ <br>

<figure><img src="/files/jcICQ9Q9dtotwuc0PTmB" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/AnBkURO7ccKwDGJSSmMr" alt=""><figcaption></figcaption></figure>

* **Generación del Reporte:** fecha y hora de generación del reporte.
* **Campañas:** nombres de las campañas pre-seleccionadas en el filtro general.
* **Período Inicial y Final:** rango de fechas sobre el cual se desplegará el reporte de actividad.
* **Dias de la semana:** dias pre-seleccionados sobre los que se analizará la información.
* **Rango Horario:** rango/s horario/s de análisis.
* **Total Llamadas Procesadas:** número de llamadas procesadas de acuerdo al filtrado inicial de reporte.
* **Porcentaje de Atendidas:** Porcentaje de Llamadas atendidas, respecto al número total de llamadas procesadas en el rango de fecha y hora seleccionado.
* **Porcentaje de No Atendidas:** Porcentaje de Llamadas No Atendidas, respecto al número total de llamadas procesadas en el rango de fecha y hora seleccionado.
* **Llamadas transferidas a Camp Atendidas:** Cantidad de llamadas que se han transferido a campañas entrantes y que se han atendido.
* **Llamadas transferidas a Camp No Atendidas:** Cantidad de llamadas que se han transferido a campañas entrantes y que resultaron no atendidas (expiradas por tiemout y/o abandonadas).

#### Distribución general <a href="#distribucion-general" id="distribucion-general"></a>

Aquí se visualizan los contadores globales de llamadas:

* **Recibidas:** llamadas recibidas por la campaña.
* **Transferencias Recibidas:** llamadas recibidas por la campaña como resultado de transferencias desde otra campaña orígen.
* **Atendidas:** llamadas de campaña atendidas por un agente.
* **No Atendidas:** llamadas de campaña no atendidas.
* **Abandonadas:** llamadas recibidas por la campaña que resultan en abandono por parte del llamante.
* **Expiradas:** llamadas recibidas por la campaña que expiran por timeout (tiempo de espera máxima configurado en campaña).
* **% Atendidas:** porcentaje de llamadas atendidas respecto al total de recibidas en campaña.
* **% No atendidas:** porcentaje de llamadas no atendidas respecto al total de recibidas en campaña.
* **Espera Media:** tiempo promedio que la llamada debió esperar para ser atendida. Resulta de la división entre la suma de los tiempos de espera y el total de llamadas.
* **Duración Media:** tiempo promedio de conversación. Resulta de la división entre la suma de tiempos al habla para cada llamada, y el total de llamadas atendidas.

Estos resultados pueden discriminarse por Campaña, por Rango Horario, por Mes, Semana, Dia de la Semana y Hora del dia. Cada Registro de campaña puede ampliarse clickeando en el signo “más” (+), a los fines de obtener mayor granularidad estadística.

El botón de “Descarga CSV”, permite descargar el output de la pestaña actual del reporte en el formato estándar CSV, para su correspondiente presentación y análisis en Excel o LibreOffice.\ <br>

<figure><img src="/files/i17JchuhoXdDKkCJu9LW" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/WmhQOcA5HE38KTae5zTD" alt=""><figcaption></figcaption></figure>

#### Llamadas atendidas <a href="#llamadas-atendidas" id="llamadas-atendidas"></a>

En este apartado se ofrece una vista general de distribución de atendidas por campaña, de acuerdo al filtrado seleccionado. Sin embargo, el módulo ofrece mayor detalles de las transacciones de llamadas en los siguientes menúes del tópico:\ <br>

<figure><img src="/files/pc9d355U0d26jmJHBggV" alt=""><figcaption></figcaption></figure>

<br>

<figure><img src="/files/lpLiwySDcQHgZnN2lY2X" alt=""><figcaption></figcaption></figure>

* **Generación del Reporte:** fecha y hora de generación del reporte.
* **Campañas:** nombres de las campañas pre-seleccionadas en el filtro general.
* **Período Inicial y Final:** rango de fechas sobre el cual se desplegará el reporte de actividad.
* **Dias de la semana:** dias pre-seleccionados sobre los que se analizará la información.
* **Rango Horario:** rango/s horario/s de análisis.
* **Llamadas Atendidas:** número de llamadas atendidas de acuerdo al filtrado inicial de reporte.
* **Transferencia a Campaña Atendidas:** número de llamadas atendidas de acuerdo al filtrado inicial de reporte, resultantes de una transferencia a campaña.

**Detalle llamadas atendidas**

Donde se visualizan los siguientes campos:

* **Fecha y Hora:** “datetime” de la llamada.
* **Número Telefónico:** callerID llamante.
* **Nombre de Campaña:** nombre de la campaña para la que se registra la transacción.
* **Tipo de campaña:** ID de tipo de campaña.
* **Nombre de Agente:** agente que procesó la llamada
* **Tiempo de espera:** tiempo que esperó el llamante para ser atendido por un agente.
* **Duración de la conversación:** tiempo al habla para la transacción telefónica.
* **Causa de Desconexión:** incorpora a la estadística “la fuente” del corte de la llamada o evento de hang up (si corta el cliente, o si corta el agente).
* **Calificación de la llamada:** calificación que guardó el agente para el cierre de dicha gestión.
* **Archivo de Grabación:** enlace para escucha online o descarga correspondiente de la grabación

Nota

La campaña requiere activar la grabación de llamadas para tal efecto

![](/files/V1wPe0AnLK48eP9hTTVt)

**Service level**

Este segmento permite observar la distribución de los tiempos de espera, distribuidos en bloques pre-definidos de segundos. Básicamente muestra la cantidad de llamadas que fueron atendidas dentro de un slot de tiempo (el bloque de tiempo incremental puede ser definido en el filtro inicial de reporte).

![](/files/NYceWbdchnvVX5u0SQ61)

<figure><img src="/files/MuYBf8FffXIFAeuyOl8l" alt=""><figcaption></figcaption></figure>

* **Atendidas antes de los X segundos:** todas aquellas llamadas atendidas dentro de los X segundos de espera, donde X se define en el filtrado inicial de reporte (parámetro Service Level).
* **Número:** número de llamadas que se atienden.
* **Delta:** valor de incremento “absoluto” para cada slot de tiempo, expresado en cantidad de llamadas.
* **Porcentaje:** porcentaje del total de llamadas recibidas, para cada slot de tiempo.

**Atendidas por agente**

Donde se aprecian los detalles de:

* **Nombre de agente:** nombre del agente que atendió la llamada.
* **Username:** nombre de usuario del agente.
* **Llamadas Procesadas:** número de llamadas atendidas de campaña.
* **Transferidas a campaña:** Número de llamadas transferidas a campaña y atendidas por el agente.
* **Transferidas a agente:** Número de llamadas transferidas al agente.
* **% Atendidas:** Porcentaje de llamadas atendidas por el agente, respecto al total.
* **Fuera de Campaña:** Número de llamadas contabilizadas "Fuera de Campaña".
* **Tiempo Total al Habla:** tiempo en segundos, que el agente ha pasado al habla durante la operación.
* **Tiempo promedio al Habla:** tiempo promedio al habla, que resulta de dividir el tiempo total al habla sobre la cantidad de llamadas atendidas.
* El signo “más” (+) ofrece mayor granularidad de la llamada en cuestión.

![](/files/Te0vSWYooGBzDIed690b)

<figure><img src="/files/yZx41rUs8DlmcfhGrIQQ" alt=""><figcaption></figcaption></figure>

**Causas de desconexión**

El sistema permite detectar si el corte de la llamada atendida proviene del Agente o del prospecto/cliente. De esta manera ofrece contadores por evento y porcentajes globales para el filtro seleccionado.

* **Causas:** el evento COMPLETEOUTNUM refiere a un corte proveniente del extremo remoto o cliente. Por otro lado COMPLETEAGENT refiere a un evento de corte proveniente del agente.
* **Número de llamadas:** número de transacciones que cayeron en cada evento de corte.
* **Porcentaje:** porcentaje de llamadas que caen dentro del evento de corte, respecto al total de llamadas procesadas.

![](/files/5qj5bqCzS8ehXjxUbz7n)

<figure><img src="/files/D6Mivw8nZ7ik9QyOOwws" alt=""><figcaption></figcaption></figure>

#### Llamadas no atendidas <a href="#llamadas-no-atendidas" id="llamadas-no-atendidas"></a>

En este apartado se ofrece una vista general de distribución de no atendidas por campaña, de acuerdo al filtrado seleccionado. Es decir, contabiliza las llamadas perdidas que por diferentes motivos no pudieron ser conectadas a un agente (ya sea porque el llamante abandonó, o expiró el tiempo de espera en cola, o se obtuvo algún evento de falla al momento de enrutar la llamada).

Para ahondar en mayor granularidad, el módulo ofrece mayores detalles de las transacciones de llamadas en los siguientes menúes del tópico:

<figure><img src="/files/2qZFxFNizlEIjKuT6uRS" alt=""><figcaption></figcaption></figure>

* **Generación del Reporte:** fecha y hora de generación del reporte.
* **Campañas:** nombres de las campañas pre-seleccionadas en el filtro general.
* **Período Inicial y Final:** rango de fechas sobre el cual se desplegará el reporte de actividad.
* **Días de la semana:** días pre-seleccionados sobre los que se analizará la información.
* **Rango Horario:** rango/s horario/s de análisis.
* **Llamadas No Atendidas:** número de llamadas no atendidas de acuerdo al filtrado inicial de reporte.
* **Transferencias a campaña No Atendidas:** número de llamadas transferidas a campaña, que no fueron atendidas de acuerdo al filtrado inicial de reporte.

**Detalle llamadas no atendidas**

Cada registro provee la siguiente información:

* **Fecha:** o “datetime” de la transacción telefónica.
* **Número Telefónico:** representa el CallerID llamante
* **ID Campaña:** Identificador de Campaña.
* **Nombre de Campaña:** nombre de la campaña donde se registra la transacción telefónica.
* **Tipo de Campaña:** ID de identificación de tipo de campaña.
* **ID de Agente:** Identificador de Agente.
* **Tiempo de Espera:** tiempo que debió esperar el cliente antes de finalizar la transacción.
* **Causas de no conexión:** motivo por el cual la llamada no se derivó a un agente.

![](/files/A2KuIW1nzIMLGPFHLXJQ)

**Porcentaje de llamadas no atendidas**

Los apartados ofrecen contadores y porcentajes tanto por campaña como por agente.

* **No Conexiones por Agente:** refiere a llamadas manuales no conectadas originadas por agentes.
* **No Conexiones por Campaña:** refiere llamadas no conectadas originadas por campaña.
* **Número:** número de llamadas no atendidas.
* **Porcentaje:** porcentaje de llamadas no conectadas respecto del total de no atendidas.

![](/files/xNFTnEhXCUPt4CcOjqrZ)

<figure><img src="/files/un4Gz9wxc4YwIFovcCV5" alt=""><figcaption></figcaption></figure>

**Causas de No conexión**

Donde se contabilizan los diferentes motivos que originaron la no-conexión de la llamada, en términos globales y porcentuales. Dentro de las causas de no conexión se presentan las más comunes:

* **EXITWITHTIMEOUT:** evento de corte por parte del cliente, luego de alcanzar el tiempo máximo de espera en cola.
* **ABANDON:** evento de corte por parte del cliente, luego de desistir a la espera en cola.
* **CONGESTION:** señal de congestión en los intentos de efectuar salientes.
* **NONDIALPLAN:** evento de falla producto de no encontrar una ruta saliente válida para la llamada que se intenta cursar.

<figure><img src="/files/9FXuVkB2VvlLZdegNl3i" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/XNfHNwDkjvFshvygBlgF" alt=""><figcaption></figcaption></figure>

#### Reportes de agente <a href="#reportes-de-agente" id="reportes-de-agente"></a>

Las estadísticas de agente resultan clave a la hora de determinar la performance del Contact Center y la Productividad de la dotación de Agentes.

Por dicho motivo se ofrece información detallada en términos de actividad y disponibilidad de agentes, métricas relevantes para acompañar y corregir el desempeño de la Operación.

<figure><img src="/files/7buiezHQkrntxYOm3gog" alt=""><figcaption></figcaption></figure>

* **Agentes Disponibles:** cantidad de agentes disponibles para el rango de fecha y hora seleccionado.
* **Tiempo promedio de agente:** tiempo promedio de sesión, que resulta de dividir la suma de todas las sesiones sobre el total de sesiones detectado para el filtro seleccionado.
* **Tiempo mínimo de agente:** tiempo de sesión mínima registrado en la plataforma.
* **Tiempo máximo de agente:** tiempo de sesión de mayor duración registrado en la plataforma.
* **Tiempo Total de Agente:** Suma de Todos los tiempos de sesión registrados en filtro inicial.

**Disponibilidad de Agente**

En este menú se registra información inherente a la actividad del agente, como ser tiempos de sesión, tiempos de pausa, tiempos al habla, etc..

* **ID:** Identificador de Agente
* **Agente:** nombre de agente.
* **Número de Sesiones:** cantidad de eventos de Login y Logout que se contabilizan para el rango de fecha y hora seleccionada.
* **Tiempo de Hold:** acumulado de tiempo en Hold para el filtro de fecha y hora seleccionada.
* **Tiempo Total de Sesion:** acumulado de tiempo de sesión para el filtro de fecha y hora seleccionada.
* **Promedio de Sesión:** promedio resultante de dividir la suma total de tiempos de sesión sobre la cantidad de sesiones.
* **Tiempo On Call:** Tiempo total en que el agente estuvo al habla.
* **Número de Pausas:** número total de eventos de pausa registradas.
* **Tiempo Total de Waiting:** tiempo total en el que el agente estuvo en espera, listo para recibir llamadas.
* **Tiempo Total de Pausa:** tiempo total en que el agente estuvo pausado.
* **Promedio de Pausa:** tiempo promedio de cada pausa, resultante de dividir el tiempo total de pausa sobre la cantidad de pausas registradas.
* **% de ocupación:** Porcentaje de ocupación del agente, resultante de dividir la cantidad de tiempo que estuvo al habla sobre el total de tiempo de sesión registrado.
* **Primer Login:** timestamp correspondiente a la acción de primer Login de sesión.
* **Último Logout:** timestamp correspondiente a la acción de último Logout de sesión.

Clickeando sobre el agente, se obtiene mayor granularidad en la información sobre las sesiones y las pausas de agente.

<figure><img src="/files/wAAu1gKiNPvHqUmcL7xD" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/L5caza32t61YypylYXav" alt=""><figcaption></figcaption></figure>

* Clickeando sobre el tiempo total de pausa, se obtiene información de los tiempos de pausa totales para cada pausa agrupadas en pausas Productivas y Recreativas.

<figure><img src="/files/Jf2QIH4rcVvyZtrqsjKz" alt=""><figcaption></figcaption></figure>

**Número de agentes por día**

Esta métrica permite tener un pantallazo general de la distribución de la dotación de agentes por día y hora de la semana dentro del rango seleccionado en el filtro del reporte.

![](/files/djAmDrtOpU7oFDdrbGPa)

<figure><img src="/files/ijunqZrCPmX1kl3FgS22" alt=""><figcaption></figcaption></figure>

Eventos de resultados de llamadas

| Log               | Description                                                                                |
| ----------------- | ------------------------------------------------------------------------------------------ |
| ABANDON           | Abandon of a call in a queue                                                               |
| ABANDON-CTOUT     | The customer abandoned the call in a CT is in progress between an agent an external number |
| ABANDONWEL        | The customer abandons when is listening the entrance audio of queue                        |
| ANSWER            | Attended outbound calls                                                                    |
| BTOUT-ANSWER      | Transfer attended between an agent and external number                                     |
| BTOUT-TRY         | Transfer attempt between an agent and external number                                      |
| CANCEL            | Cancelled outbound calls                                                                   |
| CHANUNAVAIL       | Channel unavailable for outbound calls                                                     |
| COMPLETE-BTOUT    | Blind transfer attend to an external number                                                |
| COMPLETE-CTOUT    | Consultative transfer to an external number                                                |
| COMPLETEAGENT     | Agent hangups the call                                                                     |
| COMPLETEOUTNUM    | Customer hangups the call                                                                  |
| CT-ANSWER         | Attended consultative transfer                                                             |
| CT-BUSY           | Busy consultative transfer                                                                 |
| CT-DISCARD        | Consultative transfer discarded by agent                                                   |
| CT-TRY            | Try of consultative transfer                                                               |
| CTOUT-ABANDON     | Consultative transfer abandon to external numbers                                          |
| CTOUT-ACCEPT      | Consultative transfer accept of external numbers                                           |
| CTOUT-ANSWER      | Consultative transfer answer of external numbers                                           |
| CTOUT-CHANUNAVAIL | Channel unavailable of consultative transfer of external numbers                           |
| CTOUT-DISCARD     | Discard of consultative transfer of external numbers                                       |
| CTOUT-TRY         | Try of consultative transfer of external numbers                                           |
| DIAL              | Dial try of an outbound call                                                               |
| ENTERQUEUE        | Call ingress to a queue (for Inbound and Dialer)                                           |
| EXITWITHTIMEOUT   | Timeout in queue                                                                           |
| NOANSWER          | Outbound call not attended                                                                 |
| NONDIALPLAN       | No outbound route for outbound call                                                        |
| COMPLETE-CT       | Agent hangups counsultative transfer                                                       |


# Centro de Chats (Pro)

El **Centro de Chats** de OMniLeads Enterprise incorpora un tablero unificado para la gestión y análisis del tráfico en canales digitales clave como **WhatsApp Business, Instagram y Meta Messenger**.

<figure><img src="/files/VwIOM1mvMGFd4IF5Vz2J" alt=""><figcaption></figcaption></figure>

Dependiendo del canal, es posible adentrarse en detalles mas finos, como es el abanono en flujos de atención, sean por un evento fuera de hora o se deban a un abandono en Bots. Ésto arroja información relevante a la hora de analizar en cuál bloque de respuesta el usuario/lead/paciente/cliente/deudor ha abandonado la interacción.

<figure><img src="/files/9UQAds72Udz47USy8kM0" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/xcwv3xyA5r14NwLHH3VW" alt=""><figcaption></figcaption></figure>

Este módulo tiene como propósito ofrecer a supervisores y responsables de atención al cliente una **visión completa y en tiempo real** de la operación digital, permitiendo identificar volúmenes de interacción, eficiencia en la respuesta y desempeño por campaña o agente.

<figure><img src="/files/xUUMjOmUQj1YSgauTV47" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/g3kiP9qXPmJBjEWhj3ZN" alt=""><figcaption></figcaption></figure>

### Funcionalidades principales

* **Conteo de interacciones recibidas, atendidas, finalizadas y asignadas.**\
  Permite conocer el flujo total de conversaciones y segmentarlas según su estado.
* **Derivación a campañas y métricas por campaña.**\
  Estadísticas que muestran cuántas interacciones se canalizaron a campañas.
* **Métricas por agente.**\
  Monitoreo de desempeño individual, mostrando el total de interacciones gestionadas y los tiempos de primera respuesta por colaborador.
* **Tiempo de primera respuesta**\
  Una métrica crítica que refleja la agilidad de atención en los diferentes canales digitales, facilitando la comparación entre equipos y turnos.
* **Exportación de datos a CSV/Excel.**\
  Posibilidad de descargar la información para reportes personalizados, auditorías o integraciones con sistemas de BI (Business Intelligence).
* **Abandonos en Bot / Fuera de Hora**\
  Permite contabilizar abandonos en el árbol de atención así como eventos de fuera de hora.

***

### Importancia para los negocios

El crecimiento del uso de canales digitales en la comunicación con clientes hace imprescindible contar con una herramienta que **muestre el tráfico consolidado** y permita entender la **eficiencia de respuesta**.

* En el **sector retail**, facilita medir la velocidad de atención a consultas de disponibilidad y promociones.
* En **servicios financieros**, permite monitorear la agilidad en la respuesta a clientes sensibles como solicitudes de tarjetas, créditos o reclamos.
* En **telecomunicaciones y servicios públicos**, ofrece un tablero claro sobre la capacidad de los equipos para atender masivamente solicitudes de soporte o portabilidad.
* En **salud y educación**, garantiza que las consultas digitales reciban respuesta oportuna en momentos críticos.

***

### Disponibilidad

El **Módulo Centro de Chats** está disponible exclusivamente en la **Versión Enterprise de OMniLeads**, incorporando capacidades de análisis avanzadas y soporte multicanal para organizaciones que requieren un control completo sobre su operación digital.

<figure><img src="/files/h7fSPygF4XcqjE65I4xh" alt=""><figcaption></figcaption></figure>

### Filtros de Información

Dentro del menú Reporting Pro --> Centro de Chats, encontrará un filtro que permitirá segmentar ina información:

* por canal (Whatsapp, Meta, Instagram)

<figure><img src="/files/TXE5GCzZHSuh4qsqEWmB" alt=""><figcaption></figcaption></figure>

* por Linea de Whatsapp (en caso el selector de canal sea Whatsapp)
* por campaña
* por teléfono (en caso el selector de canal sea Whatsapp)
* por agente
* por fecha
* por estado de conversación

&#x20;

<figure><img src="/files/PFx4dT9UQwcaxPpBAEY1" alt=""><figcaption></figcaption></figure>

Luego de seleccionar el filtro correspondiente, el módulo arrojará información relacionada al segmento de tiempo y de objetos de interés elegidos. Los resultados pueden ser exportados a CSV/Excel para combinarlos con sistemas externos de BI y apoyar toma de decisiones.

<figure><img src="/files/b1TyJeLKWhntnJQvWST8" alt=""><figcaption></figcaption></figure>


# Outbound IVR (Pro)

Outbound IVR (también conocido como "IVR Blaster o Broadcaster") es un modelo de llamadas salientes automáticas donde el sistema disca a una lista de contactos y, al atender, reproduce un audio (o una secuencia) que puede incluir opciones para que la persona interactúe con el teclado (DTMF), por ejemplo “Presione 1 para ser contactado por un asesor, Presione 2 ...”. Este enfoque combina **alto volumen** con **interacción estructurada**.

<div data-full-width="true"><figure><img src="/files/KaHOuRGz87VySoM0G3Mq" alt=""><figcaption></figcaption></figure></div>

***

### ¿Qué es y cómo funciona?

En términos simples, un Outbound IVR:

1. **Inicia llamadas** discando números desde una base/lista (CRM o base de contactos).
2. **Reproduce un mensaje (o audios anidados)** al conectar con una persona (por ejemplo: aviso, recordatorio, campaña informativa, aviso de mora, etc.).
3. **Ofrece interacción**: el destinatario puede responder con teclas DTMF (1, 2, 3…).
4. **Ejecuta acciones** según la opción: calificar respuestas, enrutar a un agente, repetir audios, finalizar, etc. (caso típico: campaña “Press-1” para derivación a agente).

***

### Beneficios principales

* **Escala inmediatamente**: permite contactar grandes volúmenes en poco tiempo, manteniendo un guión consistente (ideal para comunicaciones masivas).
* **Interacción medible (DTMF)**: a diferencia de un audio “one-way”, el usuario responde y eso se transforma en datos (intención, satisfacción, confirmación).
* **Mejor foco de agentes**: con “Press 1” o filtros por DTMF, los agentes atienden contactos con mayor intención (menos tiempo en llamadas frías).
* **Automatiza encuestas y calificaciones**: ideal para CSAT/NPS post-interacción y auditoría de calidad, sin depender de disponibilidad del agente.
* **Experiencia consistente**: el mismo audio/flujo para todos, con control de reintentos, timeouts y lógica de repetición.

***

### Casos de uso típicos

1. **Campañas “Presione 1” (lead gen / derivación a ventas)**
   * Mensaje + “Presione 1 para hablar con un asesor / 2 para que lo llamemos luego”.
2. **Encuestas automáticas (CSAT / NPS / QA)**
   * Reproduce preguntas y registra respuestas por DTMF, con reportería y exportación.
3. **Notificaciones masivas con confirmación**
   * Recordatorios de turnos, vencimientos, avisos operativos: “Presione 1 para confirmar / 2 para reprogramar”.
4. **Cobranzas soft / gestión preventiva**
   * Segmentación por cartera y salida automatizada.
5. **Actualizaciones de estado / campañas informativas**
   * Mensajes sobre cortes, cambios, campañas públicas, etc., con opción de derivar a atención.

<div data-full-width="true"><figure><img src="/files/sUGzB6OPEI65YrGtPysR" alt=""><figcaption></figcaption></figure></div>

***

### Implementación en OMniLeads: Dialer + CX Survey

En OMniLeads, el esquema más potente para este modelo es combinar:

* **Campaña Dialer** para el discado saliente automático
* **CX Survey (Pro)** para:
  * reproducir audios (saludo, preguntas, despedida)
  * capturar DTMF con timeout/reintentos
  * explotar **reportería** y exportar resultados

<figure><img src="/files/vricqYMgGDPuOrl3KiJa" alt=""><figcaption></figcaption></figure>

***

#### 1) Configuración del IVR en CX Survey (Pro)

CX Survey (Pro) está diseñado para encuestas post-interacción y flujos automatizados con audio + DTMF.

Cada encuesta requiere **tres clases de audios**: saludo inicial, preguntas y despedida.\
Antes de crear la encuesta, hay que **subir los audios** desde el módulo de audios personalizados.

Al crear una nueva encuesta, se configuran parámetros clave como:

* **Timeout** (tolerancia esperando un DTMF)
* **Time retry** (cuánto espera para repetir la pregunta)
* **Retry** (cantidad de reintentos ante respuesta no válida)
* **Start audio** (bienvenida) y **End audio** (cierre)

<figure><img src="/files/6NotvmTEqeLzZydhlJ22" alt=""><figcaption></figcaption></figure>

#### 2) Diseñar preguntas + opciones DTMF (y acciones)

En este apartado se diseña el “menú”: por ejemplo

* “Califique del 1 al 5” (CSAT)
* “Presione 1 si desea hablar con un agente, 2 si prefiere que lo llamemos luego” (Press-1 derivación)

Para  mas información sobre cómo configurar Encuestas (salientes y/o entrantes) desde OMniLeads Enterprise, puede visitar el apartado dedicado a [Configuración de CX Survey](/cx-survey-pro).

***

### Configuración en OMniLeads: Campaña Dialer (base del “Outbound”)

Para crear una campaña de Outbound IVR, debe desplazarse al menú de **Campañas → Campañas dialer → Nueva campaña**.

Se puede seguir el tutorial desde el apartado de [Configuración de Campañas Dialer](/campanas-de-contacto/campana-dialer), sin embargo el punto clave es elegir en el Tab "Configuración de Cola" del Wizard el Destino "*CX Survey*", a los efectos de que la campaña de discado automático quede enlazada con la encuesta saliente.

<figure><img src="/files/rodxh1tgAYgBMep0eMtF" alt=""><figcaption></figcaption></figure>

***

### Lanzamiento de campaña y operación

Cuando la campaña este lista para lanzarse, el **Dialer** accionará las llamadas automáticas desde la base de contactos. Al conectar con el destino, la llamada entra al flujo de **CX Survey** y reproduce el IVR configurado para dicha ocasión.

<figure><img src="/files/M5r1dAdLmxxOpKFqRXtw" alt=""><figcaption></figcaption></figure>

***

### Visión de resultados (reportes)

CX Survey incluye un módulo de **reportería** con:

* Filtros por **rango de fechas**, **campañas**, **agentes** y **grupos**
* Resultados organizados por tabs (general, calificaciones por pregunta, por agente, por fecha, etc.)
* Exportación a **CSV/Excel** para análisis detallado

Para mas opciones, puede analizar sus reportes en la sección de [Reporteria CX Survey](/cx-survey-pro/reporteria).

***

### Buenas prácticas

Debajo algunas sugerencias que hacen a un funcionamiento óptimo:

* **Mensaje corto y claro:** esto es importante en el primer audio, ya que si es largo, puede verse afectada la tasa de abandono).
* **Pocas Opciones DTMF:** ideal 2–3 opciones.
* **Medí y ajustá**: es importante revisar timeout/reintentos y comparar resultados por pregunta/fecha para optimizar el flujo y lograr mayor eficacia.

***


# Text To Speech - TTS (Pro)

Text-to-Speech o TTS es una tecnología que permite reproducir el habla humana de forma artificial. Esta tecnología es capaz de recibir un texto y reproducirlo con una voz artificial sintetizada.

Es una solución eficaz e innovadora en el entorno de los Contact Center puesto que ayuda a automatizar muchas tareas como así tambien a efectuar integraciones novedosas en materia de sintetización de voz.

En OMniLeads se incluyen algunos algoritmos que permiten extender las funcionalidades del Centro de Contactos mediante motores TTS.

### Audios Personalizados y Text-To-Speech

Dentro del módulo *Recursos* -> *Audios -> Audios Personalizados*, se permite la creación de recursos de audio mediante archivos en el formato *wav 16 bits,* o bien facilitando su creación con motores de Text-To-Speech (TTS).

Los mismos pueden ser luego utilizados para IVRs, audios de bienvenida, etc., según el flujo telefónico del negocio.&#x20;

<figure><img src="/files/ey9YqLvsix5hT4BxNOPk" alt=""><figcaption></figcaption></figure>

Cuando se clickea en "Utilizar Servicio TTS", el sistema permite la generación de audios mediante algoritmos de "texto a voz" (text to speech, por sus siglas en inglés).

El combo de "Servicios TTS" permite al dia de la fecha tres motores de conversión de texto a voz:

* [Google TTS](https://cloud.google.com/text-to-speech/docs/reference/rest): Motor de Texto a Voz de Google.
* [ESPeak-NG](https://github.com/espeak-ng/espeak-ng): Sintetizador Open Source multi-idioma
* [PicoTTS](https://pypi.org/project/py-picotts/):  Engine TTS construido en Python.

A su vez, permite combinar dichos motores con voces predeterminadas con soporte en Inglés, Español y Portugués.&#x20;

Al escribir el texto a convertir en la Caja de Texto de la vista y presionar "Guardar", el motor seleccionado en el combo "Servicio TTS" se encargará de transformar la cadena de caracteres en una Voz Sintetizada de acuerdo a su algoritmo predeterminado.

<figure><img src="/files/IgfPkntIiSS4uPqOKAYF" alt=""><figcaption></figcaption></figure>


# Configuración de Voz

## Configuración del módulo de telefonía

En ésta sección, se exponen las configuraciones necesarias a realizar para que nuestra aplicación pueda interactuar con la PSTN (Red Telefónica Pública Conmutada), de manera tal que los agentes puedan tomar llamadas provenientes del exterior así como también marcar llamadas hacia teléfonos externos.

Importante

OMniLeads admite sólamente SIP como tecnología de interconexión con otros conmutadores de telefonía. Por lo tanto, el integrador podrá configurar troncales SIP de proveedores ITSP, troncales SIP contra sistemas PBX y/o troncales SIP contra Gateways FXO/E1/T1.

### Configuración de troncales SIP

Para acceder a la configuración, debemos ingresar al menú *Telefonía -> Troncales SIP* y allí añadir un nuevo troncal PJSIP. Se va a desplegar un formulario similar al de la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_pjsiptrunk_abm.png" alt=""><figcaption></figcaption></figure>

Los campos del formulario son:

* **Trunk Name**: Es el nombre del troncal. Debe ser alfanumérico, sin espacios ni caracteres especiales (por ejemplo, Trunk\_provider\_A).
* **Number of channels**: Es la cantidad de canales que permite el vínculo.
* **Caller id**: Es el número con el que saldrán las llamadas por el troncal.
* **SIP details**: En éste campo de texto se proporcionan los parámetros SIP, usando sintaxis de [PJSIP configuration Wizard](https://wiki.asterisk.org/wiki/display/AST/PJSIP+Configuration+Wizard) de Asterisk.

Una vez configurado el mismo, la Vista de Troncales SIP permitirá mostrar el listado de troncales SIP disponibles en el sistema, así como su estado actual:

<figure><img src="/files/4S6tTWXVyeMuma5pzUPX" alt=""><figcaption></figcaption></figure>

A continuación, desplegamos algunas plantillas sugeridas para los tipos de escenarios planteados como casos de uso típicos de OMniLeads:

* [Parámetros generales del SIP trunk](/configuracion-de-voz/parametros-generales-del-sip-trunk)
* [OMniLeads detrás de NAT](/configuracion-de-voz/parametros-generales-del-sip-trunk#omnileads-detras-de-nat)
* [OMniLeads en entornos sin NAT](/configuracion-de-voz/parametros-generales-del-sip-trunk#omnileads-en-entornos-sin-nat)
* [Troncal PJSIP custom](/configuracion-de-voz/parametros-generales-del-sip-trunk#troncal-pjsip-custom)

### Configuración para el enrutamiento de llamadas salientes

OMniLeads permite gestionar el enrutamiento de llamadas salientes sobre múltiples troncales SIP (previamente creados), de manera tal que utilizando criterios como el *largo* o el *prefijo del número*, se puede determinar por cuál vínculo SIP encaminar la llamada. Además, es posible mantener una lógica de *failover* entre los diferentes troncales SIP asignados a una ruta saliente.

Para acceder a la vista de configuración de rutas salientes, ingresar al menú *Telefonía -> Rutas salientes*:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_outr.png" alt=""><figcaption></figcaption></figure>

*Figure 2: Outbound route*

* **Nombre**: Es el nombre de la ruta (alfanumérico, sin espacios ni caracteres especiales).
* **Ring time**: Es el tiempo (en segundos) que las llamadas cursadas por ésta ruta, intentarán establecer una conexión con el destino, antes de seguir intentando por el próximo troncal, o bien descartarse la llamada.
* **Dial options**: Son las opciones de la aplicación «Dial» utilizadas por Asterisk en bajo nivel.
* **Patrones de discado**: Mediante patrones, se puede representar los *tipos de llamadas* que serán aceptadas por la ruta, y así colocadas sobre el troncal SIP para finalmente alcanzar el destino deseado.

  Para comprender cómo se representan los dígitos utilizando *patrones*, se recomienda leer el siguiente enlace:

  <https://www.voip-info.org/asterisk-extension-matching/>

  Dentro de cada patrón ingresado, hay 3 campos:

  * **Prepend**: Son los dígitos que se mandan por el troncal SIP como adicionales al número discado. Es decir, llegan al troncal posicionados delante del número marcado.
  * **Prefijo**: Son los dígitos que pueden venir como “prefijo” de una llamada marcada y los cuales serán removidos en el momento de enviarlos por el troncal SIP.
  * **Patrón de discado**: Se busca representar en éste campo, el patrón de dígitos autorizados que la ruta va a procesar para enviarlo a un troncal SIP, y sacar así la llamada hacia el exterior.
* **Secuencia de troncales**: Son los troncales SIP sobre los cuales la ruta saliente va a intentar establecer la llamada discada por OMniLeads. Si la llamada falla en un troncal, se sigue intentando con el siguiente.

### Configuración del módulo AMD

El módulo de AMD de Asterisk, puede configurarse en OMniLeads usando la siguiente interfaz:

<figure><img src="/files/sUa10PIAZVmOPJmYcnSN" alt=""><figcaption></figcaption></figure>

*Figure 2: Amd configuration page*

Para mayor información acerca de éste módulo de Asterisk, remitirse al siguiente enlace:

<https://wiki.asterisk.org/wiki/display/AST/Application_AMD>

### Configuración de esquema de nombres de archivos de grabaciones de llamadas

La siguiente sección, permite configurar el formato que tendrán los nombres de los archivos de grabaciones generadas por llamadas en el sistema.

Al seleccionar algunas de las opciones mostradas en la página, esto impactará directamente en el nombre de los archivos de grabaciones.

Importante

Tener en cuenta que el ID de agente como variable, no está disponible para campañas entrantes ni salientes de discador.

<figure><img src="/files/VO7dkx8VivVPnApa1UtD" alt=""><figcaption></figcaption></figure>

*Figure 2: Recordings scheme page*

### Configuración de enrutamiento de llamadas entrantes

El tratamiento de llamadas entrantes se abordará en la sección *Campañas Entrantes* de ésta documentación, ya que para poder operar con dicho módulo, debemos al menos tener creado algún objeto (IVR, condicional de tiempo, campaña entrante, etc.) hacia a donde enrutar cada DID generado.


# Parámetros generales del SIP trunk

## Parámetros generales del SIP trunk

Como bien se anticipó, PJSIP es el módulo que implementa SIP para éste tipo de troncales. Pero además, la sintaxis elegida para generar la configuración a nivel Asterisk es [pjsip wizard](https://wiki.asterisk.org/wiki/display/AST/PJSIP+Configuration+Wizard).

Además del link citado de la documentación oficial de Asterisk, compartimos el [siguiente link](https://apfelboymchen.net/gnu/notes/asterisk-pjsip.html) que resulta de mucho interés para profundizar respecto a los parámetros disponibles dentro de pjsip wizard.

A continuación, se proponen los siguientes escenarios de instancias OMniLeads y su conexión con un SIP provider con terminación a la PSTN.

## OMniLeads detrás de NAT

Bajo éste escenario, tenemos como posibilidad a la aplicación desplegada sobre un proveedor cloud saliendo a Internet a través de un *gateway*. También, cae afectado por el NAT el despliegue de una instancia on premise en una LAN corporativa, en la cual se sale a Internet a través del router de la compañía, utilizando una IP pública para realizar el NAT sobre los paquetes generados desde OMniLeads hacia el proveedor SIP.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_oml_nat.png" alt=""><figcaption></figcaption></figure>

Aquí, Asterisk utiliza el puerto **UDP 5060**, ya que es el puerto que implementa el hecho de advertir en los REQUESTs o SIP RESPONSEs la IP pública con la que los paquetes saldrán al exterior y llegarán al otro extremo de la troncal SIP. Ésta adaptación de los paquetes mencionados, se realiza a nivel SIP (señalización) y SDP (negociación de media). Por lo tanto, el destinatario externo de los paquetes no se percata de que nuestro Asterisk está detrás de NAT, llegando los paquetes ensamblados con la IP pública del dispositivo de red que realiza el NAT sobre los paquetes enviados.

Para éste esquema, analizamos la plantilla [PJSIP configuration wizard](https://wiki.asterisk.org/wiki/display/AST/PJSIP+Configuration+Wizard) que se propone para completar con sus datos:

```
type=wizard
transport=trunk-nat-transport
accepts_registrations=no
accepts_auth=no
sends_registrations=yes
sends_auth=yes
endpoint/rtp_symmetric=yes
endpoint/force_rport=yes
endpoint/rewrite_contact=yes
endpoint/timers=yes
aor/qualify_frequency=60
endpoint/allow=alaw,ulaw
endpoint/dtmf_mode=rfc4733
endpoint/context=from-pstn
remote_hosts=****IPADDR-or-FQDN:PORT****
outbound_auth/username=****YOUR SIP_USERNAME****
outbound_auth/password=****YOUR SIP_PASSWORD****
```

Los últimos 3 parámetros tienen que ver con los datos que el proveedor nos facilita a la hora de contratar el servicio. Ésto es, la dirección IP o FQDN y puerto correspondiente de su SIP server hacia donde disparar nuestros REGISTERs para registrar el troncal o los INVITEs a la hora de enviar llamadas salientes. Además, se disponen de los valores de *username* y *password* con los cuales el proveedor autentica dichos REQUESTs.

Respecto al resto de los parámetros, vamos a enfatizar:

```
transport=trunk-nat-transport
```

Éste parámetro, es el que indica a la pila PJSIP de Asterisk que debe *advertir* la IP pública y puerto público con la que saldrán los paquetes SIP a la hora de alcanzar el SIP server del proveedor.

Los próximos 4 parámetros hacen alusión al hecho de que típicamente bajo éste esquema, OMniLeads no solicita autenticación al proveedor SIP en caso de las llamadas entrantes, pero si debe autenticarse a la hora de enviar llamadas hacia el proveedor y que además debe enviar un registro recurrente para poder ser localizado por el proveedor SIP a la hora de conectarle llamadas entrantes. Estamos hablando puntualmente de los siguientes parámetros y valores:

```
accepts_registrations=no
accepts_auth=no
sends_auth=yes
sends_registrations=yes
```

Los siguientes 3 parámetros tienen que ver con los codecs a utilizar, el protocolo utilizado para el intercambio de DTMF, y finalmente el punto de entrada (dialplan context) de las llamadas que lleguen por el troncal:

```
endpoint/allow=alaw,ulaw
endpoint/dtmf_mode=rfc4733
endpoint/context=from-pstn
```

Importante

A la hora de declarar el SIP trunk en el otro extremo, tener en cuenta que OMniLeads utilizará el puerto SIP UDP **5162** en éstos entornos con NAT.

## OMniLeads en entornos sin NAT

Bajo éste escenario, tenemos como posibilidad a la aplicación desplegada sobre un VPS con IP pública cuyo proveedor SIP está también en una IP pública, por lo que no existe NAT. También cae en éste escenario un despliegue efectuado sobre una LAN corporativa (on premise) saliendo a Internet por el router de la compañía, o bien utilizando un SBC o PSTN-GW, el cual se encarga (entre otras cosas) del asunto de NAT.

### SIP trunk en Internet

Al igual que en el ítem anterior, se plantea un proveedor SIP disponible en Internet cuya IP pública ahora es alcanzada sin la afección del NAT, ya que nuestro OMniLeads se encuentra disponible con una IP pública. El proveedor, al igual que antes, nos facilita la IP o FQDN del SIP server al que debemos enviar todos los REQUESTs por un lado, y un usuario y contraseña para autenticar los mismos, por el otro.

![\_images/telephony\_oml\_nonat\_vps.png](https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_oml_nonat_vps.png)

Para éste esquema, analizamos la plantilla [PJSIP configuration wizard](https://wiki.asterisk.org/wiki/display/AST/PJSIP+Configuration+Wizard) que se propone para completar con sus datos:

```
type=wizard
transport=trunk-transport
accepts_registrations=no
accepts_auth=no
sends_registrations=yes
sends_auth=yes
endpoint/rtp_symmetric=yes
endpoint/force_rport=yes
endpoint/rewrite_contact=yes
endpoint/timers=yes
aor/qualify_frequency=60
endpoint/allow=alaw,ulaw
endpoint/dtmf_mode=rfc4733
endpoint/context=from-pstn
remote_hosts=****IPADDR-or-FQDN:PORT****
outbound_auth/username=****YOUR SIP_USERNAME****
outbound_auth/password=****YOUR SIP_PASSWORD****
```

En donde el único parámetro que cambia respecto a los ejemplos con NAT, es:

```
transport=trunk-transport
```

Donde se indica la utilización de un transporte PJSIP, en el que simplemente los paquetes fluyan a través del puerto **UDP 5060** sin realizar ningún tratamiento de NAT.

### SIP trunk corporativo

Bajo ésta clasificación, tenemos a los proveedores de vínculos SIP que llegan con su propio backbone de conectividad a la locación física donde se encuentra el centro de datos. Suele ser típico en este escenario, que el proveedor no pida autenticación ni registro, y además al cursar las llamadas sobre el backbone privado del proveedor la cuestión del NAT deja de ser un factor a resolver desde nuestro lado.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_oml_nonat.png" alt=""><figcaption></figcaption></figure>

Para éste esquema, analizamos la plantilla [PJSIP configuration wizard](https://wiki.asterisk.org/wiki/display/AST/PJSIP+Configuration+Wizard) que se propone para completar con sus datos:

```
type=wizard
transport=trunk-transport
accepts_registrations=no
accepts_auth=no
sends_registrations=no
sends_auth=no
endpoint/rtp_symmetric=no
endpoint/force_rport=no
endpoint/rewrite_contact=no
aor/qualify_frequency=60
endpoint/allow=alaw,ulaw
endpoint/dtmf_mode=rfc4733
endpoint/timers=yes
endpoint/language=es
endpoint/context=from-pstn
remote_hosts=****IPADDR-or-FQDN:PORT****
```

Donde los últimos 2 parámetros tienen que ver con los datos que el proveedor nos facilita. Es decir, la dirección IP o FQDN y puerto correspondiente hacia donde debemos disparar nuestros REQUESTs. Tener en cuenta que bajo éste esquema, asumimos que el proveedor SIP no nos autentica vía SIP, por lo que no usamos username ni password.

Nuevamente se utiliza el **transport=trunk-transport**, implicando la no afección de NAT.

El resto de los parámetros, ya fueron discutidos en el caso anterior.

### OML SIP trunk con PBX en LAN

Un esquema muy implementado tiene que ver con la conexión vía troncal SIP entre OMniLeads y la central PBX de la compañía. Bajo ésta modalidad, el acceso a la PSTN es proporcionado por la central PBX, de manera tal que las llamadas salientes hacia la PSTN se cursan por el troncal SIP hasta la PBX y luego ésta se encarga de rutear las llamadas hacia los destinos concretos a través de sus vínculos hacia la PSTN. Para el caso de las llamadas entrantes, la PBX puede derivar llamadas desde diversos recursos propios (opciones del IVR, rutas entrantes, anuncios, time conditions, etc.) hacia rutas entrantes de OMniLeads.

Bajo ésta configuración, una compañía puede desplegar una aplicación de Contact Center totalmente integrada con su central PBX.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_oml_nonat_pbx.png" alt=""><figcaption></figcaption></figure>

La plantilla [PJSIP configuration wizard](https://wiki.asterisk.org/wiki/display/AST/PJSIP+Configuration+Wizard) que se propone para completar de acuerdo a la configuración generada del lado de la IP PBX es:

> ```
> type=wizard
> transport=trunk-transport
> accepts_registrations=no
> sends_auth=yes
> sends_registrations=no
> accepts_auth=yes
> endpoint/rtp_symmetric=no
> endpoint/force_rport=no
> endpoint/rewrite_contact=no
> endpoint/timers=yes
> aor/qualify_frequency=60
> endpoint/allow=alaw,ulaw
> endpoint/dtmf_mode=rfc4733
> endpoint/context=from-pbx
> remote_hosts=****IPADDR-or-FQDN:PORT****
> inbound_auth/username=****SIP_USER PBX -> OML****
> inbound_auth/password=****SIP_PASS PBX -> OML****
> outbound_auth/username=****SIP_USER OML -> PBX****
> outbound_auth/password=****SIP_PASS OML -> PBX****
> endpoint/from_user=****SIP_USER OML -> PBX****
> ```

Se plantea autenticar vía SIP las llamadas salientes (desde OMniLeads hacia la PBX) y las llamadas entrantes (desde la IP PBX hacia OMniLeads). Por eso, la razón de ser de los siguientes parámetros y sus valores:

* **sends\_auth=yes**
* **accepts\_auth=yes**
* **remote\_hosts=\*\*\*\*IPADDR-or-FQDN:PORT\*\*\*\***
* **inbound\_auth/username=\*\*\*\*SIP\_USER PBX -> OML\*\*\*\***
* **inbound\_auth/password=\*\*\*\*SIP\_PASS PBX -> OML\*\*\*\***
* **outbound\_auth/username=\*\*\*\*SIP\_USER OML -> PBX\*\*\*\***
* **outbound\_auth/password=\*\*\*\*SIP\_PASS OML -> PBX\*\*\*\***
* **endpoint/from\_user=\*\*\*\*SIP\_USER OML -> PBX\*\*\*\***

Damos por sentado la interpretación de los parámetros a partir de sus sugestivos nombres. Además, se resalta el hecho de no implicar registración SIP alguna, ni desde OMniLeads hacia la PBX ni a la inversa, ya que ambos sistemas se encuentran en una red LAN y con una dirección IP o FQDN asignado.

Por otro lado, los parámetros **transport=trunk-transport** y **endpoint/force\_rport=no** nos dicen que no se aplica ningún tipo de tratamiento de NAT a los paquetes SIP engendrados desde OMniLeads.

Finalmente, resaltamos el parámetro **endpoint/context=from-pbx** que indica que las llamadas provenientes desde la IP PBX tienen un punto de acceso diferentes a las provenientes de la PSTN, ya que entre otras posibilidades se permite contactar directamente a los agentes, posibilitando el hecho de que una extensión de la IP PBX pueda marcar o transferir hacia un agente.

Importante

A la hora de declarar el SIP trunk en el otro extremo, tener en cuenta que OMniLeads utilizará el puerto SIP UDP **5161** en estos entornos SIN NAT.

## Troncal PJSIP custom

Aquí, el administrador podrá escribir a medida su propia configuración PJSIP wizard. Más allá de las plantillas proporcionadas, siempre el administrador cuenta con la posibilidad de ajustar la configuración de acuerdo al escenario puntual y las particularidades de cada caso, por lo que es muy recomendable que se estudien bien los parámetros del stack PJSIP de Asterisk, ya que cuenta con un gran nivel de personalización.


# Configuración Whatsapp Business

## Integración de Whatsapp Business

Whatsapp® se ha convertido en una puerta de entrada mundial para mantenernos conectados con nuestros amigos y familiares desde cualquier lugar, las 24 horas del día, los 365 días del año.&#x20;

Empresas de todo el mundo han comenzado a utilizar WhatsApp para interactuar con sus clientes de manera formal, ya sea para preguntas sobre productos, consultas comerciales, o actualizaciones transaccionales.&#x20;

[WhatsApp Business API de Meta](https://developers.facebook.com/docs/whatsapp/?locale=es_LA) ofrece a las empresas un nuevo enfoque para gestionar las interacciones con los clientes y, al mismo tiempo, llegar a nuevos consumidores que están acostumbrados a la experiencia de mensajería fluida, rápida, sencilla y privada que ofrece WhatsApp.

A partir de estas interfaces, ***OMniLeads** diseña un poderoso **Orquestador de Canales*****&#x20;Open Source** que permite una integración transparente del Canal de Whatsapp al mundo de los Negocios. De esta manera el usuario cuenta con herramientas avanzadas y APIs que le ayudarán a habilitar WhatsApp para su negocio mediante múltiples proveedores autorizados y seguros de Meta (BSPs - Business Service Providers).

<figure><img src="/files/roT5PN0qzWEJoJg4SjPN" alt=""><figcaption></figcaption></figure>

Lo ventajoso del modelo? La solución se puede configurar de forma gratuita, sin compromiso de facturación ni tarifas de suscripción mensual. Además, cuenta con la seguridad y el uso adecuado del canal que sólo las APIs de Meta lo permiten.

<figure><img src="/files/4XWfmbM74Ay9PalVcPEC" alt=""><figcaption></figcaption></figure>


# Integración con GupShup

[GupShup](https://www.gupshup.io/) es actualmente un Business Service Provider de Meta (BSP, por sus siglas en inglés), y comprende un conjunto de canales digitales aptos para la integración en el negocio.&#x20;

Al ser un Socio Autorizado de Meta, dispone del framework de Whatsapp Business API para trabajar de manera segura y confiable. A su vez, permite integrar rápidamente Apps y Plataformas para crear soluciones efectivas que impulsen la experiencia.

<figure><img src="/files/qDoto7ou3QKurmDgDUN2" alt=""><figcaption></figcaption></figure>


# OMniLeads y GupShup

***OMniLeads*** se une a GupShup de manera sencilla y transparente, a través de su ***Orquestador de Canales*****&#x20;Open Source.** El usuario de OMniLeads cuenta con herramientas avanzadas y APIs disponibles en su solución base que le ayudarán a habilitar WhatsApp para su negocio.

Uno de los aspectos interesantes de GupShup, además de sus mecanismos de integración transparentes y amigables, es que permite importar una cuenta de Whatsapp Business existente y en uso además de permitir crear nuevas. Gracias a ello, cualquier usuario que ya cuente con un número de Whatsapp Business, puede utilizarlo en su cuenta y "llevárselo de regreso" en cualquier momento sin quedar atado al proveedor.

Por lo tanto, para continuar con la integración, es importante abrir una cuenta en [GupShup desde aquí](https://api.gupshup.io/sm/api/user/authorize?prompt=login\&lang=es) y cargar saldo en su Wallet Digital.

<figure><img src="/files/SfEBfgFTmjswYdbyC7ZB" alt=""><figcaption></figcaption></figure>


# Dar de Alta Whatsapp Business en GupShup

## Creación de una cuenta de Whatsapp Business (WABA)

Una vez creada la cuenta en el Portal del BSP en el apartado anterior, podemos proceder a crear (o migrar) nuestra WABA: Whatsapp Business Account.&#x20;

En nuestro caso, GupShup pone a disposición su [documentación oficial](https://docs.gupshup.io/docs/quickstart-create-and-configure-access-api) para poder avanzar en los aspectos técnicos y de integración. <mark style="color:red;">**Siempre es recomendable revisarla ante posibles cambios en los métodos y procedimientos.**</mark>

Debajo se expone, a modo de ejemplo, el Wizard completo de activación de Whatsapp Business con GupShup.

***Importante:*** Para un uso correcto de Whatsapp Business API, Meta exige un número de *Whatsapp Business válido* al igual que una *Cuenta de Meta/Facebook Business* *con su correspondiente Business Manager* a los efectos de validar el Negocio al que se está subscribiendo el servicio. Con ello, Meta asegura mecanismos genuinos y saludables de contactación, a la vez que se *prepara el terreno para la convergencia de nuevas canalidades de Negocio: Meta Messenger e Instagram Messenger*.

## Iniciando el Wizard de GupShup

**Paso 1:** Desde el *Panel de Control -> Whatsapp* , se crea una Aplicación clickeando en el botón "+ Crear Aplicación" y se especifica un nombre descriptivo.

<figure><img src="/files/ufRJJOvbL70PNfo71tGN" alt=""><figcaption></figcaption></figure>

**Paso 2:** Una vez listada en el Dashboard, se procede a clickear sobre "Go Live" para recorrer el Wizard de creación de WABA (Whatsapp Business Account). En nuestro caso, seleccionaremos una cuenta de Whatsapp Business existente clickeando en "Migrar WABA Existente":

<figure><img src="/files/JtqVDCjD7GWh4vDQhWvF" alt=""><figcaption></figcaption></figure>

**Paso 3:** Aquí se procede a vincular la cuenta de Whatsapp Business con Facebook Business Manager. En el caso de que el usuario cuente con las credenciales de acceso a Facebook Business Manager, puede utilizar el método directo (Facebook Embed):

<figure><img src="/files/KSYGuTd8SIVDLiYor3ps" alt=""><figcaption></figcaption></figure>

En caso no sea el administrador de la cuenta de Facebook Business Manager, GupShup proporciona una opción para compartir la URL al Administrador de la cuenta y proceder así a su autorización:

<figure><img src="/files/hvC9TOcgaYgNE8XcTXsZ" alt=""><figcaption><p>URL de autorización</p></figcaption></figure>

<figure><img src="/files/6XGphw4vCKUozV4p6xa6" alt=""><figcaption><p>El cliente con sus credenciales realiza la vinculación</p></figcaption></figure>

Mediante cualquiera de los mecanismos descriptos en el punto 3, el usuario debe acceder al Facebook Business Manager y efectuar la vinculación.

## Desde Facebook Business Manager

**Paso 4:** Dentro de Facebook Business Manager, se crea un Nuevo WABA (Whatsapp Business Account) y Nuevo Perfil:

<figure><img src="/files/RRbP5fNvIaQLoaJrVME2" alt=""><figcaption></figcaption></figure>

**Paso 5:** Se ingresa el número telefónico del Whatsapp a partir del cual se creará la nueva WABA.

<figure><img src="/files/5AcwdB6q9KVsRmf4sztF" alt=""><figcaption></figcaption></figure>

**Paso 6:** Finalmente, se copia la WABA ID una vez generada, para insertarla dentro del Portal de GupShup:

<figure><img src="/files/SIdeMbw8nNqRBr591UoZ" alt=""><figcaption></figcaption></figure>

## Retornando al Wizard de GupShup

**Paso 7:** Retornando a GupShup, se clickea sobre *"He completado la creación de WABA"* y se ingresa la WABA copiada en el paso anterior:

<figure><img src="/files/LTFQ1JqWxT5Kl4QoUd63" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/fdu5djEmsUeCMexQ3gAc" alt=""><figcaption></figcaption></figure>

**Paso 8:** Para corroborar el número telefónico de Whatsapp Business, Meta establece un mecanismo de OTP (ON-Time-Password) a partir del cual verifica la validez del mismo:

<figure><img src="/files/TscU9giEG9m4f7F0LElp" alt=""><figcaption></figcaption></figure>

**Paso 9:** Finalmente el proceso de vinculación entre Whatsapp Business y Facebook Business Manager finaliza.&#x20;

Tan pronto Meta aprueba la WABA account (de 1 a 2 días hábiles según documentación), GupShup reflejará su estado "live" dentro de su Dashboard y ya es posible usar las APIs de Meta de manera segura:

<figure><img src="/files/PLCWhyaeWn0dpQrd9UyD" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/jEY5JUry5tEMb356szby" alt=""><figcaption></figcaption></figure>

## Configurando el Webhook de Whatsapp

Para que los mensajes de Whatsapp puedan alcanzar satisfactoriamente la instancia de OMniLeads, es importante configurar la dirección de la Callback URL (Webhook) donde se escucharán eventos.

Para ello, dentro del Dashboard de GupShup, se clickea en la Application que hemos instanciado para atender eventos de Whatsapp Business (en el ejemplo, "*OMLWhatsappAPI*") y se accede al tab **Webhooks**, donde se procede a setear el *Callback URL* con el siguiente formato:

```
https://<OMniLeads_FQDN>/webhook/<AppID>/
```

Donde **OMniLeads\_FQDN** es el Nombre de Dominio alcanzable en Internet, y  **AppID** es el Identificador que se obtiene en los detalles de la Aplicación (paso 1 del presente Wizard).

<figure><img src="/files/qdALtYHoBTf0wQJGpsMX" alt=""><figcaption></figcaption></figure>

**Y eso es todo!** Ya estamos en condiciones de derivar mensajes entrantes hacia OMniLeads. En la próxima sección abordaremos los[ componentes necesarios](/configuracion-whatsapp-business/plantillas-de-mensajes-y-grupos-horarios) para dar de alta Proveedores y Líneas.


# Integración con Meta

[**Meta**](https://facebook.com) es la compañía propietaria de las plataformas digitales más utilizadas del mundo —Facebook, Instagram y WhatsApp— y ofrece a las empresas la posibilidad de conectar con sus clientes a través de soluciones oficiales y seguras.

Gracias a la **API oficial de WhatsApp Business de Meta**, las organizaciones pueden integrar sus canales de comunicación directamente en sus sistemas, automatizando la atención, mejorando la trazabilidad de las conversaciones y potenciando la experiencia del cliente.

La integración nativa entre **OMniLeads y Meta** permite aprovechar toda la infraestructura del ecosistema de Meta, garantizando máxima confiabilidad, velocidad en la entrega de mensajes y acceso a funciones avanzadas como plantillas multimedia, mensajes interactivos y control total sobre la cuenta de negocio.

Con esta unión, **OMniLeads se consolida como una plataforma omnicanal lista para operar de forma oficial con Meta**, brindando a las empresas una solución moderna, escalable y alineada con los estándares globales de comunicación empresarial.


# OMniLeads y Meta

**OMniLeads se integra con Meta de forma directa y transparente**, utilizando el Orquestador de Canales Open Source incorporado en la plataforma.

El usuario de OMniLeads dispone de un conjunto de herramientas avanzadas y APIs nativas que facilitan la habilitación del canal oficial de **WhatsApp Business (Meta API)** para su negocio, garantizando una comunicación confiable, segura y escalable.

A diferencia de integraciones basadas en intermediarios, **la conexión directa con Meta** ofrece un control total sobre la cuenta de negocio, las líneas telefónicas asociadas y las plantillas de mensajería.\
Además, esta integración permite administrar todos los recursos de la cuenta empresarial desde el **Meta Business Manager**, centralizando la configuración y la gestión de permisos en un único entorno.

Un aspecto relevante de esta modalidad es que **el número de WhatsApp Business pertenece siempre al cliente**, pudiendo ser administrado o migrado en cualquier momento sin dependencia de proveedores externos.\
De esta manera, OMniLeads garantiza independencia, seguridad y cumplimiento total con las políticas oficiales de Meta.

Con una **cuenta de WhatsApp Business dada de alta directamente en Meta**, ya está en condiciones de integrar mensajeria y gestionar los créditos o presupuestos publicitarios asociados al canal.

<figure><img src="/files/oViJKRsYK77bYMXgw1I5" alt=""><figcaption></figcaption></figure>

Esta integración aprovecha las **APIs oficiales de Meta for Developers**, garantizando:

* Mayor estabilidad en la entrega y recepción de mensajes.
* Control directo sobre la configuración y métricas de la cuenta.
* Reducción de latencia y costos operativos.
* Acceso a nuevas capacidades del ecosistema Meta (mensajes interactivos, plantillas multimedia, Meta Flows, etc.).

#### Requisitos previos

Antes de comenzar la configuración, asegúrese de contar con:

1. Una **cuenta de empresa en Meta Business Manager.**
2. **Un Portfolio Comercial válido,** a partir del cual se crearán Cuentas de Whatsapp y se utilizará la **API Oficial de Meta.**
3. Un **número telefónico válido** para uso con WhatsApp Business API.
4. Acceso a Meta for Developers, para integrar el producto de Whatsapp Business desde la plataforma de Aplicaciones de Meta.&#x20;

Para profundizar en las herramientas de desarrollo de Meta (Developers), le sugerimos visitar el siguiente enlace: <https://developers.facebook.com/docs/whatsapp/>.

Finalmente, contando con un Acceso de administrador a la instancia de OMniLeads, podrá integrarse con la App de Meta y será capaz de enviar y recibir mensajes a través de la API oficial de Whatsapp Business.


# Dar de Alta una cuenta de WhatsApp Business en Meta

Antes de integrar WhatsApp Business con OMniLeads, es necesario disponer de una cuenta activa en **Meta Business Manager**, junto con un número telefónico verificado y una aplicación de WhatsApp Business API configurada.

A continuación se describen los pasos recomendados para completar el proceso de alta desde el entorno oficial de Meta:

#### 1. Acceso a Meta Business Manager

* Accedé a [https://business.facebook.com](https://business.facebook.com/)
* Si ya contás con un Business Manager, simplemente iniciá sesión. Si aún no tenés uno, creá tu cuenta empresarial indicando nombre, dirección de correo y sitio web de la compañía.

#### 2. Verificación del Negocio

* Ingresá a la Configuración del Negocio y completá el proceso de verificación de identidad empresarial.

Meta solicitará documentos oficiales que acrediten la existencia del negocio (CUIT, inscripción impositiva, razón social, etc.). Este paso es fundamental para habilitar la API oficial de WhatsApp Business.

<figure><img src="/files/aGFA8V9tVrrn3N3rA9g8" alt=""><figcaption></figcaption></figure>

#### 3. Creación de la Aplicación de Whatsapp Business

Debajo se describen una serie de pasos del Wizard para utilizar la API de Mensajería. Para obtener mayor información y profundizar en los detalles, sugerimos visitar el siguiente enlace: <https://developers.facebook.com/docs/whatsapp/cloud-api/get-started>.

* Es necesario en este punto contar con una cuenta de developers en Meta. Una vez dentro del panel de [Meta for Developers](https://developers.facebook.com/), accedé a la sección “Mis Apps” y seleccioná Crear Nueva App.

<figure><img src="/files/hpXbFvoPIxdAZ3o1QMw7" alt=""><figcaption></figcaption></figure>

* Sigue el Wizard de creación de App, completando los datos necesarios en cada paso del formulario.&#x20;

<figure><img src="/files/GeTFS3GFGhgEZOddoUzl" alt=""><figcaption></figcaption></figure>

* En Casos de Uso selecciona "Otros" y en Tipo de App selecciona "Negocios". En esta última parte del Wizard podrás conectar tu App con el Portfolio comercial a los efectos de utilizar Whatsapp como producto y conceder ciertos permisos a nivel aplicación para el uso de la API de Meta.

<figure><img src="/files/7GdWKaUhd6s1BM0WNThW" alt=""><figcaption></figcaption></figure>

* Dentro de las opciones de productos disponibles, seleccioná WhatsApp y hacé clic en Configurar. Se generará un App ID y un Access Token de prueba, que más adelante podrás reemplazar por credenciales de producción.

<figure><img src="/files/h3kZS12xr20pCZNXkeZP" alt=""><figcaption></figcaption></figure>

#### 4. Asociación de un Número Telefónico

* Si bien en este punto ya contamos con un Número Telefónico de Pruebas válido enviar y recibir mensajes a ciertos destinos declarados, Meta nos brinda la posibilidad de registrar un número nuevo o reutilizar uno existente.&#x20;

Para ello clickeamos en "Configuración de la API"-->Agregar número de teléfono. Siguiendo el Wizard, podremos dar de alta un nuevo número útil para desarrollos o entornos productivos.

<figure><img src="/files/CCNOCjDMQjHdpLutzXQU" alt=""><figcaption></figcaption></figure>

* Durante el proceso, se verificará el número mediante SMS o llamada de voz. Una vez validado, el número quedará vinculado de forma oficial a tu cuenta de WhatsApp Business.

<figure><img src="/files/z1gcbjJxVk7y6fIuHoIw" alt=""><figcaption></figcaption></figure>

#### 5. Configuración de Roles y Permisos de App para Whatsapp en Meta Business

* Es necesario contar con un **Rol** que tenga permisos para la gestión de las APIs a través de la App. Para ello desde[ https://business.facebook.com](https://business.facebook.com/) en *Configuración --> Usurarios --> Usuarios del sistema* debemos definir un ***Usuario de Sistema*** con Control sobre dicho activo.

Es importante mencionar aquí que este usuario nos permitirá generar para él un **Token** a los efectos de utilizarlo como mecanismo de paso en **Webhooks** (URLs de Callback donde OMniLeads esperará mensajes entrantes).

Para ello, agregamos un nuevo rol mediante el botón "*+Agregar*", asignamos la App buscándola en "*Activos Asignados*", y generamos un token para webhooks desde el botón "*Generar Token*".

<figure><img src="/files/7kDTWDyAshgrXN4DXvV7" alt=""><figcaption></figcaption></figure>

#### 6. Seleción de Rol de App en Meta Business Developer

* Desde Developers de Meta, se procede a asignar el rol previamente creado a la App, a los efectos de poder gestionar la API de manera segura.

<figure><img src="/files/VYDKPKc5a5bBTpyZY4X2" alt=""><figcaption></figcaption></figure>

#### 7. Configuración del Webhook en Meta

* Por último procedemos a configurar el webhook sobre el cual OMniLeads estará listo para recibir mensajes. En dicha acción, Meta solicita un token de verificación, que lo utilizaremos en OMniLeads al dar de alta la línea.

El formato del webhook debe ser como sigue: `https://my_omnileads_instance/webhookmeta/<AppID>/`

Donde *my\_omnileads\_instance* es el FQDN de nuestra instancia (recordar que, al igual que GupShup, los certificados SSL deben ser válidos así como su dominio alcanzable en internet), y *AppID* es el identificador de la aplicación.

<figure><img src="/files/JKuZAvMzhkAHYYGqvBFM" alt=""><figcaption></figcaption></figure>

* Asegurarse de subscribir a los eventos de Messages:

<figure><img src="/files/l5V8LF6BWyeugz18Ylcl" alt=""><figcaption></figcaption></figure>

#### Y listo!

Ahora estamos preparados para abordar la configuración desde la App de OMniLeads. Para ello, desde el menú “Conexiones → WhatsApp → Proveedores”, configuraremos un nuevo proveedor digital (Meta) y su respectiva línea.&#x20;

Para más detalles, visitá la sección [Proveedores](/configuracion-whatsapp-business/proveedores).


# Proveedores

## Creación de un Nuevo Proveedor

Para poder activar la canaliad de Whatsapp Business, se debe dar de alta un Proveedor. Al igual que un carrier telefónico, un proveedor de Whatsapp (ya sea Meta o un BSP de negocio - Business Service Provider, en sus siglas en inglés) permitirá conectar OMniLeads a las APIs Oficiales de Whatsapp Business de manera segura y confiable.&#x20;

<figure><img src="/files/YCBr78WigkTPkZduEU5E" alt=""><figcaption></figcaption></figure>

Para ello, se debe acceder al Menú *Conexiones -> Whatsapp -> Proveedores*, y clickear sobre el signo "más" (+) para completar un wizard de alta. Se nos desplegarán formularios según tipo de proveedores homologados (GupShup / Meta):

<figure><img src="/files/j5fTvOCU9LwmmG9mg87E" alt=""><figcaption></figcaption></figure>

## Configurando GupShup

Si elegimos GupShup como proveedor, se nos desplegará el siguente formulario:

<figure><img src="/files/QqMnRgHGBuPcJuBDVXSK" alt=""><figcaption></figcaption></figure>

* **Nombre:** es el nombre que daremos al nuevo proveedor seleccionado para la canalidad.
* **Proveedor:** es el BSP Autorizado (Business Service Provider) que utilizaremos para la integración.
* **API Key:** es la "llave" o "secret" ubicada en la cuenta de GupShup. Recuerde que para dar de alta una cuenta en GupShup y activar la canalidad de Whatsapp Business, debe seguir el [siguiente instructivo](/configuracion-whatsapp-business/integracion-con-gupshup/dar-de-alta-whatsapp-business-en-gupshup).
* **Email Partner:** email del partner/ISV de GupShup (si existiese).
* **Password Partner:** secret del partner/ISV de GupShup para esta cuenta (si existiese).

## Configurando Meta

Si por el contrario elegimos **Meta** como proveedor, obtendremos el siguiente formulario:

<figure><img src="/files/ozs8IuOKRTPOpfSEE8Li" alt=""><figcaption></figcaption></figure>

* **Nombre:** es el nombre que daremos al nuevo proveedor seleccionado para la canalidad.
* **Proveedor:** en este caso utilizaremos Meta para la integración.
* **BusinessID:** es el identificador de negocio provisto por Meta visible en la App
* **Token de Acceso Permanente:** es el tocken que hemos generado cuando se ha creado el  Rol de la App.

A partir de aquí ya podemos configurar una [Linea de Whatsapp.](/configuracion-whatsapp-business/lineas)


# Lineas

## Creación de una Nueva Línea

Una Línea de Whatsapp vincula un número de Whatsapp Business con un Proveedor, y asocia a esa dupla una Estrategia de Derivación. Permite en otras palabras, conectar un mensaje de Whatsapp con una campaña de OMniLeads de una manera directa o interactiva.

<figure><img src="/files/QszvwYI6P2bEnJNg8GMb" alt=""><figcaption></figcaption></figure>

## Datos Básicos

Para dar de alta una Línea, se debe acceder al Menú *Conexiones -> Whatsapp -> Lineas* y clickear en "+ (Nuevo)" para completar el wizard. La primera sección corresponde a los Datos Básicos:

<figure><img src="/files/SwL4AUfsvpK9OQxJFTBM" alt=""><figcaption></figcaption></figure>

* **Nombre:** es el nombre que se quiere dar a la línea de Whatsapp Business.
* **Proveedor:** es el proveedor que se ha dado de alta en la sección Proveedores. En el ejemplo, "Whatsapp Main" es el proveedor que corresponde al BSP GupShup.

## Datos del Carrier usando GupShup

La segunda sección incorpora Datos del Carrier propiamente, con el objetivo de conectar la API con el Orquestador de Canales de OMniLeads:

<figure><img src="/files/u9qo1QBeumFm4Fq5XU5K" alt=""><figcaption></figcaption></figure>

* **Número:** campo numérico que asociará OMniLeads a un número válido de Whatsapp Business.
* **App Name:** nombre de la Aplicación creada en GupShup, que asocia el número de Whatsapp Business con un Webhook específico (Callback URL) que apuntará a la instancia de OMniLeads.
* **App ID:** identificador de la Aplicación creada en GupShup, que asocia el número de Whatsapp Business con un Webhook específico (Callback URL) que apuntará a la instancia de OMniLeads.
* **App Secret:** "secreto" o palabra clave configurable en el proveedor, para validación de algoritmo HMAC para protección de webhook.

En la siguiente figura, se observa un ejemplo de una cuenta de GupShup, cuya Aplicación "OMLWhatsappAPI" en *Panel de Control -> Whatsapp* vincula el número de Whatsapp Business de negocio con la URL a partir de la cual alcanzaremos la instancia de OMniLeads que recibirá/enviará mensajes.

<figure><img src="/files/853Ng7i4qzrykgqdTsdP" alt=""><figcaption></figcaption></figure>

## Datos del Carrier usando Meta

Para el caso de Meta, configuraremos los siguientes campos en el formulario del Wizard:

<figure><img src="/files/28DsMmFsdvGWuQjSolth" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Sjg7aSgLnY6D3iA4M8XM" alt=""><figcaption></figcaption></figure>

Donde deberemos rellenar los campos que se indican a continuación:

* **Identificador del número de teléfono**: es el identificador provisto por Meta (atención! no es el número telefónico!)
* **WABA ID**: identificador del Whatsapp Business Account
* **AppID**: identificador de la App generada en Meta for Developers.
* **Token de Verificación**: es el token seleccionado a la hora de configurar el Webhook en Meta for Developers.
* **App Secret:** "secreto" o palabra clave configurable en las opciones de la App desde Developer, para validación de algoritmo HMAC para protección de webhook.

## Datos de Conexión

La última sección comprende los Datos de Conexión, donde se define Grupo Horario y estrategia de derivación:

<figure><img src="/files/vdzvhPtAKHzBxVFdlFsH" alt=""><figcaption></figcaption></figure>

* **Grupo Horario:** permite seleccionar un grupo horario al cual debe ajustarse la atención y la estrategia de derivación. Este grupo horario debe ser creado en el Menú *Recursos -> Grupos Horarios*. Si se recibe un mensaje fuera del horario de atención definido, el orquestador enviará de manera automática el mensaje de Fuera de Hora configurado.
* **Mensaje de Bienvenida, Fuera de Hora y Despedida:** permiten seleccionar templates de mensajes que fueron previamente creados en el Menú *Recursos -> Plantillas de Mensajes*.

<figure><img src="/files/nPACj0OTFKPQ5iMKMp09" alt=""><figcaption></figcaption></figure>

## Destinos de Derivación

Finalmente, en la sección de *Destino*, se define la estrategia de derivación:

* **Directa:** todo lead/prospecto/cliente que envíe un mensaje al número de Whatsapp Business dentro del Grupo Horario configurado, recibirá el Mensaje automático de Bienvenida y será derivado al *Inbox General* de la campaña seleccionada en el campo Destino, donde los agentes podrán atenderlo desde la Toolbar de Whatsapp.

<figure><img src="/files/yk56LDZCDQNE5ERZggsa" alt=""><figcaption></figcaption></figure>

* **Interactivo / Smart IVR:** todo lead/prospecto/cliente que envíe un mensaje al número de Whatsapp Business dentro del Grupo Horario configurado, recibirá el Mensaje automático de Bienvenida con Opciones de Derivación. Según la opción seleccionada, será derivado al *Inbox General* de la campaña destino correspondiente a la configuración. Allí los agentes podrán atenderlo desde la Toolbar de Whatsapp.

<figure><img src="/files/gJL3tCbKThXSG1eM7KZD" alt=""><figcaption></figcaption></figure>

Se pueden anidar menúes interactivos a partir de sumar bloques de datos con el botón "*Nuevo"*:

A su vez, las opciones pueden ser ingresadas a gusto desde el botón "+", y tendrán que tener relación con el Mensaje de Bienvenida que se configure en el Wizard.

<figure><img src="/files/5rHmpekfJUTtIYiK2nED" alt=""><figcaption></figcaption></figure>

* **Valor:** es el texto enviado por el usuario, de acuerdo a las opciones provistas por el Mensaje de Bienvenida.
* **Descripción:** texto descriptivo de la opción.
* **Tipo de Destino:** tipo de campaña a configurar como destino.
* **Destino:** nombre de la campaña que será finalmente destino del mensaje interactivo.
* **Flow Maker (Pro)**: entorno gráfico de flujo para diseño de árboles de decisión y derivación más intuitivo. Para ver más en detalle este componente, diríjase a la sección de [Flow Maker](/flow-maker-pro).

<figure><img src="/files/NgQBWS0F2RWdeCBWFFbj" alt=""><figcaption></figcaption></figure>

Al dar finalmente "Guardar", la línea queda lista para recibir/enviar mensajes de Whatsapp.

## Acerca de los Templates Aprobados por Whatsapp

Los Templates Aprobados de Whatsapp son categorías de mensaje que Meta utiliza para iniciar una nueva conversación desde la Empresa de manera segura y genuina. Su principal objetivo es proteger al destino de mensajes no deseados.

Por reglas de contactación de Meta, es importante aclarar que Whatsapp Business API mantiene un ciclo de vida de una conversación en un tiempo equivalente a 24 hs. En otras palabras, pasado dicho tiempo la conversación "expira".

Frente a una *conversación expirada*, un agente sólo podrá retomarla a través del envío de un Template Aprobado de Whatsapp. *Si-sólo-si* el destino responde al mensaje, la conversación queda accesible nuevamente y el agente podrá continuar con el envío de texto libre. La misma regla se aplica para envio de mensajes salientes a destinos sin conversaciones iniciadas.

Para que esta lógica de contactación sea posible, OMniLeads sincroniza los Templates Aprobados de Whatsapp de manera automática a partir de las APIs provistas por el BSP (GupShup), o bien por el propio Meta si dicha integración ha sido seleccionada. De esta manera, los mismos quedan disponibles en la Campaña que utilice la línea:

<figure><img src="/files/pJ6cRXEGdh5TryWjEhug" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/xqa1pUbBbmpQx9uB9nrR" alt=""><figcaption></figcaption></figure>

Desde dicha vista es posible activar/desactivar templates para limitar su visibilidad en campaña.

Para crear Templates de Whatsapp y que los mismos estén disponibles en la Línea configurada, deberá ingresar al Tab **Templates** de la plataforma de gestión del Proveedor (al momento, GupShup y Meta) y crear los templates de acuerdo a las categorías establecidas por Meta.

Al momento, se reconocen 3 categorías:

* Marketing
* Utilidad
* Autenticación

Para mayor información sobre ellos y sus casos de uso, recomendamos consultar la [documentación oficial de categorías de templates](https://developers.facebook.com/docs/whatsapp/updates-to-pricing/new-template-guidelines/).

Debajo algunos ejemplos de templates en los proveedores soportados:

<figure><img src="/files/YKXmRPzx0A4Bgp97XXmA" alt=""><figcaption><p>Templates en GupShup</p></figcaption></figure>

<figure><img src="/files/t9adNontPTfGLjqPwPYq" alt=""><figcaption><p>Templates en Meta Business</p></figcaption></figure>

En la sección de [Campañas de Whatsapp](/campanas-de-contacto/campana-de-whatsapp), se explica con detenimiento el proceso de activación de la canalidad de Whatsapp en una campaña entrante.


# Plantillas de Mensajes y Grupos Horarios

Para parametrizar la canalidad de Whatsapp de manera correcta, *se debe contar de antemano con un Grupo Horario de Atención y un Grupo de Plantillas de Mensaje*.&#x20;

Por un lado, el grupo horario definirá la ventana operativa en la que OMniLeads podrá recibir mensajes y enrutarlos a los agentes de atención. Por otro lado, el grupo de plantillas almacenará un conjunto de mensajes predefinidos que servirán de "respuesta rápida" para los agentes, con el objetivo de agilizar la gestión.

## Creación de Plantillas de Mensajes

Para crear Plantillas de Mensajes, se debe ir al Menú *Recursos -> Plantillas de Mensajes* y clickear en el botón "+".

<figure><img src="/files/gvE2Mzj9sHS6eDTdHORh" alt=""><figcaption></figcaption></figure>

## Creación de Grupo de Plantillas

Para crear un Grupo de Plantillas, se debe ir al Menú Recursos -> Grupo de Plantillas de Mensaje y clickear en el botón "+Nuevo". Desde allí se podrán agregar Plantillas de Mensajes para luego ponerlos a disposición en la Campaña de preferencia.

<figure><img src="/files/KFfJT44urF4Q4QN5iTrk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/b4vDGycOlt9QFCbKHXMP" alt=""><figcaption></figcaption></figure>

## Creación de Grupo Horario para Atención de Whatsapp

Para crear un Grupo Horario, se debe ir al Menú Recursos -> Grupos Horarios y clickear en el botón "+Nuevo". Desde allí se podrán agregar Franjas Horarias Operativas para alertar al usuario sobre los Horarios de Atención.

<figure><img src="/files/ifhYKwTk4XbUm3qEiH1o" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/uV9pir4Ii3C34EVlNmAA" alt=""><figcaption></figcaption></figure>

A partir de estos objetos creados y configurados, ya es posible avanzar en la creación de [Proveedores](/configuracion-whatsapp-business/proveedores).


# Flow Maker (Pro)

Flow Maker para Canales Digitales es un editor gráfico pensado para crear y administrar árboles conversacionales directamente desde la interfaz de administración.

<figure><img src="/files/iKtlv29laAOFdFEzkgMj" alt=""><figcaption></figcaption></figure>

A partir de ahora, los equipos podrán diseñar flujos interactivos mediante bloques conectados entre sí, definiendo mensajes, opciones, derivaciones y caminos de atención de una manera mucho más clara y visual.

Esta funcionalidad permite:

* Crear flujos conversacionales para WhatsApp sin depender de configuraciones complejas.
* Ordenar bloques y nodos mediante una interfaz gráfica.
* Definir opciones interactivas para guiar al cliente.
* Conectar respuestas con nuevos bloques del árbol.
* Facilitar la autogestión inicial antes de llegar a un agente.
* Reducir tiempos de atención y mejorar la experiencia del usuario final.

Con este nuevo editor, las organizaciones pueden construir experiencias más inteligentes para casos como atención inicial, selección de áreas, derivación a campañas, consultas frecuentes, clasificación de motivos de contacto o segmentación automática de conversaciones.

## Creación de Árboles de Decisión

Para crear árboles de decisión mediante Flow Maker, diríjase al Menú *Conexiones -> Whatsapp -> Lineas* y edite la línea o ingrese al ícono de Bot y clickee en el botón Flow:<br>

<figure><img src="/files/McXuBKp8plXT9eP6RY6k" alt=""><figcaption></figcaption></figure>

A partir de alli, se abrirá un bloque gráfico donde podrá diseñar sus propios árboles de decisión para los mensajes entrantes, tan simplemente conectando bloques y configurándolos acorde a sus necesidades.

<figure><img src="/files/JqXIumHB3Bf3uqazLwun" alt=""><figcaption></figcaption></figure>

Desde "+ *Agregar Bloque*", podrá agregar al árbol los bloques que considere necesarios para su estrategia de atención, e interconectarlos según sea el caso.

Cada uno de ellos tendrá difrentes opciones de configuración, y podrás ser manipulados desde los íconos de edición/borrado en su parte superior.

## Edición de bloques

* **Mensaje:** en esta sección se crea el encabezado, cuerpo y pie del mensaje automático desplegar, con su correspondiente menú de opciones. También en esta vista se configurará el *tiempo de espera global* de un mensaje inbound, a los efectos de que el Orquestador de Canales pueda cerrar automáticamente mensajes que hayan expirado por tiempo de inactividad.

<figure><img src="/files/mOC3yNA0sbSogkLB58cQ" alt=""><figcaption></figcaption></figure>

* **Respuestas:** en este apartado se configuran los mensajes de respuesta incorrecta o correcta según sea la selección o interacción que haya tenido el usuario con este bloque.

<figure><img src="/files/Fm4CTeukcdTvmrgELBVS" alt=""><figcaption></figcaption></figure>

* **Opciones de Menú:** en esta última vista, se presentarán las opciones disponibles del menú al usuario, a los fines de que éste seleccione la mas adecuada a su necesidad.

<figure><img src="/files/m8xer5Iqi6Eh80lYJdoZ" alt=""><figcaption></figcaption></figure>

Los tipos de destino soportados al momento son: Campaña, Nuevo Árbol / Menú anidado, Mensaje de Cierre (closing message).

<figure><img src="/files/K112asD2WgxcKwiiBqJN" alt=""><figcaption></figcaption></figure>

Finalmente, cuando ya he diseñado mi flujo de atención, se procede a presionar el botón "*Guardar*" para que los cambios surtan efecto y la estrategia de atención quede productiva.

NOTA: Recuerde que una campaña destino de un árbol DEBE tener configurada la sección de Whatsapp correspondiente a su Wizard. Para mas detalles diríjase a la sección de [Configuración de Whatsapp en Campañas](/campanas-de-contacto/campana-de-whatsapp).


# Configuración de Meta Messenger

[**Meta**](https://facebook.com)**,** líder global en plataformas digitales como **Facebook**, **Instagram** y **WhatsApp**, pone a disposición de las empresas soluciones oficiales y seguras para interactuar con sus clientes de manera directa y eficiente.

A través de la **API oficial de Meta Messenger**, las organizaciones pueden integrar sus redes sociales en OMniLeads y diseñar estrategias de atención omnicanal, automatizando procesos, optimizando la gestión de conversaciones y elevando significativamente la experiencia del cliente.

**La integración nativa entre OMniLeads y Meta Messenger** permite aprovechar al máximo la robusta infraestructura del ecosistema Meta, garantizando altos niveles de confiabilidad y habilitando funcionalidades avanzadas como bots interactivos, automatizaciones y control integral de la cuenta de negocio.

De esta manera, **OMniLeads** se posiciona como una *plataforma omnicanal open source de última generación*, preparada para operar de forma oficial con **Meta**, ofreciendo a las empresas una solución escalable, moderna y alineada con los estándares internacionales de comunicación digital.

<figure><img src="/files/GI3nD63UNLMmic4RfqiM" alt=""><figcaption></figcaption></figure>


# OMniLeads y Meta

**OMniLeads se conecta con el ecosistema de Meta** de manera directa y transparente, apoyándose en su *Orquestador de Canales Open Source* integrado en la plataforma. Esta arquitectura permite incorporar el canal oficial de **Meta Messenger** de forma ágil, manteniendo altos estándares de estabilidad y flexibilidad operativa.

Dentro de OMniLeads, los usuarios cuentan con herramientas avanzadas y APIs nativas que simplifican la habilitación y gestión del canal, asegurando una comunicación robusta, segura y preparada para escalar según las necesidades del negocio.

Además, la administración de los activos empresariales se realiza desde **Meta Business Manager**, lo que permite centralizar la configuración, conservar el control total de la cuenta y garantizar el cumplimiento de las políticas oficiales de **Meta** en todo momento.

<figure><img src="/files/GPJoZfBIgTm9XkPIjBS4" alt=""><figcaption></figcaption></figure>

#### Requisitos previos

Antes de comenzar la configuración, asegúrese de contar con:

1. Una **cuenta de empresa en Meta Business Manager.**
2. **Un Portfolio Comercial válido,** a partir del cual se asignarán activos de Facebook (en nuestro caso, Landing Pages de negocio) y se utilizará la **API Oficial de Meta.**
3. Acceso a **Meta for Developers,** para integrar el producto de **Messenger** desde la plataforma de Aplicaciones de Meta.&#x20;

Para profundizar en las herramientas de desarrollo de Meta (Developers), le sugerimos visitar el siguiente enlace: <https://developers.facebook.com/docs/messenger-platform/>.

Finalmente, contando con un Acceso de administrador a la instancia de OMniLeads, podrá integrarse con la App de Meta Messenger y será capaz de responder consultas a través de la API oficial de la Red Social.


# Integración con Meta Messenger

Antes de integrar Meta Messenger con OMniLeads, es necesario disponer de una cuenta activa en **Meta Business Manager** y una app configurada para el servicio.

A continuación se describen los pasos generales y recomendados para completar el proceso de alta desde el entorno oficial de Meta:

#### 1. Acceso a Meta Business Manager

* Accedé a [https://business.facebook.com](https://business.facebook.com/)
* Si ya contás con un Business Manager, simplemente iniciá sesión. Si aún no tenés uno, creá tu cuenta empresarial indicando nombre, dirección de correo y sitio web de la compañía.

#### 2. Verificación del Negocio

* Siempre es importante verificar el Negocio que utilizará la canalidad, a los fines de estar en regla con las Políticas de Uso del Servicio. Ingresá a la Configuración del Negocio y completá el proceso de verificación de identidad empresarial.

Meta solicitará documentos oficiales que acrediten la existencia del negocio (CUIT, inscripción impositiva, razón social, etc.). Este paso es fundamental para un correcto proceso de verificación.

<figure><img src="/files/aGFA8V9tVrrn3N3rA9g8" alt=""><figcaption></figcaption></figure>

#### 3. Creación de la Aplicación

Debajo se describen una serie de pasos del Wizard para utilizar la API de Meta Messenger (así como de otros canales).&#x20;

Dado que Meta puede cambiar el procedimiento de registro sin previo aviso, es importante visitar el sitio del fabricante y profundizar en los detalles del proceso: <https://developers.facebook.com/docs/messenger-platform/conversations>.

* Una vez dentro del panel de [Meta for Developers](https://developers.facebook.com/), accedé a la sección “*Mis Apps*” y seleccioná Crear Nueva App (si ya tienes una, puedes saltearte el resto de los puntos e ir directo al Paso 4).

<figure><img src="/files/hpXbFvoPIxdAZ3o1QMw7" alt=""><figcaption></figcaption></figure>

* Sigue el Wizard de creación de App, completando los datos necesarios en cada paso del formulario.&#x20;

<figure><img src="/files/GeTFS3GFGhgEZOddoUzl" alt=""><figcaption></figcaption></figure>

* En Casos de Uso selecciona "Otros" y en Tipo de App selecciona "Negocios". En esta última parte del Wizard podrás conectar tu App con el Portfolio comercial y conceder ciertos permisos a nivel aplicación para el uso de la API de Meta.

<figure><img src="/files/7GdWKaUhd6s1BM0WNThW" alt=""><figcaption></figcaption></figure>

* Una vez que la app ha sido creada, seleccioná **Messenger** dentro de la lista de productos disponibles y hacé click en *Configurar*.

<figure><img src="/files/BeFM9gDXrg4JBrZvDEGa" alt=""><figcaption></figcaption></figure>

#### 4. Configuración del Webhook

* En el apartado de Configuración de la API de Messenger, definimos el webhook o servicio web que se utilizará en OMniLeads, respetando el siguiente formato:

`https://my_omnileads/webhook/facebook_messenger/<App_ID>/`\
&#x20;\
&#x20;Donde *my\_omnileads* es la instancia donde se aloja la plataforma de OMniLeads, y *AppID* es el identificador de la app creada en Meta Developers. Recuerda que los certificados digitales que sirven al HTTPS deben ser válidos y el nombre de dominio o FQDN (del inglés, "Fully-qualified domain name") debe estar alcanzable en internet.

También es importante definir un *token de verificación*, que será el que se utilizará para el "challenge" de sesión.

<figure><img src="/files/8A8tEoaKOGTtta0aAzzX" alt=""><figcaption></figcaption></figure>

#### 5. Subscripción a Eventos:

* Se lista a continuación el conjunto de eventos a los cuales el webhook debe suscribir:

<figure><img src="/files/KwXQu0GDrzt4oOB3MFea" alt=""><figcaption></figcaption></figure>

`feed`\
`message_deliveries`\
`messages`\
`messaging_postbacks`\
`messaging_referrals`

#### 6. Setting de Landing Page y Token de Acceso

En el apartado de "*Generar Tokens de Acceso*", agregamos la página de Facebook mediante el botón "*Agregar página*" (este apartado nos llevará a elegir la Landing Page desde nuestra cuenta de Facebook). Es importante contar con permisos de administrador sobre dicho activo.

Clickeando en el botón "*Generar*", obtendremos un token permanente, que nos servirá para dar de alta la landing page en el menú *Conexiones -> Meta/Facebook* de OMniLeads.

*Importante: Recuerda que la App de Meta debe ser aprobada para su uso comercial, por lo que debes continuar este wizard en Meta a los efectos de solicitar el permiso y exponer el caso de uso requerido en el proceso.*

<figure><img src="/files/CshjPLhy0hsc8q9VrOwU" alt=""><figcaption></figcaption></figure>

#### Listo!

Ahora estamos preparados para abordar la configuración desde la App de OMniLeads. Para ello, desde el menú “Conexiones → *Meta/Facebook*→ *Páginas*”, configuraremos un nuevo recurso para interactuar con Meta Messenger.&#x20;

Para más detalles, visitá la sección [Landing Pages](/configuracion-de-meta-messenger/paginas-de-facebook).


# Páginas de Facebook

## Incorporación de una Landing Page

Asumiendo que la Integración con Meta fue efectuada correctamente (ver sección [Integración con Meta Messenger](/configuracion-de-meta-messenger/integracion-con-meta-messenger)), ya es posible conectar una Landing Page de Facebook a OMniLeads desde el Menú *Conexiones -> Meta/Facebook -> Páginas*.

<figure><img src="/files/H6EeYawcTKygx5eO4Dmg" alt=""><figcaption></figcaption></figure>

Tan pronto clickeamos en "*+Nuevo*", se iniciará un Wizard donde en sencillos pasos definiremos:

* **Nombre y Descripción** de la Landing Page: elegimos el nombre y una breve descripción del activo de Negocio.
* **Token de verificación**: el token de sesión a utilizar, definido en el apartado de [Configuración de Integración](https://docs.omnileads.net/configuracion-de-meta-messenger/pages/Sne3TPQWQhXPLcfm4ARZ#id-4.-configuracion-del-webhook).
* **Token de acceso**: token de acceso creado para OMniLeads, defindo en la sección de [configuración de Token](https://docs.omnileads.net/configuracion-de-meta-messenger/pages/Sne3TPQWQhXPLcfm4ARZ#id-6.-setting-de-landing-page-y-token-de-acceso).
* **Identificador de página**: ID unívoco de la landing page como recurso. Este dato es proporcionado por *Developers de Facebook* cuando agregas el activo.
* **AppID**: ID de aplicación otorgado por Meta en el panel de Developers de Facebook.

<figure><img src="/files/VpqriJJOcOUwgU8r54UL" alt=""><figcaption></figcaption></figure>

## Datos de Conexión

La última sección comprende los Datos de Conexión, donde se define Grupo Horario y estrategia de derivación:

<figure><img src="/files/WGkl9kBAA398AlRpNLhD" alt=""><figcaption></figcaption></figure>

* **Grupo Horario:** permite seleccionar un grupo horario al cual debe ajustarse la atención y la estrategia de derivación. Este grupo horario debe ser creado en el Menú *Recursos -> Grupos Horarios*. Si se recibe un mensaje fuera del horario de atención definido, el orquestador enviará de manera automática el mensaje de Fuera de Hora configurado.
* **Mensaje de Bienvenida, Fuera de Hora y Despedida:** permiten seleccionar templates de mensajes que fueron previamente creados en el Menú *Recursos -> Plantillas de Mensajes*.

## Destinos de Derivación

Finalmente, en la sección de *Destino*, se define la estrategia de derivación:

* **Directa:** todo lead/prospecto/cliente que inicie una conversación desde la Página de Facebook dentro del Grupo Horario configurado, recibirá el Mensaje automático de Bienvenida y será derivado al *Inbox General* de la campaña seleccionada en el campo Destino, donde los agentes podrán atenderlo desde la Toolbar de Meta Messenger.

<figure><img src="/files/yk56LDZCDQNE5ERZggsa" alt=""><figcaption></figcaption></figure>

* **Interactivo / Bot:** todo lead/prospecto/cliente que inicie una conversación desde la Página de Facebook dentro del Grupo Horario configurado, recibirá el Mensaje automático de Bienvenida con Opciones de Derivación. Según la opción seleccionada, será derivado al *Inbox General* de la campaña destino correspondiente a la configuración. Allí los agentes podrán atenderlo desde la Toolbar de Meta Messenger.

Para activar la canalidad de la Red Social en una campaña, puedes seguir los pasos en la sección de [Campañas de Meta/Facebook](/campanas-de-contacto/campana-de-meta-messenger). Para ver a un agente en acción, puedes visitar la sección de [Mensajes de Meta/Facebook](/manual-de-agente/mensajes-de-messenger).


# Plantillas de Mensajes y Grupos Horarios

Para parametrizar la canalidad de Meta Messenger de manera correcta, *se debe contar de antemano con un Grupo Horario de Atención y un Grupo de Plantillas de Mensaje*.&#x20;

Por un lado, el grupo horario definirá la ventana operativa en la que OMniLeads podrá recibir mensajes y enrutarlos a los agentes de atención. Por otro lado, el grupo de plantillas almacenará un conjunto de mensajes predefinidos que servirán de "respuesta rápida" para los agentes, con el objetivo de agilizar la gestión.

## Creación de Plantillas de Mensajes

Para crear Plantillas de Mensajes, se debe ir al Menú *Recursos -> Plantillas de Mensajes* y clickear en el botón "+".

<figure><img src="/files/gvE2Mzj9sHS6eDTdHORh" alt=""><figcaption></figcaption></figure>

## Creación de Grupo de Plantillas

Para crear un Grupo de Plantillas, se debe ir al Menú Recursos -> Grupo de Plantillas de Mensaje y clickear en el botón "+Nuevo". Desde allí se podrán agregar Plantillas de Mensajes para luego ponerlos a disposición en la Campaña de preferencia.

<figure><img src="/files/KFfJT44urF4Q4QN5iTrk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/b4vDGycOlt9QFCbKHXMP" alt=""><figcaption></figcaption></figure>

## Creación de Grupo Horario para Atención de Meta Messenger

Para crear un Grupo Horario, se debe ir al Menú Recursos -> Grupos Horarios y clickear en el botón "+Nuevo". Desde allí se podrán agregar Franjas Horarias Operativas para alertar al usuario sobre los Horarios de Atención.

<figure><img src="/files/ifhYKwTk4XbUm3qEiH1o" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/uV9pir4Ii3C34EVlNmAA" alt=""><figcaption></figcaption></figure>

Para activar la canalidad de la Red Social en una campaña, puedes seguir los pasos en la sección de [Campañas de Meta/Facebook](/campanas-de-contacto/campana-de-meta-messenger). Para ver a un agente en acción, puedes visitar la sección de [Mensajes de Meta/Facebook](/manual-de-agente/mensajes-de-messenger).


# Configuración de Instagram

[**Meta**](https://facebook.com)**,** líder global en plataformas digitales como **Facebook**, **Instagram** y **WhatsApp**, pone a disposición de las empresas soluciones oficiales y seguras para interactuar con sus clientes de manera directa y eficiente.

A través de la **API oficial de Instagram**, las organizaciones pueden integrar sus redes sociales en OMniLeads y diseñar estrategias de atención omnicanal, automatizando procesos, optimizando la gestión de conversaciones y elevando significativamente la experiencia del cliente.

**La integración nativa entre OMniLeads e Instagram** permite aprovechar al máximo la robusta infraestructura del ecosistema Meta, garantizando altos niveles de confiabilidad y habilitando funcionalidades avanzadas como bots interactivos, automatizaciones y control integral de la cuenta de negocio.

De esta manera, **OMniLeads** se posiciona como una *plataforma omnicanal open source de última generación*, preparada para operar de forma oficial con **Meta**, ofreciendo a las empresas una solución escalable, moderna y alineada con los estándares internacionales de comunicación digital.

<figure><img src="/files/rbEPl2lqIQj26DNsXp5E" alt=""><figcaption></figcaption></figure>


# OMniLeads e Instagram

**OMniLeads se conecta con el ecosistema de Meta** de manera directa y transparente, apoyándose en su *Orquestador de Canales Open Source* integrado en la plataforma. Esta arquitectura permite incorporar el canal oficial de **Instagram** de forma ágil, manteniendo altos estándares de estabilidad y flexibilidad operativa.

Dentro de OMniLeads, los usuarios cuentan con herramientas avanzadas y APIs nativas que simplifican la habilitación y gestión del canal, asegurando una comunicación robusta, segura y preparada para escalar según las necesidades del negocio.

Además, la administración de los activos empresariales se realiza desde **Meta Business Manager**, lo que permite centralizar la configuración, conservar el control total de la cuenta y garantizar el cumplimiento de las políticas oficiales de **Meta** en todo momento.

<figure><img src="/files/GPJoZfBIgTm9XkPIjBS4" alt=""><figcaption></figcaption></figure>

#### Requisitos previos

Antes de comenzar la configuración, asegúrese de contar con:

1. Una **cuenta de empresa en Meta Business Manager.**
2. **Un Portfolio Comercial válido,** a partir del cual se asignarán activos de Facebook (en nuestro caso, una Cuenta de Business de Instagram) y se utilizará la **API Oficial de Meta.**
3. Acceso a **Meta for Developers,** para integrar el producto de **Instagram** desde la plataforma de Aplicaciones de Meta.&#x20;

Para profundizar en las herramientas de desarrollo de Meta (Developers), le sugerimos visitar el siguiente enlace: <https://developers.facebook.com/documentation/business-messaging/instagram-messaging>.

Finalmente, contando con un Acceso de administrador a la instancia de OMniLeads, podrá integrarse con la App de Instagram Messenger y será capaz de responder consultas a través de la API oficial de la Red Social.


# Integración con Instagram

Antes de integrar Meta Messenger con OMniLeads, es necesario disponer de una cuenta activa en **Meta Business Manager** y una app configurada para el servicio.

A continuación se describen los pasos generales y recomendados para completar el proceso de alta desde el entorno oficial de Meta:

#### 1. Acceso a Meta Business Manager

* Accedé a [https://business.facebook.com](https://business.facebook.com/)
* Si ya contás con un Business Manager, simplemente iniciá sesión. Si aún no tenés uno, creá tu cuenta empresarial indicando nombre, dirección de correo y sitio web de la compañía.

#### 2. Verificación del Negocio

* Siempre es importante verificar el Negocio que utilizará la canalidad, a los fines de estar en regla con las Políticas de Uso del Servicio. Ingresá a la Configuración del Negocio y completá el proceso de verificación de identidad empresarial.

Meta solicitará documentos oficiales que acrediten la existencia del negocio (CUIT, inscripción impositiva, razón social, etc.). Este paso es fundamental para un correcto proceso de verificación.

<figure><img src="/files/aGFA8V9tVrrn3N3rA9g8" alt=""><figcaption></figcaption></figure>

#### 3. Creación de la Aplicación

Debajo se describen una serie de pasos del Wizard para utilizar la API de Instagram Messenger (así como de otros canales).&#x20;

Dado que Meta puede cambiar el procedimiento de registro sin previo aviso, es importante visitar el sitio del fabricante y profundizar en los detalles del proceso: <https://developers.facebook.com/documentation/business-messaging/instagram-messaging>.

* Una vez dentro del panel de [Meta for Developers](https://developers.facebook.com/), accedé a la sección “*Mis Apps*” y seleccioná Crear Nueva App (si ya tienes una, puedes saltearte el resto de los puntos e ir directo al Paso 4).

<figure><img src="/files/hpXbFvoPIxdAZ3o1QMw7" alt=""><figcaption></figcaption></figure>

* Sigue el Wizard de creación de App, completando los datos necesarios en cada paso del formulario.&#x20;

<figure><img src="/files/GeTFS3GFGhgEZOddoUzl" alt=""><figcaption></figcaption></figure>

* En Casos de Uso selecciona "Otros" y en Tipo de App selecciona "Negocios". En esta última parte del Wizard podrás conectar tu App con el Portfolio comercial y conceder ciertos permisos a nivel aplicación para el uso de la API de Meta.

<figure><img src="/files/7GdWKaUhd6s1BM0WNThW" alt=""><figcaption></figcaption></figure>

* Una vez que la app ha sido creada, seleccioná **Instagram** dentro de la lista de productos disponibles y hacé click en *Configurar*.

<figure><img src="/files/BeFM9gDXrg4JBrZvDEGa" alt=""><figcaption></figcaption></figure>

#### 4. Configuración del Webhook

* En el apartado de Configuración de la API de Messenger, definimos el webhook o servicio web que se utilizará en OMniLeads, respetando el siguiente formato:

`https://my_omnileads/webhook/instagram/<AppID>/`\
&#x20;\
&#x20;Donde *my\_omnileads* es la instancia donde se aloja la plataforma de OMniLeads, y *AppID* es el identificador de la app creada en Meta Developers. Recuerda que los certificados digitales que sirven al HTTPS deben ser válidos y el nombre de dominio o FQDN (del inglés, "Fully-qualified domain name") debe estar alcanzable en internet.

Desde el menú de *Instagram -> Configuración de API*, se debe agregar la cuenta business de Instagram con la que se pretende integrar, además de generar un token de acceso que nos servirá para configurar OMniLeads.

Por otro lado, la *clave secreta* nos ayudará a proteger nuestro webhook, por lo que es preciso establecer una y rotarla con cierta periodicidad.

<figure><img src="/files/LlSUjqoARcHSQUyjD2Y6" alt=""><figcaption></figcaption></figure>

#### 5. Subscripción a Eventos:

Debajo se lista el conjunto de eventos al que hay que subscribir el webhook para la correcta operación con OMniLeads

<figure><img src="/files/ojL4jzENNffNdat3EcdY" alt=""><figcaption></figcaption></figure>

#### Listo!

Ahora estamos preparados para abordar la configuración desde la App de OMniLeads. Para ello, desde el menú “Conexiones → *Meta/Facebook*→ *Instagram*”, configuraremos un nuevo recurso para interactuar con Instagram.&#x20;

Para más detalles, visitá la sección [Cuentas de Instagram](/configuracion-de-instagram/cuentas-de-instagram).


# Cuentas de Instagram

## Incorporación de una cuenta de Instagram

Asumiendo que la Integración con Meta fue efectuada correctamente (ver sección [Integración con Instagram](/configuracion-de-instagram/integracion-con-instagram)), ya es posible conectar una cuenta business de Instagram a OMniLeads desde el Menú *Conexiones -> Meta/Facebook -> Instagram*.

<figure><img src="/files/nEoNQANKXiAbnOLo87FQ" alt=""><figcaption></figcaption></figure>

Tan pronto clickeamos en "*+Nuevo*", se iniciará un Wizard donde en sencillos pasos definiremos:

* **Nombre y Descripción** de la cuenta: elegimos el nombre y una breve descripción del activo de Negocio.
* **Token de verificación**: el token de sesión a utilizar, definido en el apartado de [Configuración de Integración](#incorporacion-de-una-cuenta-de-instagram).
* **Token de acceso**: token de acceso creado para OMniLeads a partir del apartado anterior.
* **Identificador de página**: ID unívoco de la landing page como recurso. Este dato es proporcionado por *Developers de Facebook* cuando agregas el activo.
* **AppID**: ID de aplicación otorgado por Meta en el panel de Developers de Facebook.
* **Instagram User ID**: identificador de usuario de instagram.
* **Usuario Instagram**: usuario proporcionado a la hora de crear la cuenta business.

<figure><img src="/files/T04ap0S06GvUtqeSuniO" alt=""><figcaption></figcaption></figure>

## Datos de Conexión

La última sección comprende los Datos de Conexión, donde se define Grupo Horario y estrategia de derivación:

<figure><img src="/files/WGkl9kBAA398AlRpNLhD" alt=""><figcaption></figcaption></figure>

* **Grupo Horario:** permite seleccionar un grupo horario al cual debe ajustarse la atención y la estrategia de derivación. Este grupo horario debe ser creado en el Menú *Recursos -> Grupos Horarios*. Si se recibe un mensaje fuera del horario de atención definido, el orquestador enviará de manera automática el mensaje de Fuera de Hora configurado.
* **Mensaje de Bienvenida, Fuera de Hora y Despedida:** permiten seleccionar templates de mensajes que fueron previamente creados en el Menú *Recursos -> Plantillas de Mensajes*.

## Destinos de Derivación

Finalmente, en la sección de *Destino*, se define la estrategia de derivación:

* **Directa:** todo lead/prospecto/cliente que inicie una conversación desde la cuenta de Instagram de negocio dentro del Grupo Horario configurado, recibirá el Mensaje automático de Bienvenida y será derivado al *Inbox General* de la campaña seleccionada en el campo Destino, donde los agentes podrán atenderlo desde la Toolbar de Instagram Messenger.

<figure><img src="/files/yk56LDZCDQNE5ERZggsa" alt=""><figcaption></figcaption></figure>

* **Interactivo / Bot:** todo lead/prospecto/cliente que inicie una conversación desde la cuenta de Instagram de negocio dentro del Grupo Horario configurado, recibirá el Mensaje automático de Bienvenida con Opciones de Derivación. Según la opción seleccionada, será derivado al *Inbox General* de la campaña destino correspondiente a la configuración. Allí los agentes podrán atenderlo desde la Toolbar de Instagram Messenger.

Para activar la canalidad de la Red Social en una campaña, puedes seguir los pasos en la sección de [Campañas de Instagram](/campanas-de-contacto/campana-de-instagram-messenger). Para ver a un agente en acción, puedes visitar la sección de [Mensajes de Instagram](/manual-de-agente/mensajes-de-instagram).


# Plantillas de Mensajes y Grupos Horarios

Para parametrizar la canalidad de Instagram Messenger de manera correcta, *se debe contar de antemano con un Grupo Horario de Atención y un Grupo de Plantillas de Mensaje*.&#x20;

Por un lado, el grupo horario definirá la ventana operativa en la que OMniLeads podrá recibir mensajes y enrutarlos a los agentes de atención. Por otro lado, el grupo de plantillas almacenará un conjunto de mensajes predefinidos que servirán de "respuesta rápida" para los agentes, con el objetivo de agilizar la gestión.

## Creación de Plantillas de Mensajes

Para crear Plantillas de Mensajes, se debe ir al Menú *Recursos -> Plantillas de Mensajes* y clickear en el botón "+".

<figure><img src="/files/gvE2Mzj9sHS6eDTdHORh" alt=""><figcaption></figcaption></figure>

## Creación de Grupo de Plantillas

Para crear un Grupo de Plantillas, se debe ir al Menú Recursos -> Grupo de Plantillas de Mensaje y clickear en el botón "+Nuevo". Desde allí se podrán agregar Plantillas de Mensajes para luego ponerlos a disposición en la Campaña de preferencia.

<figure><img src="/files/KFfJT44urF4Q4QN5iTrk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/b4vDGycOlt9QFCbKHXMP" alt=""><figcaption></figcaption></figure>

## Creación de Grupo Horario para Atención de Instagram

Para crear un Grupo Horario, se debe ir al Menú Recursos -> Grupos Horarios y clickear en el botón "+Nuevo". Desde allí se podrán agregar Franjas Horarias Operativas para alertar al usuario sobre los Horarios de Atención.

<figure><img src="/files/ifhYKwTk4XbUm3qEiH1o" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/uV9pir4Ii3C34EVlNmAA" alt=""><figcaption></figcaption></figure>

Para activar la canalidad de la Red Social en una campaña, puedes seguir los pasos en la sección de [Campañas de Instagram](/campanas-de-contacto/campana-de-instagram-messenger). Para ver a un agente en acción, puedes visitar la sección de [Mensajes de Instagram](/manual-de-agente/mensajes-de-instagram).


# Configuración de Email (Pro)

El **Canal de Email** sigue siendo un canal esencial para la atención al cliente. Permite resolver consultas complejas, intercambiar información detallada y conservar una trazabilidad clara de cada interacción.

Al incorporar email en **OMniLeads**, el contact center unifica las conversaciones en una misma operación. Los equipos gestionan voz, mensajería y correo desde una plataforma diseñada para la atención omnicanal.

<figure><img src="/files/NeivjwNN5293iql1vYbY" alt=""><figcaption></figcaption></figure>

### Una experiencia continua para clientes y agentes

Los clientes eligen el canal que mejor se adapta a cada necesidad. Email ofrece flexibilidad para casos no urgentes, solicitudes documentadas y seguimientos que requieren contexto.

Centralizar este canal evita que las consultas queden dispersas entre casillas personales o herramientas aisladas. Cada interacción forma parte de una gestión ordenada y auditable.

Para los agentes, esto reduce los cambios de contexto. El equipo trabaja con una visión más completa del cliente y puede mantener criterios de atención consistentes.

### Beneficios para la operación

* **Mayor trazabilidad:** conservá el historial de comunicaciones y facilitá el seguimiento de cada caso.
* **Atención más eficiente:** organizá las consultas dentro de los flujos operativos del contact center.
* **Mejor continuidad:** mantené el contexto cuando el cliente combina email con otros canales.
* **Operación escalable:** incorporá el canal en una estrategia omnicanal sin sumar silos.

### Flexibilidad de una plataforma Open Source

**OMniLeads es una plataforma Open Source**. Esto brinda mayor control sobre la operación, los datos y la evolución de la solución.

Las organizaciones pueden adaptar la plataforma a sus procesos, requisitos de seguridad e integraciones existentes. También pueden definir una estrategia de canalidad que evolucione junto con su negocio.

El canal de email aporta una base sólida para una atención más ordenada, medible y centrada en el cliente. Integrado en **OMniLeads**, convierte cada correo en una oportunidad para sostener relaciones de confianza.


# Alta de cuentas de email

Para configurar una cuenta para recibir y enviar correos desde **OMniLeads,**&#x73;e precisamn los datos IMAP y SMTP provistos por tu servicio de correo.

{% hint style="info" %}
Solicitá al administrador del correo los servidores, puertos y credenciales. Verificá que la cuenta permita conexiones IMAP y SMTP.
{% endhint %}

### Crear una cuenta

Los pasos para crear una cuenta de email en OMniLeads y sincronizarla con la plataforma se describen a continuación.

1. Ingresá a Menú **Conexiones → Correo Electrónico → Cuentas**.

<figure><img src="/files/75UsCCnQk8pbykg1fORn" alt=""><figcaption></figcaption></figure>

2. Seleccioná **Nueva cuenta** (`+`).

<figure><img src="/files/4rnbrO8r1tXM8DWrJuY3" alt=""><figcaption></figcaption></figure>

3. Completá la configuración de recepción y envío descrita a continuación.
4. Seleccioná **Guardar** para registrar la cuenta.
5. Activá **Active** cuando quieras habilitar su operación.

### Configurar la recepción de correos

En **Incoming Mail Server** se define cómo **OMniLeads** descarga los correos entrantes. Para ello se requiere parametrizar protocolo y puerto, asi como otros datos referentes a la conexión entre ambas partes:

* **Protocolo:** seleccioná `IMAP`. Usá `SSL` para proteger la conexión.
* **Host:** ingresá el servidor de correo entrante. Ejemplo: el host IMAP informado por tu proveedor.
* **Port:** ingresá el puerto IMAP indicado por el proveedor.
* **Auth Type:** seleccioná `BASIC`. Actualmente es el método disponible, aunque en próximas versiones se estarán incorporando nuevos mcanismos.
* **Username:** ingresá el username o la dirección de correo de la cuenta que se autenticará.
* **Password:** ingresá la contraseña de esa cuenta. Usá una contraseña de aplicación si el proveedor la requiere (por ej. en Google Workspace y otros vendors).
* **Fetch Mode:** elegí cómo se consultan los mensajes. `IDLE` mantiene la escucha activa. `POLL` consulta por intervalos configurables.
* **Mailbox:** indicá la carpeta que se sincronizará. El valor habitual es `Inbox`.
* **Since:** definí la fecha inicial de descarga. OMniLeads importará correos desde esa fecha.
* **Check SSL certificate:** activalo para validar el certificado del servidor remoto.

{% hint style="warning" %}
**Since** controla el primer período de sincronización. Una fecha muy antigua puede importar un volumen elevado de correos. Tenélo en cuenta!
{% endhint %}

<figure><img src="/files/N2KDJXShr4WLXZIkMLSq" alt=""><figcaption></figcaption></figure>

### Configurar el envío de correos

En **Outgoing Mail Server** se define cómo **OMniLeads** envía las respuestas y mensajes salientes.

* **Protocolo:** seleccioná `SMTP` con `TLS/SSL` para un envío seguro.
* **Host:** ingresá el servidor de correo saliente (SMTP).
* **Port:** ingresá el puerto SMTP indicado por el proveedor.
* **Auth Type:** seleccioná `BASIC`. Actualmente es el método disponible, aunque en próximas versiones se estarán incorporando nuevos mcanismos.
* **Username:** ingresá la cuenta autorizada para realizar envíos.
* **Password:** ingresá la contraseña de la cuenta o su contraseña de aplicación.
* **From Address:** definí la dirección que verá el destinatario como remitente.
* **From name (display):** definí el nombre visible del remitente. Es útil para identificar al equipo de atención.
* **Include the agent's name:** activalo para incluir el nombre del agente en cada respuesta. Por ejemplo: `Equipo de DevOps (Rubén Pérez)`.
* **Firma:** ingresá el texto que se agregará al final de cada correo que envie el agente.
* **Imagen de firma:** adjuntá una imagen PNG o JPG para complementar la firma que se anexará a los correos enviados.

<figure><img src="/files/AK56hwhxCRgxMNXEP9vn" alt=""><figcaption></figcaption></figure>

### Validar y administrar la cuenta

Una vez guardada la configuración, puedes efectuar algunas acciones disponibles en la cuenta:

* **Test de Envío:** envía un correo de prueba. Confirmá que el destinatario lo reciba.
* **Resync:** vuelve a sincronizar la cuenta con el servidor de correo.
* **Delete History:** elimina el historial descargado en **OMniLeads**. No elimina mensajes del servidor de email, solamente lo hace de manera local. Luego descarga nuevamente desde la fecha definida en **Since**.
* **Ícono de borrado:** elimina la configuración de la cuenta en **OMniLeads**.

{% hint style="success" %}
La cuenta queda lista cuando está guardada, activa y el **Test de Envío** finaliza correctamente.
{% endhint %}

<figure><img src="/files/p9nGxFzFis7lm9ITDkN3" alt=""><figcaption></figcaption></figure>

### Y Listo!

Ya estamos en condiciones de configurar una campaña y activar su canalidad de email. Para ello puedes consultar la sección de [Campañas de Email](/campanas-de-contacto/campana-de-email-entrante).


# Wallboard for Business (Pro)

<figure><img src="/files/PHekhrCNxFbu3kA9iZ8B" alt=""><figcaption></figcaption></figure>

Con el objetivo de complementar los Dashboards básicos de producto y ofrecer un *Overview en Tiempo Real* preparado para el Carril Empresarial, el **Wallboard for Business** se posiciona como un módulo comercial para sumar valor a la hora de comprender el estado actual del Centro de Contactos.

Basando su funcionamiento en métricas de negocio o KPIs (Key Performance Indicator - por sus siglas en inglés) y disponible en la versión de [OMniLeads Enterprise](/instalacion-de-omnileads/omnileads-enterprise), el usuario podrá crear Tableros de Monitoreo con múltiples finalidades:&#x20;

* Obtener un resúmen de métricas mucho más amplio y personalizado del estado de Operación del Contact Center (Atenidas, Perdidas, Agentes Ready, Agentes Pausa, Agentes OnCall, etc.)
* Configurar alarmas reactivas a eventos pre-configurados (i.e. thresholds de Avail Time, Avg Time, cantidades de no atendidas, cantidades en espera, etc.)
* Brindar un método de tiempo real y accesible desde cualquier dispositivo.
* Crear "muros de tiempo real" públicos y privados.
* Desplegar resultados mediante desplazamiento dinámico de Páginas y Widgets.
* Ampliar la visión de resultados a más de una instancia o site de Contact Center (Visión Centralizada)

<figure><img src="/files/qFpDw9nob8av2hANkVGW" alt=""><figcaption></figcaption></figure>

**¿Quién usará este producto?**

Está destinado a Supervisores Avanzados, Managers y/o Administradores del Contact Center.

**¿Por qué es importante?**

En Operaciones donde existe una gran cantidad de información y tráfico gestionado en el Centro de Contactos, es imprescindible contar con una visión global, eficiente y de tiempo real de los principales indicadores de operación (KPIs) que mejor describen la situación actual.&#x20;

Ésto permite descubrir de manera ágil qué aspectos del workflow del Contact Center pudieran necesitar optimizaciones y mejoras, y tomar decisiones seguras en torno a lo que sucede en el momento.

<figure><img src="/files/QLVC0tAsEYHxiLZHxrA7" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/lKr2F3nhxdGTh909tnSv" alt=""><figcaption></figcaption></figure>

<br>


# Creación de un Wallboard

Para crear un Wallboard, se debe acceder al *Menú Principal -> Wallboard*, y clickear sobre el botón *Crear*:

<figure><img src="/files/aLKwdySdUFD21BmA8FhY" alt=""><figcaption></figcaption></figure>

Allí deberemos configurarlos siguientes campos:&#x20;

* **Nombre**: el nombre que pondremos a nuestro Wallboard
* **Descripción**: una descripición breve.&#x20;
* **Duración:** la duración que tendrán las páginas en caso de crear múltiples vistas sobre el mismo "muro".
* **Es-Público?:** nos permitirá compartir este wallboard con otros usuarios supervisores y/o administradores de la plataforma.

Al clickear en Guardar, ya seremos capaces de visualizar el Wallboard de tiempo real creado y listo para su configuración:

<figure><img src="/files/3zLZDJBBcHaAVflb8WkM" alt=""><figcaption></figcaption></figure>

Los diferentes íconos de la vista nos permitirán: *borrar, editar, agregar widgets/páginas, y abrir el wallboard en una nueva pestaña para su visualización.*


# Agregando Widgets y Páginas "realtime"

Un Wallboard se compone de Páginas dinámicas a las que se agregan Widgets de tiempo real. Éstos últimos contendrán las métricas/KPIs que se desean reflejar en la vista.

Para agregar páginas y/o widgets, clickeamos sobre el ícono "Widgets" correspondiente a las opciones del Wallboard en cuestión:

<figure><img src="/files/QebQYDF6eOpcRR2D8bFy" alt=""><figcaption></figcaption></figure>

En el siguiente pop-up, visualizaremos el tablero con su espacio para el agregado de Widgets y Páginas. Con click-derecho podremos acceder a las opciones principales:

* **Agregar Página**:  agrega al tablero tantas páginas como se deseen visualizar. Las mismas se mostrarán espaciadas en un tiempo configurable en las opciones generales de Wallboard.
* **Eliminar Página**: elimina la página sobre la cual se está posicionado.
* **Agregar Widget**: agrega métricas/kpis de interés del negocio.

<figure><img src="/files/BGbLMT4ZX0hoqFcvBdZh" alt=""><figcaption></figcaption></figure>

Cuando se agrega un nuevo widget a través del botón "Agregar Widget", éste se agregará a la página en la cual el usuario está posicionado. Las opciones del widget de página permiten borrar el widget, o bien editarlo/configurarlo.

Si clickeamos sobre el botón Crear (ícono de lápiz sobre el widget recientemente agregado), se abrirá un nuevo pop-up que nos permitirá avanzar con la configuración de la métrica:

<figure><img src="/files/JVgZxnQxp7vCwyVOIPMy" alt=""><figcaption></figcaption></figure>

* **Nombre:** permite ingresar un nombre al widget, que luego se visualizará en el wallboard de tiempo real.
* **Color:** color por default que tomará el widget apenas comience el sensado de información.
* **Campañas:** permite seleccionar la/s campaña/s sobre la/s cual/es se visualizará/n las métricas de negocio.
* **Métrica-Nombre:** permite seleccionar desde un combo la métrica de interés.
* **Widget:** permite seleccionar el tipo de Widget (bloque, circular, tabla o lista)

La sección de Alarmas, permite al usuario crear **alarmas visuales** sobre las métricas configuradas, con el objetivo de alertar al usuario sobre cambios en los patrones de comportamiento esperado.

De esta manera, mediante el uso de operdores condicionales, el widget cambiará de color indicando al usuario sobre el cambio de condición de la métrica.

<figure><img src="/files/J0izKktoERyI8U4hODwH" alt=""><figcaption></figcaption></figure>

Al clickear en Guardar, el widget queda configurado en página y listo para ser visualizado.


# Explorando Widgets y Métricas

Con el objetivo de sumar valor al negocio, el Wallboard for Business se diseña para implementar diferentes métricas/KPIs de interés, no solo correspondientes al canal de voz sino también al resto de los canales digitales que se incoporan al software.

Entre ellos, podemos listar a la fecha los siguientes:

* Agentes en llamada (OnCall)
* Agentes en pausa (OnPause)
* Agentes en Listo (Ready)
* Cantidad de Llamadas Atendidas
* Cantidad de Llamadas Ofrecidas
* Cantidad de Llamadas No atendidas
* Cantidad de Llamadas En Espera
* Listas de Agentes y estados
* Listas de Llamadas y estados
* Listas de Campañas y estados
* Gráficos de SLA
* % Llamadas Atendidas
* % Llamadas No Atendidas
* % SLA
* Tiempo de Espera Máximo
* Cantidad de Conversaciones Entrantes (Whatsapp Business)
* Cantidad de Conversaciones Salientes (Whatsapp Business)
* Cantidad de Contactos Nuevos (Whatsapp Business)
* otros

A partir de clickear sobre el botón "Ver" de las opciones del Widget, ya es posible acceder a la vista y visualizar las métricas configuradas:

<figure><img src="/files/Yn8XrHwvZVX1mvyls02M" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/YadvbaEXRoUcM8SjsvGf" alt=""><figcaption></figcaption></figure>

La barra inferior de la vista ofrecerá al usuario la toma de control del tablero de tiempo real, con algunas acciones disponibles en la versión:

* Pausar (para visualizar métricas en una página concreta)
* Refrescar (para tomar nuevos widgets o páginas recientemente agregadas)
* Editar (para re-configurar el tablero)
* Alternar entre colores de fondo
* Conectar/Desconectar wallboard


# Mensajes Masivos (Pro)

## Envíos Masivos con API de WhatsApp Business

En el mundo actual, la comunicación inmediata y personalizada es clave para el éxito de cualquier negocio. Nuestro producto de **envíos masivos de mensajería** mediante la **API de WhatsApp Business** te permite conectar con tus clientes de manera eficiente, confiable y personalizada, maximizando el impacto de tus mensajes en tiempo real.

Esta solución avanzada resulta muy útil para gestionar envíos masivos de mensajes, garantizando entregas rápidas y seguras de la mano de Meta/Facebook. Ideal para empresas que buscan escalar su comunicación directa con los clientes sin perder personalización.

<figure><img src="/files/vNuTpKKixEHcD6GpbFLH" alt=""><figcaption></figcaption></figure>

**Principales** **Características**:

* **Envíos masivos personalizados:** Segmenta y personaliza los mensajes según la información de tus clientes.
* **Automatización inteligente:** Diseña campañas automatizadas que se ejecuten según horarios o eventos específicos.
* **Reportes en tiempo real:** Mide el alcance y efectividad de tus campañas con métricas clave.
* **Seguridad garantizada:** Cumple con los estándares de privacidad y seguridad de WhatsApp Business API de Meta.
* **Compatibilidad con CRM y plataformas existentes:** Integra fácilmente con tus herramientas actuales.

### Beneficios para tu negocio

* **Aumenta la eficiencia:** Ahorra tiempo al automatizar los envíos masivos, con entregas rápidas y organizadas.
* **Conexión directa:** Construye relaciones sólidas con mensajes claros y personalizados que llegan directo a la bandeja de entrada de tus clientes.
* **Mejora la experiencia del cliente:** Ofrece soluciones rápidas y comunicación proactiva.

### Algunos Escenarios de Uso

#### Confirmación de Turnos

Automatiza las confirmaciones, recordatorios y cancelaciones de turnos:

* **Ejemplo:** "Hola, \[nombre]. Te recordamos tu turno para el \[fecha] a las \[hora]. Responde CONFIRMAR para asegurar tu asistencia o CANCELAR si no puedes asistir."

<figure><img src="/files/dMzSW2cwasLdQz68CO4k" alt=""><figcaption></figcaption></figure>

#### Campañas de Marketing y Promoción

Promociona tus productos y servicios de forma atractiva y directa:

* **Ejemplo:** "¡Descubre nuestra nueva colección! Aprovecha un 20% de descuento exclusivo esta semana. Haz clic aquí para más detalles: \[link]"

<figure><img src="/files/Am6xOLl59O6A53v86rto" alt=""><figcaption></figcaption></figure>

#### Avisos de Deuda Personalizada

Gestiona cobranzas de manera eficiente con mensajes adaptados a cada cliente:

* **Ejemplo:** "Estimado \[nombre], tu factura con vencimiento el \[fecha] aún no ha sido abonada. Regulariza tu situación aquí: \[link]."

<figure><img src="/files/oV5TeGLkEPR6cVi3wo5u" alt=""><figcaption></figcaption></figure>

#### Atención al Cliente en Escala

Facilita la resolución de problemas con respuestas automáticas:

* **Ejemplo:** "Hola, \[nombre]. ¿En qué podemos ayudarte? Responde con una de estas opciones: 1. Seguimiento de pedido, 2. Consultas sobre productos, 3. Otro."

<figure><img src="/files/VF7EGiLhsLxHDkbxNsP2" alt=""><figcaption></figcaption></figure>

### ¿Por qué elegirnos?

* **Certificación oficial de WhatsApp:** Trabajamos con la API oficial de WhatsApp, garantizando calidad y cumplimiento.
* **Soporte dedicado:** Contamos con un equipo experto para ayudarte en cada etapa de implementación.
* **Escalabilidad:** Diseñado para pequeñas, medianas y grandes empresas que buscan potenciar su comunicación y evitar dolores de cabeza con soluciones de Whatsapp intermedias o parchadas.

### Implementación

1. **Integración rápida:** En menos de 48 horas puedes empezar a utilizar nuestro servicio.
2. **Configuración personalizada:** Te ayudamos a diseñar tus plantillas de mensajes.
3. **Soporte continuo:** Monitoreamos y optimizamos tu experiencia con el producto.

###


# Creación de Envios

Para utilizar los Envios Masivos, es importante contar con una línea de Whatsapp Business activa. Para mas información respecto a dar de alta una Línea de Whatsapp Business, puede revisar la sección de [Configuración del Canal de Whatsapp (Pro).](/configuracion-whatsapp-business)

Además, debe contar con una Subscripción activa a OMniLeads Enterprise.

Para realizar un envío de Mensajes Masivos, se debe ingresar al Menú Principal -> Mensajes Masivos:

<figure><img src="/files/n15ZfvQxeM1Nyj7zoB3x" alt=""><figcaption></figcaption></figure>

Desde allí, deberá seleccionar:

* La Línea de Whatsapp Business sobre la cual se enviarán los mensajes.
* El Template Aprobado por Meta sincronizado desde la plataforma de GupShup. Para mayor información en este punto, recomendamos revisar la sección de [Templates Aprobados](/configuracion-whatsapp-business/lineas#acerca-de-los-templates-aprobados-por-whatsapp).
* La base de datos de contactos destino de los mensajes personalizados.

<figure><img src="/files/IjKUOeDwsLiPKqEW2UpW" alt=""><figcaption></figcaption></figure>

Finalmente al clickear en "Crear", se habilitará una vista para el mapeo entre los datos personalizados del Contacto en la base previamente cargada y las variables del template asociado al envio.

En el ejemplo debajo se observa un template asociado al Segmento Salud para Confirmación de Turnos, donde cada variable entre llaves ({X}) permitirá personalizarse mediante información correspondiente a columnas de la base de datos.

<figure><img src="/files/fLBm04scmsg2Y3Rx5lUo" alt=""><figcaption></figcaption></figure>

Al Guardar los datos, OMniLeads listará la órden de envío y estará listo para procesarlo tan pronto el usuario lo ejecute dese las opciones de envio:

<figure><img src="/files/HAbVLkKTdVj8NB1GVvKE" alt=""><figcaption></figcaption></figure>


# Campañas de Turnos

A los efectos de poder trabajar con campañas de turnos según sea el segmento vertical de negocio deseado (de salud, de taller de automóviles, etc.), el campo "TurnoID" de la vista de creación de envios se reserva como una variable de identificación del contacto a la hora de confirmar o cancelar un turno.

<figure><img src="/files/ftZWFjLBzWiPDUPoed7b" alt=""><figcaption></figcaption></figure>

### Caso de Uso:

Supongamos el siguiente caso de uso, donde diseñamos un template con 3 CTAs (Click To Actions):

<figure><img src="/files/S8DjPKLrSiAvRtQMgflv" alt=""><figcaption></figcaption></figure>

**Ejemplo:** "Hola, \[nombre]. Te recordamos tu turno \[turnoID] para el \[fecha] a las \[hora]. Responde CONFIRMAR para asegurar tu asistencia, CANCELAR si no puedes asistir, CHATEAR si deseas cambiarlo. Gracias!"

La elección del TurnoID tiene 2 efectos:

* mostrar el identificador del turno al paciente dentro del cuerpo del mensaje personalizado,
* crear una URL tipo HASH (unívoca) para llevar adelante la acción de confirmación o cancelación del turno.

<figure><img src="/files/eK8CRbaiujszMndAEHwK" alt=""><figcaption></figcaption></figure>

La URL dinámica utilizada en la configuración del template en Gupshup tendrá la sigiuente sintaxis:

`https://<OMniLeads_FQDN>/bulk_messages/confirm/`

`https://<OMniLeads_FQDN>/bulk_messages/cancel/`

Donde "OMniLeads\_FQDN" responderia al nombre de dominio de internet de la instancia, bajo un certificado SSL válido.

A los efectos de generar un HASH unívoco y seguro de la URL para la confirmación del turno, se generará una nueva variable de nombre <#Turno-ID> para ser utilizada en las CTAs respectivas.

Veamos cómo luce la acción de Confirmar un turno desde el click del usuario receptor del mensaje al CTA "***Sí, confirmo!***":

<figure><img src="/files/Tjn5PwMjMpnZNvnkSfut" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/oE8gQrrspb03hKyw2csm" alt=""><figcaption></figcaption></figure>

Y **Listo!** Ya contamos con un turno confirmado en la base de datos de OMniLeads Enterprise :)


# Exportación de Resultados

Para poder visualizar los resultados parciales/totales de la campaña de envío masivo, bastará con clickear sobre el nombre de la base de datos en la Lista de Órdenes de Envío.

En dicha vista, es posible a su vez descargar los archivos en formato CSV para su posterior procesamiento en sistemas externos.

<figure><img src="/files/cqS54PgniPhYkVTnpMrt" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/XYBA1uMDo90e8qgo8gzN" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/LJp6FmXwubJ7X7glgLw9" alt=""><figcaption></figcaption></figure>


# Marca Blanca (Pro)

**OMniLeads** incorpora la capacidad de **personalizar la plataforma con identidad de marca propia**, una funcionalidad diseñada para **partners, integradores, canales de venta y/o compañías** que desean personalizar la solución bajo su propia marca comercial.

<div data-full-width="false"><figure><img src="/files/DEyDdsO9cZ3Xgogz04An" alt=""><figcaption></figcaption></figure></div>

Con la función **Rebrand / White Label**, los usuarios pueden:

* **Agregar su propio logo y colores institucionales**, haciendo que la interfaz de OMniLeads luzca completamente alineada con su identidad corporativa.
* **Fortalecer la percepción de marca ante sus clientes**, presentando la solución como parte integral de su portafolio tecnológico.
* **Aumentar el valor agregado de sus servicios**, al ofrecer una plataforma de Contact Center profesional con apariencia 100% personalizada.
* **Diferenciarse**, presentando un producto visualmente propio, moderno y adaptable a cada cliente final.
* **Optimizar la relación con sus cuentas**, ya que los usuarios y operadores perciben una solución coherente con la marca del proveedor de servicios, lo que incrementa confianza y fidelización.

<figure><img src="/files/oQXBrAr9gqviuBgefzA8" alt=""><figcaption></figcaption></figure>

#### Ideal para estrategias de canal y expansión regional

Esta característica impulsa nuevas oportunidades de negocio, permitiendo a los partners:

* Comercializar **ediciones personalizadas de OMniLeads** bajo su marca o sub-marcas.
* Implementar versiones adaptadas para distintos mercados o verticales (salud, finanzas, retail, educación, etc.).
* Mantener la **independencia visual y comercial**, sin comprometer la robustez y escalabilidad de la plataforma OMniLeads.

#### Una solución hecha para integradores

El módulo de Rebrand está disponible en las ediciones **Enterprise** de OMniLeads, y se configura fácilmente desde la interfaz administrativa.

El integrador o partner podrá actualizar logos, íconos y esquema de colores institucionales sin necesidad de asistencia técnica, manteniendo el control total sobre la identidad visual de su plataforma.

Con esta incorporación, **OMniLeads reafirma su compromiso con el ecosistema de partners e integradores**, ofreciendo una herramienta flexible, profesional y preparada para escalar en mercados donde la personalización y la marca son factores clave de crecimiento.

####


# Campañas de Contacto

## Campañas telefónicas

Una campaña representa una manera de encapsular (dentro de la plataforma) a una operación de Contact Center conformada por:

* Un grupo de agentes procesando **interacciones** (llamadas, mensajes de chat, videollamadas, etc.) desde diferentes canalidades, en alguna dirección: outbound, inbound, blending.
* Una base de contactos asociada a la campaña.
* Un listado de calificaciones disponibles a la hora de clasificar la llamada gestionada por el agente.
* Uno o varios formularios de campaña, a ser lanzados en caso de que el agente asigne una calificación de «gestión» sobre la interacción en curso. El formulario es desplegado por dicha calificación y el agente puede completar el mismo según los datos del contacto que está siendo gestionado.

En la figura 1 se representa una campaña y sus componentes.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_elements.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Los elementos de una campaña*

El hecho de trabajar bajo campañas, permite a los perfiles de usuarios Supervisor/Administrador acotar métricas e informes, así como también realizar monitoreo en tiempo real o buscar interacciones, entre otras acciones, utilizando campañas como criterio de filtrado. Podemos contar con campañas de diferente naturaleza (telefónica y/o conversacional), conviviendo de manera simultánea en OMniLeads y dejando registros sobre las interacciones transaccionadas por los agentes.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/oml_bpo.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Campañas, agentes, supervisores y backoffice*

### Calificaciones y Subcalificaciones

Las calificaciones y subcalificaciones constituyen un listado de «etiquetas» disponibles para ser asignadas a cualquier campaña, de manera tal que los agentes puedan clasificar cada interacción dentro de una campaña, con cualquiera de éstas calificaciones y subcalificaciones.

Las calificaciones son generadas por el supervisor o administrador y se pueden relacionar con varios aspectos, por ejemplo:

* El resultado de la interacción hacia un contacto de la campaña (ocupado, no atendió, número equivocado, mensaje expirado, buzón de mensajes, etc.).
* El resultado asociado a una interacción atendida (interesado, no interesado, venta, encuesta realizada, conversación cerrada, etc.).

Las calificaciones pueden ser totalmente arbitrarias y para generarlas se debe ingresar al punto de menú *Campañas -> Calificaciones -> Nuevo*.

Podemos listar las calificaciones generadas dentro del menú *Campañas -> Calificaciones. Para dar de alta subcalificaciones (submotivos de la calificación principal), solo se debe clickear en el ícono "+" para sumar nuevos motivos dentro del motivo principal:*

<figure><img src="/files/cnOs394m3Fe4j8Ot88Pw" alt=""><figcaption></figcaption></figure>

*Figura 3: Calificaciones y Subcalificaciones*

<figure><img src="/files/dPDoDb6hKXKDE7QKlRjD" alt=""><figcaption></figcaption></figure>

*Agregado de Subcalificaciones*

### Base de contactos

Las bases de contactos son un requisito para las campañas salientes aunque también pueden ser utilizadas por las campañas entrantes. En el marco de las campañas de contactación, la base de contactos aporta la información complementaria disponible sobre el prospecto, lead, paciente, cliente, etc. que será desplegada en la pantalla del agente al momento de efectuar la interacción.

Éstas bases, son proporcionadas en archivos con formato CSV con los campos separados con coma, y además generadas en la codificación UTF-8 (requisito excluyente). Debe existir al menos una columna que contenga un teléfono por cada contacto (registro) del archivo, mientras que el resto de las columnas puede contener cualquier dato (generalmente cada registro cuenta con datos complementarios al teléfono principal). Éstos datos son expuestos en la pantalla de agente a la hora de establecer una comunicación entre ambos (agente y contacto de la base).

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_contactdb_1.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Archivo CSV de contactos - Vista del editor de texto*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_contactdb_2.png" alt=""><figcaption></figcaption></figure>

*Figura 5: Archivo CSV de contactos - Vista en libreoffice excel*

Se dispone entonces de una base de contactos (CSV) para proceder con la carga del archivo en el sistema accediendo al menú *Contactos -> Nueva base de datos de contactos*:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_upload_contacts.png" alt=""><figcaption><p><em>Figura 6: Nueva base de datos de contactos</em></p></figcaption></figure>

<figure><img src="/files/qAbO4iwGuOqk1HWfEqEv" alt=""><figcaption><p>Lista de Bases de Contactos</p></figcaption></figure>

Dentro de las posibles acciones de una base de datos de contacto, la plataforma dispone de:

* Agregar Contacto: agrega un contacto a la base de contactos
* Lista de Contactos: lista los registros incluidos dentro de la base previamente creada.
* Agregar Contactos: agrega contactos de manera masiva, a partir de archivos CSV.
* Borrar Base de Contactos: permite borrar bases de datos que no esté siendo utilizadas por campañas.
* Ocultar: permite ocultar la base de contactos de la vista.

<figure><img src="/files/t4me8gYsXTtKMB8p3WWv" alt=""><figcaption></figcaption></figure>

Durante el proceso de carga es necesario indicar con un check, cuáles columnas son las que almacenan teléfonos, como se indica en la figura 7:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_upload_contacts_2.png" alt=""><figcaption></figcaption></figure>

*Figura 7: Selección Teléfono*

Finalmente, se salva el archivo y el mismo queda disponible como una base de contactos del sistema instanciable por cualquier tipo de campaña.

### Configuración de restricciones sobre campos de contactos

A veces, no es deseable que los agentes puedan ver o editar algún campo de un contacto en la base de datos. Para éstos casos, se puede configurar qué campos restringir ingresando desde la lista de campañas a la opción de «Restringir campos de contacto».

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_restrict_field_action.png" alt=""><figcaption></figcaption></figure>

*Figura 8: Restringir campos de contacto*

Luego, en ésta pantalla se deben seleccionar para bloquear los campos que no deben ser editables y para ocultar los campos que ni siquiera deben poder ser vistos por los agentes. Sólo será posible ocultar los campos que estén seleccionados como bloqueados. El campo principal de teléfono no podrá ser ocultado.

Por otro lado, también es posible volver obligatorio un campo. De esta manera se podría requerir al agente que previo al guardado de datos rellene en dicho campo la información requerida.

<figure><img src="/files/czyiquz99QT0K2B37XNn" alt=""><figcaption></figcaption></figure>

*Figura 9: Seleccionando campos de contacto para bloquear, ocultar o volverlos mandatorios*

Por ejemplo: cuando un agente quiera editar un contacto, no se le mostrarán los campos ocultos y se le presentarán deshabilitados los campos seleccionados como bloqueados que no estén ocultos. Tener en cuenta que al crear el contacto, el agente podrá ingresar por única vez valores en los campos que sólamente estén bloqueados.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_restricted_fields_for_agent.png" alt=""><figcaption></figcaption></figure>

*Figura 10: Campos de contacto restringidos y ocultos*

### Formularios

Los formularios de campaña constituyen el método por defecto para recolectar información (relevante para la campaña) en la interacción con la persona detrás de una comunicación establecida en su canal de preferencia. Son diseñados por el usuario combinando en una vista estática diferentes tipos de campos (texto, fecha, de múltiple selección y área de texto), pudiendo ordenar los mismos de acuerdo a la necesidad de la campaña.

Para crear formularios se debe acceder al punto de menú *Campañas -> Formularios -> Nuevo*.

<figure><img src="/files/MIQf0MnVt2QNG0wNK2ol" alt=""><figcaption></figcaption></figure>

Los formularios pueden contener campos del tipo:

* **Texto: tipo string/texto**
* **Fecha: tipo fecha/date**
* **Lista Fija: tipo combo con valores fijos**
* **Lista Dinámica: tipo combo con valores dinámicos (extraídos dinámicamente desde un sistema externo y/o CRM mediante mecanismos HTTP GET)**

<figure><img src="/files/hAsNa0l6VCbbWmXkQUcg" alt=""><figcaption></figcaption></figure>

* **Caja de texto de área: tipo string/texto**
* **Número: tipo numérico**

El formulario se confecciona a partir del recorrido de un Wizard de creación, y la selección de tipos de campo se especifica de acuerdo a la figura debajo:

<figure><img src="/files/m0lzTOOLA94GFGYOsVfa" alt=""><figcaption></figcaption></figure>

*Figura 11: Nuevo formulario de campaña*

Podemos generar un formulario de ejemplo de Venta de Productos con el aspecto de la siguiente figura:

<figure><img src="/files/NkEgLBzjvX1zGJYBWDRH" alt=""><figcaption></figcaption></figure>

*Figura 12: Formulario de encuesta*

### Campañas, calificaciones y formularios

Para explicar la relación entre éstos componentes, debemos recordar que múltiples formularios pueden ser asignados a una campaña. La idea es que diferentes calificaciones de una campaña pueden disparar diferentes formularios, permitiendo así a la operación recolectar mediante formularios previamente diseñados, información asociada a la interacción entre el agente de OMniLeads y la persona en el otro extremo de la comunicación dentro de la campaña.

Resulta importante explicar conceptualmente cómo se utilizan los formularios de campaña en OMniLeads. Antes de empezar, resulta necesario aclarar que, en el marco de una campaña, a la hora de asignar calificaciones, se van a poder definir calificaciones «Sin acción» y calificaciones de «Gestión». Éstas últimas, son las que disparan los formularios de campaña.

<figure><img src="/files/hym12tnHiL2bz0Focehp" alt=""><figcaption></figcaption></figure>

*Figura 13: Calificaciones dentro de la campaña*

En el ejemplo de la figura anterior, contamos con 2 calificaciones del tipo «Gestión», por un lado la calificación «Venta Cargada» que tiene asociado el formulario «Venta» y por otro la calificación «No Volver a Llamar» que dispara el formulario «No Llamar».

Cada Calificación tiene la habilidad de registrar un progreso de Objetivo de Negocio, definido en tiempo de creación de campaña (ver Wizard de Creación). A partir de tildar la opción "Positiva", la calificación registrará un avance de Objetivo y el mismo será visualizado en Supervisión de Campañas. En el caso de seleccionar la opción "Ocultar", dicha calificación dejará de mostrarse en llamadas subsiguientes en consola de agente para la campaña en cuestión.

Siempre que haya una llamada activa entre un agente y un contacto de la base de la campaña, el agente dispone de los datos complementarios al teléfono del contacto en su pantalla, junto al combo de selección de calificación para el contacto actual. Si el agente selecciona y guarda una calificación del tipo «gestión», entonces se dispara en la pantalla de agente el formulario asociado a la calificación dentro de la campaña.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dispositions_engaged.png" alt=""><figcaption></figcaption></figure>

*Figura 14: Acciones de gestión y formularios*

### Calificaciones y Subcalificaciones

Es común en los procesos de negocio contar con Calificaciones y Subcalificaciones. Ésto permite adaptar una gestión a Motivos y Submotivos de cierre, para describir de mejor manera un evento de cierre de la interacción.

En el menú *Campañas --> Calificaciones*, se pueden crear calificaciones y subcalificaciones a partir de un pop-up de administración. Dichos motivos y submotivos tendrán lugar en los reportes de gestión de la operación y en las exportaciones de Calificaciones.

<figure><img src="/files/fZu1YF9HKQPAe1vuzhD1" alt=""><figcaption></figcaption></figure>

### Campañas Telefónicas Manuales

Dentro de éste inciso, se ejemplifica paso a paso cómo administrar campañas manuales.

* [Creación de campaña manual](/campanas-de-contacto/campana-manual)
* [Interacción de agente con campaña](/campanas-de-contacto/campana-manual#interaccion-de-agente-con-campana)
* [Campaña con base de datos multinum](/campanas-de-contacto/campana-manual#campana-con-base-de-datos-multinum)

### Campañas Telefónicas Preview

Dentro de éste inciso, se ejemplifica paso a paso cómo administrar campañas preview.

* [Creación de campaña preview](/campanas-de-contacto/campana-preview)
* [Asignación de contactos](/campanas-de-contacto/campana-preview#asignacion-de-contactos)
* [Interacción de agente con campaña](/campanas-de-contacto/campana-preview#interaccion-de-agente-con-campana)
* [Campaña con base de datos multinum](/campanas-de-contacto/campana-preview#campana-con-base-de-datos-multinum)
* [Gestión de la entrega de contactos](/campanas-de-contacto/campana-preview#gestion-de-la-entrega-de-contactos)

### Campañas Telefónicas con Discador Predictivo

Dentro de éste inciso, se ejemplifica paso a paso cómo administrar campañas dialer.

* [Presentación](/campanas-de-contacto/campana-dialer)
* [Creación de campaña dialer](/campanas-de-contacto/campana-dialer#creacion-de-campana-dialer)
* [Activación de campaña](/campanas-de-contacto/campana-dialer#activacion-de-campana)
* [Finalización de campañas dialer](/campanas-de-contacto/campana-dialer#finalizacion-de-campanas-dialer)
* [Reciclado y rotación de bases de contactos](/campanas-de-contacto/campana-dialer#reciclado-y-rotacion-de-bases-de-contactos)

### Campañas Telefónicas Entrantes

Al hablar de llamadas entrantes, nos toca desplegar cada funcionalidad aplicable al flujo de llamadas entrantes. Como bien sabemos, una llamada entrante puede pasar por una serie de «nodos» hasta finalmente conectar con un agente de atención. Por lo tanto, vamos a ampliar el concepto de «campañas entrantes» a los siguientes ítems de configuración:

* [Creación de nueva campaña](/campanas-de-contacto/campana-entrante)
* [Ringing vs. atención automática de llamadas entrantes](https://docs.omnileads.net/pages/dxVQkeGz0gyC8kvt12td#ringing-vs.-atencion-automatica-de-llamadas-entrantes)
* [Enrutamiento de llamadas entrantes](/campanas-de-contacto/campana-entrante/enrutamiento-de-llamadas-entrantes)
* [Derivación de llamadas entrantes desde la PBX hacia OMniLeads](/campanas-de-contacto/campana-entrante/derivacion-de-llamadas-entrantes-desde-la-pbx-hacia-omnileads)
* [Enrutamiento condicionado por rango de tiempo](/campanas-de-contacto/campana-entrante/enrutamiento-condicionado-por-rango-de-tiempo)
* [IVR - Interactive Voice Response](/campanas-de-contacto/campana-entrante/ivr-interactive-voice-response)
* [Identificación de llamada entrante](/campanas-de-contacto/campana-entrante/identificacion-de-llamada-entrante)
* [Ejecución de dialplan personalizado](/campanas-de-contacto/campana-entrante/ejecucion-de-dialplan-personalizado)

### Campañas de Whatsapp

Al hablar de Campañas de Whatsapp, hacemos referencia a la canalidad de mensajería integrada a OMniLeads. Es importante para ello, comprender el concepto de Proveedores y Lineas, así como su correspondiente Estrategia de Derivación: directa o interactiva.&#x20;

* [Plantillas de Mensajes y Grupos Horarios](/configuracion-whatsapp-business/plantillas-de-mensajes-y-grupos-horarios)
* [Proveedores](/configuracion-whatsapp-business/proveedores)
* [Líneas](/configuracion-whatsapp-business/lineas)
* [Creación de una Campaña con Whatsapp Business Activado](#campanas-de-whatsapp)

### Plantillas de campaña

Suele ser recurrente que los parámetros de una «clase» de campaña (por ejemplo, campañas preview de encuestas) no varíen demasiado, salvo quizás por el grupo de agentes asignados, la base de contactos a utilizar o el supervisor asignado. Por lo tanto, en lugar de tener que crear campañas muy similares siempre desde cero, se pueden generar plantillas para luego crear campañas nuevas rápidamente a partir de clonar dichas plantillas.

Ésta funcionalidad la otorgan los *Templates* de campañas de OMniLeads.

A partir de la generación de una plantilla (que se genera de manera similar a una campaña), se pueden crear nuevas campañas simplemente seleccionando el template y la opción *Crear campaña desde template*. Cada nueva campaña estará disponible con todos los parámetros especificados en su plantilla matriz.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_template.png" alt=""><figcaption></figcaption></figure>

*Figura 15: Templates*

### Interacción con sistemas de gestión externos

OMniLeads está diseñado desde una perspectiva en la que se prioriza una integración con el sistema de gestión predilecto de la compañía. Brindando así la posibilidad de que una empresa mantenga el uso de su sistema de gestión apropiado a su mercado vertical (salud, ventas, atención al cliente, etc.).

Mediante funcionalidades propias y métodos de la API, OMniLeads permite las siguientes interacciones:

* Abrir una vista concreta del CRM en una comunicación entrante o saliente, utilizando parámetros de la comunicación (id del agente, id del contacto, id de la campaña, etc.) como información dinámica para invocar al CRM.
* Permitir realizar una llamada «click to call» desde una vista de contacto en el CRM y accionar así una llamada a través de una campaña y agente de OMniLeads.
* Permitir calificar la gestión de un contacto del CRM y que la calificación se impacte en OMniLeads, de manera tal que exista una correlación entre el sistema CRM y el sistema de Contact Center dentro de cada campaña.
* OMniLeads en las llamadas entrantes puede solicitar el ID del llamante y notificar al CRM para que éste decida sobre qué campaña de OMniLeads encaminar una llamada.

Ampliamos todos éstos conceptos y configuraciones en el siguiente link [Integración con CRM](/integracion-con-crm).


# Campaña Entrante

## Creación de nueva campaña

Para crear una nueva campaña, se debe ir al menú *Campaña -> Campañas entrantes -> Nueva campaña*.

Se debe completar la primera pantalla del wizard, como lo expone la siguiente figura:

<figure><img src="/files/Ckxkjz5IMfnCxa8WKNDX" alt=""><figcaption></figcaption></figure>

*Figura 1: Parámetros de campaña*

* **Canalidad de la campaña:** son las canalidades que se aceptarán en la campaña. Visite la sección de [Whatsapp Business](/configuracion-whatsapp-business) para configurar correctamente la canalidad de Whatsapp.
* **Nombre:** Nombre de la campaña.
* **Base de datos de contactos:** Campo opcional. Se utiliza para desplegar datos a partir del número de teléfono que realiza la llamada entrante al sistema.&#x20;

Es importante mencionar, que en caso de seleccionar en esta vista una Base de Datos *ya en uso* en otra Campaña, el Administrador recibirá un Cartel de Información alertando sobre dicha situación. En caso de clickear en Continuar, las transferencias de llamadas que ejecute el Agente transportarán la información de contacto hacia el destino transferido.

<figure><img src="/files/9vx478oVssRO42i39AxJ" alt=""><figcaption></figcaption></figure>

* **Control de Duplicados:** Se utiliza para controlar registros duplicados en bases de datos. Las opciones son: Permitir Duplicados / Evitar Duplicados.
* **Tipo de interacción:** Indica si la campaña va a operar con formularios de OMniLeads,  con la invocación hacia un CRM (URL Externa) por cada llamada conectada, o con ambos métodos al mismo tiempo.
* **URL externa:** En caso de haber seleccionado la invocación a una URL externa en cada llamada, aquí se indica cuál de los CRMs definidos debe invocar la campaña.
* **Campo de Dirección:** En caso de tener activada la integración con ***Google API***, esta opción permite seleccionar el campo de la base de datos que servirá de **Geolocalización del Contacto**. El mapa asociado se incluirá dentro de la ficha en la Consola de Agente.

<figure><img src="/files/S7ER2gq5mYRfUCmoSpeq" alt=""><figcaption></figcaption></figure>

* **Objetivo:** Se define como la cantidad de *gestiones positivas* esperadas en la campaña. En la supervisión de la campaña, se muestra en tiempo real el porcentaje de avance de la campaña respecto a éste objetivo definido.
* **Mostrar nombre al recibir llamado:** Aquí se habilita la opción de mostrar el nombre de la campaña por la cual ingresa la llamada.
* **Mostrar DID al recibir llamado:** Aquí se habilita la opción de mostrar el DID (Direct Inward Dialing) de Ruta Entrante por la cual ingresa la llamada.
* **Mostrar nombre Ruta Entrante:** Aquí se habilita la opción de mostrar el nombre de la Ruta Entrante por la cual ingresa la llamada.
* **Habilitar video:** Habilitar video si está disponible.
* **Sistema externo:** Aquí se adjudica el sistema de gestión externo que ejecutaría «click to call» sobre la campaña, en caso de así desearlo.
* **ID en sistema externo:** Éste campo debe contener el ID que posee la campaña dentro del sistema de gestión externo, desde el cual llegarán los «click to call» o «solicitudes de calificación» de contactos.
* **Ruta saliente:** Se le asigna una ruta saliente existente a una campaña.
* **CID ruta saliente:** Éste campo debe contener el CID asignado para una ruta saliente existente a una campaña.
* **Speech:** El speech de campaña para ser desplegado en la consola de agente en las llamadas de la campaña.

> Nota
>
> El tema de la base de contactos en las campañas entrantes (y también manuales) plantea un escenario flexible, ya que es opcional el asignar una base de contactos a este tipo de campañas. En éste caso, la base de contactos es utilizada si deseamos que cada vez que un contacto realice una comunicación entrante, en base a su «callerid» poder recuperar los datos del mismo, si es que se encuentra registrado el teléfono desde donde llama, dentro de la base de contactos asociada a la campaña.

A continuación se prosigue con la creación de la campaña entrante:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_wizard2.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Parámetros de campaña*

* **Cantidad máxima de llamadas:** Es el número de llamadas que se permiten poner en cola de espera. Por encima de ese número, la llamada será enviada a la acción «failover».
* **Grabar llamados:** Se debe seleccionar ésta casilla en caso de requerir que los llamados sean grabados.
* **Prioridad de campaña:** Es un parámetro lineal en la escala del 1 al 10, que implica cuán importante son las llamadas de ésta campaña respecto a otras. Establece prioridades para los agentes que trabajan en varias campañas en simultáneo. Si se deja el valor en «0» (por defecto), se mantiene una equidad con el resto de las campañas.
* **Estrategia de distribución:** Método de distribución de llamadas que usará la campaña sobre los agentes. Para campañas salientes, se recomienda RRMemory.
* **Música de espera:** Indica la playlist que escuchará el cliente cuando su llamada esté en espera.
* **Tiempo de espera en cola:** Es el tiempo (en segundos), que la llamada contactada quedará en cola de espera, aguardando que un agente se libere para conectarle la misma.
* **IVR de escape:** Es un destino de tipo IVR que el usuario puede escoger para «escapar» hacia él en medio del tiempo de espera. Éste parámetro está relacionado con el de anuncio periódico, pues éste último es donde se reproduciría el mensaje que guíe al usuario para realizar el escape hacia dicho destino IVR.
* **Nivel de servicio:** Es un parámetro para medir cuántas de las llamadas fueron contestadas dentro de esa franja de tiempo. El valor se expresa en segundos.
* **Destino en caso de timeout:** Destino hacia el cual se enviarán las llamadas que hayan sido expiradas (superó el tiempo de espera asociado).
* **Anuncio de entrada para el agente:** Audio que se reproduce al agente cuando recibe una llamada entrante.
* **Audio de ingreso:** Permite definir si se reproducirá algún audio sobre la llamada entrante, al ingresar a la cola de espera de nuestra campaña. Para que esté disponible en el selector desplegable, debe cargarse previamente el archivo desde el menú *Telefonía > Audios > Audios personalizados*.
* **Anunciar tiempo promedio de espera:** Permite al usuario especificar el tiempo promedio que deberá esperar el llamante para ser atendido
* **Tiempo de ring:** Es la cantidad de *tiempo de ring* que la campaña utiliza para intentar contactar la llamada entrante hacia un agente. Se debe considerar que éste parámetro tiene sentido siempre que el agente no trabaje dentro de un grupo configurado con la modalidad *Auto-attend inbound calls*.
* **Tiempo de reintento:** Es el tiempo (en segundos) que la llamada quedará en la cola de espera, hasta volver a intentar conectarla con otro agente disponible.
* **Anunciar posición:** Anunciar posición del llamante en la cola.
* **Frecuencia de anuncios de espera/posición:** Es el tiempo (en segundos) de espera o posición para una frecuencia de anuncios.
* **Tiempo de descanso entre llamadas:** Es el tiempo de descanso (en segundos) que cada agente dispone entre cada llamada satisfactoria.
* **Anuncio periódico:** Podemos seleccionar algún audio de nuestro repositorio para reproducir como un anuncio periódico sobre la llamada en espera.
* **Frecuencia del anuncio periódico:** Cantidad de segundos entre cada reproducción de un anuncio periódico.

<mark style="color:green;">Nota</mark>

<mark style="color:green;">Los parámetros «Tiempo de Ring» y «Tiempo de reintento», quedan sin efecto para aquellas llamadas que reciban agentes cuyo grupo de agentes esté configurado con el atributo auto-atención de llamadas entrantes o para las campañas que tengan esta opción habilitada en “Configuraciones para agentes”.</mark>

En la siguiente etapa de configuración, se deben asignar las calificaciones que la campaña requiera para que los agentes califiquen cada llamada de contacto.

*IMPORTANTE: No se puede cambiar el Formulario de Gestión previamente seleccionado en el Wizard de Opciones de Calificación, si la Calificación de Gestión ya ha sido utilizada en la campaña.*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_wizard3.png" alt=""><figcaption></figcaption></figure>

*Figura 3: Calificaciones de campaña*

En el siguiente paso, agregamos supervisores a la campaña:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_wizard4.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Asignación de supervisores*

Finalmente, los agentes pueden ser asignados a la campaña:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_ag2.png" alt=""><figcaption></figcaption></figure>

*Figura 5: Asignación de agentes*

En el resto del capítulo, se detalla todo acerca del enrutamiento de las llamadas desde los vínculos troncales hacia nustras campañas entrantes.

## Ringing vs. atención automática de llamadas entrantes

El comportamiento del webphone del agente frente a una llamada proveniente de una campaña entrante puede ser:

* **Ringing normal** y con una duración asociada al parámetro «Tiempo de ring» presente en la creación de la campaña entrante. Durante ese tiempo, el teléfono del agente notifica la llamada entrante, aguardando la acción del agente que determine la atención o no de la llamada.
* **Atención automática de la llamada**. Éste comportamiento, implica que cada llamada entrante enviada a un agente sea atendida automáticamente por el teléfono del agente, notificando a éste con un «beep» antes de dejarlo definitivamente en línea con la contraparte de la llamada.

Dicho comportamiento depende de la configuración a nivel «Grupo de agentes» que posea el agente vinculado a la campaña entrante (ver figura 6) o a las configuraciones para agentes especificadas para la campaña (ver figuras 7 y 8). De tal manera que si el grupo o la campaña tienen activadas la atención automática de llamadas entrantes, el agente responderá de dicha manera ante cada llamada entrante de cualquier campaña, quedando sin efecto los parámetros «Tiempo de ring» y «Tiempo de reintento», como se mencionó en la «Nota 2» de ésta sección.

<figure><img src="/files/6CaSVLujynkNbQ4eTiLB" alt=""><figcaption></figcaption></figure>

*Figura 6: Configuración de grupo de agentes*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/agents_in_campaign_1.png" alt=""><figcaption></figcaption></figure>

*Figura 7: Configuraciones para agentes en campaña*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/agents_in_campaign_2.png" alt=""><figcaption></figcaption></figure>

*Figura 8: Configuraciones para agentes en campaña*


# Enrutamiento de llamadas entrantes

## Enrutamiento de llamadas entrantes

Una vez disponible nuestra campaña entrante, se debe proceder con la vinculación de un número telefónico «DID» disponible en alguno de los troncales SIP por los que llegarían las solicitudes de llamadas con la campaña entrante en cuestión. Es decir, la asignación del número y la campaña entrante hacia donde derivar a todas las llamadas que ingresen a OMniLeads sobre dicho número DID.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_routes.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Rutas entrantes*

Para generar una nueva ruta de llamadas entrantes, debemos acceder al menú *Conexiones -> Telefonía -> Rutas entrantes*, en donde se listan las rutas creadas y además se pueden añadir nuevas.

En la siguiente figura, se puede visualizar una *ruta entrante* en su pantalla de configuración:

<figure><img src="/files/MfStjMMwbSINnNjYIOb1" alt=""><figcaption></figcaption></figure>

*Figura 2: Parámetros de ruta entrante*

* **Nombre:** Es el nombre asignado a la ruta (alfanumérico sin espacios).
* **Número DID:** Es el número entrante que se valida como disparador del encaminamiento de la llamada sobre el destino seleccionado por la propia ruta.
* **Directo:** este "*check"* permite que las rutas entrantes deriven directamente hacia agentes del Contact Center. Es un escenario típico cuando conectamos una PBX y los internos requieren comunicarse directamente con un agente, evitando asi pasar por una campaña entrante.
* **Prefijo caller id:** El valor que se configure en éste campo, aparecerá como prefijo del CallerID que llega en cada llamada por el troncal correspondiente.
* **Idioma:** El idioma que se utiliza a la hora de reproducir locuciones por defecto del sistema, sobre los canales que ingresan por la ruta.
* **Tipo de destino:** El tipo de destino a donde se enviarán las llamadas ingresadas por dicha ruta. Dentro de los tipos de destinos existen campañas entrantes, IVRs, condicionales de tiempo, identificación de llamante, etc.
* **Destino:** Destino puntual al cual enviar los canales.

Es importante aclarar que está permitido que varias rutas tengan el mismo destino.


# Derivación de llamadas entrantes desde la PBX hacia OMniLeads

## Derivación de llamadas entrantes desde la PBX hacia OMniLeads

En ésta sección, se ejemplifica cómo configurar OMniLeads y una PBX basada en Asterisk, para derivar llamadas desde la PBXa hacia OMniLeads.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_route_frompbx_ivr.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Derivación de llamadas desde PBX*

Partimos del hecho de considerar que existe un troncal SIP que vincula OMniLeads con la PBX.

Lo primero que se debe definir es la numeración asignada a la ruta entrante que va a procesar la llamada desde la PBX hacia un destino de OMniLeads, ya que éste número (DID de la ruta) debe ser marcado por la PBX para enviar llamadas desde cualquier módulo (extensiones, IVRs, rutas entrantes, follow me, etc.) de dicha PBX, hacia el destino configurado en la ruta de OMniLeads:

<figure><img src="/files/1j7Yn7VJBbPMagOQR2uF" alt=""><figcaption></figcaption></figure>

*Figura 2: Parámetros de ruta entrante*

Tomando como ejemplo la ruta con el DID *123456* utilizado en la figura anterior, la PBX Asterisk deberá generar llamadas por el troncal SIP hacia el número mencionado, cada vez que algún recurso de la PBX necesite alcanzar el destino *123456* de OMniLeads.

Si nuestra PBX Asterisk dispone de una interfaz web de configuración, entonces simplemente podemos generar una *Nueva extensión custom* y hacer que la misma apunte a *SIP/trunkomnileads/123456*, donde «trunkomnileads» es el nombre configurado en la PBX para nombrar el troncal SIP con OMniLeads.

La idea de extensión apuntando hacia OMniLeads se ejemplifica en las siguientes figuras 3 y 4:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_route_frompbx2.png" alt=""><figcaption></figcaption></figure>

*Figura 3: Extensión custom para OMniLeads*

Si bien la extensión en la PBX puede tener cualquier numeración (se ejemplificó con *2222*), lo importante es enviar *123456* (en nuestro ejemplo) hacia OMniLeads, como se resalta en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_route_frompbx3.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Extensión custom para OMniLeads*

Una vez disponible la extensión en la PBX, sólo es cuestión de invocarla desde cualquier módulo de la PBX, como por ejemplo un IVR:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_route_frompbx4.png" alt=""><figcaption></figcaption></figure>

*Figura 5: Derivación a OMniLeads desde IVR*

Si bien en la figura anterior se ejemplifica la derivación de llamadas hacia campañas entrantes de OMniLeads desde un IVR de la PBX, podemos concluir que también las extensiones de la PBX pueden marcar o transferir llamadas hacia OMniLeads, así como también módulos de la PBX como condiciones horarias, follow me, rutas entrantes, etc. podrán invocar una *extensión custom* de la PBX que derive llamadas hacia OMniLeads.


# Enrutamiento condicionado por rango de tiempo

## Enrutamiento condicionado por rango de tiempo

En ésta sección, se trabaja con el concepto de *Enrutamiento de llamadas entrantes condicionado por rango de tiempo*, para configurar el flujo de llamadas entrantes hacia diferentes destinos internos, a partir de comparar la fecha/hora en que llega una llamada y un patrón (de fechas y horas) relacionado, de manera tal que se pueda planificar de antemano si una llamada debe ir hacia un destino u otro de acuerdo al resultado de dicha comparación.

Por ejemplo, una llamada podría ir hacia una campaña entrante *dentro del rango de fecha y horario de atención al cliente* y hacia un IVR que reproduzca un anuncio acerca de los horarios de atención, cuando la llamada ingrese fuera de ese rango definido.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_tc_diagrama.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Condición de tiempo*

Existen 2 módulos que trabajan en conjunto y que permiten implementar éste tipo de configuraciones, los cuales se detallan a continuación.

### Grupos horarios

Éste módulo permite agrupar patrones de fechas y horas como un objeto, para luego poder ser invocados por los objetos del tipo condicionales de tiempo.

Para definir o editar grupos de horarios, se debe acceder al menú *Recursos -> Grupos horarios*. Para añadir un nuevo grupo se debe presionar el botón «Nuevo».

La pantalla de grupos horarios se expone en la siguiente figura:

<figure><img src="/files/V1BdtsSpLjmannd3779x" alt=""><figcaption></figcaption></figure>

*Figure 2: Grupos horarios*

Una vez generados los *grupos horarios*, podemos invocarlos desde el módulo complementario *Validaciones horarias*.

### Validaciones horarias

Éste módulo permite comparar la fecha y hora en el momento de procesar una llamada, con un grupo horario asignado como patrón de comparación. Luego, en base a la coincidencia o no con alguna franja de fecha/hora del grupo, la llamada se envía hacia el destino positivo o negativo de la comparación.

Un *nodo* condicional de ésta clase puede ser invocado por otros nodos:

* Rutas entrantes
* Opción de IVR
* Failover de una campaña entrante
* Otro condicional de tiempo

Para generar un elemento condicional de tiempo, se debe acceder al menú *Telefonía -> Validaciones horarias*.

La pantalla de configuración es similar a la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_tc2.png" alt=""><figcaption></figcaption></figure>

*Figure 3: Validaciones horarias*

Finalmente, tenemos disponible éste elemento de enrutamiento para ser utilizado por ejemplo, como destino de una ruta entrante.


# IVR - Interactive Voice Response

## IVR - Interactive Voice Response

Los IVRs hacen posible que la persona que realiza una llamada entrante, pueda seleccionar un destino apropiado en base a informar los mismos a través de una grabación y aguardando la interacción a través de los tonos de teclado DTMF. Con ésta herramienta, un administrador puede enrutar llamadas entrantes hacia un IVR y configurar el mismo para que diferentes DTMFs se conmuten hacia diferentes campañas entrantes, IVRs, condicionales de fecha y hora, etc.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_in_ivr_diagrama.png" alt=""><figcaption></figcaption></figure>

*Figura 1: IVR*

Para generar un nuevo IVR, se necesita como mínimo un audio a reproducir (disponible en la biblioteca de audios) y además un destino por defecto hacia donde enviar las llamadas que pasen por dicho IVR.

Para añadir un IVR, se debe acceder al menú *Telefonía -> IVR*, y seleccionar «Agregar IVR». Se desplegará una pantalla similar a la siguiente figura:

<figure><img src="/files/NSCK10qJo0Stgh75NfqL" alt=""><figcaption></figcaption></figure>

*Figure 2: Parámetros de IVR*

<figure><img src="/files/9GQfdzNlU5DgBreoYY0U" alt=""><figcaption></figcaption></figure>

El formulario se puede dividir en 3 secciones, donde la primera sección contiene los siguientes campos:

* **Nombre:** Es el nombre del objeto, con el cual se referencia en el listado de IVRs.
* **Descripción:** Campo opcional dedicado a un comentario aclaratorio sobre el objeto.
* **Archivo interno:** Se selecciona ésta opción en caso de querer seleccionar como audio principal del IVR, un archivo previamente subido por el módulo de audios de OML.
* **Archivo externo:** Se selecciona ésta opción en caso de querer seleccionar como audio principal del IVR, un archivo y subirlo en el mismo instante al sistema.

Luego siguen las secciones para configurar acciones de timeout y opciones inválidas:

* **Time out:** Es la cantidad de segundos que se aguarda a que el «llamante» introduzca un DTMF a partir de la finalización de la reproducción del audio del IVR.
* **Time out retries:** Es la cantidad de intentos que el IVR ofrece al «llamante», a la hora de dar falla por «timeout». Es decir, se permite una cierta cantidad de intentos fallidos por timeout, para luego ejecutar la acción referenciada en «Tipo de destino para time out».
* **Time out audio:** Cada vez que se da un timeout por no ingreso de DTMF, se puede reproducir un audio subido previamente al módulo de audio de OML, que indique el error.
* **Time out ext audio:** Cada vez que se da un timeout por no ingreso de DTMF, se puede reproducir un audio que se puede seleccionar y subir en el momento, que indique el error.
* **Tipo de destino time out:** En caso de cumplirse la cantidad de «retries» de timeout, la llamada es enviada por el IVR hacia el tipo de destino por defecto para los timeouts de IVR. En éste campo se indica dicha clase de destino.
* **Destino time out:** Finalmente, se selecciona puntualmente el objeto dentro de la familia de tipo de destino.
* **Invalid retries:** Es la cantidad de intentos que el IVR ofrece al «llamante» a la hora de dar falla de destino ingresado inválido. Es decir, se permite una cierta cantidad de intentos fallidos por opción inválida, para luego ejecutar la acción referenciada en «Tipo de destino para destino inválido».
* **Invalid audio:** Cada vez que se da un ingreso de opción inválida, se puede reproducir un audio subido previamente al módulo de audio de OML, que indique el error.
* **Invalid destination ext audio:** Cada vez que se da un ingreso de opción inválida, se puede reproducir un audio que se puede seleccionar y subir en el momento, que indique el error.
* **Tipo de destino para destino inválido:** En caso de cumplirse la cantidad de «retries» de opción incorrecta, la llamada es enviada por el IVR hacia el tipo de destino por defecto para los ingresos de opciones incorrectas del IVR. En éste campo se indica dicha clase de destino.
* **Destino inválido:** Finalmente, se selecciona puntualmente el objeto dentro de la familia de tipo de destino.

Finalmente, la tercera sección despliega tantas filas como opciones de DMTF implique el IVR.

Por cada fila, se puede asignar un DTMF a un destino de conmutación de la llamada.

Como bien se conoce, la idea es seleccionar un «tipo de destino» y un «destino particular dentro del tipo», para cada DTMF del IVR que se brinda como opción.

Finalmente, al seleccionar el botón guardar, se dispondrá del IVR.

> Nota
>
> Es posible anidar un IVR dentro de otro.


# Identificación de llamada entrante

## Identificación de llamada entrante

### Presentación

Dentro del flujo de una llamada entrante, se puede añadir un nodo con la funcionalidad de *identificación de clientes*. Es decir, lanzar una *solicitud de identificación* sobre cada llamada entrante procesada, implementando a su vez la posibilidad de consultar a un sistema de gestión CRM externo y aguardar que éste último determine una decisión de encaminamiento de las llamadas entrantes provenientes del exterior, a través de una interacción entre OMniLeads y dicho sistema de gestión.

En su funcionamiento más básico, el módulo implementa la posibilidad de solicitar la identificación de un cliente que se ha comunicado a la compañía mediante el ingreso de tonos del teléfono *DTMF*, luego se comprueba si se ha ingresado algún valor, y finalmente se envía la llamada hacia un destino concreto en caso positivo, y hacia otro destino si el resultado fue negativo. Si la configuración involucra interacción con CRM, entonces el módulo envía el *número ingresado* por el cliente hacia el CRM y espera por una respuesta de éste mismo, para decidir hacia donde encaminar la llamada.

En ambos escenarios (modo básico y modo interactivo con CRM), se consigue que la llamada ingrese al agente con el *ID del cliente* como índice para obtener toda la información del cliente y desplegarlo en la pantalla de agente (ya sea sobre la vista de contacto o en el CRM externo configurado para la campaña).

El módulo permite 3 modos de funcionamiento, los cuales se explican a continuación.

### Sólamente solicitar identificación

Bajo ésta configuración, cuando una llamada entrante es enviada hacia éste nodo, se lanza una solicitud de identificación a través de un audio reproducido sobre el canal telefónico del cliente que originó la llamada, para luego simplemente validar si el cliente ingresó o no un valor, y así tomar una decisión de encaminamiento hacia las 2 alternativas posibles: *Destino A* si se ha ingresado una identificación, o *Destino B* si el llamante no lo hizo.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/customer_id_mode_1.png" alt=""><figcaption></figcaption></figure>

*Figura 1: ID de cliente sin interacción con CRM*

### Solicitar identificación, notificar al CRM y aguardar respuesta *true/false*

Bajo ésta configuración, cuando una llamada entrante es enviada hacia éste nodo, se lanza una solicitud de identificación a través de un audio reproducido sobre el canal telefónico del cliente que originó la llamada, para luego lanzar una consulta hacia un servicio web (CRM) previamente configurado.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/customer_id_mode_2.png" alt=""><figcaption></figcaption></figure>

*Figura 2: ID de cliente con interacción true/false con CRM*

Aquí, el sistema de gestión CRM toma partido en lo que respecta al encaminamiento de los clientes que llaman a la compañía, ya que a partir de recibir desde OMniLeads la *clave de identificación del llamante*, el CRM debe responder al *request* recibido con una respuesta del tipo *true/false*, por lo cual OMniLeads luego debe encaminar las llamadas hacia cada uno de los 2 posibles destinos previamente configurados (*Destino A* si el CRM devuelve *true* o *Destino B* si el CRM devuelve *false*).

Un ejemplo podría ser el de una compañía que comprueba si el «número de cliente» se encuentra al día con los pagos del servicio, y en base a ello encaminar la llamada hacia una campaña con mayor o menor prioridad en términos de tiempo de espera en cola.

### Solicitar identificación, notificar al CRM y aguardar respuesta *destino de la llamada*

Bajo éste modo, cuando una llamada entrante invoca la ejecución del nodo, éste último procede con la solicitud de identificación para luego validar si el cliente ingresó o no un valor, y en caso de haber ingresado, se ejecuta una consulta hacia un servicio web (CRM) previamente configurado.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/customer_id_mode_3.png" alt=""><figcaption></figcaption></figure>

*Figura 3: ID de cliente con interacción destino elegido CRM*

El sistema de gestión CRM toma partido respecto al encaminamiento de un cliente que llama a la compañía, ya que a partir de recibir de OMniLeads en tiempo real la *clave de identificación del llamante*, éste debe responder al *request* recibido con una respuesta que contenga el nodo destino de OMniLeads hacia donde encaminar las llamadas, siendo posibles una campaña entrante, un IVR, una validación de tiempo, un destino personalizado, etc.

Un aplicación de esta funcionalidad podría ser, notificar al CRM acerca del *número de cliente* ingresado y que éste último decida hacia qué campaña entrante de OMniLeads enviar la llamada, utilizando como criterio el plan de suscripción que tiene contratado ese *número de cliente*.

### Crear un nuevo punto de solicitud de identificación de clientes

Para generar un nuevo nodo, se debe acceder al menú *Telefonía -> Identificación de clientes*:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/customer_id_mode_form.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Formulario de identificador de clientes*

A continuación, se detallan los campos del formulario:

* **Nombre:** Nombre de referencia del nodo.
* **Tipo de interacción:**
  * Sin interacción: Sólo se comprueba si hubo o no un ingreso y su longitud.
  * Interacción externa tipo 1: Se envía ID de cliente y se espera «true/false» como respuesta.
  * Interacción externa tipo 2: Se envía ID de cliente y se espera un destino como respuesta.
* **URL servicio identificación:** Aquí, se indica la dirección web del servicio hacia donde enviar el número de identificación.
* **Audio:** Se trata del audio que se reproduce sobre la llamada entrante, para solicitar la identificación.
* **Logitud de ID esperado:** Se puede indicar el largo esperado del código de identificación.
* **Timeout:** El tiempo en segundos que el sistema espera a que se ingrese la identificación. En caso de expirar éste tiempo, se comprueba si ya se ha sobrepasado la cantidad de re-intentos para así ejecutar una nueva petición o derivar la llamada hacia el destino no exitoso.
* **Intentos:** La cantidad de intentos erróneos que se permiten al ingresar la identificación.
* **Destino si se identifica correctamente:** Tipo de destino y destino puntual para dicho tipo, al que se derivan las llamadas «positivas» en los tipos de interacción «sin interacción» e «interacción externa tipo 1».
* **Destino si NO se identifica correctamente:** Tipo de destino y destino puntual para dicho tipo, al que se derivan las llamadas «negativas» en los tipos de interacción «sin interacción» e «interacción externa tipo 1».

Importante

Para poder implementar los modos que implican enviar la identificación hacia un servicio web externo, aguardando una respuesta del mismo para luego ejecutar el encaminamiento de la llamada, depende de que el sistema de gestión implemente un servicio web para recibir las peticiones de éste tipo.

Para los desarrolladores que deseen habilitar en el sistema de gestión éste tipo de interacción, pueden encontrar el formato en que OMniLeads envía la identificación hacia el servicio web en la siguiente sección: [Solicitud de enrutamiento hacia el sistema CRM externo](https://documentacion-omnileads.readthedocs.io/es/latest/campaigns_inbound_customer_id.html#about-customer-id-request).

### Solicitud de enrutamiento hacia el sistema CRM externo

Ésta interacción implica que OMniLeads ejecute una solicitud HTTP-POST (plain/text) hacia la URL del sistema de gestión especificado dentro del módulo [Crear un nuevo punto de solicitud de identificación de clientes](https://documentacion-omnileads.readthedocs.io/es/latest/campaigns_inbound_customer_id.html#about-customer-id-form), es decir en la definición de un nodo «identificación de clientes».

Éste POST enviado hacia el sistema de gestión CRM, tiene el siguiente aspecto:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/api_customerid_post.png" alt=""><figcaption></figcaption></figure>

Como podemos observar el campo «User-Agent» debe llegar como «OMniLeads», y en el cuerpo del POST, el número de identificación ingresado en la llamada se envía como «idContact».

**Respuesta que debe generar el servicio web del sistema de gestión CRM**

El servicio recibe de OMniLeads el request HTTP-POST con el número de identificación del cliente, y debe generar una respuesta a dicha solicitud. El sistema tiene la posibilidad de generar 3 tipos de respuestas:

* **true**
* **false**
* **X,Y**: Donde «X» es un número entero y se corresponde con el tipo de destino hacia a donde enviar la llamada identificada, y donde «Y» es el destino puntual para ese tipo de destino. Por ejemplo (1,3) indica que la llamada será enrutada hacia una campaña entrante (1) y puntualmente hacia la campaña entrante cuyo ID es (3). La clave asociada a la respuesta es «response».

El formato de respuesta debe ser «JSON».

* Respuesta JSON

  ```
  Content-Type: application/json
  HTTP/1.1 200 OK

   {
     "status": "ok",
     "destination": "value"
   }
  ```

Donde «status» puede ser *ok* o *fail*, y «destination» podrá ser cualquiera de las 3 respuestas especificadas arriba.

Importante

El sistema debe respetar el formato y nombre de parámetros (status y destination).

En caso de generar una respuesta con el destino del enrutamiento, se deben conocer los tipos de destino:

* 1: Campaña entrante.
* 2: Validación horaria.
* 3: IVR.
* 5: Hangup de la llamada.
* 9: Solicitud de identificación.

En un futuro se implementará un endpoint de la API para listar cada destino posible por cada tipo de destino. Mientras tanto, el desarrollador que desee implementar el enrutamiento de llamadas basado en la identificación ingresada en la llamada y el request generado desde OMniLeads, podrá ingresar a la interfaz de OMniLeads y en cada módulo (tipo de destino) listar los mismos y observar el ID.

**Ejemplo de respuesta con destino de llamada**

Se desea validar cada ID enviado desde OMniLeads y responder con 2 posibles tipos de destinos de enrutamiento. Por un lado una campaña entrante llamada «clientes gold» y otra llamada «clientes bronce».

Para ello, suponemos que existen las 2 campañas entrantes como se indica en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/api_customerid_choice_dst_1.png" alt=""><figcaption></figcaption></figure>

Tan sólo con posicionar el mouse sobre el nombre de la campaña, podremos dilucidar el «id» particular de cada una.

Por lo tanto, a partir de conocer los «id» de cada campaña, el sistema de gestión a partir de su lógica de negocio, podrá evaluar cada llamada e indicar a OMniLeads hacia donde encaminarla devolviendo el par «X,Y».<br>


# Ejecución de dialplan personalizado

## Ejecución de dialplan personalizado

Resulta súmamente útil disponer de la posibilidad de poder forzar a que una llamada ejecute un «plan de discado» generado a imagen y semejanza de cualquier requerimiento puntual del modelo de negocios implicado.

Pero, ¿a qué nos referimos con **«plan de discado»**?

Como bien sabemos, OMniLeads utiliza [Asterisk](https://www.asterisk.org/) como pieza fundamental dentro del módulo de «gestión de llamadas telefónicas», y por lo tanto, cualquier programador con conocimientos de sintaxis de «dialplan» podrá generar sus propias rutinas de tratamiento de llamadas, pudiendo a su vez invocarlas dentro del flujo de llamadas de:

* Rutas entrantes
* Campañas entrantes
* Destinos de failover
* Rutas salientes
* Etc.

Por lo que se permite entonces, generar un «nodo» invocable dentro de una llamada procesada en OMniLeads, siendo éste «nodo», lógica de programación de Asterisk, personalizada de acuerdo a cualquier necesidad puntual que esté por afuera del alcance de los módulos típicos del sistema.

Por ejemplo, a la hora de tener que lanzar un IVR que implique algún tratamiento avanzado de las llamadas entrantes (sistemas de autogestión o confirmación de trámites).

### Modo de configuración

Para crear un destino personalizado, se debe acceder al menú *Telefonía -> Destinos personalizados*.

El módulo «destino personalizado» simplemente involucra un formulario sencillo donde se indica el nombre del nodo de «dialplan personalizado» y la tríada:

* Contexto
* Extensión
* Prioridad

Además, contamos con la necesidad de indicar un destino en caso de fallo.

Todo ésto, se visualiza en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_custom_dst.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Formulario de destino personalizado*

Por otro lado, el programador podrá generar su código a nivel archivo de texto «oml\_extensions\_custom.conf». Éste será cargado en tiempo real y también tenido en cuenta a la hora de generar los Backup\&Restore de la plataforma.

### Ejemplo

Vamos a implementar un dialplan como el siguiente:

```
[omnileads_custom]
exten => s,1,Verbose(*** Ejemplo de destino personalizado ***)
same => n,Answer()
same => n,Playback(demo-congrats)
same => n,Hangup()
```

Por lo tanto, por un lado generamos el dialplan citado en el archivo «oml\_extensions\_custom.conf» ubicado en «/opt/omnileads/asterisk/etc/asterisk».

Luego, debemos generar el «nodo» destino personalizado, sobre la interfaz de configuración de OMniLeads:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_custom_dst_example.png" alt=""><figcaption></figcaption></figure>

*Figure 2: Ejemplo de destino personalizado*

Finalmente, podemos invocar a nuestro nodo, desde una opción del IVR, validación horaria o ruta entrante:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/telephony_custom_dst_example_2.png" alt=""><figcaption></figcaption></figure>

*Figure 3: Ejemplo de destino personalizado*


# Campaña Manual

## Creación de campaña manual

Para crear una nueva campaña manual, se debe ingresar al menú *Campañas -> Campañas manuales -> Nueva campaña*. El proceso de creación consta de un wizard de 2 pantallas.

La primera pantalla nos invita a indicar una serie de parámetros de la campaña, como lo indica la siguiente figura:

<figure><img src="/files/vKe7GZzUXi6AGNghLY5T" alt=""><figcaption></figcaption></figure>

*Figura 1: Parámetros de la campaña*

* **Canalidad de la campaña:** son las canalidades que se aceptarán en la campaña. Visite la sección de [Whatsapp Business](/configuracion-whatsapp-business) para configurar correctamente la canalidad de Whatsapp.
* **Nombre:** Nombre de la campaña.
* **Base de datos de contactos:** Se utiliza para desplegar datos extras al teléfono, a la hora de ejecutar una llamada a un contacto de la campaña.
* **Control de Duplicados:** Se utiliza para controlar registros duplicados en bases de datos. Las opciones son: Permitir Duplicados / Evitar Duplicados.
* **Tipo de interacción:** Indica si la campaña va a operar con formularios de OMniLeads,  con la invocación hacia un CRM (URL Externa) por cada llamada conectada, o con ambos métodos al mismo tiempo.
* **URL externa:** En caso de haber seleccionado la invocación a una URL externa en cada llamada, aquí se indica cuál de los CRMs definidos debe invocar la campaña.
* **Campo de Dirección:** En caso de tener activada la integración con ***Google API***, esta opción permite seleccionar el campo de la base de datos que servirá de **Geolocalización del Contacto**. El mapa asociado se incluirá dentro de la ficha en la Consola de Agente.

<figure><img src="/files/ZESJLyb2roB7vwUVPWOK" alt=""><figcaption><p>Geolocalización</p></figcaption></figure>

* **Grabar llamados:** Habilitar la grabación de todas las llamadas que se cursen por la campaña.
* **Objetivo:** Se define como la cantidad de *gestiones positivas* que se esperan para la campaña. En la supervisión de la campaña se muestra en tiempo real el porcentaje de avance de la campaña respecto al objetivo definido.
* **Sistema externo:** Aquí se adjudica el sistema de gestión externo que ejecutaría «click to call» sobre la campaña, en caso de así desearlo.
* **ID en sistema externo:** Éste campo debe contener el ID que posee la campaña dentro del sistema de gestión externo desde el cual llegarán los «click to call» o «solicitudes de calificación».
* **Ruta saliente:** Se le asigna una ruta saliente existente a una campaña.
* **CID ruta saliente:** Éste campo debe contener el CID asignado para una ruta saliente existente a una campaña.
* **Speech:** El speech de campaña para ser desplegado en la consola de agente en las llamadas de la campaña.

<mark style="color:green;">Nota</mark>

<mark style="color:green;">El tema de la base de contactos en las campañas manuales (y también entrantes) plantea un escenario flexible, ya que es opcional el hecho de asignar una base de contactos a éste tipo de campañas. En éste caso, la base de contactos es utilizada si deseamos que cada vez que un agente marca un teléfono que corresponde con un contacto de la base, se puedan recuperar los datos (columnas extras al teléfono) del mismo. Además, el hecho de trabajar con una base de contactos en una campaña manual permite calificar cada contacto llamado.</mark>

En la segunda pantalla se deben asignar las calificaciones que se requieran para que los agentes puedan clasificar cada llamada realizada al contacto.&#x20;

*IMPORTANTE: No se puede cambiar el Formulario de Gestión previamente seleccionado en el Wizard de Opciones de Calificación, si la Calificación de Gestión ya ha sido utilizada en la campaña.*

Como se puede apreciar en la siguiente figura, en nuestro ejemplo manejamos 2 calificaciones que disparan 2 formularios diferentes:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_calldispositions_add.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Calificaciones de campaña*

En los siguientes pasos, se pueden añadir supervisores y agentes a nuestra campaña:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_manual_wizard_3.png" alt=""><figcaption></figcaption></figure>

*Figura 3: Asignación de agentes*

## Interacción de agente con campaña

Finalmente, contamos con nuestra nueva campaña manual. Cuando un agente asignado a la misma realice un login a la plataforma y comience a marcar llamadas desde su webphone, el sistema le permitirá seleccionar la campaña sobre la cual va a asignar cada llamada manual generada desde el webphone, tal como se expone en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_manual_agconsole1.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Selección de llamada manual a campaña*

Cuando un agente se encuentra online y marca un teléfono correspondiente a un contacto de la base de la campaña, el contacto cuyo teléfono coincide con el teléfono marcado por el agente, es desplegado como contacto a seleccionar y así despliega sus datos en la pantalla de agente. También se permite generar un nuevo contacto. Entonces, el agente puede, o bien confirmar que la llamada se dispara hacia el contacto listado, o bien crear un nuevo contacto y marcarlo. Los datos (extras al teléfono) del contacto son desplegados en la pantalla de agente:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_manual_agconsole2.png" alt=""><figcaption></figcaption></figure>

*Figura 5: Selección de contacto*

Si se selecciona llamar al contacto listado, entonces los datos del mismo son desplegados en pantalla, como lo expone la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_manual_agconsole3.png" alt=""><figcaption></figcaption></figure>

*Figura 6: Datos del contacto*

De ésta manera, el agente puede asignar una calificación sobre el contacto llamado, como se muestra en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_manual_agconsole4.png" alt=""><figcaption></figcaption></figure>

*Figura 7: Calificación de contactos*

Por otro lado, si el teléfono marcado no corresponde a ningún contacto de la base, entonces el sistema permite al agente buscar el contacto en la base o generar un nuevo contacto. En caso de tratarse de una campaña sin base de contactos, entonces cada llamado que realice un agente implica que se genere el contacto asociado a la llamada marcada, como se aprecia en las siguientes 2 figuras:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_manual_agconsole5.png" alt=""><figcaption></figcaption></figure>

*Figura 8: Añadir un nuevo contacto a la base de datos de la campaña 1*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_manual_agconsole6.png" alt=""><figcaption></figcaption></figure>

*Figura 9: Añadir un nuevo contacto a la base de datos de la campaña 2*

Entonces, al momento de marcar a un número que no devuelva un contacto, el agente pasará por una vista en la que primero debe añadir el contacto como un registro de la base de la campaña para luego marcar. Finalmente, se despliegan el nuevo contacto y la opción de clasificar la llamada con alguna calificación, como se aprecia en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_manual_agconsole7.png" alt=""><figcaption></figcaption></figure>

*Figura 10: Nuevo contacto llamado*

## Campaña con base de datos multinum

Como sabemos, OMniLeads admite que cada contacto de una base posea «n» números de teléfono de contacto, de manera tal que si el contacto no es encontrado en su número principal (el primero de nuestro archivo CSV de base), pueda ser contactado a los demás números. En este caso, cada número de teléfono (que indicamos en la carga de la base) se genera como un link dentro de los datos del contacto presentados sobre la pantalla de agente. Al hacer click sobre dicho enlace, se dispara una llamada hacia el número de teléfono extra del contacto. En la siguiente figura se muestra dicho escenario:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_agconsole3.png" alt=""><figcaption></figcaption></figure>

*Figura 11: Base de contactos multinum*

Por lo tanto, el agente puede intentar contactar a todos los números disponibles como «link» en la ficha del contacto, hasta finalmente calificar y pasar a uno nuevo.


# Campaña Preview

## Creación de campaña preview

Para crear una nueva campaña preview, se debe ingresar al menú *Campañas -> Campañas preview -> Nueva campaña*. El proceso de creación consta de un wizard de 2 pantallas.

En la primera etapa, se deben indicar una serie de parámetros de campaña, como lo indica la siguiente figura:

<figure><img src="/files/QR7K0xU3DySGX69GYHZA" alt=""><figcaption></figcaption></figure>

*Figura 1: Parámetros de la campaña*

* **Canalidad de la campaña:** son las canalidades que se aceptarán en la campaña. Visite la sección de [Whatsapp Business](/configuracion-whatsapp-business) para configurar correctamente la canalidad de Whatsapp.
* **Nombre:** Nombre de la campaña.
* **Base de datos de contactos:** La base de contactos que utilzará el discador preview a la hora de entregar contactos bajo demanda a cada agente.
* **Control de Duplicados:** Se utiliza para controlar registros duplicados en bases de datos. Las opciones son: Permitir Duplicados / Evitar Duplicados.
* **Tipo de interacción:** Indica si la campaña va a operar con formularios de OMniLeads,  con la invocación hacia un CRM (URL Externa) por cada llamada conectada, o con ambos métodos al mismo tiempo.
* **URL externa:** En caso de haber seleccionado la invocación a una URL externa en cada llamada, aquí se indica cuál de los CRMs definidos debe invocar la campaña.
* **Campo de Dirección:** En caso de tener activada la integración con ***Google API***, esta opción permite seleccionar el campo de la base de datos que servirá de **Geolocalización del Contacto**. El mapa asociado se incluirá dentro de la ficha en la Consola de Agente.

<figure><img src="/files/5t8l06rhOPwaM33kGhu0" alt=""><figcaption><p>Geolocalización</p></figcaption></figure>

* **Grabar llamados:** Habilita que todas las llamadas de la campaña sean grabadas.
* **Objetivo:** Se define como la cantidad de *gestiones positivas* esperadas en la campaña. En la supervisión de la campaña, se muestra en tiempo real el porcentaje de avance de la campaña respecto a éste objetivo definido.
* **Sistema externo:** Aquí se adjudica el sistema de gestión externo que ejecutaría «click to call» sobre la campaña, en caso de así desearlo.
* **ID en sistema externo:** Éste campo debe contener el ID que posee la campaña dentro del sistema de gestión externo, desde el cual llegarán los «click to call» o «solicitudes de calificación» de contactos.
* **Ruta saliente:** Se le asigna una ruta saliente existente a una campaña.
* **CID ruta saliente:** Éste campo debe contener el CID asignado para una ruta saliente existente a una campaña.
* **Tiempo de desconexión:** Es el tiempo que el *discador preview* reserva un contacto asignado a un agente, tiempo luego del cual el contacto se libera de manera tal que pueda ser demandado por otro agente.
* **Speech:** El speech de campaña para ser desplegado en la consola de agente en las llamadas de la campaña.

En la segunda pantalla, se deben asignar las calificaciones que se requieran como disponibles para los agentes a la hora de clasificar cada llamada a cada contacto.

*IMPORTANTE: No se puede cambiar el Formulario de Gestión previamente seleccionado en el Wizard de Opciones de Calificación, si la Calificación de Gestión ya ha sido utilizada en la campaña.*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_wizard_2.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Calificaciones de llamada*

Luego, resta asignar a los supervisores y agentes que podrán trabajar en la campaña. En las siguientes 2 figuras, se ejemplifica una asignación de agentes a una campaña:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_wizard_3.png" alt=""><figcaption></figcaption></figure>

*Figura 3: Asignación de supervisores*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_wizard_4.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Asignación de agentes*

Por último, en la etapa final del wizard, se permite opcionalmente realizar una pre-asignación de contacto a agentes. Ésta pre-asignación puede efectuarse de manera proporcional, tildando la opción "proporcionalmente" (los registros de la base de datos se dividen entre los agentes en bloques por partes iguales):

<figure><img src="/files/QUsL9JU7yQtTsgruKVEV" alt=""><figcaption></figcaption></figure>

*Figura 5: Asignación de contactos por defecto*

## Asignación de contactos

Si se selecciona la opción de asignar proporcionalmente, el sistema realizará una asignación inicial y equitativa de contactos a cada uno de los agentes permitiendo que en la consola de agente, cuando el agente pida un contacto de la campaña, se le entreguen sólo contactos libres o de la lista de los que se le hayan asignados. Podemos ver un ejemplo de distribución usando la interfaz administrativa de Django en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_admin_proporcional.png" alt=""><figcaption></figcaption></figure>

*Figura 6: Distribución proporcional de contactos*

Al momento de seleccionar la opción de pre-asignación proporcional, el sistema muestra una nueva opción para asignar aleatoriamente:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_wizard_5_2.png" alt=""><figcaption></figcaption></figure>

*Figura 7: Nueva opción para asignar aleatoriamente*

Ésta opción, permite que los contactos sean asignados en orden aleatorio a los agentes, tal como se muestra a continuación:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_admin_aleatorio.png" alt=""><figcaption></figcaption></figure>

*Figura 8: Distribución proporcional y aleatoria de contacto*

Finalmente, nuestra campaña queda disponible para comenzar a operar. Por lo tanto, cuando los agentes asignados a la misma realicen un login a la plataforma, deberían disponer de la campaña preview, tal como se expone en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_agconsole1.png" alt=""><figcaption></figcaption></figure>

*Figura 9: Vista del agente de la campaña preview*

## Interacción de agente con campaña

Si el agente hace click sobre el teléfono, entonces se dispara la llamada, se visualizan los datos (extras al teléfono) del contacto llamado en la vista de agente, permitiendo a su vez al agente clasificar la llamada con alguna de las calificaciones asignadas a la campaña.

Por otro lado, el agente dispondrá de un recuadro con el histórico de calificaciones del registro llamado, con los detalles y observaciones en atenciones previas (es decir, su Customer Journey de campaña).

<figure><img src="/files/T7PMkRAmn6d5AUkgrZy3" alt=""><figcaption></figcaption></figure>

*Figura 10: Llamado al contacto*

## Campaña con base de datos multinum

Como sabemos, OMniLeads admite que cada contacto de una base posea «n» números de teléfono de contacto, de manera tal que si el contacto no es encontrado en su número principal (el primero de nuestro archivo CSV de base), pueda ser contactado a los demás números. En este caso, cada número de teléfono (que indicamos en la carga de la base) se genera como un link dentro de los datos del contacto presentados sobre la pantalla de agente. Al hacer click sobre dicho link, se disparará una llamada hacia el número de teléfono extra del contacto. En la siguiente figura, se muestra dicho escenario:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_prev_agconsole3.png" alt=""><figcaption></figcaption></figure>

*Figura 11: Base de datos multinum*

Por lo tanto, el agente puede intentar contactar a todos los números disponibles como «link» en la ficha del contacto, hasta finalmente calificar y pasar a uno nuevo.

## Gestión de la entrega de contactos

Una vez creada la campaña, los contactos disponibles para cada agente serán entregados siguiendo un orden establecido en el modelo AgenteEnContacto. Ésta funcionalidad permite editar ese orden usando la exportación/importación de archivos en formato .csv.

La idea es que el administrador puede descargarse el orden actual de contactos hacia un archivo .csv, reordenar las filas y luego importar dicho archivo, con lo cual el nuevo orden se impacta en el orden de la asignación de contactos a agentes en la campaña.

A ésta funcionalidad, se puede acceder usando el menú de la campaña preview, como se observa en las siguientes 2 figuras:

<figure><img src="/files/LNxPTEUKN2MuisQXHmrh" alt=""><figcaption></figcaption></figure>

*Figura 12: Acceso a la página de ordenamiento de entrega de contactos*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/reorder_contacts_page.png" alt=""><figcaption></figcaption></figure>

*Figura 13: Página de reordenamiento de entrega de contactos*

También, es posible marcar como desactivados los contactos que se desee, los cuales no serán entregados a ningún agente.

Ésto es posible definiendo en la misma vista un campo de desactivación para la campaña de entre las columnas de datos de la base de contactos, como se puede ver en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/deactivation_field.png" alt=""><figcaption></figcaption></figure>

*Figura 14: Campo de desactivación de contactos*

Importante

El campo a elegir debe tomarse en consideración en el formato del CSV al momento de importar la base de datos de contactos antes de adjuntarla a la campaña. No se permite agregar ni modificar los nombres de las columnas en el CSV a posteriori.

Después de realizar la exportación del orden actual de contactos, se puede editar la columna de desactivación con los valores 0 ó FALSE lo cual, luego de la importación del archivo .csv indicará al sistema que no se deben entregar esos contactos a ningún agente. Cualquier otro valor distinto a éstos, hace que el sistema asuma que el contacto puede entregarse.

## Actualizar Contactos

Un caso de uso muy interesante dentro del contexto de las campañas preview radica en la posibilidad de actualizar datos de interés "durante la gestión" (por ejemplo, Actualizaciones de Saldo Deudor para campañas de cobranzas).

Ingresando a *Opciones --> Actualizar Contactos*, ya es posible Exportar una foto de la base de datos de gestión actual, y proceder a Importarla con cambios (definiendo qué columnas estarán sujetas a las actualizaciones):

<figure><img src="/files/xUGNef7nYTy1OOF0tFlA" alt=""><figcaption></figcaption></figure>

De esta manera, un gestor podrá ver datos actualizados desde CRM de manera periódica y sin la necesidad de interrumpir la campaña para ello.

## Reciclados de Contactos

Por otro lado, si se accede a *Opciones --> Reciclar*, se podrá dar opción al adminisador de regenerar una nueva campaña (o rellamar sobre la existente), a partir de seleccionar las califciaciones de cierre que han tenido los registros.

En el caso de Reutilizar la campaña actual, tenemos la posibilidad de mantener el histórico de calificaciones con sus observaciones, tildando la opción "*Retomar Contactación"*.

<figure><img src="/files/7coL0O4j7ohd4msJ2pf4" alt=""><figcaption></figcaption></figure>


# Campaña Dialer

## Presentación

OMniLeads pone a disposición el concepto de *campañas con discado automático de llamadas*, a través de un discador predictivo.

**IMPORTANTE!**

Las primeras versiones del software contemplaban la integración con [WombatDialer](https://www.wombatdialer.com/). La utilización de éste software de terceros, está supeditada a la adquisición de la correspondiente licencia con el fabricante de dicho software.

A partir del [R*elease 2.5*,](/release-notes#user-content-release-notes---omnileads-250) el equipo de OMniLeads pone a disposición un nuevo módulo de Discador Automático propio y 100% Open Source, el **OMniDialer**! Si bien mantiene la compatibilidad con Wombat Dialer en su proceso de integración de aplicaciones (APIs), el discador propio es un hecho para todo aquel que requiera un dialer sin costo de licenciamiento.

Para seleccionar uno u otro motor de discado, referirse al [archivo de inventario](/instalacion-de-omnileads/deploy-utilizando-ansible) dentro de los métodos de instalación del producto.

Aclarado el tema del componente *engine dialer*, se procede con la explicación de los pasos necesarios a la hora de generar una campaña con discado predictivo.

## Creación de campaña dialer

Ingresar al menú *Campañas -> Campañas dialer -> Nueva campaña*, en donde se despliegan una secuencia de etapas de configuración.

La primera pantalla luce como la siguiente figura:

<figure><img src="/files/mulx2lHAcxgnSErBQrlB" alt=""><figcaption></figcaption></figure>

*Figura 1: Parámetros de campaña*

* **Canalidad de la campaña:** son las canalidades que se aceptarán en la campaña. Visite la sección de [Whatsapp Business](/configuracion-whatsapp-business) para configurar correctamente la canalidad de Whatsapp.
* **Nombre:** Nombre de la campaña.
* **Mostrar nombre al recibir llamado:** Se puede habilitar para que cada llamada conectada por el dialer al agente, implique la notificación del nombre de la campaña asociada a dicha llamada.
* **Base de datos de contactos:** La base de contactos que el discador utilizará para tomar contactos y generar llamadas.
* **Control de Duplicados:** Se utiliza para controlar registros duplicados en bases de datos. Las opciones son: Permitir Duplicados / Evitar Duplicados.
* **Fecha inicio:** Es la fecha en la que, estando activa la campaña y con agentes conectados, comenzará a discar.
* **Fecha fin:** Es la fecha en la que, estando activa la campaña y con agentes conectados, dejará de discar por más que queden números pendientes de marcar.
* **Campo de Dirección:** En caso de tener activada la integración con ***Google API***, esta opción permite seleccionar el campo de la base de datos que servirá de **Geolocalización del Contacto**. El mapa asociado se incluirá dentro de la ficha en la Consola de Agente.

<figure><img src="/files/0TsmeiVrfyHdYxQvx5JG" alt=""><figcaption></figcaption></figure>

* **Sistema externo:** Sistema de gestión externo que se admite para lanzar acciones de «click to call» o «calificación» sobre contactos de la campaña.
* **ID en sistema externo:** Éste campo debe contener el ID que posee la campaña dentro del sistema de gestión externo, desde el cual llegarán los «click to call» o «solicitudes de calificación».
* **Tipo de interacción:** Indica si la campaña va a operar con formularios de OMniLeads,  con la invocación hacia un CRM (URL Externa) por cada llamada conectada, o con ambos métodos al mismo tiempo.
* **URL externo:** URL (http-request) a disparar cada vez que el discador conecte una llamada hacia un agente.
* **Ruta saliente::** Se le asigna una ruta saliente existente a una campaña.
* **CID ruta saliente:** Éste campo, debe contener el CID asignado para una ruta saliente existente a una campaña.
* **Objetivo:** Se define como la cantidad de gestiones positivas que se esperan para la campaña. En la supervisión de la campaña, se muestra en tiempo real el porcentaje de avance de la campaña respecto al objetivo definido.
* **Prioridad:** Este campo permite asignar una prioridad de campaña, en el caso que se deban correr varias en simultáneo pero se desee asignar prioridad de discado a una en particular. Su valor por default es 10, y su rango de valores posible es de 1 a 100 (un valor menor implica menor prioridad).
* **Speech:** Speech de campaña para ser desplegado en la consola de agente en las llamadas de la campaña.

Una vez completados éstos campos, se debe dar click al botón «Paso siguiente», para continuar con la configuración de nuestra campaña.

En la siguiente pantalla se establecen más parámetros que modelan el comportamiento de la campaña, como lo expone la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_wizard2.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Parámetros de campaña*

* **Cantidad máxima de llamadas:** Cantidad de llamadas que se permiten poner en cola de espera mientras se aguarda por la disponibilidad de un agente. Por encima de ese número, la llamada será enviada a la acción de «failover».
* **Tiempo de descanso entre llamadas:** Es el tiempo de descanso (en segundos) que cada agente dispone entre cada llamada conectada por el discador.
* **Nivel de servicio:** Es un parámetro para medir cuántas de las llamadas fueron conectadas a un agente dentro de esa franja de tiempo (en segundos).
* **Estrategia de distribución:** Método de distribución de llamadas que usará la campaña sobre los agentes. Para campañas salientes, se recomienda RRMemory.
* **Importancia de campaña:** Es un parámetro lineal en la escala del 1 al 10, que implica cuán importante son las llamadas de esta campaña respecto a otras. Establece prioridades para los agentes que trabajan en varias campañas en simultáneo. Si se deja el valor en «0» (por defecto) se mantiene una equidad con el resto de las campañas.
* **Tiempo de espera en cola:** Es el tiempo (en segundos), que la llamada contactada quedará en cola de espera, aguardando que un agente se libere para conectarlo con la misma.
* **Grabar llamados:** Habilita que todas las llamadas de la campaña sean grabadas.
* **Detectar contestadores:** Habilita la detección de contestadores automáticos.
* **Audio para contestadores:** Se puede indicar la reproducción de un audio en caso que se detecte un contestador automático. Para que esté disponible el audio, debe subirse previamente desde el menú *Telefonía -> Audios -> Audios personalizados*, botón «Agregar».
* **Activar predictividad:** El discador ofrece una configuración que posibilita revisar estadísticas de efectividad de la campaña durante el desempeño de la misma. En función de esos resultados, ir variando la cantidad de llamadas generadas por agente disponible de manera tal que se eviten los tiempos muertos entre cada llamadas asignada por el discador a cada agente.
* **Factor de boost inicial:** Indica el valor por el cual se desea multiplicar el comportamiento de la predictividad. Por ejemplo, si el discador detectó que puede realizar 3 llamadas en simultáneo porque es el resultado que le arroja la estadística de comunicaciones exitosas, colocando «2» en el factor de boost inicial, se le pide al discador que duplique ese valor y realizará entonces 6 llamadas a la vez.
* **Dial timeout:** Es el tiempo (en segundos) de timbrado antes de mandar un CANCEL.
* **Anuncio de entrada para el agente:** Se puede seleccionar un audio para reproducir en el momento que ingresa una llamada de la campaña a un agente. Para que esté disponible el audio, debe subirse previamente desde el menú *Telefonía -> Audios -> Audios personalizados*, botón «Agregar».
* **Música de espera:** Se puede seleccionar una música de espera especialmente para la campaña, la cual será reproducida hasta que haya un agente disponible para atender el llamado, o bien hasta que se cumpla el tiempo de espera en cola y la llamada resulte dirigida al destino en caso de timeout. Para que la música de espera esté disponible, debe ser agregada previamente en el menú *Telefonía -> Audios -> Listas de música de espera*, botón «Agregar».
* **Destino en caso de timeout:** Destino hacia el cual se enviarán las llamadas que hayan sido expiradas sin conectar con un agente (el tiempo de espera agotado).

Luego de completar todos los campos, se debe presionar el botón «Paso siguiente».

En la siguiente pantalla, se configuran las opciones de calificación, seleccionando del desplegable una a una las calificaciones que se utilizarán para las llamadas dentro de la campaña. Además, se deberá indicar si se trata de una calificación de «Gestión» (la que dispara el formulario de campaña) o bien de una calificación «Sin acción» que simplemente clasifica el contacto.

*IMPORTANTE: No se puede cambiar el Formulario de Gestión previamente seleccionado en el Wizard de Opciones de Calificación, si la Calificación de Gestión ya ha sido utilizada en la campaña.*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_wizard3.png" alt=""><figcaption></figcaption></figure>

*Figura 3: Parámetros de campaña - Calificaciones*

Se guardan los cambios haciendo click en «Paso siguiente» y llegamos a la configuración que determina cuáles días de la semana y dentro de cuáles horarios la campaña efectuará llamados (siempre dentro del rango de fechas establecidas en el primer paso de la creación de la campaña):

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_wizard4.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Parámetros de campaña - Días y horas*

Se hace click en «Paso siguiente», y en éste caso se trabaja con las «reglas de incidencia», es decir bajo cuáles condiciones se reintentará contactar a números que dieron Ocupado, Contestador, No Contesta, Temporalmente fuera de cobertura, etc.:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_wizard5.png" alt=""><figcaption></figcaption></figure>

*Figura 5: Parámetros de campaña - Reglas de incidencia*

Como se puede observar en la figura anterior, los campos a completar permiten determinar cada cuántos segundos debe reintentarse la comunicación y cuántas veces como máximo se debe intentar según cada estado.

Los estados telefónicos que podrán reintentarse marcar automáticamente son:

* Ocupado.
* Contestador automático detectado.
* Destino no contesta.
* Llamada rechazada (Rechazado): Cuando la llamada no pudo ser cursada por problemas inherentes a la red telefónica externa.
* Timeout: Cuando la llamada se contactó, se conectó, pero ningún agente estuvo libre como para gestionar la misma.

Se hace click en «Paso siguiente» para asignar los supervisores de la campaña:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_wizard6.png" alt=""><figcaption></figcaption></figure>

*Figura 6: Parámetros de campaña - Supervisores*

Se hace click en «Paso siguiente» para asignar los agentes de la campaña:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_wizard7.png" alt=""><figcaption></figcaption></figure>

*Figura 7: Parámetros de campaña - Agentes*

Se hace click en «Paso siguiente» para llegar al último paso de la creación de la campaña:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_wizard8.png" alt=""><figcaption></figcaption></figure>

*Figura 8: Parámetros de campaña - Sincronizar*

En éste paso, simplemente se indican 3 opciones:

* **Evitar duplicados:** Seleccionar esta opción para evitar subir al discador registros con el teléfono principal duplicado.
* **Evitar sin teléfono:** Seleccionar esta opción para evitar subir al discador registros de la base de contacto que no posean un teléfono principal.
* **Prefijo discador:** Éste campo sirve para indicar al discador si debe anteponer algún prefijo delante de cada número de la base de contactos a la hora de discar cada llamada de la campaña.

Por último, hacemos click en el botón «Finalizar» para concretar la creación de nuestra campaña.

## Activación de campaña

La campaña recientemente creada, figura en el estado de *Inactiva*, dentro del listado de campañas predictivas, tal como se muestra en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_inactive.png" alt=""><figcaption></figcaption></figure>

*Figura 9: Campaña inactiva*

El administrador debe activar la campaña manualmente:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_activate.png" alt=""><figcaption></figcaption></figure>

*Figura 10: Activar campaña*

Luego de activar nuestra campaña, automáticamente pasamos a visualizarla en la sección de campañas activas, tal como se muestra en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_ready.png" alt=""><figcaption></figcaption></figure>

*Figura 11: Campañas activas*

En el momento en que un agente asignado a nuestra campaña predictiva ingrese a la plataforma, mientras sea dentro del rango de fecha y horario activo de la campaña, entonces el discador puede comenzar a generar llamadas y entregar éstas hacia los agentes activos en la campaña.

## Finalización de campañas dialer

Para determinar cuando una campaña predictiva está sin registros por marcar, se debe consultar el estado de la misma haciendo click en el nombre de la campaña, tal como se muestra en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_finish.png" alt=""><figcaption></figcaption></figure>

*Figura 12: Llamadas pendientes de campaña*

Cuando el valor «Llamadas pendientes» esté en 0, se debe presionar el botón «Finalizar campañas sin contactos por discar» para finalizar todas las campañas sin contactos por discar, tal como se muestra en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_finish2.png" alt=""><figcaption></figcaption></figure>

*Figura 13: Finalizar campañas sin contactos por discar*

O bien se pueden finalizar individualmente:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_finish3.png" alt=""><figcaption></figcaption></figure>

*Figura 14: Finalizar individualmente la campaña*

La campaña pasa entonces al listado de *Campañas finalizadas*.

## Reciclado y rotación de bases de contactos

Cada vez que una campaña predictiva se queda sin registros por marcar en su base de contactos, entonces nuestra campaña se puede re-utilizar mediante 2 posibilidades:

**1) Reciclar la base de contactos**

Ésta opción permite al administrador seleccionar contactos de la base con ciertas calificaciones efectuadas por agentes (sobre llamadas conectadas) así como también calificaciones efectuadas por el discador (sobre llamadas no contactadas -ocupado, no contesta, voicemail, etc.-), a la hora de formar un criterio para reciclar la base de contactos de la campaña actual, para que el discador vuelva a llamar a los contactos que caigan dentro de las calificaciones indicadas en el reciclado.

Para reciclar una campaña finalizada, debemos desplegar el menú «Opciones» de la campaña, y seleccionar «Reciclar», tal como se muestra en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_recycle1.png" alt=""><figcaption></figcaption></figure>

*Figura 15: Reciclado de campaña*

Allí se mostrarán las distintas calificaciones y podremos escoger entre 2 modos de reciclado:

> * *Reciclar sobre la misma campaña:* Volver a marcar a los contactos seleccionados desde la misma campaña.
> * *Reciclar sobre una nueva campaña clon:* Volver a marcar a los contactos seleccionados, pero sobre una nueva campaña similar a la original, y cuya base de contactos serán la resultante del reciclado.

Para completar el procedimiento, se deben seleccionar *las calificaciones* que se deasean volver a llamar, y luego pasar por las etapas de configuración de campañas predictivas en caso de necesitar ajustar cualquier parámetro de configuración de la campaña reciclada:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_recycle2.png" alt=""><figcaption></figcaption></figure>

*Figura 16: Reciclado, calificaciones de llamada*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_recycle3.png" alt=""><figcaption></figcaption></figure>

*Figura 17: Parametrización de campaña reciclada*

Al ejecutar el reciclado, la campaña se encuentra en estado de «Inactiva», por lo tanto resta activar la misma para que los contactos reciclados comiencen a ser marcados por el discador:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_recycle4.png" alt=""><figcaption></figcaption></figure>

*Figura 18: Activación de campaña reciclada*

**2) Reemplazar la base de contactos**

Una campaña puede sustituir su base por otra nueva. Ésto permite seguir operando con la misma campaña pero renovar la fuente de contactos a llamar. De ésta manera, se sigue el historial de reportes, grabaciones y demás estadísticas en una misma campaña.

Para llevar a cabo un cambio de base, la campaña debe estar pausada o bajo el estado de «finalizada». A partir de allí se indica la acción de «cambio de base» sobre la campaña en cuestión:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_changedb.png" alt=""><figcaption></figcaption></figure>

*Figura 19: Cambio de base de datos de contactos*

Esto desplegará una pantalla similar a la expuesta en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/campaigns_dialer_changedb2.png" alt=""><figcaption></figcaption></figure>

*Figura 20: Formulario de cambio de base de datos de contactos*

Importante

La estructura de la base de contactos que se puede utilizar como sustituta, debe ser similar a la base que se desea sustituir.

Una vez llevada a cabo la sustitución, es necesario activar nuevamente la campaña.


# Campaña de Whatsapp

&#x20;Si ya hemos efectuado la configuración de Whatsapp Business (ver sección [Configuración del Canal de Whatsap](/configuracion-whatsapp-business)[p](/configuracion-whatsapp-business)), estamos en condiciones de activar la nueva canalidad en una campaña.

Dado que se utilizará una Campaña Entrante como recipiente para la nueva canalidad, no se abordará una explicación exhaustiva de todos los campos del Wizard (los mismos ya han sido descriptos a detalle en la sección de [Creación de Una Campañ Entrante](/campanas-de-contacto/campana-entrante)). Sin embargo, se explicarán los campos concernientes a Whatsapp y sus configuraciones de campaña.

## Activando la Canalidad de Whatsapp

Para crear o editar una nueva campaña y proceder a la activación de la Canalidad de Whatsapp, se debe dirigir al menú *Campaña -> Campañas entrantes*.&#x20;

En los datos de Campaña, se debe activar el check sobre la canalidad de Whatsapp, como lo expone la siguiente figura.

<figure><img src="/files/yqsFUZdccjg29RicEqGg" alt=""><figcaption></figcaption></figure>

*Figura 1: Parámetros de campaña*

En la sección del Wizard "Configuración de Whatsapp", se procede a las particularidades de la canalidad de Whatsapp:

<figure><img src="/files/E2A68b0qfWEOUoIj6hFM" alt=""><figcaption></figcaption></figure>

* **Seleccione la Linea:** Aquí se selecciona la línea que será utilizada en las interacciones salientes (línea por la que serán conducidos los mensajes enviados por el agente).
* **Auto Respuesta:** Grupo de Plantillas previamente creado en el *Menú Recursos -> Grupo de Plantillas de Mensajes*. Estos mensajes serán puestos a disposición de los agentes de campaña para Respuestas Rápidas, o envío de Templates aprobados por Whatsapp.
* **Nivel de Servicio:** parámetro que servirá para medir el nivel de servicio esperado y sus tiempos de respuesta.&#x20;

El resto de los pasos del Wizard responden al ya conocido proceso de creación de una [campaña entrante](/campanas-de-contacto/campana-entrante).

Los Skills y comportamientos del agente frente a una interacción (o sus vistas activadas en consola) pueden personalizarse desde el *Menú Usuarios -> Grupos de Agentes.*

Para que el agente pueda interactuar con la canalidad de Whatsapp, **es preciso que el Grupo de Agentes al que pertenece tenga activado** **el permiso de uso de Whatsapp**. La siguiente figura presenta sus múltiples opciones:

<figure><img src="/files/6CaSVLujynkNbQ4eTiLB" alt=""><figcaption></figcaption></figure>

A partir de estos sencillos pasos, los agentes que pertenezcan a la campaña con Whatsapp activado estarán aptos para recibir (y enviar) mensajes de Whatsapp desde el Inbox General de Campaña.

Para mayor información sobre cómo un agente puede gestionar mensajes de Whatsapp, consulte la sección de [Gestión de Mensajes](/manual-de-agente/mensajes-de-whatsapp).


# Campaña de Meta Messenger

&#x20;Si ya hemos efectuado la configuración de Meta Messenger (ver sección [Configuración con Meta Messenger](/configuracion-de-meta-messenger/integracion-con-meta-messenger)), estamos en condiciones de activar la nueva canalidad en una campaña.

Dado que se utilizará una Campaña Entrante como recipiente para la nueva canalidad, no se abordará una explicación exhaustiva de todos los campos del Wizard (los mismos ya han sido descriptos a detalle en la sección de [Creación de Una Campaña Entrante](/campanas-de-contacto/campana-entrante)). Sin embargo, se explicarán los campos concernientes a **Meta Messenger** y sus configuraciones de campaña.

## Activando Redes Sociales

Para crear o editar una nueva campaña y proceder a la activación de la Canalidad de Meta Messenger, se debe dirigir al menú *Campaña -> Campañas entrantes*.&#x20;

En los datos de Campaña, se debe activar el check sobre la canalidad de Meta Messenger, como lo expone la siguiente figura.

<figure><img src="/files/yn2smf6WHiMUhjVcIo28" alt=""><figcaption></figcaption></figure>

*Figura 1: Parámetros de campaña*

En la sección del Wizard "Configuración de Meta Messenger", se procede a las particularidades de la canalidad de Facebook:

<figure><img src="/files/Th5Vnsk7J5wqcUlV1HPj" alt=""><figcaption></figcaption></figure>

* **Seleccione Landing Page:** Aquí se selecciona la *Página de Facebook* desde la cual se recibirán las interacciones.
* **Auto Respuesta:** Grupo de Plantillas previamente creado en el *Menú Recursos -> Grupo de Plantillas de Mensajes de Facebook*. Estos mensajes serán puestos a disposición de los agentes de campaña para Respuestas Rápidas.
* **Nivel de Servicio:** parámetro que servirá para medir el nivel de servicio esperado y sus tiempos de respuesta.&#x20;

El resto de los pasos del Wizard responden al ya conocido proceso de creación de una [campaña entrante](/campanas-de-contacto/campana-entrante).

Los Skills y comportamientos del agente frente a una interacción (o sus vistas activadas en consola) pueden personalizarse desde el *Menú Usuarios -> Grupos de Agentes.*

Para que el agente pueda interactuar con la canalidad de Meta Messenger, **es preciso que el Grupo de Agentes al que pertenece tenga activado** **el permiso de uso de la canalidad de Meta/Facebook**:

<figure><img src="/files/eIvlvZ0vAEMGzMKM3CGa" alt=""><figcaption></figcaption></figure>

A partir de estos sencillos pasos, los agentes que pertenezcan a la campaña con la canalidad de Meta Messenger activado estarán aptos para atender conversaciones de Messenger desde el Inbox General de Campaña.

Para mayor información sobre cómo un agente puede gestionar mensajes de Meta Messenger, consulte la sección de [Gestión de Messenger](/manual-de-agente/mensajes-de-messenger).


# Campaña de Instagram Messenger

&#x20;Si ya hemos efectuado la configuración de Instagram Messenger (ver sección [Configuración con Instagram](/configuracion-de-instagram)), estamos en condiciones de activar la nueva canalidad en una campaña.

Dado que se utilizará una Campaña Entrante como recipiente para la nueva canalidad, no se abordará una explicación exhaustiva de todos los campos del Wizard (los mismos ya han sido descriptos a detalle en la sección de [Creación de Una Campaña Entrante](/campanas-de-contacto/campana-entrante)). Sin embargo, se explicarán los campos concernientes a **Instagram Messenger** y sus configuraciones de campaña.

## Activando Redes Sociales

Para crear o editar una nueva campaña y proceder a la activación de la Canalidad de Meta Messenger, se debe dirigir al menú *Campaña -> Campañas entrantes*.&#x20;

En los datos de Campaña, se debe activar el check sobre la canalidad de Instagram Messenger, como lo expone la siguiente figura.

<figure><img src="/files/4jyZzlloktFf5QmCG8pn" alt=""><figcaption></figcaption></figure>

*Figura 1: Parámetros de campaña*

En la sección del Wizard "Configuración de Instagram", se procede a las particularidades de la canalidad de Instagram:

<figure><img src="/files/BY2Uir2cJLhMeiChIeJa" alt=""><figcaption></figcaption></figure>

* **Seleccione Cuenta Instagram:** Aquí se selecciona la *cuenta business* desde la cual se recibirán las interacciones.
* **Auto Respuesta:** Grupo de Plantillas previamente creado en el *Menú Recursos -> Grupo de Plantillas de Mensajes*. Estos mensajes serán puestos a disposición de los agentes de campaña para Respuestas Rápidas.
* **Nivel de Servicio:** parámetro que servirá para medir el nivel de servicio esperado y sus tiempos de respuesta.&#x20;

El resto de los pasos del Wizard responden al ya conocido proceso de creación de una [campaña entrante](/campanas-de-contacto/campana-entrante).

Los Skills y comportamientos del agente frente a una interacción (o sus vistas activadas en consola) pueden personalizarse desde el *Menú Usuarios -> Grupos de Agentes.*

Para que el agente pueda interactuar con la canalidad de Meta Messenger, **es preciso que el Grupo de Agentes al que pertenece tenga activado** **el permiso de uso de la canalidad de Instagram**:

<figure><img src="/files/sijpvcghbk2GkRC4Q6dw" alt=""><figcaption></figcaption></figure>

A partir de estos sencillos pasos, los agentes que pertenezcan a la campaña con la canalidad de Instagram Messenger activado estarán aptos para atender conversaciones de Messenger desde el Inbox General de Campaña.

Para mayor información sobre cómo un agente puede gestionar mensajes de Instagram Messenger, consulte la sección de [Gestión de Instagram](/manual-de-agente/mensajes-de-instagram).


# Campaña de Email Entrante

&#x20;Si ya hemos creado la cuenta de Email correctamente (ver sección [Configuración con Email](/configuracion-de-email-pro)), estamos en condiciones de activar la nueva canalidad en una campaña.

Dado que se utilizará una Campaña Entrante como recipiente para la nueva canalidad, no se abordará una explicación exhaustiva de todos los campos del Wizard (los mismos ya han sido descriptos a detalle en la sección de [Creación de Una Campaña Entrante](/campanas-de-contacto/campana-entrante)). Sin embargo, se explicarán los campos concernientes a **Email** y sus configuraciones de campaña.

## Activando Inbound Email

Para crear o editar una nueva campaña y proceder a la activación de la Canalidad de Email, se debe dirigir al menú *Campaña -> Campañas entrantes*.&#x20;

En los datos de Campaña, se debe activar el check sobre la canalidad de Email, como lo expone la siguiente figura.

<mark style="color:$warning;">IMPORTANTE: la base de datos que asigne o que cree debe contener un campo de email definido en su estructura, a los efectos de guardar información relacionada al remmitente.</mark>

<figure><img src="/files/xQ2gINLtiRpHywD1qWgD" alt=""><figcaption></figcaption></figure>

*Figura 1: Parámetros de campaña*

En la sección del Wizard "Configuración de Email", se procede a las particularidades de la canalidad en cuestión:

<figure><img src="/files/zeIjoF6CnyrCLf9BTMJ3" alt=""><figcaption></figcaption></figure>

* **Seleccione la Cuenta de Email:** Aquí se selecciona la *cuenta de correo* desde la cual se recibirán las interacciones.
* **Nivel de Servicio:** parámetro que servirá para medir el nivel de servicio esperado y sus tiempos de respuesta.&#x20;

El resto de los pasos del Wizard responden al ya conocido proceso de creación de una [campaña entrante](/campanas-de-contacto/campana-entrante).

Los Skills y comportamientos del agente frente a una interacción (o sus vistas activadas en consola) pueden personalizarse desde el *Menú Usuarios -> Grupos de Agentes.*

Para que el agente pueda interactuar con la canalidad de Meta Messenger, **es preciso que el Grupo de Agentes al que pertenece tenga activado** **el permiso de uso de la canalidad de Email**:

<figure><img src="/files/sijpvcghbk2GkRC4Q6dw" alt=""><figcaption></figcaption></figure>

A partir de estos sencillos pasos, los agentes que pertenezcan a la campaña con la canalidad de Email activado estarán aptos para gestionar correos desde el Inbox General de Campaña.

Para mayor información sobre cómo un agente puede gestionar correos, consulte la sección de [Gestión de Correos](/manual-de-agente/correos-electronicos).


# Manual de agente

{% embed url="<https://www.youtube.com/watch?v=GeHjW8Yk-WI>" %}

## Manual de agente

Vamos a dividir el manual de gestión del agente en los diferentes tópicos citados debajo.

### Sesión del agente

Todo lo inherente a la sesión del agente describimos en este inciso.

* [Login](#sesion-del-agente)
* [La consola de agente](/manual-de-agente/login-logout#la-consola-de-agente)
* [Pausas](/manual-de-agente/login-logout#pausas)
* [Logout](/manual-de-agente/login-logout#logout)

### Campañas manuales

El agente y la operación en campañas manuales.

* [Llamadas manuales desde listado de contactos](#campanas-manuales)
* [Llamadas manuales marcando desde el webphone](/manual-de-agente/llamadas-manuales-desde-listado-de-contactos#llamadas-manuales-marcando-desde-el-webphone)
* [Llamadas a números sin contacto existente](/manual-de-agente/llamadas-manuales-desde-listado-de-contactos#llamadas-a-numeros-sin-contacto-existente)

### Campañas preview

El agente y la operación en campañas preview.

* [Campañas preview](/campanas-de-contacto/campana-preview)

### Campañas dialer

El agente y la operación en campañas con discador predictivo.

* [Agente en modo predictivo](/manual-de-agente/llamadas-en-dialer)
* [Cómo realizar una llamada manual](/manual-de-agente/llamadas-en-dialer#como-realizar-una-llamada-manual)

### Campañas entrantes

El agente y la operación en campañas entrantes.

* [Atención de llamadas entrantes](/manual-de-agente/llamadas-entrantes)
* [Gestión de contactos](/manual-de-agente/llamadas-entrantes#gestion-de-contactos)

### Campañas de Whatsapp

El agente y la operación en campañas de Whatsapp.

* [Mensajes de Whatsapp](/manual-de-agente/mensajes-de-whatsapp)

### Acciones sobre las llamadas

Cuando un agente se encuentra en una llamada, cuenta con diferentes funcionalidades que optimizan la gestión de llamadas.

* [Llamadas hacia otros agentes](/manual-de-agente/llamadas-entre-agentes)
* [Llamadas externas sin campaña asociada](/manual-de-agente/llamadas-entre-agentes#llamadas-externas-sin-campana-asociada)
* [Poner en espera una llamada](/manual-de-agente/llamadas-entre-agentes#poner-en-espera-una-llamada)
* [Transferencias y conferencias](/manual-de-agente/llamadas-entre-agentes#transferencias-y-conferencias)
* [Observar grabación de llamada](/manual-de-agente/llamadas-entre-agentes#observar-grabacion-de-llamada)
* [Grabar llamada bajo demanda](/manual-de-agente/llamadas-entre-agentes#grabar-llamada-bajo-demanda)
* [Agendamiento de llamadas](/manual-de-agente/llamadas-entre-agentes#agendamiento-de-llamadas)

### Agendas, calificaciones y contactos

El agente cuenta con diferentes menús para el manejo de los contactos de las campañas.

* [Listado de contactos de la campaña](/manual-de-agente/listado-de-contactos)
* [Agendas pendientes](/manual-de-agente/listado-de-contactos#agendas-pendientes)
* [Histórico de calificaciones del agente](/manual-de-agente/listado-de-contactos#historico-de-calificaciones-del-agente)
* [Búsqueda de grabaciones del agente](/manual-de-agente/listado-de-contactos#busqueda-de-grabaciones-del-agente)<br>


# Login Logout

## Login

Para acceder a la aplicación se ingresa la URL de su instancia de OMniLeads en su browser.

Si la instancia de OMniLeads no dispone de certificados comerciales, al ingresar al sistema, el usuario se topa con la advertencia de seguridad correspondiente al ingreso a un sitio *HTTPS* con un certificado auto-firmado.

En ese caso, simplemente debe aceptar la advertencia y continuar, como lo indican las siguientes figuras:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_login_1.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Certificado no confiable*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_login_2.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Certificado no confiable*

Al avanzar sobre el sitio, se despliega la pantalla de login, en donde el agente deberá ingresar su usuario y contraseña para acceder a la aplicación:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_login_4.png" alt=""><figcaption></figcaption></figure>

*Figura 3: Pantalla de login*

Luego de un login exitoso, se despliega la interfaz de agente. Lo primero que debe suceder es una advertencia del browser que notifica que OMniLeads desea acceder al micrófono del ordenador. Por supuesto, el usuario debe permitir ésta acción, ya que precisa del micrófono para utilizar la aplicación a la hora de gestionar llamadas. Ésto, se muestra a continuación:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_login_5.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Permiso de acceso al micrófono*

Al permitir el acceso al micrófono, entonces se procede con el resto del login. Ésto implica la reproducción de un «audio» sobre el auricular del agente anunciando el login exitoso.

En caso el micrófono no esté funcional al sistema (sea debido a una acción voluntaria o involuntaria del agente), se observará un cartel de alerta impidiendo el correcto Login a la plataforma:

<figure><img src="/files/1j42o49SO4GmyOJvAz4r" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/R62VkNL5jyh2HysCYWHE" alt=""><figcaption></figcaption></figure>

Para este último caso, el Supervisor y/o Administrador tendrá la habilidad de verificar el estado incorrecto del agente a partir de la vista de Supervisión de agentes (Disabled-Unavailable):

<figure><img src="/files/gBaSTfGZqSIotUcxXs6Y" alt=""><figcaption></figcaption></figure>

Por otra parte, el agente debe visualizar el webphone desplegado y en estado «Registrado» como lo indica la siguiente figura:

<figure><img src="/files/wArIWxtu6KwikC1CEnxu" alt=""><figcaption></figcaption></figure>

*Figura 5: Agente registrado al sistema*

## La consola de agente

La consola de agente es el componente sobre el cual el agente de OMniLeads puede realizar toda la gestión. En la siguiente figura, se puede observar su aspecto y además se diseccionó en sub-componentes que son explicados a continuación:

<figure><img src="/files/oNUjS4TJjbhIPZz46hIT" alt=""><figcaption></figcaption></figure>

*Figura 6: Consola de agente de OMniLeads*

**Dashboard de agente**

Al ingresar el agente al sitio, va a visualizar en el espacio de contenido una vista en forma de Dashboard (componente 3) que muestra las siguientes estadísticas de agente del día actual:

* La lista de las últimas 10 llamadas recibidas/realizadas.
* El número de llamadas conectadas y un gráfico de pastel, mostrando la relación entre las llamadas entrantes y salientes.
* Los tiempos totales de pausa que ha tenido el agente y un gráfico de pastel que muestra la relación entre el tiempo de sesión total del agente y el tiempo total de pausa, discriminando entre Pausas Recreativas y Pausas Productivas.
* El número de las calificaciones de gestión que ha realizado el agente y un gráfico de pastel que muestra la relación entre las calificaciones de gestión realizadas y, de ellas, las marcadas como observadas por una auditoría.

Éste dashboard se actualiza periódicamente y permite al agente tener información personalizada de su desempeño en el día actual.

Por último, es importante destacar que la lista de llamadas que se visualizan en el dashboard muestra información de su calificación (en caso de que se haya calificado la llamada) e incluso del valor de la gestión, además de que se permite modificar dichos valores y realizar una llamada al contacto a través del número marcado que se muestra en el registro.

<figure><img src="/files/9mu9bLy3JnibZI3PEWdT" alt=""><figcaption></figcaption></figure>

*Figura 7: Dashboard*

**1) Dashboard y Vistas de Gestión de Contactos**

Ademáes del Dashboard previamente explicado, encontramos en este componente las funcionalidades que permiten navegar entre los contactos de la base de las campañas, visualizar los contactos agendados para ser llamados en el futuro, listar el histórico de todas las calificaciones que fue realizando el agente, y además acceder a las campañas del tipo preview para solicitar contactos para gestionar.&#x20;

A su vez, también es posible buscar y filtrar grabaciones propias del agente a los fines de apoyar su operatoria.

Es importante mencionar que cada vista descripta en este bloque puede ser tratada como privilegio de Grupo, y controlar así su aparición u ocultamiento en la consola del agente.

Todos éstos aspectos serán ampliados en las próximas secciones.

<figure><img src="/files/odpFQuXfYsu3jEXdL4l8" alt=""><figcaption></figcaption></figure>

**2) Barra de estado**

En esta barra tenemos información sobre la sesión.

En la barra de estado hay 2 cronómetros que van contabilizando la suma del tiempo de agente en pausa y en estado de Ready. Su color cambia de acuerdo a si el agente está en estado «Ready» (gris), «En llamada» (verde) o «En pausa» (amarillo), y además el estado también aparece como leyenda. Finalmente, aparecen los botones de pausa y des-pausa, para que el agente pueda irse a pausa y salir de la misma.

En caso que el Agente esté asignado a campañas preview, se anexa un botón que permite un "pulling" rápido de contactos para agilizar la gestión y funciona como un atajo a la vista de Campañas Preview.

<figure><img src="/files/rd9cjdCnxMhOsguwIO3S" alt=""><figcaption></figcaption></figure>

**3) Área de Operación**

En ésta sección de la pantalla, aparece toda la información que el agente va solicitando mientras navega en la gestión de contactos, así como también los datos de los contactos en el momento en que el agente procesa una nueva llamada.

<figure><img src="/files/tDAtcFYWijCvVuwHGerN" alt=""><figcaption></figcaption></figure>

**4) Webphone**

El webphone de OMniLeads es el componente principal dentro del módulo de telefonía. A continuación, vamos a repasar los botones del mismo:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_console_webphone.png" alt=""><figcaption></figcaption></figure>

*Figura 9: Webphone*

Vamos a dividir al webphone en 6 partes:

1. Estado del webphone. Debe siempre figurar como *Registered*. En caso contrario, debe comunicarse con el administrador.
2. Dialpad para marcar llamados manuales o enviar DTMFs sobre una llamada conectada.
3. Éstos botones permiten disparar acciones de llamar, cortar, re-llamar al último número por un lado, siendo el cuarto botón un método para «marcar» la grabación de la llamada con un comentario.
4. Ésta serie de botones permiten al agente efectuar acciones de realizar una transferencia de llamada, efectuar una conferencia con una tercera parte y poner la llamada en espera.
5. Éste botón permite modificar la campaña sobre la cual se procesa cada llamada manual. También, se abordará más adelante en la sección de «campañas manuales».
6. Éste botón permite efectuar una llamada hacia otro agente, así como también lanzar una llamada saliente a un número externo SIN asociarse a ninguna campaña.

La mayoría de éstas funcionalidades son ampliadas en las secciones pertinentes de ésta documentación.

**5) Toolbar Omnicanal**

La toolbar omnicanal expone cada herramienta de comunicación. En la última versión estable de mercado, OMniLeads trae activados el Canal de Voz, el Canal de [Whatsapp Business](/configuracion-whatsapp-business), el Canal de [Meta Messenger,](/configuracion-whatsapp-business/integracion-con-meta) y el Canal de Video (sólo en versión Enterprise)

## Pausas

El agente puede ingresar en modo pausa para que ninguna llamada de campañas entrantes o predictivas pueda ingresarle. Como bien se explica en la sección de «Configuración inicial», existen diferentes tipos de pausas que el administrador puede generar y mantener en el sistema. Por lo tanto, el agente al ingresar en el estado de pausa, debe indicar a qué tipo de pausa.

Para ingresar en una pausa, se debe hacer click en el botón «Pausar» dentro de la barra de estado del agente:

<figure><img src="/files/GfkSYU2ObTdpKINMDIX6" alt=""><figcaption></figcaption></figure>

*Figura 10: Pausa*

Se despliega entonces el menú de selección del tipo de pausa:

<figure><img src="/files/AiSARK6yR3h8oaRR1wTU" alt=""><figcaption></figcaption></figure>

*Figura 11: Tipo de pausa*

Finalmente, el agente entra en pausa. Debe notarse cómo cambia hacia el color «amarillo» la barra de estado, y además en la misma barra se puede leer el tipo de pausa actual. Finalmente, se puede observar que el cronómetro de tiempo de pausa comienza a correr, mientras que el de tiempo de operación se frena:

<figure><img src="/files/OVbZidGZucDYWmzjanoI" alt=""><figcaption></figcaption></figure>

*Figura 12: En pausa*

## Actualizar Contraseña

Por razones de seguridad, el Agente cuenta con la funcionalidad de cambiar la contraseña desde su propia Consola de Operación cuando lo desee. De esta manera libera al Supervisor de tareas administrativas. Para ello debe acceder al vértice superior derecho en su Perfil de Usuario, y clickear en "Actualizar Contraseña".&#x20;

<figure><img src="/files/lkMxaWRt0ZF2uw4frcz0" alt=""><figcaption></figcaption></figure>

Esta acción le permitirá modificar la misma al instante a partir del despliegue de la siguiente vista:

<figure><img src="/files/c2SFQo8DSPOsc6WTEGeF" alt=""><figcaption></figcaption></figure>

## Logout

Para efectuar un logout, se debe acceder al vértice superior derecho, tal como lo expone la siguiente figura:

<figure><img src="/files/2AlRHB3c8SUI31PVx97c" alt=""><figcaption></figcaption></figure>

*Figura 13: Logout de agente*


# Llamadas manuales desde listado de contactos

## Llamadas manuales desde listado de contactos

Cuando un agente trabaja dentro de una campaña manual, puede generar los llamados a partir de listar los contactos de la campaña, ésto es ingresando a *Contactos -> Lista de contactos* y allí se puede seleccionar la campaña manual sobre la cual buscar el contacto a marcar. Ésto, se muestra en la siguiente figura:

<figure><img src="/files/55csnyzTl6NwLaW0wKm9" alt=""><figcaption></figcaption></figure>

*Figura 1: Lista de contactos*

Si se hace click en «Mostrar contactos», aparecen los mismos listados, como lo indica la siguiente figura.

<figure><img src="/files/WBwQD9bgJqzqtuoC5MUm" alt=""><figcaption></figcaption></figure>

*Figura 2: Lista de contactos*

El botón "Mostrar Más", permite ampliar los detalles de la lista de contactos, agregándole los campos de la base.

<mark style="color:green;">IMPORTANTE: esta acción puede consumir muchos recursos dependiendo del tamaño de la base de datos, úsela con precaución si su ambiente no cuenta con los recursos de procesamiento adecuados.</mark>

Entonces, el agente puede generar una llamada hacia uno de los teléfonos listados, a partir de realizar un click sobre el ícono del teléfono. A partir de ese momento, se presenta la información del contacto en la pantalla de agente y seguidamente se comienza a marcar su teléfono:

<figure><img src="/files/PX8a2CRKARn6SHql5hc4" alt=""><figcaption></figcaption></figure>

*Figura 3: Llamada a contacto*

Si la comunicación ha finalizado o bien el teléfono no pudo ser contactado, entonces el agente puede intentar marcar a otro de los números del contacto (si es que el contacto tiene más de un teléfono cargado). Si este es el caso, entonces el agente puede hacer click sobre cualquiera de los teléfonos extras y automáticamente se buscará contactar al nuevo teléfono.

<figure><img src="/files/xkaEVXNwS0O3XHvJQvff" alt=""><figcaption></figcaption></figure>

*Figura 4: Rellamar a contacto*

Todas las llamadas del contacto en pantalla pueden ser calificadas, siempre y cuando la calificación no sea de gestión (despliegue de un formulario, donde se cierra dicha gestión).

Finalmente, el agente debe calificar al contacto a través del combo de calificaciones. Éste listado de calificaciones fue generado por el administrador para cada campaña:

<figure><img src="/files/v47SIvv6nm0IwJ7A7TxC" alt=""><figcaption></figcaption></figure>

*Figura 5: Calificación de llamada*

## Llamadas manuales marcando desde el webphone

El agente puede marcar llamadas directamente sobre el webphone. Es común a veces distribuir las llamadas a realizar por los agentes, a través de una planilla de cálculo o buscando los datos en un CRM externo. Ésto se muestra en la siguiente figura:

<figure><img src="/files/L8SLRnLpNPyIDRMtVr1D" alt=""><figcaption></figcaption></figure>

*Figura 6: Llamada manual desde webphone*

Presionando *enter* o disparando el llamado desde el botón *dial*, si aún no tiene una campaña pre-seleccionada, el sistema pregunta por qué campaña procesar la nueva llamada:

<figure><img src="/files/CVdA0fKhBGekJHgahB6k" alt=""><figcaption></figcaption></figure>

*Figura 7: Selección de campaña*

OMnileads busca primero si el teléfono marcado existe como asignado sobre algún contacto del sistema, y si el mismo existe, se despliegan los contactos que posean dicho teléfono. Entonces, el agente puede indicar marcar a dicho contacto, caso en el cual la llamada se lanza y los datos del contacto son desplegados sobre la consola de agente:

<figure><img src="/files/152MLakhVR1PDQU7HWgq" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/gg0dvjZQpgJvqHxcmTe7" alt=""><figcaption></figcaption></figure>

*Figura 9: Llamada a contacto*

## Llamadas a números sin contacto existente

También puede suceder que el teléfono marcado desde el webphone no coincida con ningún contacto, tal como se muestra en la siguiente figura:

<figure><img src="/files/Zqvyi1QINIyqpnI2KRAf" alt=""><figcaption></figcaption></figure>

*Figura 10: Número marcado sin contacto existente*

En éste caso, el agente puede o bien directamente marcar el teléfono y luego cargar el contacto:

<figure><img src="/files/a4KE0izIRU4uYuIQwNFt" alt=""><figcaption></figcaption></figure>

*Figura 11: Llamada a contacto sin identificar*

O bien puede cargar el nuevo contacto a la campaña antes de contactar el teléfono:

<figure><img src="/files/eGacfM6zZyRQdsqfrVXn" alt=""><figcaption></figcaption></figure>

*Figura 12: Cargar contacto y llamar*


# Llamadas preview

## Campañas preview

Cuando un agente trabaja dentro de una campaña preview, antes que nada debe acceder al botón de campañas preview:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_prev_camp_1.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Lista de campañas preview*

Allí, se van a desplegar todas las campañas preview sobre las que el agente se encuentre asignado. Entonces, el agente debe seleccionar una campaña y ésta le devolverá un contacto para gestionar:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_prev_camp_2.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Pedido de nuevo contacto a llamar*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_prev_camp_3.png" alt=""><figcaption></figcaption></figure>

*Figura 3: Contacto entregado*

Con el contacto entregado, el agente puede o bien marcar el teléfono del mismo, haciendo click sobre el número, o bien hacer un nuevo click sobre la campaña preview para que la misma entregue otro contacto.

Suponiendo que se llama a un contacto, simplemente al dar click sobre el teléfono se realiza la llamada y paralelamente se despliegan los datos del contacto sobre la vista del agente, tal como vimos en las llamadas manuales:

<figure><img src="/files/qpxTpdmiZmtEozwE2xMc" alt=""><figcaption></figcaption></figure>

*Figura 4: Contacto llamado*

Si la comunicación ha finalizado o bien el teléfono no pudo ser contactado, entonces el agente puede intentar marcar a otro de los números del contacto (si es que el contacto tiene más de un teléfono cargado). Si éste es el caso, entonces el agente puede hacer click sobre cualquiera de los teléfonos extras y automáticamente se buscará contactar al nuevo teléfono:

Todas las llamadas del contacto en pantalla pueden ser calificadas, siempre y cuando la calificación no sea de gestión (despliegue de un formulario, donde se cierra dicha gestión).

Finalmente, el agente debe calificar al contacto a través del combo de calificaciones. Éste listado de calificaciones fue generado por el administrador para cada campaña:

<figure><img src="/files/P7tPVrOW6N0hzByPilH9" alt=""><figcaption></figcaption></figure>

*Figura 6: Calificación de llamada*

El agente tiene también la posibilidad de seleccionar más rápidamente el próximo contacto a llamar en la última campaña preview con que ha interactuado, seleccionando el botón que se muestra en la barra de operación:

<figure><img src="/files/m86bpscsoDBV3D0gVjnN" alt=""><figcaption></figcaption></figure>

*Figura 7: Obtener nuevo contacto preview*


# Llamadas en dialer

## Agente en modo predictivo

Un agente online y asignado a una campaña predictiva que se encuentre activa, puede comenzar a recibir llamadas del discador.

El ingreso de las llamadas se notifica con un audio tipo «beep» que se reproduce sobre el auricular del agente e inmediatamente se exponen los datos del contacto que el discador enlazó, y el agente queda en comunicación con dicho contacto.

<figure><img src="/files/nJzKOBzvN4l7NBGZyLzP" alt=""><figcaption></figcaption></figure>

*Figura 1: dialer call connect*

<mark style="color:green;">Nota</mark>

<mark style="color:green;">Es importante advertir que un agente que trabaja sobre una campaña predictiva, debe estar muy alerta, ya que generalmente el sistema se configura para que las llamadas de discador predictivo ingresen directamente al agente, sin brindar la posibilidad de elegir ser atendidas o no.</mark>

Como se puede visualizar en la figura anterior, además de la reproducción del audio de notificación, el agente se puede percatar del cambio en la pantalla. Por un lado, la barra de estado se pinta de verde en el estado de «On call / Conectado», y además se notifica el nombre de la campaña a la que corresponde la llamada.

Una vez que la llamada finaliza (independientemente de qué lado corte la llamada), el sistema fuerza al agente a ingresar a una pausa del tipo ACW (After Call Work), que permite al agente terminar de gestionar el contacto con su respectiva calificación, para luego volver a quedar disponible en el estado de «Connected», de manera tal que el discador lo visualice como un agente activo al cual enviarle llamadas.

<mark style="color:green;">Nota</mark>

<mark style="color:green;">La salida del estado de pausa ACW puede darse induciendo al agente a que salga él mismo de la pausa, o bien después de un periodo de tiempo (en segundos) definido por el administrador. En éste último caso, el agente simplemente cuenta con ese periodo de tiempo de gracia para calificar al contacto y luego automáticamente es puesto nuevamente en estado disponible para otra llamada.</mark>

## Cómo realizar una llamada manual

Surgen casos en los que el agente asignado a una campaña predictiva debe marcar a un número manualmente. En éste caso, se sugiere al agente ingresar en modo pausa y luego desde dicho estado, generar la llamada saliente. Ya que de lo contrario puede suceder que al momento de estar marcando el número, el discador le envíe una llamada predictiva y corte al medio la acción de la llamada manual al agente.

La llamada manual citada, puede ser a otro de los números del contacto o bien a un número externo a la base. Lo importante es recordar ir a pausa a la hora del intento de contactación manual al teléfono.


# Llamadas entrantes

## Atención de llamadas entrantes

Como bien sabemos de la sección de «Configuración inicial», el sistema se puede configurar para que las llamadas entrantes generen un «ring» sobre el webphone del agente, brindando a éste último la posibilidad de elegir atender o no la llamada, o bien configurar para que las llamadas entrantes ingresen y conecten directamente sobre el agente con una indicación de audio tipo «beep», para luego dejar a ambos extremos de la llamada en línea.

En la siguiente figura, exponemos el comportamiento con «ring»:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_in_camp_1.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Llamada entrante en ring*

Si en cambio, la configuración asociada al agente implica que la llamada se enlace directamente, entonces al igual que en las campañas predictivas, el agente escuchará el «beep» que anuncia la nueva llamada conectada y también se informa en la pantalla el nombre de la campaña entrante a la cual pertenece la llamada conectada:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_in_camp_2.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Llamada de campaña entrante*

## Gestión de contactos

Como las llamadas entrantes dependen de que el número de teléfono desde el cual se origina la llamada esté por un lado cargado en el sistema como base de contactos y además de que el número llegue al sistema como fue cargado, suele ser normal que el agente se encuentre sin datos de la persona que llama, al momento de conectarse la llamada:

<figure><img src="/files/30MdXxVqcD7lgYbEnjql" alt=""><figcaption></figcaption></figure>

*Figura 3: Llamada entrante sin datos de contacto*

En éste caso, el agente puede elegir calificar o no la llamada. En el caso positivo, entonces se procede con la carga del contacto y posterior calificación de la llamada.

A su vez, también es posible ver por cada Llamada Entrante su historial de gestión (última calificación, fecha de gestión, observaciones y nombre del agente que lo atendió). **De esta forma el agente actual puede acceder a un Contexto del Llamante** a partir del cual guiarlo más personalizadamente en su viaje.


# Llamadas entre agentes

## Llamadas hacia otros agentes

Para ejecutar una llamada hacia otro agente de OMniLeads, debemos acudir al botón «Llamar fuera de campaña» disponible en la parte inferior del webphone. Al clikear dicho botón, se despliega una ventana que nos facilita la selección de un agente del listado total para luego ejecutar la llamada:

<figure><img src="/files/lGVH6BKGwA5USxsQ4zW8" alt=""><figcaption></figcaption></figure>

*Figura 1: Llamada fuera de campaña*

## Llamadas externas sin campaña asociada

A veces, es necesario ejecutar una llamada hacia el exterior (número de abonado o extensión de la central PBX), sin la necesidad de gestionar el contacto. Ésto se permite a partir de clickear el botón «Llamar fuera de campaña» disponible en la parte inferior del webphone. La ventana desplegada, cuenta con un campo para introducir el número a marcar:

<figure><img src="/files/sVPrwEsLORw3Edtvpv47" alt=""><figcaption></figcaption></figure>

*Figura 2: Llamada fuera de campaña*

## Poner en espera una llamada

En medio de cualquier tipo de llamada en curso, el agente puede poner en espera al teléfono en el otro extremo de la comunicación. Esto se logra haciendo click sobre el botón «Hold» del webphone de agente:

<figure><img src="/files/klPKZVXoyeNp72rJfEW4" alt=""><figcaption></figcaption></figure>

*Figura 3: Llamada en espera*

Al disparar la acción de «hold», el otro extremo de la llamada queda escuchando la música de espera, mientras que el agente puede volver a retomar la llamada cuando desee, simplemente clickeando el botón de «unhold».

*Figura 4: Saliendo de llamada en espera*

Ésta funcionalidad puede ser utilizada en cualquier tipo de llamada.

## Transferencias y conferencias

Dentro del abanico de posibilidades de transferencias de llamadas que se pueden realizar en el sistema, tenemos las siguientes:

**Transferencia directa hacia otro agente**

El «agente A» se encuentra en una llamada activa y desea transferir la llamada hacia el «agente B» de manera directa. En éste caso, se selecciona el botón de transferencia disponible en el webphone, y luego se selecciona «Transferencia ciega» como tipo de transferencia, pudiendo elegir al agente destino.

Por otro lado, el campo Agente permite filtrar el destino y conocer de antemano su estado, con el objetivo de evitar transferir llamadas y que las mismas fallen por destino ocupado o no disponible.

<figure><img src="/files/PaqiMAMyajYq9Hyi67Jk" alt=""><figcaption></figcaption></figure>

*Figura 5: Transferencia ciega de «agente A» a «agente B»*

En éste caso, la llamada automáticamente es despachada hacia el «agente B», quedando liberado el webphone del «agente A». Una vez disparada ésta transferencia, no se puede volver a recuperar la llamada original, ni tampoco el «agente A» puede conocer si la llamada fue atendida o no por el «agente B».

**Transferencia directa hacia teléfono externo**

El «agente A» se encuentra en una llamada activa y desea transferir la llamada hacia un «teléfono» externo a OMniLeads de manera directa. Cuando decimos externo, nos referimos a una llamada que se genera hacia afuera del sistema, pudiendo ser una extensión de la PBX de la compañía o bien un teléfono externo de la PSTN.

En éste caso, se selecciona el botón de transferencia disponible en el webphone y luego se selecciona «Transferencia ciega» como tipo de transferencia, y se debe introducir el número destino en el recuadro, como lo indica la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_ag2out_bt.png" alt=""><figcaption></figcaption></figure>

*Figura 6: Transferencia ciega de «agente A» a «número externo»*

En éste caso, la llamada automáticamente es despachada hacia el teléfono destino, quedando liberado el webphone del «agente A». Una vez disparada ésta transferencia, no se puede volver a recuperar la llamada original, ni tampoco el «agente A» puede conocer si la llamada fue atendida o no por el teléfono destino de la transferencia.

**Transferencia con consulta hacia campaña**

El «agente A» se encuentra en una llamada activa y desea transferir la llamada hacia una «campaña B» de manera consultativa, es decir logrando que el teléfono externo quede en espera mientras el «agente A» abre un nuevo canal hacia la nueva campaña. Si la llamada entre ambas se establece y el «agente B» de la nueva campaña desea recibir la transferencia, entonces el «agente A» corta la llamada y automáticamente el teléfono externo queda unido en una llamada con el «agente B» en la nueva campaña.&#x20;

Por otro lado, el campo Campaña permite filtrar la campaña destino de la transferencia.

Ésto, se muestra en la siguiente figura:

<figure><img src="/files/IShL7GSLN5taw9KNeVUB" alt=""><figcaption></figcaption></figure>

**Transferencia con consulta hacia otro agente**

El «agente A» se encuentra en una llamada activa y desea transferir la llamada hacia el «agente B» de manera consultativa, es decir logrando que el teléfono externo quede en espera mientras el «agente A» abre un nuevo canal hacia el «agente B». Si la llamada entre ambos se establece y el «agente B» desea recibir la transferencia, entonces el «agente A» corta la llamada y automáticamente el teléfono externo queda unido en una llamada con el «agente B».&#x20;

Por otro lado, el campo Agente permite filtrar el destino y conocer de antemano su estado, con el objetivo de evitar transferir llamadas y que las mismas fallen por destino ocupado o no disponible.

Ésto, se muestra en la siguiente figura:

<figure><img src="/files/oLd1FAhK5wTZtM9xnA56" alt=""><figcaption></figcaption></figure>

*Figura 7: Transferencia consultativa de «agente A» a «agente B»*

En éste escenario también puede ocurrir:

* Que no se logre contactar al «agente B», caso en el cual el «agente A» puede cancelar la transferencia durante el ring hacia el «agente B» con el botón «Cancelar transferencia» del webphone.
* Se logra el contacto con el «agente B» pero éste no puede o no quiere proceder con la transferencia, por lo tanto el «agente B» debe cortar la llamada y atomáticamente vuelve a quedar el «agente A» con el teléfono externo enlazados.

En cualquier caso, al cursar un intento de transferencia, el agente recibirá un cartel indicativo de Guardado de Datos que lo alertará en caso los datos del contacto gestionado no hayan sido guardados satisfactoriamente.

<figure><img src="/files/z2ugVd6RaUoMTXR2VI32" alt=""><figcaption><p>Alerta de Guardado de Datos de Formulario</p></figcaption></figure>

**Conferencia de a 3 entre el número externo, agente A y agente B**

Éste caso, es un escenario posible dentro de una transferencia consultativa, ya que la acción a ejecutar por el agente que impulsa la conferencia «agente A», es en un principio una transferencia consultativa, sólo que al momento de entablar conversación el «agente A» hacia el «agente B» (mientras la persona externa «numero externo» se encuentra en espera), el «agente A» debe seleccionar el botón de «Confer» disponible en el webphone de agente, y de ésta manera quedan las 3 partes en un salón de conferencia:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_3way_confer_internal.png" alt=""><figcaption></figcaption></figure>

*Figura 8: Conferencia de a 3 entre «agente A», «agente B» y número externo*

**Transferencia con consulta hacia teléfono externo**

El «agente A» se encuentra en una llamada activa y desea transferir la llamada hacia un «teléfono» externo de manera consultativa, es decir logrando que el «telefono externo A» quede en espera mientras el «agente A» abre un nuevo canal hacia el «teléfono externo B». Si la llamada entre ambos se establece y el «teléfono externo B» desea recibir la transferencia, entonces el «agente A» corta la llamada y automáticamente el «teléfono externo A» queda unido en una llamada con el «teléfono externo B». Ésto, se muestra a continuación:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_ag2out_ct.png" alt=""><figcaption></figcaption></figure>

*Figura 9: Transferencia consultativa de «agente A» a «teléfono externo»*

En este escenario también puede ocurrir:

* Que no se logre contactar al «teléfono externo B», caso en el cual el «agente A» puede cancelar la transferencia durante el ring hacia el «teléfono externo B» con el botón «Cancelar transferencia» del webphone.
* Se logra el contacto con el «telefono externo B» pero éste no puede o no quiere proceder con la transferencia, por lo tanto el «teléfono externo B» debe cortar la llamada y atomáticamente vuelve a quedar el «agente A» con el «teléfono externo A» enlazados.

**Conferencia de a 3 entre el número externo A, agente y un número externo B**

Bajo éste escenario, el «agente A» puede armar una conferencia de a 3 entre el «número externo A», es decir la persona que inicialmente se encuentra en llamada con «agente A» y un «numero externo B», que puede ser la extensión de una PBX o un abonado de la PSTN, de manera tal que queden las 3 partes en una sala de conferencia.

Para llevar a cabo ésta acción, el «agente A» debe iniciar una *transferencia consultativa* hacia el «numero externo B», y una vez en llamada con éste último, el agente debe seleccionar el botón de «Confer» de su webphone, como se muestra en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_3way_confer_out.png" alt=""><figcaption></figcaption></figure>

*Figura 10: Conferencia de a 3 entre «agente A», «número externo A» y «número externo B»*

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_3way_confer_switch.png" alt=""><figcaption></figcaption></figure>

*Figura 11: Botón de confer del webphone*

**Transferencia a otra campaña**

Bajo éste escenario, el «agente A» se encuentra en una llamada activa y desea transferir la llamada hacia una campaña entrante. A la hora de seleccionar el tipo de transferencia, se debe marcar «Transferencia ciega», ya que la llamada es lanzada sobre la cola de espera de la campaña destino:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_ag2camp.png" alt=""><figcaption></figcaption></figure>

*Figura 12: Transferencia de «agente A» a «campaña entrante»*

Como se trata de una transferencia directa, la llamada automáticamente es despachada hacia el teléfono destino, quedando liberado el webphone del «agente A». Una vez disparada ésta transferencia, no se puede volver a recuperar la llamada original, ni tampoco el «agente A» puede conocer si la llamada fue atendida o no.

## Observar grabación de llamada

Ésta funcionalidad del webphone de agente, permite a éste poder generar una marca sobre la grabación de la llamada. La idea es que luego, desde el módulo de búsqueda de grabaciones, se pueda recuperar grabaciones «observadas» por los agentes y allí también desplegar la observación que realizó el agente sobre la grabación de la llamada.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_tag_call.png" alt=""><figcaption></figcaption></figure>

*Figura 13: Marca de grabación de llamada*

Como se indica en la figura anterior, luego de seleccionar el botón para marcar la llamada, se depliega un campo de texto para que el agente pueda describir la situación.

Finalmente, en el módulo de grabación de OMniLeads, se puede recuperar dicha grabación y observar lo que el agente escribió al respecto.

## Grabar llamada bajo demanda

Ésta funcionalidad permite grabar una llamada, a partir del momento de hacer click en el botón que se muestra en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_record_call.png" alt=""><figcaption></figcaption></figure>

La funcionalidad está habilitada exclusivamente para llamadas pertenecientes a campañas con la opción de realizar grabaciones "desactivada".

La grabación de la llamada puede terminarse a elección del usuario presionando el mismo botón en medio de dicha grabación, y si no se hace ésto, la llamada se grabará hasta el final de la conversación:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_callactions_stop_record_call.png" alt=""><figcaption></figcaption></figure>

## Agendamiento de llamadas

La funcionalidad de agendamiento de llamadas, permite al sistema volver a procesar un contacto hacia el futuro. La idea es no descartar al mismo, sino seguirlo gestionando.

**Agendamiento personal**

Cuando el agente requiere volver a llamar a un contacto determinado, puede generar un recordatorio en su agenda personal, para luego al listar dicha agenda, contar con la entrada que le recuerda el horario y contacto que debe llamar.

El agendamiento de llamadas es una calificación que se encuentra por defecto siempre como calificación de contacto:

<figure><img src="/files/iXVB6rNA1aNwAcv9EMNE" alt=""><figcaption></figcaption></figure>

*Figura 14: Agenda personal*

Luego de guardar la calificación, se despliega un formulario para seleccionar la fecha, hora, motivo de la agenda personal del contacto y Teléfono de Agendamiento (útil para escenarios con registros multi-num):

<figure><img src="/files/DsxWVyn7YN0DI66n27Cm" alt=""><figcaption></figcaption></figure>

*Figura 15: Detalles de la agenda personal*

Finalmente, la entrada en la agenda personal del agente, quedará disponible ingresando al menú *Agendas*:

<figure><img src="/files/mfll2D1Cxzl2mT5xrLGp" alt=""><figcaption></figcaption></figure>

*Figura 16: Detalles de la agenda personal*

**Agendamiento global de llamadas predictivas**

Éste tipo de agendamiento es sólo aplicable a campañas con discador predictivo, ya que tiene como finalidad volver a colocar al contacto dentro de la lista de números a llamar por el discador. En éste escenario, el discador simplemente vuelve a llamar a dicho número agendado hacia el final de la campaña, es decir no se puede elegir ni una fecha u horario ni tampoco sobre qué agente va a caer el contacto llamado nuevamente por el discador.

Se trata de una funcionalidad que permite no descartar al contacto, pero sin implicar un seguimiento personal por parte del agente.

Para generar una agenda de éste tipo, se debe calificar al contacto con la calificación «agenda» pero luego seleccionar «global» en el menú de selección del tipo de agenda.


# Listado de Contactos

## Listado de contactos de la campaña

El agente puede ingresar a los contactos de cada campaña a la que se encuentra asignado. Ésto, se hace ingresando al punto menú [\*](https://documentacion-omnileads.readthedocs.io/es/latest/agent_contact_managment.html#id1)Contactos -> Lista de contactos».

Allí, se despliega una vista que permite seleccionar la campaña a la cual ingresar para visualizar sus contactos:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_contact_list_1.png" alt=""><figcaption></figcaption></figure>

*Figura 1: Lista de contactos de campaña*

Al listar todos los contactos de la campaña, el agente puede recorrer cada uno de ellos, o bien realizar una búsqueda por ID de contacto, teléfono, nombre, apellido, etc.:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_contact_list_2.png" alt=""><figcaption></figcaption></figure>

*Figura 2: Búsqueda de contactos*

Por ejemplo, podemos buscar un número de teléfono en el listado de contactos, como se ejemplifica en la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_contact_list_3.png" alt=""><figcaption></figcaption></figure>

*Figura 3: Búsqueda de contacto por número*

La herramienta permite poder editar cualquiera de estos contactos:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_contact_list_4.png" alt=""><figcaption></figcaption></figure>

*Figura 4: Búsqueda de contactos*

## Agendas pendientes

El agente puede acceder a su agenda de llamadas pendientes de realizar. En dicha sección, se listan todas las entradas que el agente realizó durante la gestión:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_agenda_1.png" alt=""><figcaption></figcaption></figure>

*Figura 5: Agenda*

El agente cuenta con cada contacto agendado y su descripción. A partir de hacer click sobre el número de teléfono, automáticamente se dispara la llamada hacia el teléfono del contacto.

## Alarmas de Agenda

Ademas de gestionar agendas, el sistema tiene la habilidad de "alertar" al agente frente a vencimientos de agenda. De esta manera, un agente puede estar siempre al corriente respecto a los vencimientos que tiene pactados en su vista de agendas:

<figure><img src="/files/6gkZ8N9ObVmwtG7j63qg" alt=""><figcaption></figcaption></figure>

## Histórico de calificaciones del agente

En éste menú, el agente podrá listar a todos los contactos que ha calificado a nivel histórico. Por lo tanto, el agente puede llevar un control hacia atrás de cada contacto gestionado:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_dispositions_history_1.png" alt=""><figcaption></figcaption></figure>

*Figura 6: Lista de calificaciones de llamadas*

Se puede filtrar por fecha la búsqueda y además el agente podrá ingresar al contacto seleccionado para repasar sus datos o modificar la calificación asignada previamente:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_dispositions_history_2.png" alt=""><figcaption></figcaption></figure>

*Figura 7: Edición de calificaciones de llamadas*

Como se puede observar, el agente puede modificar los datos de la calificación o del formulario, en caso de tratarse de un contacto calificado con una calificación «de gestión».

## Búsqueda de grabaciones del agente

En este menú, el agente podrá buscar las grabaciones de las llamadas en las que haya participado:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/about_agent_search_record_1.png" alt=""><figcaption></figcaption></figure>

*Figura 8: Lista de grabaciones de llamadas*

Se puede filtrar por fecha, tipo de llamada, teléfono del cliente, CallID, campaña, si fue marcada, si está calificada como gestión y por su duración.


# Mensajes de Whatsapp

## Atención Mensajes de Whatsapp

La toolbar de agente tiene la característica de permitir la gestión de múltples canales. Un agente puede estar en una videollamada, en una llamada preview, en pausa, en hold, y al mismo tiempo enviando o recibiendo menajes de texto o multimedia, etc. todo en simultáneo y de manera transparente.

Cuando una campaña tiene activada la canalidad de Whatsapp y su estrategia de derivación configurada, la misma se encuentra apta para enviar y recibir mensajes a través su Inbox General.

Para atender mensajes recibidos e iniciar conversaciones fluidas, el agente debe contar con el skill para gestionar mensajes de Whatsapp (configurable en el Grupo de Agente al que pertenece). A partir de esta habilidad, puede seleccionar el ícono correspondiente para tener acceso al **Inbox General** de Campaña:

<figure><img src="/files/WsNHBtAzwzpv56zsxZmt" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/tvt2NPXMqwY2mqBzVkDY" alt=""><figcaption></figcaption></figure>

En el tab "Nuevos" (Inbox General), aparecerán todos los mensajes entrantes de campaña que aún no han sido tomados por un agente. Mientras que en el tab "Atendidos" (Inbox Personal) se registrarán todas las conversaciones no cerradas aún por el agente.

<figure><img src="/files/U4IOGZNlYG2YjKvJz5qd" alt=""><figcaption></figcaption></figure>

<mark style="color:red;">IMPORTANTE: A la fecha del presente Release, todos los agentes de campaña cuyo permiso de Acceso a Whatsapp esté activado, podrán "tomar" mensajes en el Inbox General (Nuevos) de manera individual y gestionarlos en su Inbox Personal. En futuros Releases, se anexarán nuevos algoritmos que permitan una distribución configurable desde el administrador (por skill, por cantidad de mensajes, en round-robin, etc.).</mark>

De esta manera, haciendo click sobre el ícono de "captura" de conversación, el agente atiende al usuario en espera y lo gestiona en su Inbox Personal.

<figure><img src="/files/6evp1JtgX1JVZdbjT4Aq" alt=""><figcaption></figcaption></figure>

## Tratamiento de Contactos

Un contacto nuevo que inicia una conversación con la Empresa, no forma parte de la base de datos de campaña. Por este motivo y para un correcto tratamiento de su "Journey", deberá ser identificado e ingresado en base. En este escenario, se desplegará un accionable para proceder a identificarlo con la leyenda: "*El contacto aún no ha sido registrado, puede identificarlo AQUI*".

<figure><img src="/files/BOLTWc3vKuIuIm2TBoKY" alt=""><figcaption></figcaption></figure>

Una vez que los datos han sido guardados, el contacto queda registrado en base y OMniLeads usará su nombre para futuras interacciones.

<figure><img src="/files/iwgGMH3nFT7JuW03YNmM" alt=""><figcaption></figcaption></figure>

El agente puede realizar diferentes acciones sobre una conversación:

* Transferir a otra agente (Transfer)
* Cerrarla con calificación de campaña (Call Disposition)
* Enviar Plantillas de Mensajes de "Respuesta Rápida" (Templates)
* Editar Contacto en Base de Datos (Editar Contacto)

<figure><img src="/files/6GfTyRzMmToLEjtDwd4F" alt=""><figcaption></figcaption></figure>

## Transferencias

Así como un agente puede transferir una llamada a otro agente, el Orquestador de Canales permite al usuario contar con transferencia de mensajes entre agentes.&#x20;

<figure><img src="/files/OpbiyG5HljssBHPO23ha" alt=""><figcaption></figcaption></figure>

En decir, un agente A puede transferir un mensaje que esté en su Inbox Personal a un agente B, para que éste lo siga gestionando oportunamente.

<figure><img src="/files/ej9b70kNrAtWHDvtWMGc" alt=""><figcaption></figcaption></figure>

## Calificaciones

A su vez, un contacto puede ser calificado en Whatsapp a partir de las calificaciones asignadas a la campaña:

<figure><img src="/files/rgerLp574Gx3EndhEVC1" alt=""><figcaption></figcaption></figure>

Clickeando sobre el ícono de Calificar, se desplegará un pop-up donde se podrá seleccionar una Opción de Calificación y un campo de observaciones para anotaciones del agente.

<figure><img src="/files/0JRYQFcyTCoqzNWHp8Em" alt=""><figcaption></figcaption></figure>

Al mismo tiempo, se pone a disposición el agente un histórico de calificaciones pertenecientes al contacto en cuestión, con el objetivo de brindar información del "journey" previo que ha tenido el usuario en interacciones pasadas (tab "Registros").

## Respuestas Rápidas

Las respuestas rápida permiten enviar información de manera ágil y a punta de clicks, evitando pérdida de tiempo en redacción.

<figure><img src="/files/mzYMb8wZtgw4Al8HFXXM" alt=""><figcaption></figcaption></figure>

Clickeando sobre el ícono "Templates", el agente accede a todos los mensajes que han sido generados como Recursos para la Campaña (ver sección de [Plantillas de Mensajes](/configuracion-whatsapp-business/plantillas-de-mensajes-y-grupos-horarios)), y puede enviarlos de manera rápida.

<figure><img src="/files/sQfNBbVQyH8cv7dtGspN" alt=""><figcaption></figcaption></figure>

## Mensajes Salientes: Templates de Whatsapp

En la misma vista, se ponen a disposición los Templates aprobados por Whatsapp. Estos recursos se encuentran creados y gestionados en la plataforma del BSP de Meta (Business Service Provider), al cual OMniLeads se integra para permitir envio de mensajes salientes de manera segura y confiable.

<figure><img src="/files/Eb0TFrcOrPnVRJmQcsej" alt=""><figcaption></figcaption></figure>

De no existir el contacto al cual se desea enviar el mensaje, se ofrece la opción de crearlo en la base de datos de campaña a partir del botón "*Crear*" del pop-up de *Nueva Conversación*.

Para mayor entendimiento, se sugiere revisar el [Funcionamiento de Templates Aprobados](/configuracion-whatsapp-business/lineas#acerca-de-los-templates-aprobados-por-whatsapp) desde la perspectiva de Meta.

La reportería y estadística del canal puede ampliarse a partir de la sección de [Reportes de Mensajes](/metricas-grabaciones-y-supervision#output-de-las-campanas-de-whatsapp).


# Mensajes de Messenger

## Atención Mensajes de Meta Messenger

La toolbar de agente tiene la característica de permitir la gestión de múltples canales. Un agente puede estar en una videollamada, en una llamada preview, en pausa, en hold, y al mismo tiempo enviando o recibiendo menajes de Whatsapp/Redes Sociales, etc. todo en simultáneo y de manera transparente.

Cuando una campaña tiene activada la **canalidad de Messenger** y su estrategia de derivación configurada, la misma se encuentra apta para enviar y recibir mensajes a través su Inbox General.

Para administrar conversaciones fluidas, el agente debe contar con el skill para gestionar mensajes de Meta Messenger (configurable en el Grupo de Agente al que pertenece). A partir de esta skill, puede seleccionar el ícono correspondiente para tener acceso al **Inbox General** de Campaña:

<div data-full-width="false"><figure><img src="/files/wtUMzcWXf5XyYxczS0FI" alt=""><figcaption></figcaption></figure></div>

En el tab "Nuevos" (Inbox General), aparecerán todos los mensajes entrantes de campaña que aún no han sido tomados por un agente. Mientras que en el tab "Atendidos" (Inbox Personal) se registrarán todas las conversaciones no cerradas aún por el agente.

<figure><img src="/files/jsUjbO7BIokFwtx5V3xX" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/TVwngbRBUJvtKyusoV2s" alt=""><figcaption></figcaption></figure>

<mark style="color:red;">IMPORTANTE: A la fecha del presente Release, todos los agentes de campaña cuyo permiso de Acceso a la canalidad esté activado, podrán "tomar" mensajes en el Inbox General (Nuevos) de manera individual y gestionarlos en su Inbox Personal. En futuros Releases, se anexarán nuevos algoritmos que permitan una distribución configurable desde el administrador (por skill, por cantidad de mensajes, en round-robin, etc.).</mark>

De esta manera, haciendo click sobre el ícono de "captura" de conversación, el agente atiende al usuario en espera y lo gestiona en su Inbox Personal.

<figure><img src="/files/Ne8LrAlj1ocAgw6CKyuO" alt=""><figcaption></figcaption></figure>

## Tratamiento de Contactos

Un contacto nuevo que inicia una conversación con la Empresa, no forma parte de la base de datos de campaña. Por este motivo y para un correcto tratamiento de su "Journey", deberá ser identificado e ingresado en base. En este escenario, se desplegará un mensaje para proceder a identificarlo con la leyenda: "*El contacto aún no ha sido registrado, puede identificarlo AQUI*".

<figure><img src="/files/BOLTWc3vKuIuIm2TBoKY" alt=""><figcaption></figcaption></figure>

Una vez que los datos han sido guardados, el contacto queda registrado en base y OMniLeads usará su identificador para futuras interacciones.

<figure><img src="/files/NGKp8MdgQ85UN5iOJ0MV" alt=""><figcaption></figcaption></figure>

El agente puede realizar diferentes acciones sobre una conversación:

* Transferir a otra agente (Transfer)
* Cerrarla con calificación de campaña (Call Disposition)
* Enviar Plantillas de Mensajes de "Respuesta Rápida" (Templates)
* Editar Contacto en Base de Datos (Editar Contacto)

## Transferencias

Así como un agente puede transferir una llamada a otro agente, el Orquestador de Canales permite al usuario contar con transferencia de mensajes entre agentes.&#x20;

<figure><img src="/files/Umy5N3DNNpdLUzEvwoK7" alt=""><figcaption></figcaption></figure>

En decir, un agente A puede transferir un mensaje que esté en su Inbox Personal a un agente B, para que éste lo siga gestionando oportunamente.

<figure><img src="/files/ej9b70kNrAtWHDvtWMGc" alt=""><figcaption></figcaption></figure>

## Calificaciones

A su vez, un contacto puede ser calificado en Meta Messenger a partir de las calificaciones asignadas a la campaña:

<figure><img src="/files/hYUncM62IgtMQyh19xja" alt=""><figcaption></figcaption></figure>

Clickeando sobre el ícono de Calificar, se desplegará un pop-up donde se podrá seleccionar una Opción de Calificación de Campaña y un campo de observaciones para anotaciones del agente.

<figure><img src="/files/QGhyjNVcttTdGsuow1Eh" alt=""><figcaption></figcaption></figure>

Al mismo tiempo, se pone a disposición del agente un histórico de calificaciones pertenecientes al contacto en cuestión, con el objetivo de brindar información del "journey" que ha tenido el usuario en interacciones pasadas (tab "Registros").

## Respuestas Rápidas

Las respuestas rápidas permiten enviar información de manera ágil y a punta de clicks, evitando pérdida de tiempo en redacción.

<div data-full-width="true"><figure><img src="/files/plBr3ztEIXs3AjnKMjsq" alt=""><figcaption></figcaption></figure></div>

Clickeando sobre el ícono "Templates", el agente accede a todos los mensajes que han sido generados como Recursos para la Campaña (ver sección de [Plantillas de Mensajes](/configuracion-whatsapp-business/plantillas-de-mensajes-y-grupos-horarios)), y puede enviarlos de manera rápida.

<figure><img src="/files/NUPG4xrlwVN4q6hiEmkp" alt=""><figcaption></figcaption></figure>

La reportería y estadística del canal puede ampliarse a partir de la sección de [Reportes de Mensajes](/metricas-grabaciones-y-supervision#output-de-las-campanas-de-whatsapp). También es posible acceder al detalle de las conversaciones desde el apartado de [Conversaciones de Meta](/metricas-grabaciones-y-supervision/reportes-de-conversaciones-de-facebook).


# Mensajes de Instagram

## Atención Mensajes de Instagram Messenger

La toolbar de agente tiene la característica de permitir la gestión de múltples canales. Un agente puede estar en una videollamada, en una llamada preview, en pausa, en hold, y al mismo tiempo enviando o recibiendo menajes de Whatsapp/Redes Sociales, etc. todo en simultáneo y de manera transparente.

Cuando una campaña tiene activada la **canalidad de Instagram** y su estrategia de derivación configurada, la misma se encuentra apta para enviar y recibir mensajes a través su Inbox General.

Para administrar conversaciones fluidas, el agente debe contar con el skill para gestionar mensajes de Instagram (configurable en el Grupo de Agente al que pertenece). A partir de esta skill, puede seleccionar el ícono correspondiente para tener acceso al **Inbox General** de Campaña:

<figure><img src="/files/MUgqT09CzNObg6dAIQjx" alt=""><figcaption></figcaption></figure>

En el tab "Nuevos" (Inbox General), aparecerán todos los mensajes entrantes de campaña que aún no han sido tomados por un agente. Mientras que en el tab "Atendidos" (Inbox Personal) se registrarán todas las conversaciones no cerradas aún por el agente.

<figure><img src="/files/TVwngbRBUJvtKyusoV2s" alt=""><figcaption></figcaption></figure>

<mark style="color:red;">IMPORTANTE: A la fecha del presente Release, todos los agentes de campaña cuyo permiso de Acceso a la canalidad esté activado, podrán "tomar" mensajes en el Inbox General (Nuevos) de manera individual y gestionarlos en su Inbox Personal. En futuros Releases, se anexarán nuevos algoritmos que permitan una distribución configurable desde el administrador (por skill, por cantidad de mensajes, en round-robin, etc.).</mark>

De esta manera, haciendo click sobre el ícono de "captura" de conversación, el agente atiende al usuario en espera y lo gestiona en su Inbox Personal.

<figure><img src="/files/Ne8LrAlj1ocAgw6CKyuO" alt=""><figcaption></figcaption></figure>

## Tratamiento de Contactos

Un contacto nuevo que inicia una conversación con la Empresa, no forma parte de la base de datos de campaña. Por este motivo y para un correcto tratamiento de su "Journey", deberá ser identificado e ingresado en base. En este escenario, se desplegará un mensaje para proceder a identificarlo con la leyenda: "*El contacto aún no ha sido registrado, puede identificarlo AQUI*".

<figure><img src="/files/BOLTWc3vKuIuIm2TBoKY" alt=""><figcaption></figcaption></figure>

Una vez que los datos han sido guardados, el contacto queda registrado en base y OMniLeads usará su identificador para futuras interacciones.

<figure><img src="/files/NGKp8MdgQ85UN5iOJ0MV" alt=""><figcaption></figcaption></figure>

El agente puede realizar diferentes acciones sobre una conversación:

* Transferir a otra agente (Transfer)
* Cerrarla con calificación de campaña (Call Disposition)
* Enviar Plantillas de Mensajes de "Respuesta Rápida" (Templates)
* Editar Contacto en Base de Datos (Editar Contacto)

## Transferencias

Así como un agente puede transferir una llamada a otro agente, el Orquestador de Canales permite al usuario contar con transferencia de mensajes entre agentes.&#x20;

<figure><img src="/files/Umy5N3DNNpdLUzEvwoK7" alt=""><figcaption></figcaption></figure>

En decir, un agente A puede transferir un mensaje que esté en su Inbox Personal a un agente B, para que éste lo siga gestionando oportunamente.

<figure><img src="/files/ej9b70kNrAtWHDvtWMGc" alt=""><figcaption></figcaption></figure>

## Calificaciones

A su vez, un contacto puede ser calificado en Meta Messenger a partir de las calificaciones asignadas a la campaña:

<figure><img src="/files/hYUncM62IgtMQyh19xja" alt=""><figcaption></figcaption></figure>

Clickeando sobre el ícono de Calificar, se desplegará un pop-up donde se podrá seleccionar una Opción de Calificación de Campaña y un campo de observaciones para anotaciones del agente.

<figure><img src="/files/QGhyjNVcttTdGsuow1Eh" alt=""><figcaption></figcaption></figure>

Al mismo tiempo, se pone a disposición del agente un histórico de calificaciones pertenecientes al contacto en cuestión, con el objetivo de brindar información del "journey" que ha tenido el usuario en interacciones pasadas (tab "Registros").

## Respuestas Rápidas

Las respuestas rápidas permiten enviar información de manera ágil y a punta de clicks, evitando pérdida de tiempo en redacción.

<div data-full-width="true"><figure><img src="/files/plBr3ztEIXs3AjnKMjsq" alt=""><figcaption></figcaption></figure></div>

Clickeando sobre el ícono "Templates", el agente accede a todos los mensajes que han sido generados como Recursos para la Campaña (ver sección de [Plantillas de Mensajes](/configuracion-whatsapp-business/plantillas-de-mensajes-y-grupos-horarios)), y puede enviarlos de manera rápida.

<figure><img src="/files/NUPG4xrlwVN4q6hiEmkp" alt=""><figcaption></figcaption></figure>

La reportería y estadística del canal puede ampliarse a partir de la sección de [Reportes de Mensajes](/metricas-grabaciones-y-supervision/reportes-de-instagram). También es posible acceder al detalle de las conversaciones desde el apartado de [Conversaciones de Instagram](/metricas-grabaciones-y-supervision/reportes-de-conversaciones-de-instagram).


# Correos Electrónicos

## Atención de correos

La toolbar de agente tiene la característica de permitir la gestión de múltples canales. Un agente puede estar en una videollamada, en una llamada preview, en pausa, en hold, y al mismo tiempo enviando o recibiendo menajes de Whatsapp/Redes Sociales, etc. todo en simultáneo y de manera transparente.

Cuando una campaña tiene activada la **canalidad de email**, la misma se encuentra apta para gestionar correos a través de su Inbox General.

Para ello, el agente debe contar con el skill para gestionar correos (configurable en el Grupo de Agente al que pertenece). A partir de esta skill, puede seleccionar el ícono correspondiente para tener acceso al **Inbox** de Campaña:

<figure><img src="/files/jsCmzBEvzqYd9kqwjPkh" alt=""><figcaption></figcaption></figure>

En el tab "Nuevo/Reabierto" (Inbox General),  aparecerán todos los correos entrantes de campaña que aún no han sido tomados por un agente. Mientras que en el tab "Asignados" (Inbox Personal) se registrarán todos los correos no cerrados aún por el agente.

<figure><img src="/files/PozaGNg3HjANqdlUeeen" alt=""><figcaption></figcaption></figure>

<mark style="color:red;">IMPORTANTE: A la fecha del presente Release, todos los agentes de campaña cuyo permiso de Acceso a la canalidad esté activado, podrán "tomar" correos en el Inbox General (Nuevos/Reabiertos) de manera individual y gestionarlos en su Inbox Personal. En futuros Releases, se anexarán nuevos algoritmos que permitan una distribución configurable desde el administrador (por skill, por cantidad de mensajes, en round-robin, etc.).</mark>

De esta manera, haciendo click sobre el correo en cuestión, el agente atiende dicha interacción y lo gestiona en su Inbox Personal.

## Acciones de Gestión y Cierre

Tan pronto se abre una conversación de Email, el agente tendrá a disposición diferentes acciones de gestión y cierre de la transacción. Describimos a continuación las siguientes:

* **Adjuntar Archivos**: permite al agente anexar archivos multimedia al correo prvio a enviarlos.
* **CC/CCO**: agrega destinatarios en copia / copia oculta.
* **Emojis**: permite agregar íconos/emojis al cuerpo del correo.
* **Responder y Desasignar**: responde el correo y el mismo vuelve al inbox general para que su gestión siga por parte de otros colaboradores. Este estado particular se visualizará en el tab "*Esperando al Cliente*", haciendo referencia a que se trata de un correo ya atendido y respondido, pero esperando una devolución del cliente.
* **Responder y Seguir Gestionando**: responde el correo y el mismo sigue formando parte del inbox personal para su tratamiento individual por parte del agente.
* **Responder y Calificar**: reponde el correo y a su vez procede a su cierre con una calificación definida en campaña. Dicho thread desaparece de los tabs de agente.
* **Desasignar**: el correo vuelve al inbox general para que su gestión siga por parte de otros colaboradores.
* **Datos de Contacto:** permite guardar / editar datos del contacto que está siendo gestionado.

<figure><img src="/files/PbIclKgj5bwyQATGPgem" alt=""><figcaption></figcaption></figure>

* **Calificar**: califica de forma directa la interacción, a los efectos de cerrar la transacción. A partir del pop-up visualizado, se desplegarán las calificaciones y subcalificaciones que han sido confiiguradas en campaña.

<figure><img src="/files/DTrv9iyFgoqklDRRHNAT" alt=""><figcaption></figcaption></figure>

La reportería y estadística del canal puede ampliarse a partir de la sección de [Reportes de Email](/metricas-grabaciones-y-supervision/reportes-de-email). También es posible acceder al detalle de las conversaciones desde el apartado de [Conversaciones de Email](/metricas-grabaciones-y-supervision/reportes-de-conversaciones-de-email).


# Métricas, grabaciones y supervisión

## Métricas, grabaciones y supervisión

### Grabaciones

Todas las campañas que operen con la opción de grabación de llamadas habilitada, generan sus archivos con grabaciones para posterior escucha o descarga. El módulo de *Grabaciones* de OMniLeads, permite la búsqueda de grabaciones utilizando los filtros como criterio de búsqueda.

* [Acceso al menú](https://documentacion-omnileads.readthedocs.io/es/latest/output_recordings.html)

### Output de las campañas entrantes

En ésta sección, se expone y analiza todo lo inherente al «output» generado por las campañas de llamadas entrantes.

* [Reportes de campañas entrantes](/metricas-grabaciones-y-supervision/reportes-de-campanas-entrantes)
* [Reporte general de una campaña entrante](/metricas-grabaciones-y-supervision/reportes-de-campanas-entrantes#reporte-general-de-una-campana-entrante)
* [Reporte de calificaciones](/metricas-grabaciones-y-supervision/reportes-de-campanas-entrantes#reporte-de-calificaciones)
* [Resultados de la base de contactos](/metricas-grabaciones-y-supervision/reportes-de-campanas-entrantes#resultados-de-la-base-de-contactos)

### Output de las campañas salientes

En ésta sección, se expone y analiza todo lo inherente al «output» generado por las campañas de llamadas salientes.

* [Reportes de campañas salientes](/metricas-grabaciones-y-supervision/reportes-de-campanas-salientes)
* [Reporte general de una campaña saliente](/metricas-grabaciones-y-supervision/reportes-de-campanas-salientes#reporte-general-de-una-campana-saliente)
* [Reporte de calificaciones](/metricas-grabaciones-y-supervision/reportes-de-campanas-salientes#reporte-de-calificaciones)
* [Resultados de la base de contactos](/metricas-grabaciones-y-supervision/reportes-de-campanas-salientes#resultados-de-la-base-de-contactos)

### Output de las campañas de Whatsapp

En ésta sección, se expone y analiza todo lo inherente al «output» generado por las campañas con Canalidad de Whatsapp activa.

* [Reportes de Whatsapp](/metricas-grabaciones-y-supervision/reportes-de-whatsapp)
* [Reportes de Conversaciones](/metricas-grabaciones-y-supervision/reportes-de-conversaciones-de-whatsapp)

### Reporte general de llamadas

Ésta sección, repasa cada informe generado por el reporte general de llamadas. Menú: *Reportes -> Llamadas*.

* [Reporte general de llamadas](/metricas-grabaciones-y-supervision/reporte-general-de-llamadas)

### Reportes general de agentes

Ésta sección, repasa cada informe generado por el reporte general de actividad de agente. Menú: *Reportes -> Agentes*.

* [Métricas de agente](/metricas-grabaciones-y-supervision/reportes-de-agente)

### Supervisión realtime

Ésta sección, repasa el módulo de supervisión de OMniLeads.

* [Supervisión](/metricas-grabaciones-y-supervision/supervision)
* [Visualización de status de agentes](/metricas-grabaciones-y-supervision/supervision#visualizacion-de-status-de-agentes)
* [Visualización de campañas entrantes](/metricas-grabaciones-y-supervision/supervision#visualizacion-de-campanas-entrantes)
* [Visualización de campañas salientes](/metricas-grabaciones-y-supervision/supervision#visualizacion-de-campanas-salientes)
* [Visualización de campañas dialer](/metricas-grabaciones-y-supervision/supervision#visualizacion-de-campanas-dialer)


# Grabaciones

## Acceso al menú

Para acceder al buscador de grabaciones, debemos llegar al menú *Buscar grabación*. A continuación, se depliega la vista del módulo, donde se listan las grabaciones del día de la fecha y un conjunto de parámetros que nos permiten filtrar y recuperar grabaciones de acuerdo a criterios como los siguientes:

* **Fecha:** Permite acotar la búsqueda a una fecha o rango de fechas en particular.
* **Tipo de llamada:** Se puede filtrar por tipo de llamada (manual, entrante, preview o de discador predictivo).
* **Teléfono del contacto:** Éste campo permite acotar la búsqueda a llamadas en las que un teléfono puntual esté involucrado.
* **Call ID:** Se puede buscar una llamada si contamos con el CallerID de la misma, haciendo una búsqueda rápida y efectiva.
* **Agente:** Se puede acotar la búsqueda a llamadas en las que un agente puntual esté involucrado en la grabación.
* **Campaña:** Filtro para listar llamadas asociadas a una cierta campaña.
* **ID de contacto externo:** Podemos buscar todas las llamadas de un contacto en particular, con el campo id\_externo definido en la base de contactos al momento de crear la misma.
* **Duración mínima:** Éste campo sirve para acotar la búsqueda a grabaciones con una cierta duración mínima.
* **Marcada:** Éste check sirve para recuperar grabaciones de llamadas que hayan sido observadas por el agente mediante el botón pertinente de su consola.
* **Calificada como gestión:** Como bien sabemos, en OMniLeads existen calificaciones ordinarias y calificaciones «de gestión», que son las que disparan los formularios de campaña. En éste caso, este check permite recuperar llamadas calificadas con dicho tipo de calificación. Por ejemplo: ventas, encuesta, etc.).
* **Grabaciones por página:** Definimos cuántas grabaciones queremos listar por página.
* **Calificación:** Permite filtrar registros de grabaciones utilizando como criterio el tipo de Calificación.
* **Generar zip de grabaciones:** Una vez listadas las grabaciones, podemos seleccionar todas las que la página permita y descargarlas en formato zip. La opción "Agregar username de agente y datos de contactos" puede ser tildada para obtener un reporte de CSV con la totalidad de la información del contacto (metadata).

<mark style="color:green;">Importante: La opción de "Agregar username de agente y datos de contactos" puede consumir muchos recursos de procesamiento.</mark>

<figure><img src="/files/pGSsJwOzbU7TLoEI34Dp" alt=""><figcaption></figcaption></figure>

*Figura 1: Grabaciones*

<figure><img src="/files/DPaOzaJW0drfKZu1wtG1" alt=""><figcaption><p>Despliegue de Registros de Grabación</p></figcaption></figure>


# Reportes de campañas entrantes

## Reportes de campañas entrantes

En ésta sección, se cubren todos los reportes disponibles para una campaña de llamadas entrantes.

<figure><img src="/files/cUay9xzIriR6vTJlzCKD" alt=""><figcaption></figcaption></figure>

*Figura 1: Vista de reportes de campaña*

## Reporte general de una campaña entrante

Éste reporte nos brinda un resumen de varios aspectos de la campaña. Cuestiones como cantidad de llamadas recibidas (atendidas y no atendidas) y realizadas desde la campaña, dispuestas en detalle con respecto a las calificaciones generadas por agentes.

Para acceder a éste reporte, se debe ingresar a la opción «Reportes» dentro de las Opciones de Campaña.

La primera información que nos arroja la vista, son las «llamadas que ingresaron» y las «llamadas realizadas» dentro la campaña.

Recordemos que en OMniLeads, un agente puede procesar una llamada manual y asociarla a una campaña entrante, por ejemplo si estaba atendiendo una llamada y la misma se corta, el agente podrá marcar al número desde la campaña entrante, pese a que se trata de una llamada manual saliente.

También nos brinda información de los tiempos promedios de espera y abandono de los intentos de llamadas al sistema hacia dicha campaña.

<figure><img src="/files/p2eA95SKSDFBuBSzEFFv" alt=""><figcaption></figcaption></figure>

*Figura 2: Llamadas entrantes / Llamadas realizadas*

Siguiendo el recorrido por la presente pantalla, nos vamos a encontrar con el primer botón de exportación de información a CSV. En éste caso, el botón nos permite exportar a «CSV / planilla de cálculos» todas las llamadas atendidas en la campaña.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/output_incamp_csv_contacted.png" alt=""><figcaption></figcaption></figure>

*Figura 3: CSV de llamadas atendidas*

Como se puede apreciar, el archivo presenta como primer columna, el teléfono desde el que se llamó a la campaña. Si bien el contacto puede tener asociado más de un teléfono, en éste reporte la columna «Número de teléfono» hace referencia al teléfono que originó la comunicación hacia la campaña y al cual se asocia la calificación de agente (columna «Calificación»).

Volvemos a recalcar el hecho de que en campañas entrantes no siempre se asocia un contacto a una base de contactos. Cuando una llamada entrante no tiene un contacto asociado o la campaña directamente no tiene una base asociada, entonces los mismos se listan con la etiqueta «fuera de base» en la columna base de datos de nuestra planilla de cálculos (figura 3).

Debajo del botón de exportar llamadas atendidas, encontramos un informe que representa la contabilización de las diferentes calificaciones que realizaron los agentes sobre las llamadas atendidas en la campaña (figura 4).

En éste caso y en general, toda información tabulada puede generarse como una exportación a CSV para poder disponer de los datos sobre una planilla de cálculos.

<figure><img src="/files/5Xva2XAmDLyAbYOovTYD" alt=""><figcaption></figcaption></figure>

*Figura 4: Calificaciones*

Continuando con la sucesión de informes presentados en la pantalla de reportes de la campaña, nos vamos a topar con un listado que contabiliza todas las llamadas que no fueron atendidas en la campaña, es decir intentos fallidos clasificados de acuerdo a si fueron llamadas abandonadas o llamadas expiradas por tiempo de espera agotado.

<figure><img src="/files/A0H9XDD9GXN6Ik9cuSXu" alt=""><figcaption></figcaption></figure>

*Figura 5: Llamadas no atendidas*

A continuación, se presenta un informe sobre la performance de cada agente que trabajó en la campaña. Se expone mediante la contabilización de cada calificación generada por cada agente. Además, se cuenta con un link que permite saltar a una pantalla con un informe más detallado sobre el agente en cuestión y su performance en la campaña en cuestión.

<figure><img src="/files/S0Bca2h0KkkMmBURXJc1" alt=""><figcaption></figcaption></figure>

*Figura 6: Contactos pendientes / Llamadas realizadas*

Entonces, si se hace click sobre uno de los agentes, se despliega una nueva pantalla con mayor detalle, en la que se contempla, por ejemplo, la información de:

* Tiempo acumulado en la campaña.
* Tiempo en pausa dentro de la campaña.
* Tiempo efectivo en llamadas dentro de la campaña.
* Cantidad de llamadas procesadas.
* Tiempo promedio de llamada.
* Cantidad de intentos de llamadas fallidas.
* Porcentajes de efectividad.

<figure><img src="/files/jdG638LfSyqDeWwxbjCg" alt=""><figcaption></figcaption></figure>

*Figura 8: Detalle de performance de agente*

Regresando al reporte de la campaña, como último ítem se presenta un listado de todas las llamadas procesadas en la campaña y su resultado. Se expone de manera separada todas las llamadas manuales que se hayan hecho en la campaña. Recordemos que en cualquier tipo de campaña, se pueden generar paralelamente llamadas manuales.

<figure><img src="/files/7vM80qzPQIVwIgo2kWRQ" alt=""><figcaption></figcaption></figure>

*Figura 9: Detalle de llamadas*

## Reporte de calificaciones

Éste reporte presenta cada contacto gestionado en la campaña junto a la calificación que ha recibido por parte del agente que procesó la llamada asociada al contacto. Además, se puede generar un archivo CSV con las calificaciones ordinarias por un lado, y otro con los contactos cuya calificación recibida fue del tipo «gestión».

<figure><img src="/files/JsNyUnix63fYtv6aRneU" alt=""><figcaption></figcaption></figure>

*Figura 10: Detalle de calificaciones de llamadas*

Es importante aclarar que en éste listado, también se contemplan aquellos contactos introducidos dinámicamente en la campaña por los agentes. Por ejemplo, contactos que llamaron a la campaña y no estaban en la base de contactos.

Por otro lado, cada contacto de campaña tiene disponible su **Histórico de Calificaciones**, con el objetivo de detectar al detalle cuál fue el **Customer Journey** transitado.

## Resultados de la base de contactos

Aquí se presenta un listado plano de la base de contactos asociada a la campaña y el resultado de la última llamada realizada por el contacto a la campaña entrante. La diferencia con el reporte anterior, es que aquí NO se listan los contactos que fueron introducidos en el transcurso de la campaña, sino que se busca hacer un mapeo entre la base de contactos asignada a la campaña y el resultado al ser procesada por la campaña.

<mark style="color:green;">Nota</mark>

<mark style="color:green;">Es importante remarcar que éste reporte es de suma utilidad en campañas preview y predictivas, siendo quizás no muy relevante en campañas entrantes. Ésto se debe a que en estas últimas, no suele pre-definirse una base de datos de contacto.</mark>

<figure><img src="/files/vMHLw9dQ7To56S7fDsK6" alt=""><figcaption></figcaption></figure>

*Figura 11: Resultado de base de contactos*


# Reportes de campañas salientes

Reportes de campañas salientes

En ésta sección, se cubren todos los reportes disponibles para una campaña de llamadas salientes.

<figure><img src="/files/5PmiMYjFpMFPees5RdFD" alt=""><figcaption></figcaption></figure>

*Figura 1: Vista de reportes de campaña*

## Reporte general de una campaña saliente

Éste reporte, nos brinda un resumen de varios aspectos de la campaña. Cuestiones como cantidad de llamadas pendientes para finalizar la campaña, cantidad y detalle de todas las llamadas, de los registros contactados y calificados, no contactados y de las calificaciones generadas por agente.

Para acceder a éste reporte, se debe ingresar a la opción «Reportes» dentro de la campaña.

La primera información que nos arroja la vista son los «Contactos pendientes de gestionar» vs. «total de llamadas realizadas» en la campaña. Éstas llamadas contemplan el hecho de que se pueder realizar más de una llamada a cada contacto de la base. Por lo tanto, es de esperar que el número de llamadas realizadas sea superior a la cantidad de contactos que existen en la base de la campaña.

<figure><img src="/files/8yHOTm7Z9dHWE09tKL5b" alt=""><figcaption></figcaption></figure>

*Figura 2: Llamadas pendientes / Llamadas realizadas*

Siguiendo el recorrido por la presente pantalla, nos vamos a encontrar con el primer botón de exportación de información a CSV. En éste caso, el botón nos permite exportar a «CSV / Planilla de cálculos» todos los teléfonos contactados (que atendieron) dentro de la campaña junto a su calificación.

<figure><img src="/files/RuzwMQ0SVDDujvNIY0uq" alt=""><figcaption></figcaption></figure>

*Figura 3: Llamadas contactadas*

La información generada se presenta como lo indica la siguiente figura:

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/output_outcamp_csv_contacted.png" alt=""><figcaption></figcaption></figure>

*Figura 4: CSV de llamadas contactadas*

Como se puede apreciar, el archivo presenta como primer columna el teléfono contactado. Si bien el contacto puede tener asociado más de un teléfono, en éste reporte la columna «Número de teléfono» hace referencia al teléfono contactado por la campaña y al cual se asocia la calificación de agente (columna «calificación»).

El próximo informe que se presenta, tiene que ver con la contabilización de las diferentes calificaciones que realizaron los agentes sobre las llamadas generadas en la campaña (figura 5).

En éste caso y en general, toda información tabulada tiene su exportación a CSV para poder disponer de los datos sobre una planilla de cálculos.

<figure><img src="/files/Gi7stfGXqlXaAoojNjTh" alt=""><figcaption></figcaption></figure>

*Figura 5: Lista de calificaciones de llamadas*

Continuando con la sucesión de informes presentados en la pantalla de reportes de la campaña, nos vamos a topar con un listado que contabiliza todas las llamadas que no fueron contactadas en la campaña, es decir intentos fallidos clasificados de acuerdo a lo que el sistema detecta como respuesta del proveedor de telefonía sobre el que se coloca la llamada.

<figure><img src="/files/9dmaMS0qAcQvjYwg6ULT" alt=""><figcaption></figcaption></figure>

*Figura 6: Detalle de llamadas no atendidas*

A continuación, se presenta un informe sobre la performance de cada agente que trabajó en la campaña. Se expone mediante la contabilización de cada calificación generada por cada agente. Además, se cuenta con un link que permite saltar a una pantalla con un informe más detallado sobre el agente en cuestión y su performance en la campaña en cuestión.

<figure><img src="/files/Scek3QkAKWL4P5vC7Kvc" alt=""><figcaption></figcaption></figure>

*Figura 7: Performance de agente*

Entonces, si se hace click sobre uno de los agentes, se despliega una nueva pantalla con mayor detalle, en la que se contempla, por ejemplo, la información de:

* Tiempo acumulado en la campaña.
* Tiempo en pausa dentro de la campaña.
* Tiempo efectivo en llamadas dentro de la campaña.
* Cantidad de llamadas procesadas.
* Tiempo promedio de llamada.
* Cantidad de intentos de llamadas fallidas.
* Procentajes de efectividad.

<figure><img src="/files/38vLfxG4KLXZRXJ6f1eA" alt=""><figcaption></figcaption></figure>

*Figura 8: Detalle de performance de agente*

Regresando al reporte de la campaña, como último ítem se presenta un listado de todas las llamadas generadas por la campaña y su resultado. Se expone de manera separada, todas las llamadas manuales que se hayan hecho en la campaña. Recordemos que en cualquier tipo de campaña, se pueden generar paralelamente llamadas manuales.

<figure><img src="/files/maoVO5GLMwS5XceqhQMZ" alt=""><figcaption></figcaption></figure>

*Figura 9: Llamadas totales*

## Reporte de calificaciones

Éste reporte presenta cada contacto gestionado en la campaña junto a la calificación que ha recibido por parte del agente que procesó la llamada asociada al contacto. Además, se puede generar un archivo CSV con las calificaciones ordinarias por un lado, y otro con los contactos cuya calificación recibida fue del tipo «gestión».

<figure><img src="/files/6nUh0IkwadBcRBmc6UtW" alt=""><figcaption></figcaption></figure>

*Figura 10: Detalle de calificaciones de llamadas*

Es importante aclarar, que en éste listado también se contemplan aquellos contactos introducidos dinámicamente en la campaña por los agentes. Por ejemplo, contactos referidos de otro contacto.

Desplegando algún contacto calificado, veremos el formulario completo asociado a esa calificación así como su **Histórico de Calificaciones**, lo que nos permite detectar al detalle cuál fue el **Customer Journey** transitado.

<figure><img src="https://documentacion-omnileads.readthedocs.io/es/latest/_images/output_outcamp_calldispositions_2.png" alt=""><figcaption></figcaption></figure>

Éste reporte es accesible desde cualquier estadío de la campaña.

## Resultados de la base de contactos

Aquí se presenta un listado plano de la base de contactos asociada a la campaña y el resultado en la medida que avanza la campaña. La diferencia con el reporte anterior es que aquí NO se listan los contactos que fueron introducidos en el transcurso de la campaña, sino que se busca hacer un mapeo entre la base asignada a la campaña y el resultado al ser procesada por la campaña.

NOTA: en el caso de Campañas Salientes Preview, el botón "Contabilizar todos los contactos" permite incluir aquellos que han sido "desactivados" previamente por motivos de negocio, tal cual se explica en la sección de [Desactivación de Contactos Preview](/campanas-de-contacto/campana-preview#gestion-de-la-entrega-de-contactos).

<figure><img src="/files/8DYdErvO9NcOBvAPcxko" alt=""><figcaption></figcaption></figure>

*Figura 11: Resultados de la base de contactos*




---

[Next Page](/llms-full.txt/1)

