Skip to content

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

{"event": "callInfoRespNum", "uniqueId": "unique_call_id", "intNum": "short_PBX_extension", "extNum": "external_subscriber_number"}

Recibirás en respuesta:

{"responsibleNumbers":["short_number_of_responsible","short_number_of_second_responsible(if_any)"]}

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á:

{"error":"no persons responsible"}


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”:

7TWeHF.png


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-reload
sudo systemctl restart crm-asterisk-listener


  • Para desactivar la integración, ejecuta:
sudo systemctl stop crm-asterisk-listener
sudo 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)


Ir a