FreePBX
FreePBX es un sistema telefónico de software libre que permite gestionar las llamadas en una empresa.
Funcionalidades
- Llamadas telefónicas por Internet: usa la tecnología VoIP, permitiendo llamadas a través de Internet en lugar de la red telefónica convencional.
- Distribución automática de llamadas: ayuda a enrutar automáticamente las llamadas entrantes a los números o departamentos correctos dentro de la empresa.
- Menús de voz interactivos (IVR): puedes configurar menús de voz interactivos para que el llamante elija el departamento adecuado pulsando teclas.
- Buzón de voz: si nadie puede atender la llamada, FreePBX puede grabar un mensaje de voz que podrá ser escuchado posteriormente.
- Llamadas en conferencia: puedes organizar conferencias telefónicas para que varias personas participen simultáneamente.
- Grabación de llamadas: puedes grabar conversaciones telefónicas para escucharlas o analizarlas más tarde.
- Integración con otros sistemas: FreePBX puede integrarse con varios CRM, incluido Planfix.
Conexión
Puedes conectar FreePBX con Planfix de dos maneras:
Ten en cuenta que el equipo de Planfix no configura Asterisk en el equipo del cliente ni presta consultorías sobre estos asuntos.
API de Planfix para telefonía
- Usando este método, solo puedes recibir eventos de llamadas en Planfix; es decir, cuando ocurre una llamada, aparecerá una ficha de llamada en la pestaña activa de Planfix.
- No puedes realizar llamadas desde Planfix.
- Para obtener las grabaciones de llamadas necesitas además configurar apache/nginx (paso 5).
Paso 1
En el servidor, edita /etc/asterisk/extensions_override_freepbx.conf (archivo de ejemplo) para que contenga los siguientes 3 contextos:
- [macro-dialout-one-predial-hook]
- [macro-dialout-trunk-predial-hook]
- [macro-hangupcall]
Para [macro-hangupcall], la forma exacta no es obligatoria tal como en el ejemplo.
Busca el contexto [macro-hangupcall] en extensions_additional.conf — cópialo — y añade la siguiente línea al principio:
exten => s,1,Macro(hangupcall-send-post)
Paso 2
Copia todos los contextos del ejemplo en extension_custom.conf. Esto también se puede hacer desde la interfaz de FreePBX.
Paso 3
Añade 3 líneas a globals_custom.conf y reemplaza {…} con los valores correspondientes:
- PBX_URL = {…} — URL de tu PBX
- PF_URL = {…} — dirección para recibir las solicitudes
- PF_KEY = {…} — token de autorización de Planfix
Paso 4
- En Planfix, ve a Account management — Integrations — Virtual PBXs — Planfix API for telephony.
- Rellena la dirección de la PBX para que Planfix sepa aceptar eventos procedentes de ese sitio o dirección.
Paso 5
Para obtener las grabaciones necesitas hacerlas accesibles externamente a través de un servidor web. Para ello, utilizando el Apache incluido en FreePBX, añade un enlace a la carpeta de grabaciones. La carpeta debe tener el propietario, grupo y permisos correctos — 775.
- Crear el enlace:
ln -s /var/spool/asterisk/monitor /var/www/html/monitor
- Editar permisos y propietario:
chmod -R 775 /var/www/html/monitor/chown -R asterisk:asterisk /var/www/html/monitor/
Si usas una compilación sin Apache — configura un ajuste similar para tu servidor web.
Integración con FreePBX
(FreePBX 16+ / Asterisk 18+)
Antes de empezar, inserta lo siguiente en tu archivo de ajustes personalizados extensions_override_freepbx.conf:
[macro-dialout-trunk-predial-hook]
exten => s,1,Gosub(planfix-mark-outbound,s,1)
same => n,MacroExit()
[planfix-mark-outbound]
exten => s,1,NoOp(Outgoing call from ${CALLERID(all)} to ${EXTEN})
same => n,Set(__CRM_DIRECTION=OUTBOUND)
same => n,NoOp(Setting CRM_DIRECTION=${CRM_DIRECTION})
same => n,Return()
[macro-dialout-one-predial-hook]
exten => s,1,Gosub(planfix-mark-inbound,s,1)
same => n,MacroExit()
[macro-dial-ringall-predial-hook]
exten => s,1,Gosub(planfix-mark-inbound,s,1)
same => n,MacroExit()
[planfix-mark-inbound]
exten => s,1,NoOp(Incoming call to ${EXTEN} from ${CALLERID(all)})
same => n,Set(__CRM_DIRECTION=INBOUND)
same => n,NoOp(Setting CRM_DIRECTION=${CRM_DIRECTION})
same => n,Return()
Paso 1
Abre FreePBX y añade un usuario: Settings — Asterisk REST Interface Users — Add User.
Rellena los siguientes campos:
- REST Interface User Name: nombre de usuario
- REST Interface User Password: contraseña
- Password Type: Plain Text
- Read Only: No
Cópialo (necesario en el paso 4) y guarda.
Paso 2
Añade un manager: Settings — Asterisk Manager Users — Add Manager:
- Name: nombre
- Secret: deja el valor por defecto o establece el tuyo
- Es aconsejable no cambiar las demás configuraciones.
Cópialo (necesario en los pasos 4 y 6) y guarda.
Paso 3
Guarda los ajustes haciendo clic en Apply Config en la esquina superior derecha.
Paso 4
En Planfix ve a Primary Account Admin — Integrations — Virtual PBXs — FreePBX.
Rellena:
- PBX address: la URL de tu PBX (incluyendo protocolo y puerto donde ARI esté disponible)
- ARI User Name: Name del paso 1
- ARI User Password: Password del paso 1
Copia la URL del script receptor y guarda la integración.
Paso 5
En el servidor:
- En /var/spool/asterisk/ crea un enlace simbólico llamado recording que apunte a la carpeta monitor (en el mismo directorio). Comando:
ln –s /var/spool/asterisk/monitor /var/spool/asterisk/recording
Paso 6
- Ve a /etc/asterisk/
- Crea una carpeta scripts si no está ya presente
- En la carpeta scripts crea un archivo ami_listener.py
Paso 7
Rellena ami_listener.py según el ejemplo, reemplazando:
- Your_user_name: por el Name del paso 2
- Your_user_password: por el Secret del paso 2
- Your_planfix_endpoint_url: por la URL del script receptor del paso 4
Paso 8
Haz el archivo ejecutable con:
chmod +x /etc/asterisk/scripts/ami_listener.py
Paso 9
- Ve a /lib/systemd/system/
- Crea un archivo crm-asterisk-listener.service
- Rellena crm-asterisk-listener.service según el ejemplo
Paso 10
Añade el archivo al arranque y inicia el servicio con los siguientes comandos:
sudo systemctl enable crm-asterisk-listener
sudo systemctl start crm-asterisk-listener
Trabajar con versiones antiguas de Asterisk
Para Asterisk 13+ necesitas añadir propiedades adicionales a los archivos de configuración.
Para /etc/asterisk/cdr.conf
[general] enable = yes batch = no unanswered = yes
Para /etc/asterisk/cdr_manager.conf
[general] enable = yes unanswered = yes
Ten en cuenta que la recuperación de grabaciones de llamadas solo funcionará para Asterisk 14+.
Métodos adicionales
Puedes invocar estos métodos tú mismo desde el dialplan.
Obtener información sobre Supervisores
Puedes enviar una solicitud POST a la URL indicada en la integración que contenga:
Content-type: application/json
Recibirás en respuesta:
O
Si para el contacto:
- no hay Supervisores
- no están asignados números cortos
- el supervisor es el empleado cuyo número fue llamado ("short_PBX_extension")
Entonces la respuesta contendrá:
Notificación de llamada perdida
- Para usar este método, en la configuración de la integración selecciona — “Record missed calls only by a separate special request”:
Puedes enviar una solicitud POST a la URL indicada en la integración que contenga:
Content-type: application/json
{"event": "callMissedNotify", "uniqueId": "unique_call_id", "intNum": "short_PBX_extension_to_receive_missed_call_notification", "extNum": "external_subscriber_number"}
Si existe un empleado con ese número corto, recibirá una notificación de llamada perdida.
La respuesta a la solicitud POST estará vacía.
Notas de funcionamiento
- Asegúrate de que la librería "panoramisk" esté instalada para que el script funcione. Puede instalarse con 'pip install panoramisk'.
- Si el script no se inicia inmediatamente o hiciste cambios en ami_listener después de ejecutar los comandos, lo siguiente puede ayudar:
sudo systemctl daemon-reloadsudo systemctl restart crm-asterisk-listener
- Para desactivar la integración, ejecuta:
sudo systemctl stop crm-asterisk-listenersudo systemctl disable crm-asterisk-listener
- En todos los métodos de conexión debes tener configurados:
- extensiones internas (Extensions)
- rutas de entrada y salida (Inbound/Outbound Routes)