Notificaciones de WhatsApp disparadas por eventos externos

Puedes enviar notificaciones por HSMs cuando se disparen eventos externos en aplicaciones ajenas a Cliengo .

Si cuentas con el servicio activo de HSMs de Cliengo, podrás desde una aplicación externa enviar un HSM por fuera del Manager de Cliengo cuando se dispare un determinado evento.

En este articulo te daremos las herramientas para que puedas configurarlo. 

Request

Para enviar eventos externos es necesario contar con un api key, a enviar en un header de nombre apikey. Si su empresa no cuenta con un apikey comuniquese con soporte de Cliengo para que le provean una a hola@cliengo.com

curl --location '<http://technical-solutions-api.cliengo.com/website/{websiteId}/hsm/notifications>' \\
--header 'Content-Type: application/json' \\
--header 'apikey: {apikey}' \\
--data '{
"templateId": "7",
"destination": "542994843975",
"params": {
"name": "Julieta"
}
}'

El endopint requiere las siguientes entradas:

  • apikey clave privada de la empresa, en el header.
  • websiteId identificador del canal de Cliengo, en la URL.
  • Body, cuyo payload contiene:
    • templateId: ID del la plantilla a enviar indicada en HSM Manager.
    • destination: número de teléfono de destino.
    • params: objeto JSON con los valores de las variables de la plantilla (en caso que la plantilla contenga variables). Debe enviarse vacío si no hay variables.

Ejemlpo:

{
"templateId": 1,
"destination": "542994843975",
"params": {
"name": "Santiago"
}
}

Dependiendo el tipo de plantilla, el payload será distinto.

Para el caso de plantillas de tipo imagen, video y documento, se puede inclurir un objeto media para indicar el archivo multimedia a enviar. Si no se envía este objeto, el archivo multimedia será el indicado al crear la plantilla.

El media.link debe cumplir los siguientes requisitos:

  • Debe ser una URL pública que resuelva a un archivo multimedia por el método GET.
  • Debe permitir requests por el metodo HEAD.
  • Debe devolver un header content-type y su mimetype debe corresponder con el tipo de plantilla.
  • Debe devolver un header content-length y el tamaño debe ser menor al máximo para ese tipo de plantilla.

Caso: Image

Requisitos:

  • Valid ContentTypes:
    • image/jpeg
    • image/png
  • MaxFileSize:
    • 2000000 // (2 MB)

Ejemplo:

{
"templateId": 1,
"destination": "542994843975",
"params": {
"name": "Santiago"
},
"media": {
"link": "<https://plus.unsplash.com/premium_photo-1661889099855-b44dc39e88c9>"
}
}

Caso: Video

Requisitos:

  • Valid ContentTypes:
    • audio/mpeg
    • video/mp4
  • MaxFileSize:
    • 20000000 // 20 MB

Ejemplo:

{
"templateId": 1,
"destination": "542994843975",
"params": {
"name": "Santiago"
},
"media": {
"link": "<https://edisciplinas.usp.br/pluginfile.php/5196097/mod_resource/content/1/Teste.mp4>"
}
}

Caso: Document

Requisitos:

  • Valid ContentTypes:
    • application/pdf
    • application/vnd.openxmlformats-officedocument.wordprocessingml.document
    • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • MaxFileSize:
    • 2000000 // (2 MB)

Ejemplo:

{
"templateId": 1,
"destination": "542994843975",
"params": {
"name": "Santiago"
},
"media": {
"link": "<https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf>"
"filename": "PDF name here"
}
}

Response

El API puede responder con los siguientes códigos:

  • 200:SUCCESS
  • 400:INVALID_BODY, INVALID_CONTENT_LENGTH, INVALID_CONTENT_TYPE, HEAD_METHOD_NOT_ALLOWED
  • 401:UNAUTHORIZED
  • 404:NOT_FOUND
  • 409:FILE_SIZE_EXCEEDED

A continuación se muestran algunos ejemplos

Éxito

SUCCESS

{
"code": "SUCCESS",
"statusCode": 200,
"description": "Resource successfully created",
"result": "HSM notification sent to 542994231917."
}

Error

SUCCESS

{
"code": "SUCCESS",
"statusCode": 200,
"description": "Resource successfully created",
"result": "HSM notification sent to 542994231917."
}

INVALID_BODY

{
"code": "INVALID_BODY",
"statusCode": 400,
"description": "Invalid body, query or params",
"result": [
{
"message": "\\"templateId\\" is required",
"path": [
"templateId"
],
"type": "any.required",
"context": {
"label": "templateId",
"key": "templateId"
}
},
{
"message": "\\"destination\\" is required",
"path": [
"destination"
],
"type": "any.required",
"context": {
"label": "destination",
"key": "destination"
}
},
{
"message": "\\"params\\" is required",
"path": [
"params"
],
"type": "any.required",
"context": {
"label": "params",
"key": "params"
}
}
]
}

INVALID_CONTENT_LENGTH

{
"code": "INVALID_CONTENT_LENGTH",
"statusCode": 400,
"description": "Cant get content-lenght header",
"result": {
"link": "<https://cima.aemps.es/cima/pdfs/es/p/83321/P_83321.pdf>",
"contentLength": null,
"contentType": "application/pdf",
"templateType": "DOCUMENT",
"maxFileSize": 2000000
}
}

INVALID_CONTENT_TYPE

{
"code": "INVALID_CONTENT_TYPE",
"statusCode": 400,
"description": "content-type does not match valid values.",
"result": {
"link": "<https://edisciplinas.usp.br/pluginfile.php/5196097/mod_resource/content/1/Teste.mp4>",
"contentLength": 1570024,
"contentType": "video/mp4",
"templateType": "IMAGE",
"allowedMimeTypes": [
"image/png",
"image/jpeg"
]
}
}

HEAD_METHOD_NOT_ALLOWED

{
"code": "HEAD_METHOD_NOT_ALLOWED",
"statusCode": 400,
"description": "The link does not support method HEAD.",
"result": {
"link": "<https://picsum.photos/200>"
}
}

UNAUTHORIZED

{
"code": "UNAUTHORIZED",
"statusCode": 401,
"description": "Invalid ApiKey",
"result": {
"websiteId": "64652663e65219005dc61bd6"
}
}

NOT_FOUND

{
"code": "NOT_FOUND",
"statusCode": 404,
"description": "Cant find requested template 5 for website 6377e1f22f9fc600267345c3",
"result": {
"templateId": "5",
"websiteId": "6377e1f22f9fc600267345c3"
}
}

FILE_SIZE_EXCEEDED

{
"code": "FILE_SIZE_EXCEEDED",
"statusCode": 409,
"description": "File size exeeded for template type",
"result": {
"link": "<https://upload.wikimedia.org/wikipedia/commons/2/2d/Snake_River_%285mb%29.jpg>",
"contentLength": 5245329,
"contentType": "image/jpeg",
"templateType": "IMAGE",
"maxFileSize": 2000000
}
}