Automatizar el envío de SMS con n8n a través de la API de OVHcloud
Objetivo
Esta guía explica cómo integrar la API SMS de OVHcloud en n8n, para enviar automáticamente SMS desde sus workflows. Aprenderá a configurar una llamada HTTP firmada a través de la API de OVHcloud para desencadenar el envío de un mensaje.
Descubra cómo enviar SMS desde n8n utilizando la API de OVHcloud.
Requisitos
- Tener una cuenta SMS de OVHcloud y un remitente SMS válido.
- Tener un VPS de OVHcloud, un servidor o una máquina local con n8n instalado y accesible.
Procedimiento
Si aún no ha instalado n8n en su VPS, siga las instrucciones de nuestro tutorial "Instalar n8n en un VPS de OVHcloud".
Paso 1 – Generar las credenciales de la API de OVHcloud
Antes de poder enviar SMS a través de la API de OVHcloud, debe disponer de los tres identificadores siguientes:
- Application key
- Application secret
- Consumer key
Para ello, consulte la sección Uso avanzado: combinar las API de OVHcloud con una aplicación de nuestro tutorial "Primeros pasos con las API de OVHcloud", y copie y guarde los tres identificadores Application key, Application secret y Consumer key.
Paso 2 — Crear el workflow y los nodos
Conéctese a su interfaz de n8n y haga clic en el botón Create Workflow.
Cree los siguientes nodos (vacíos por ahora):
Set - Credentials: de tipo Edit Fields (Set).Set - Request Details: de tipo Edit Fields (Set).Merge: de tipo Merge.Sign - Generate Signature: de tipo Code.SMS - Send: de tipo HTTP Request.
Para más detalles sobre la creación de nodos, consulte la documentación oficial de n8n.
Conecte los nodos en este orden:

El nodo Merge recibe las salidas de los dos nodos Set - Credentials y Set - Request Details, y luego alimenta Sign - Generate Signature, que alimenta SMS - Send.
Paso 3 — Configurar el nodo Set – Credentials
Agregue los siguientes parámetros en su nodo Set - Credentials:
- Mode:
Manual Mapping.
| Nombre | Valor |
|---|---|
| applicationKey | "SU_APPLICATION_KEY" |
| consumerKey | "SU_CONSUMER_KEY" |
| serviceName | "SU_CUENTA_SMS_DE_OVHCLOUD" (por ejemplo: "sms-ab12345-1") |
| applicationSecret | "SU_APPLICATION_SECRET" |
| timestamp | {{ Math.floor(Date.now() / 1000) }} |
Paso 4 — Configurar el nodo Set – Request Details
Configure el nodo Set - Request Details:
- Mode:
Manual Mapping. - Agregue un campo llamado
bodyde tipoObjectcon el contenido siguiente (ejemplo mínimo).
- El número del destinatario (
receivers) debe estar en formato internacional y comenzar, por ejemplo, por "+336" o "+337" para un número de móvil francés. - El remitente debe estar definido en su cuenta de OVHcloud. Para realizar una prueba sin declarar un remitente y utilizar un número corto, reemplace
"sender": "Your_sender"por"senderForResponse": true.
Paso 5 — Configurar el nodo Merge
Configure el nodo Merge:
- Mode:
Combine. - Combine by:
Position. - Number of Inputs:
2.
Conecte Set - Credentials en Input 1 y Set - Request Details en Input 2.
En salida (output), debe tener al mismo nivel: applicationKey, applicationSecret, consumerKey, serviceName, timestamp y body.
Paso 6 — Configurar el nodo Sign – Generate Signature
Configure el nodo Sign - Generate Signature:
- Mode:
Run once for each item. - Language:
JavaScript.
Pegue el código siguiente:
No utilice HMAC aquí (OVHcloud espera "$1$" + SHA1(AppSecret + … + Timestamp)). El parámetro bodyString es exactamente el JSON que se enviará después (sin otro stringify). La URL firmada debe ser estrictamente idéntica a la del envío (mismo host, sin / final adicional).
Paso 7 — Configurar el nodo SMS - Send
Configure el nodo SMS - Send:
- Method:
POST. - URL:
{{$json.url}}. - Authentication:
None. - Send Headers:
ON. - Specify Headers:
Using fields below.
Agregue los siguientes parámetros de header:
| Nombre | Valor |
|---|---|
| Content-Type | application/json |
| X-Ovh-Application | {{$json.applicationKey}} |
| X-Ovh-Consumer | {{$json.consumerKey}} |
| X-Ovh-Timestamp | {{$json.timestamp}} |
| X-Ovh-Signature | {{$json.signature}} |
Active el Send Body y agregue los siguientes parámetros de body:
| Nombre | Valor |
|---|---|
| Body Content Type | Raw |
| Content Type | application/json |
| Body | {{$json.bodyString}} |
Probar su workflow
Ejecute su workflow. Los siguientes pasos se ejecutan:
- Set - Credentials: pone a disposición applicationKey, consumerKey, serviceName (y eventualmente applicationSecret si no lo ha externalizado).
- Set - Request Details: prepara el objeto body conteniendo el cuerpo del SMS.
- Merge (Combine/Position): fusiona las dos salidas de los nodos anteriores.
- Sign - Generate Signature (Code): calcula bodyString, timestamp, signature (SHA‑1 simple) y la URL de llamada.
- SMS - Send (HTTP Request): envía el POST hacia la URL con el body {{$json.bodyString}} y los headers X-Ovh-*.
El mensaje se transmite entonces a través de la API de OVHcloud a su destinatario.
Errores frecuentes
Invalid_signature (400)
- La URL firmada es diferente de la URL enviada (host diferente,
/final de más). - El cuerpo firmado es diferente del cuerpo enviado (re-
stringify, espacios, orden, etc.). - El reloj local está demasiado desincronizado. Utilice mejor la hora del servidor OVHcloud (ver la parte Industrialización y seguridad).
SMS sender ... does not exist (403)
El sender (remitente) no está declarado/validado en su área de cliente de OVHcloud. Pruebe con "senderForResponse": true o valide su remitente.
Bad Request
- Compruebe en cada nodo el nombre y el valor de sus parámetros.
- Asegúrese de que los headers y los body sean completos.
- Compruebe que la URL del nodo
SMS - Sendrespete bien el siguiente formato:https://eu.api.ovh.com/1.0/sms/sms-ab12345-1/jobs
Errores de nodo Code
- No utilice
require('crypto')en n8n sino más bien SHA-1 pur JavaScript arriba. - Utilice el modo por item y evite llamar a
$input.all()en su código.
Industrialización y seguridad
Si desea industrializar su workflow y protegerlo más, aplique los siguientes consejos.
Hora del servidor OVHcloud
Agregue un nodo de tipo HTTP Request antes de la firma:
GET https://eu.api.ovh.com/1.0/auth/time- Recupere el valor y reemplace
timestamppor este valor exacto.
No hacer transitar el applicationSecret
- Almacénelo como variable de entorno (por ejemplo:
OVH_APP_SECRET) y léalo en el nodo de tipo Code (Sign - Generate Signature) a través de$env.OVH_APP_SECRET, o a través de la funcionalidad Secrets/Credentials de n8n. - A falta de ello, nunca devuelva el secreto en la salida del nodo.
Gestión de caracteres
Si su mensaje contiene emojis/acentos no GSM, utilice "coding": "ucs2".
Más información
Interactúe con nuestra comunidad de usuarios.