Conectar cualquier proveedor de SMS (proveedor HTTP genérico)
MonoPbx envía y recibe SMS a través de un proveedor. Twilio viene integrado. Para cualquier otro proveedor que tenga una API HTTP no necesita código: en la consola de administración describe la solicitud que envía un mensaje, cómo leer la respuesta del proveedor y cómo leer sus callbacks (mensajes entrantes e informes de entrega). Todo lo siguiente se hace en la consola web; nada requiere la API.
Necesita el rol Propietario (o un rol personalizado con el permiso integrations:write). Enviar mensajes también requiere messaging:write.
:::info Las credenciales solo se escriben El token de API y el secreto del callback que escribe aquí se cifran con la clave de su empresa al guardar. Nunca se vuelven a mostrar, ni siquiera a usted, y nunca aparecen en la vista previa, en el registro de auditoría ni en un mensaje de error. Para cambiarlos debe escribirlos todos de nuevo. :::
El proveedor de ejemplo
El tutorial usa un proveedor ficticio, "ExampleSMS", con esta API:
POST https://api.examplesms.com/v2/messages
Authorization: Bearer <token>
{"from": "+15550100199", "to": "+15550100100", "text": "hi", "ref": "<your id>"}
-> 200 {"data": {"id": "msg_91"}} accepted
-> 400 {"error": {"code": "INVALID_DEST"}} refused for good
-> 429 or 5xx try later
Callbacks (POST, header X-Signature: sha256=<hex hmac of the body>):
{"events": [{"kind": "mo", "id": "in_5", "from": "15550100100", "to": "15550100199", "text": "yes"},
{"kind": "dlr", "message": "msg_91", "state": "DELIVRD"}]}
1. Agregar el proveedor
Abra Consola de administración, SMS (la página se titula Proveedores de SMS) y elija Nuevo proveedor.
- Nombre:
ExampleSMS. - Tipo:
Proveedor HTTP genérico. Se abre el formulario de la solicitud.
2. Describir la solicitud
En Solicitud al proveedor:
| Campo | Valor |
|---|---|
| Método | POST |
| URL | https://api.examplesms.com/v2/messages |
| Nombre y valor del encabezado (elija Agregar encabezado) | Authorization y Bearer {{secret.api_token}} |
| Formato del cuerpo | json |
| Plantilla del cuerpo | {"from":"{{from}}","to":"{{to}}","text":"{{body}}","ref":"{{message_id}}"} |
Los marcadores se escriben entre dobles llaves. Puede usar from, to, body, message_id, segments, timestamp y secret.NOMBRE para una credencial. El esquema, el host y el puerto de la URL deben ser texto plano (sin marcadores), y la dirección debe ser HTTPS público: las direcciones privadas y locales siempre se rechazan.
Cada secret.NOMBRE que use agrega un campo de contraseña en Credenciales, al final del formulario.
3. Describir la respuesta
En Lectura de la respuesta:
- Ruta del id de mensaje del proveedor:
$.data.id. Así los informes de entrega encuentran el mensaje después. - Elija Agregar regla y configure Estados HTTP como
400, Resultado comoRechazado definitivamentey Ruta del código como$.error.code.
Sin reglas, una respuesta 2xx se acepta, las respuestas 408, 425, 429 y 5xx se reintentan más tarde, y cualquier otra se rechaza.
4. Describir los callbacks
En Callbacks del proveedor, marque El proveedor nos llama de vuelta.
- Firma:
Provider HMAC-SHA256. Configure Encabezado de la firma comoX-Signature, Texto antes de la firma comosha256=y deje la codificación enhex. - Si el proveedor también envía una marca de tiempo firmada, escriba su encabezado en Encabezado de la marca de tiempo. Mientras esté vacío, el formulario muestra una advertencia: sin una marca de tiempo firmada, un callback capturado puede reproducirse.
- Ubicación de los eventos:
$.events[*]. Ruta del tipo de evento:$.kind, conmoen Tipos que son mensajes entrantes ydlren Tipos que son informes de entrega. - Marque Leer mensajes entrantes y configure las rutas
$.id,$.from,$.toy$.text. - Marque Leer informes de entrega, configure Ruta del id del mensaje como
$.messagey Ruta del estado como$.state, y luego elija Agregar estado y traduzcaDELIVRDaEntregado. AgregueUNDELIVaFallidoyACCEPTDaEnviadode la misma forma.
5. Revisar antes de guardar
La sección Vista previa, al final, la llena el servidor mientras escribe. No se envía nada ni se usa ninguna credencial.
- Muestra la solicitud exacta que se enviaría, con las credenciales como marcadores, por ejemplo
<secret.api_token>. - Pegue la respuesta de ejemplo del proveedor en Cuerpo de la respuesta de ejemplo, por ejemplo
{"data": {"id": "msg_91"}}, y la vista previa muestra cómo se lee: aceptado, con el id del proveedormsg_91. - Pegue un callback de ejemplo en Cuerpo del callback de ejemplo para ver los eventos que produce.
- Los errores aparecen en una lista con el nombre del campo, por ejemplo
send.url. Un recuadro amarillo enumera los ajustes que son válidos pero probablemente no son los que quiere, por ejemplo que el id del mensaje no forma parte de la solicitud.
6. Escribir las credenciales y guardar
Complete los dos campos de contraseña que pide el formulario:
- Secreto: api_token: su token de API de ExampleSMS.
- Secreto para firmar el webhook: un secreto de al menos 16 caracteres que también escribe en el proveedor como la clave que firma los callbacks.
Elija Guardar. El proveedor aparece en la lista con sus credenciales marcadas como Almacenadas.
7. Agregar un número
Abra Números en las pestañas de SMS y elija Agregar número. Escriba el número en formato internacional (+15550100199), elija ExampleSMS como proveedor y, opcionalmente, una etiqueta y la ruta que siguen las conversaciones nuevas (un usuario, una extensión, una cola o un grupo de timbrado).
8. Apuntar el proveedor a MonoPbx
De regreso en Proveedores, copie la Dirección de callback de ExampleSMS (https://<su dirección>/hooks/sms/...) en la consola del proveedor como URL de callback, y configure allí el mismo secreto de firma. La dirección es secreta y no se puede adivinar. Si se filtra, elija Nueva dirección en el proveedor: la anterior deja de funcionar de inmediato.
Su instalación debe ser accesible por HTTPS público para que el proveedor pueda llamarla.
9. Probar
Elija Probar en el proveedor, seleccione uno de sus números como remitente, escriba su propio número móvil y elija Enviar prueba. El resultado muestra lo que respondió el proveedor:
- Aceptado por el proveedor, con su id de mensaje;
- Rechazado por el proveedor, con el código de sus reglas (por ejemplo
INVALID_DEST); - Error temporal, que un mensaje real volvería a intentar.
La prueba envía un mensaje real. No crea ninguna conversación, se registra en el registro de auditoría sin números ni texto, y está limitada a 10 por minuto para la empresa y 3 por destinatario. Solo los números del proveedor pueden ser el remitente.
Después envíe un mensaje real desde SMS en la navegación principal, y observe cómo su estado de entrega cambia de En cola a Enviado y Entregado.
Cambiar la configuración después
Abra el proveedor con Editar. Las credenciales no se muestran; deje vacíos todos los campos de contraseña para conservarlas.
Si su cambio enviara las credenciales guardadas a otro lugar (otra URL, otro método, otro encabezado, o una credencial colocada en otra parte de la solicitud), la consola lo rechaza y le pide escribir las credenciales de nuevo, para que nadie que pueda editar la configuración pueda leer las credenciales apuntando el proveedor a un servidor propio.
Uso
Uso en las pestañas de SMS muestra los mensajes y segmentos por día, proveedor y dirección. Los proveedores cobran por segmento: 160 caracteres en el alfabeto GSM (153 por parte de un texto más largo), o 70 (67) cuando el texto tiene otros caracteres.