Saltar al contenido principal

HSM Messages (Plantillas)

Los HSM Messages (Highly Structured Messages) son mensajes con plantilla pre-aprobada que se envían directamente al participante a través del canal de comunicación (WhatsApp, etc.).

Estos mensajes pueden ser:

  • Enviados inmediatamente
  • Programados para una fecha y hora futura

Endpoint

POST /web-api/messages/HSM

Headers

Authorization: Bearer {access_token}
Content-Type: application/json

Body

Puedes identificar al destinatario de dos formas: usando account_contact_id si el contacto ya existe en Socialdesk, o contact para crear uno nuevo automáticamente.

Opción A: con contacto existente (account_contact_id)

{
"channel_id": "ch_001",
"account_contact_id": "ac_123",
"raw_text": "Hola {{1}}, tu cita es el {{2}} a las {{3}}",
"parameters": ["María", "25 de marzo", "3:00 PM"],
"external_template_id": "appointment_reminder_v1"
}

Opción B: con contacto nuevo (contact)

{
"channel_id": "ch_001",
"contact": {
"account_id": "acc_001",
"first_name": "María",
"last_name": "López",
"phone": "+50688881234",
"email": "maria@ejemplo.com"
},
"raw_text": "Hola {{1}}, tu cita es el {{2}} a las {{3}}",
"parameters": ["María", "25 de marzo", "3:00 PM"],
"external_template_id": "appointment_reminder_v1"
}
Contacto requerido

Debes enviar account_contact_id o contact, pero no ambos. Si no se envía ninguno de los dos, la API retornará un error 400.

Parámetros

CampoTipoRequeridoDescripción
channel_idstringSiID del canal por donde se enviará el mensaje. Viene en el webhook: channel_instance
account_contact_idstringNo*ID del contacto existente en Socialdesk
contactobjectNo*Datos para crear un contacto nuevo. Ver estructura abajo
raw_textstringSiTexto de la plantilla con placeholders {{n}}
parametersarrayNoValores para reemplazar los placeholders
external_template_idstringNoID de la plantilla externa (WhatsApp Business)
assign_entitystringNoEntidad a asignar: USER o TEAM
assign_entity_idstringNoID de la entidad a asignar
conversation_idstringNoID de la conversación (si ya existe). Viene en el webhook: payload.conversation.id
send_atstringNoFecha para programar el envío (ISO 8601). Si se omite, se envía inmediatamente

*Se requiere account_contact_id o contact, pero no ambos. Si el contacto ya existe usa account_contact_id; si necesitas crear uno nuevo usa contact.

Estructura de contact (cuando no se usa account_contact_id)

CampoTipoRequeridoDescripción
account_idstringSiID de la cuenta
first_namestringNoNombre
last_namestringNoApellido
phonestringSiNúmero de teléfono
emailstringNoCorreo electrónico
image_urlstringNoURL de la imagen de perfil

Respuesta

{
"success": true
}

Ejemplo: envío inmediato

curl -X POST https://api.socialdesk.cr/web-api/messages/HSM \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"channel_id": "ch_001",
"account_contact_id": "ac_123",
"raw_text": "Hola {{1}}, gracias por tu compra. Tu número de orden es {{2}}.",
"parameters": ["Carlos", "ORD-2026-001"],
"external_template_id": "order_confirmation_v1"
}'

Ejemplo: envío con contacto nuevo

curl -X POST https://api.socialdesk.cr/web-api/messages/HSM \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"channel_id": "ch_001",
"contact": {
"account_id": "acc_001",
"first_name": "María",
"last_name": "López",
"phone": "+50688881234"
},
"raw_text": "Hola {{1}}, gracias por registrarte en nuestro servicio.",
"parameters": ["María"],
"external_template_id": "welcome_v1"
}'

Ejemplo: envío programado

curl -X POST https://api.socialdesk.cr/web-api/messages/HSM \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"channel_id": "ch_001",
"account_contact_id": "ac_123",
"raw_text": "Hola {{1}}, te recordamos tu cita mañana a las {{2}}.",
"parameters": ["María", "3:00 PM"],
"external_template_id": "appointment_reminder_v1",
"send_at": "2026-03-24T08:00:00Z"
}'
Programar envíos

Cuando usas send_at, el mensaje queda programado y puede ser cancelado antes de la fecha de envío usando el endpoint de cancelación.

Errores comunes

CódigoErrorDescripción
400You must send textFalta el raw_text
400You must include a channel_idFalta el channel_id
400You must include an existing account_contact_id or new contact infoFalta contacto
400Invalid entity parameterassign_entity no es USER ni TEAM
400Sent at can not be a past datesend_at es una fecha pasada
403ForbiddenNo tienes permisos para enviar al canal o contacto indicado
401UnauthorizedToken inválido o expirado