API de WhatsApp y CRM
POST/messages

Enviar mensaje

Envía mensajes de texto, multimedia o enriquecidos a cualquier número de teléfono o chat de grupo de WhatsApp a través del número de WhatsApp conectado en tu cuenta.

API de WhatsApp y CRM
Necesitas una clave de API. Pídela a nuestro equipo de soporte o créala desde la plataforma.
POST https://api.getincloud.ai/v1/messages

Envía mensajes de texto, multimedia o enriquecidos a cualquier número de teléfono o chat de grupo de WhatsApp a través del número de WhatsApp conectado en tu cuenta.

Funciones de mensajería disponibles según el plan de suscripción de cada número:

  • Mensajes a usuarios - Compatible con todos los planes
  • Mensajes multimedia - Envía imágenes, video, audio, GIF y documentos
  • Mensajes programados - Todos los planes excepto Gateway Professional
  • Mensajes a grupos - Compatible con todos los planes - Excepto números WABA API
  • Mensajes a canales - Compatible con todos los planes excepto Gateway Professional - Excepto números WABA API

¿Cómo usar variables de plantilla en los mensajes?

Puedes usar la sintaxis de variables de plantilla para mostrar información dinámica en tus mensajes a partir de un conjunto de variables predefinidas.

La sintaxis de variables de plantilla se puede usar en cualquier mensaje de texto con llaves dobles {{ para abrir y }} para cerrar la expresión:

Dear {{ contact.name | customer }}, thanks for contacting us! We will answer your query shortly.

Conoce más sobre las variables de plantilla compatibles y ejemplos aquí

Tengo varios números conectados: ¿cómo envío mensajes a través de un número específico?

Si tienes varios números conectados a tu cuenta, debes especificar el campo device en el cuerpo JSON con el ID del dispositivo del número de WhatsApp de destino (valor hexadecimal de 24 caracteres) a través del cual quieres enviar los mensajes.

Si no se especifica el campo device, los mensajes se enviarán a través del primer número de WhatsApp conectado en tu cuenta.

Aquí tienes un ejemplo de cómo enviar un mensaje a través de un número de WhatsApp específico

Notas sobre la entrega de mensajes

  • Los mensajes en cola no se entregan, por defecto, en orden estricto (FIFO), sino que se procesan como una cola de prioridad
  • Para una entrega con orden estricto, puedes establecer el campo order en true en el cuerpo JSON para forzar el orden estricto de los mensajes en cola
  • Los mensajes se entregan de forma asíncrona (modo cola) en los planes Gateway y en tiempo real (modo en vivo) en los planes Platform. Puedes personalizar el modo de entrega estableciendo el campo enqueue en always, never u opportunistic (por defecto) en el cuerpo JSON

Puedes consultar la [tabla de precios](/pricing) para más información sobre las funciones y limitaciones de la API compatibles por plan.

Tutoriales

Pruebas de la API en vivo con ejemplos

Ir al probador de API en vivo con decenas de ejemplos


Prueba este endpoint en el probador de API en vivo

>¿Necesitas ayuda? Explora todos los tutoriales, más de 100 ejemplos de casos de uso y juega con el probador de API en vivo con ejemplos de código listos para usar en más de 15 lenguajes de programación, incluidos JavaScript/Node.js, PHP, Python, C#, Java, Ruby, Swift, Kotlin, Powershell, cURL y más.

Autenticación

Envía tu API key en el encabezado Token en cada petición.

Parámetros

CampoDóndeTipoObligatorioDescripción
Idempotency-KeyheaderstringNoEncabezado opcional. La clave de idempotencia es un valor único generado por el cliente de la API, que el servidor usa para reconocer reintentos posteriores de la misma solicitud. Tú decides cómo crear las claves, pero sugerimos usar UUID V4 u otra cadena aleatoria con suficiente entropía para evitar colisiones. Si ya existe un mensaje con la misma clave de idempotencia, el servidor responderá con el estado 409 Conflict, indicando el ID del mensaje existente en el error de la respuesta JSON, en el campo meta.message. minimum: 6 · maximum: 36

Cuerpo de la petición

CampoTipoObligatorioDescripción
messagestringNoTexto a enviar. Se permite la sintaxis de texto enriquecido de WhatsApp. Lee más sobre la sintaxis aquí. En chats de grupo también puedes mencionar a los participantes con la siguiente sintaxis: @1234567890, donde 1234567890 es el número de teléfono en formato E.164 del usuario participante. minLength: 0 · maxLength: 15000
phonestringNoCampo obligatorio si group y channel están vacíos. Número de teléfono con prefijo internacional en formato E164 al que enviar el mensaje. Ejemplo: +1234567890 minLength: 6
groupstringNoCampo obligatorio si phone y channel están vacíos. ID de WhatsApp (WID) del chat de grupo de destino donde se debe entregar el mensaje. Puedes obtener el ID de los grupos disponibles en tu WhatsApp desde el [panel del número](/number/groups). Ejemplo de ID de grupo: 123456789000000000@g.us minLength: 8 · maxLength: 40
channelstringNoCampo obligatorio si phone y group están vacíos. ID de WhatsApp (WID) del canal de destino donde se debe entregar el mensaje. Puedes obtener los IDs de los canales disponibles en tu WhatsApp desde el [panel del número](/number/groups). Ejemplo de ID de canal: 123000098765421000@newsletter minLength: 18 · maxLength: 30
chatstringNoID de WhatsApp (WID) del chat de destino al que enviar el mensaje. **Si los campos phone, group y channel están vacíos, este campo será obligatorio**. Ejemplos de WID de chat: 1234567890@c.us para chats de usuario, 123456789000000000@g.us para chats de grupo, 1234567890000000@newsletter para canales, 1234567890000000@lid para chats privados de usuario y PE.1045742271480925@bsuid para contactos que ocultan su número de teléfono. minLength: 6 · maxLength: 141
numberstringNoNúmero de teléfono de WhatsApp de origen conectado en tu cuenta que se usará para la entrega del mensaje. Solo es obligatorio si tienes varios números de WhatsApp conectados. Alternativamente, puedes especificar el campo de ID device. Usa este campo para enrutar mensajes a través de varios números de WhatsApp disponibles en tu cuenta. Si solo tienes un número de WhatsApp conectado, este campo es opcional. Obligatorio si tienes varios números de WhatsApp conectados. Ejemplo de valor de número de teléfono en formato E164: +1234567890 minLength: 6 · maxLength: 18
devicestringNoID del dispositivo de WhatsApp de destino que se usará para la entrega del mensaje. Alternativamente, puedes usar el campo from para elegir tu dispositivo de WhatsApp por número de teléfono en lugar de por ID. Si no se indica, se usará por defecto el primer número conectado. Puedes usar este campo para enrutar mensajes entre varios números conectados en tu cuenta. Obtén el ID del dispositivo desde el [panel web](/number/info) minLength: 24 · maxLength: 24 · pattern: ^[0-9A-Fa-f]{24}$
agentstringNoID de agente opcional en cuyo nombre se enviará el mensaje. El chat no se asignará al agente a menos que se defina explícitamente [mediante acciones del mensaje](#supported-actions). El agente debe tener permisos de acceso al dispositivo. Puedes obtener los IDs de los agentes [desde aquí](#operation/getDeviceAgents) minLength: 24 · maxLength: 24 · pattern: ^[0-9A-Fa-f]{24}$
templateobjectNoEnvía un mensaje de plantilla de WhatsApp. Solo aplicable a números WABA API. Los mensajes de plantilla deben estar aprobados previamente por WhatsApp. [Más información aquí](/help/waba-templates)
template.namestringNoNombre de la plantilla. Debe coincidir exactamente con el nombre de la plantilla previamente aprobada. Usa el endpoint [Get templates](#operation/getTemplates) para obtener la lista de plantillas aprobadas. minLength: 1 · maxLength: 512
template.languagestringNoOpcional. Código de idioma de la plantilla (p. ej., en_US, es_ES). Si no se especifica, se usará el idioma por defecto de la primera plantilla. pattern: ^[a-z]{2}(_[A-Z]{2})?$
template.headerobjectNoEl componente de encabezado puede ser de tipo texto, multimedia (imagen, video, documento) o ubicación.
template.bodyarray<object>No
template.buttonarray<object>No
template.timeofferobjectNo
template.componentsarray<object>NoSolo es obligatorio si los campos template.header, template.body, template.button y template.timeoffer están vacíos. Este campo acepta el mismo esquema de datos de componentes de plantilla que WhatsApp Business API, por motivos de compatibilidad. Úsalo por comodidad si ya tienes componentes de plantilla en el esquema compatible con WABA. Más información sobre los componentes de plantilla
deliverAtstringNoFecha y hora personalizada en formato ISO 8601 en la que se debe entregar el mensaje. format: date-time
scheduleobjectNoProgramación opcional del mensaje. Debe estar presente uno de los siguientes campos: delay, delayTo o date
schedule.delaynumberNoPrograma la entrega del mensaje después de los segundos indicados. Ej.: 300 minimum: 1 · maximum: 63072000 · format: float
schedule.delayTostringNoPrograma la entrega del mensaje usando la sintaxis de duración de tiempo. Ejemplos de valores válidos: 1h, 15m, 12h, 1d. Lee más sobre la sintaxis de duración aquí. minLength: 2 · maxLength: 5 · pattern: ^([0-9]{1,8})([y
schedule.datestringNoPrograma la entrega del mensaje para una fecha y hora personalizada en formato ISO 8601. Ej.: 2019-01-23T23:22:59.776Z format: date-time
typingintegerNoOpcional. Segundos que se simulará que el usuario está escribiendo o grabando (solo en mensajes de audio) en el chat de destino antes de entregar el mensaje. El estado mínimo de escritura es de 2 segundos y el máximo de 30 segundos. Si no se especifica, el sistema lo simulará automáticamente con una duración aleatoria no superior a 3 segundos. minimum: 2 · maximum: 30
contactobjectNoEnvía una tarjeta de contacto individual
contact.phonestringSíNúmero de teléfono internacional del contacto en formato E164. Ejemplo: +1234567890 minLength: 6 · maxLength: 16
contact.namestringSíAlias o nombre completo del contacto. Ejemplo: Michael Jordan minLength: 1 · maxLength: 40
contactsarray<object>NoEnvía varias tarjetas de contacto. Cada entrada de contacto se basa en un número de teléfono internacional E164 y un nombre de contacto. El nombre del contacto puede tener espacios para representar el nombre completo de una persona. Puedes enviar hasta 10 contactos en un solo mensaje.
quotestringNoID del mensaje que se citará al enviar el nuevo mensaje. El ID del mensaje puede ser un ID nativo de WhatsApp (de 18, 20, 22 o 32 caracteres hexadecimales, o un ID de WABA) o un ID de mensaje saliente propio de la plataforma (de 24 caracteres hexadecimales). Por restricción de WhatsApp, solo puedes citar mensajes dentro de la misma conversación. Si el ID del mensaje citado no se encuentra o ya no está disponible en el chat, el nuevo mensaje se entregará siempre sin la anotación de cita. minLength: 18 · maxLength: 200
selectIdstringNoResponde a mensajes de botones o de lista seleccionando uno de los elementos disponibles por su ID único. Importante: requiere que el campo quote esté presente y haga referencia al ID del mensaje original de botones o lista al que se responde. maxLength: 50
forwardobjectNoReenvía un mensaje indicando el chat de origen y el ID del mensaje.
forward.messagestringNoID del mensaje a reenviar. El ID del mensaje puede ser un ID nativo de WhatsApp (de 18, 20, 22 o 32 caracteres hexadecimales) o un ID de mensaje saliente propio de la plataforma (de 24 caracteres hexadecimales). Por restricción de WhatsApp, solo puedes citar mensajes dentro de la misma conversación. Si el ID del mensaje citado no se encuentra o ya no está disponible en el chat, el nuevo mensaje se entregará siempre sin la anotación de cita. minLength: 18 · maxLength: 32
forward.chatstringNoID del chat de origen al que pertenece el mensaje a reenviar. El ID del chat puede ser un número de teléfono internacional E164 o un ID de chat de grupo. Si no puedes proporcionar el ID del chat ni el número de teléfono del chat, el sistema intentará descubrir el ID del chat automáticamente. Si no se puede descubrir el ID del chat, la API devolverá un error 400. Ej.: +1234567890, 123456789000000000@g.us minLength: 8 · maxLength: 32
mediaobjectNoEnvía contenido multimedia como imagen (jpeg, png, webp), video (mp4), audio (mp3, ogg), documento (pdf, docx, xlsx, csv, pptx) o archivo binario (zip, rar, 7z).
media.filestringNoID del archivo subido que se enviará como contenido del mensaje multimedia. El archivo debe haberse subido previamente con el [endpoint de la API para subir archivos](#tag/Files/operation/uploadFile), obteniendo el ID único del archivo (valor alfanumérico de 24 caracteres). Importante: no puedes poner aquí el contenido del archivo. Alternativamente, puedes enviar un archivo multimedia con el campo media.url especificando una URL de archivo de acceso público (consulta el campo url más abajo). minLength: 24 · maxLength: 24 · pattern: ^[0-9A-Fa-f]{24}$
media.formatstringNoFormato de visualización opcional del archivo, cuando aplique, para GIF (videos) y grabaciones de voz (audios) enum: ['gif', 'ptt', 'native'] · default: native
media.messagestringNoTexto opcional que se usará como pie de foto del archivo multimedia al entregar el mensaje. Solo aplicable a archivos multimedia de imagen y video; de lo contrario se ignora. Se usa en caso de que el mensaje que se va a entregar no tenga definido un campo de cuerpo de mensaje. minLength: 0 · maxLength: 15000
media.viewOncebooleanNoOpcional, solo aplicable a imágenes y videos. Si estableces viewMode en true, el contenido multimedia desaparecerá de WhatsApp después de que el destinatario lo haya abierto y salido del visor multimedia. Una vez que salga del visor, el contenido ya no será visible en ese chat y no podrá volver a verlo. Las fotos y videos de una sola vez no se guardan en las fotos o la galería del destinatario, y no se pueden reenviar.
media.urlstringNoURL pública accesible desde Internet para descargar el contenido del archivo. Si la URL devuelve un error, no es accesible desde Internet o el tipo de archivo no es válido, la API devolverá un error 400 Bad Request. minLength: 10 · maxLength: 1024
media.filenamestringNoNombre de archivo opcional. Si no se define, se toma de la URL del archivo o del contenido del formulario, si está disponible. De lo contrario, se generará un nombre de archivo aleatorio. minLength: 3 · maxLength: 200
media.referencestringNoIdentificador de referencia del archivo opcional, definido por el usuario. Puede ser útil para identificar archivos entre sistemas, por ejemplo, un CRM o un sistema de almacenamiento. minLength: 2 · maxLength: 150
media.permissionstringNoPermiso de acceso al archivo opcional. Por defecto es public: todos los miembros del equipo pueden acceder al archivo, descargarlo y enviarlo. Si se establece en private, solo el propietario del archivo puede acceder a él, descargarlo y enviarlo. enum: ['public', 'readonly', 'private']
media.tagsarray<string>NoEtiquetas opcionales del archivo, hasta 10 etiquetas por archivo. Cada etiqueta no puede tener más de 50 caracteres.
media.expirationstringNoLímite de tiempo de caducidad del almacenamiento del archivo, después del cual el archivo se eliminará del sistema. Por defecto es de 15 días. enum: ['10m', '30m', '1h', '6h', '12h', '1d', '2d', '3d', '5d', '6d', '7d', '15d', '30d', '60d', '90d', '120d', '180d', '360d', '1y', '2y'] · minLength: 2 · maxLength: 5 · default: 30d
pollobjectNo
poll.namestringNoNombre o título de la encuesta. maxLength: 255
poll.optionsarray<string>NoOpciones de la encuesta para votar. Cada opción debe tener un valor de texto. Se permiten hasta 12 opciones.
poll.multiplebooleanNoPermite varios votos por usuario. Por defecto se permiten varios votos por usuario. default: True
voteobjectNoEnvía uno o varios votos en una encuesta existente por ID de mensaje. Para eliminar todos los votos, envía un arreglo vacío: [].
vote.pollstringNoID del mensaje de la encuesta en la que se vota. El ID del mensaje puede ser un ID nativo de WhatsApp (de 18, 20, 22 o 32 caracteres hexadecimales) o un ID de mensaje nativo de la plataforma (de 24 caracteres hexadecimales). minLength: 18 · maxLength: 32 · pattern: [a-fA-F0-9]
vote.optionsarray<object>NoOpciones de la encuesta por las que votar, o usa un arreglo vacío para eliminar todos los votos. Cada opción debe tener un ID o un texto de valor. Puedes enviar varias opciones para votar. Las opciones ya votadas se sobrescribirán con las opciones definidas.
eventobjectNoEnvía un mensaje de evento de WhatsApp con nombre, descripción, ubicación, fecha y enlace de llamada opcional.
event.namestringNoNombre o título del evento. Hasta 100 caracteres. minLength: 1 · maxLength: 100
event.descriptionstringNoMensaje de descripción del evento, opcional. Hasta 2048 caracteres. maxLength: 2048
event.datestringSíFecha y hora del evento en formato ISO 8601. Ej.: 2024-08-15T12:30:00:000Z format: date-time
event.locationstringNoNombre opcional de la ubicación del evento. Hasta 255 caracteres. maxLength: 255
event.latitudenumberNoLatitud opcional de la ubicación del evento. Debe ser un número válido entre -90 y 90. minimum: -90 · maximum: 90 · format: float
event.longitudenumberNoLongitud opcional de la ubicación del evento. Debe ser un número válido entre -180 y 180. minimum: -180 · maximum: 180 · format: float
event.callstringNoOpcionalmente usa o genera una llamada de reunión de WhatsApp para unirse al evento. Por defecto, sin llamada. Las opciones disponibles son: llamada de voice o video. enum: ['voice', 'video', 'none']
event.codestringNoCódigo opcional del enlace de llamada para unirse al evento. El código debe ser una cadena alfanumérica válida de 21 o 22 caracteres. El código se agregará a la URL del enlace de llamada de WhatsApp. Ej.: https://call.whatsapp.com/voice/$CODE minLength: 21 · maxLength: 22 · pattern: [a-zA-Z0-9]/
attendobjectNo
attend.eventstringNoID del mensaje del evento al que se responde. El ID del mensaje puede ser un ID nativo de WhatsApp (de 18, 20, 22 o 32 caracteres hexadecimales) o un ID de mensaje nativo de la plataforma (de 24 caracteres hexadecimales). minLength: 18 · maxLength: 32 · pattern: [a-fA-f0-9]
attend.confirmbooleanNoConfirma la asistencia al evento. Por defecto es true. Usa false para rechazar la asistencia.
referencestringNoReferencia opcional del mensaje definida por el usuario para facilitar la trazabilidad con sistemas existentes. Por ejemplo, puedes definir como referencia el ID del cliente en tu CRM. El valor de reference se incluirá en cada evento de webhook. minLength: 1 · maxLength: 150
livebooleanNoEnvía el mensaje en modo en vivo sin ponerlo en cola (también conocido como tiempo real). Si es true, equivale a usar enqueue=never. Ten en cuenta que solo el plan Platform admite el modo de entrega de mensajes en vivo; de lo contrario, el mensaje se pondrá en cola o fallará. default: False
enqueuestringNoDefine el comportamiento de entrega del mensaje. Por defecto, los mensajes se ponen en cola y se procesan de forma asíncrona en segundo plano. En los planes Platform, puedes forzar la entrega del mensaje en tiempo real sin ponerlo en cola y obtener una respuesta síncrona con el estado real de entrega del mensaje (entregado, fallido, no encontrado, error). Modos de cola admitidos: - always - Siempre pone el mensaje en cola para que el sistema de colas lo procese en segundo plano según la prioridad del mensaje y la fecha de entrega. Modo por defecto en los planes Gateway. Tanto los planes Gateway como Platform admiten este modo. - never - Nunca pone el mensaje en cola e intenta entregarlo en tiempo real a través del número de WhatsApp de destino. Si la sesión del número no está en línea o la conexión no está operativa, devolverá un error. El consumidor de la API debe manejar el error adecuadamente y reintentar la entrega del mensaje si es necesario. Los planes Gateway no admiten este modo. - opportunistic: Intenta entregar el mensaje en tiempo real si el dispositivo está en línea y puede aceptar mensajes. Si el mensaje no se puede entregar por un error o por cola llena, se pondrá en cola de forma transparente y se procesará de forma asíncrona más tarde. Modo por defecto en los planes Platform. Los planes Gateway no admiten este modo. enum: ['never', 'always', 'opportunistic']
previewUrlbooleanNoActiva o desactiva la vista previa de imagen/título de la URL en el mensaje de destino mediante el protocolo OpenGraph. Activado por defecto.
locationobjectNo
location.requestbooleanNoSi se establece en true, el mensaje se enviará como un mensaje de solicitud de ubicación, pidiendo al usuario que comparta su ubicación actual. Si se establece en false o no se define, el mensaje se enviará como un mensaje de ubicación estándar con la dirección o las coordenadas proporcionadas.
location.addressstringNoValor de dirección legible de la ubicación. No se puede usar junto con las coordenadas. El sistema geocodificará la dirección para localizarla con precisión mediante coordenadas. minLength: 3 · maxLength: 100
location.namestringNoNombre opcional de la ubicación si no se define la dirección. Si está vacío, se usará la geocodificación inversa de las coordenadas para inferir el nombre de la ubicación. maxLength: 100
location.coordinatesarray<number>NoCoordenadas de la ubicación en formato de latitud y longitud. No se pueden usar junto con la dirección. Usa el campo name si deseas proporcionar una descripción personalizada de la ubicación; de lo contrario, el sistema obtendrá el nombre de la ubicación mediante geocodificación inversa.
productstringNoEnvía un mensaje de catálogo de productos por ID de producto. Esta función solo está disponible en números de WhatsApp Business con un catálogo existente disponible. minLength: 16 · maxLength: 18 · pattern: [0-9]{14,18}
orderbooleanNoÚsalo si quieres asegurar que todos los mensajes se envíen al chat de destino en orden estricto. Si está activado, el sistema garantizará que el mensaje se entregue en el mismo orden en que fue enviado. Esta función es útil para automatizaciones de chatbots y secuencias de mensajes. Esta función no es compatible con las opciones live=true ni enqueue=never. default: False
reactionstringNoEnvía un emoji de reacción a un mensaje existente. Para eliminar una reacción, usa - como valor de reacción. Requiere que el campo reactionMessage esté presente con el ID del mensaje de WhatsApp al que se reacciona. Se admite un único carácter emoji. Puedes consultar los emojis disponibles aquí: getemoji.com minLength: 1 · maxLength: 10
reactionMessagestringNoID único del mensaje de WhatsApp al que se reacciona o se quita la reacción (hexadecimal de 18, 20, 22 o 32 caracteres, o ID de WABA). Ej.: 3EB029A0219B0037CA10. Requiere que el campo reaction esté presente. maxLength: 200 · pattern: [a-fA-F0-9]{18,32}
retriesnumberNoMáximo de reintentos de entrega del mensaje. minimum: 0 · maximum: 1000 · default: 25 · format: float
retryWaitnumberNoTiempo de espera opcional definido por el usuario para cada intento de reintento del mensaje, en segundos. Usa 0 para desactivarlo. Si no se define, se usará el retroceso exponencial por defecto del sistema. minimum: 0 · maximum: 86400 · format: float
expirationobjectNoDefine un tiempo de caducidad (ttl) del mensaje. Úsalo si quieres que el mensaje no se envíe automáticamente si no fue posible entregarlo transcurrido un tiempo. Ej.: 1h
expiration.secondsnumberNoHace que el mensaje caduque si no fue posible entregarlo después de los segundos indicados. Ej.: 300 minimum: 5 · maximum: 8035200 · format: float
expiration.durationstringNoHace que el mensaje caduque después de una duración dada con la sintaxis de duración de tiempo. Ejemplos de valores válidos: 1h, 15m, 12h, 1d. Lee más sobre la sintaxis de duración aquí. minLength: 2 · maxLength: 5 · pattern: ^([0-9]{1,8})([y
expiration.datestringNoHace que el mensaje caduque en una fecha y hora específicas usando un formato ISO 8601. Ej.: 2019-01-23T23:22:59.776Z format: date-time
actionsarray<object>NoLista opcional de acciones que se ejecutarán después de la entrega del mensaje. El alcance de las acciones se limita al chat/contacto que recibe el mensaje. Si la entrega del mensaje falla, las acciones se ignorarán. Nota: esta función solo es aplicable a dispositivos con soporte de chat multiagente. ### Acciones admitidas * Action: chat:assign * Description: Asigna el chat a un agente. * Params: - agent: string (opcional) - Obligatorio si department no está definido. ID del agente al que se asignará el chat después de la entrega del mensaje. Puedes obtener los IDs de los agentes [desde aquí](#operation/getDeviceAgents) - department: string (opcional) - Obligatorio si agent no está definido. ID del departamento al que se asignará el chat después de la entrega del mensaje. Puede usarse junto con el campo agent para asignar un chat tanto a un agente como a un departamento. Puedes obtener el ID del departamento [desde aquí](#operation/getDepartments) - assigner: string (opcional) - Opcional. ID del agente que asigna el chat al otro agente ---- * Action: chat:unassign * Description: Desasigna el chat del agente existente * Params: - assigner: string (opcional) - ID del agente que asigna el chat al otro agente. Puedes obtener los IDs de los agentes [desde aquí](#operation/getDeviceAgents) ---- * Action: chat:resolve * Description: Resuelve el chat si aún no está resuelto. No se puede usar junto con la acción chat:unresolve. * Params: no params accepted ---- * Action: chat:unresolve * Description: Quita el estado de resuelto del chat si ya está resuelto. No se puede usar junto con la acción chat:resolve. * Params: no params accepted ---- * Action: chat:read * Description: Marca el chat internamente como leído en la interfaz de chat web después de entregar el mensaje. No se puede usar junto con la acción chat:resolve. * Params: no params accepted ---- * Action: chat:unread * Description: Marca el chat internamente como no leído en la interfaz de chat web después de entregar el mensaje. No se puede usar junto con la acción chat:resolve. * Params: no params accepted ---- * Action: labels:add * Description: Agrega etiquetas al chat después de entregar el mensaje * Params: - labels: array (opcional) - Etiquetas que se agregarán al chat conservando las existentes. Puedes obtener una lista de las etiquetas existentes [consultando este endpoint](#operation/getLabels) ---- * Action: labels:remove * Description: Quita etiquetas del chat, cuando ya estén presentes, después de entregar el mensaje * Params: - labels: array (opcional) - Etiquetas que se quitarán del chat. Puedes obtener una lista de las etiquetas existentes [consultando este endpoint](#operation/getLabels) ---- * Action: labels:set * Description: Establece y sobrescribe las etiquetas del chat después de entregar el mensaje * Params: - labels: array (opcional) - Etiquetas que se establecerán y sobrescribirán en el chat. Puedes obtener una lista de las etiquetas existentes [consultando este endpoint](#operation/getLabels) ---- * Action: metadata:set * Description: Establece y sobrescribe las entradas clave-valor de metadatos en la entidad de contacto del chat de destino después de entregar el mensaje * Params: - metadata: array (opcional) - Entradas de metadatos con las propiedades key y value que se establecerán y sobrescribirán en el contacto del chat ---- * Action: metadata:add * Description: Agrega o sobrescribe, según el campo key, entradas clave-valor de metadatos existentes en la entidad de contacto del chat de destino después de entregar el mensaje * Params: - metadata: array (opcional) - Entradas de metadatos con las propiedades key y value que se agregarán al contacto del chat ---- * Action: metadata:remove * Description: Elimina entradas de metadatos existentes según el campo key en la entidad de contacto del chat de destino después de entregar el mensaje * Params: - keys: array (opcional) - Entradas de metadatos que se eliminarán por key en el contacto del chat
sendReadAckbooleanNoInforma los mensajes no leídos del chat después de la entrega del mensaje, simulando el comportamiento de un usuario nativo. Usa "true" para informar al usuario o a los miembros del grupo de destino que tú leíste los mensajes recibidos, con el doble check azul. Nota: si has desactivado la confirmación de lectura en WhatsApp Ajustes > Cuenta > Privacidad, esta configuración no tendrá efecto. default: False
retentionPolicystringNoPolítica de retención de mensajes opcional. Por defecto, se usará la política de retención de datos del dispositivo según el plan actual. La política de retención define el tiempo máximo permitido durante el cual el mensaje debe almacenarse en el sistema después de ser entregado o de haber fallado. Si quieres forzar al sistema a no almacenar ningún mensaje después de procesarlo, usa "never" como política. enum: ['plan_defaults', 'never', '5m', '15m', '30m', '1h', '12h', '24h', '2d', '3d', '4d', '5d', '6d', '7d', '10d']
prioritystringNoPrioridad del mensaje. Recomendamos no abusar de las prioridades "high" o "urgent" a menos que sea estrictamente necesario entregar el mensaje lo antes posible. De lo contrario, usa simplemente la prioridad "normal" por defecto. enum: ['low', 'normal', 'high', 'urgent'] · default: normal
headerstringNoTexto opcional del encabezado del mensaje, hasta 60 caracteres. Restringido a mensajes con botones de respuesta y mensajes de lista. maxLength: 60
footerstringNoTexto opcional del pie del mensaje, restringido a mensajes con botones de respuesta y mensajes de lista. maxLength: 60
buttonsarray<object>NoEnvía botones dinámicos de respuesta definidos por el usuario, hasta 10 botones por mensaje, con texto opcional de header y footer del mensaje (consulta los campos más abajo). Así se verán los mensajes de botones en WhatsApp: ![](/images/docs/buttons.webp) Util para automatizaciones de chatbots e interacciones de respuesta más amigables para el usuario. Se aplican ciertas restricciones: 1. No se pueden enviar botones especiales con acciones de enlace URL o de llamada telefónica a chats de grupo, solo a chats de usuarios individuales. 2. No se pueden enviar botones como primer mensaje que inicia una nueva conversación con un usuario externo. 3. En su lugar, usa un mensaje de texto como primer mensaje y luego envía un segundo mensaje que puede ser un mensaje de botones.
listobjectNoEnvía listas de selección dinámicas definidas por el usuario, hasta 10 secciones, cada una con hasta 10 filas, por mensaje. Opcionalmente puedes definir un title, un footer y una description para la lista del mensaje (consulta los campos más abajo para más información). Util para automatizaciones de chatbots e interacciones de respuesta más amigables para el usuario. Se aplican ciertas restricciones: 1. No puedes enviar una lista como primer mensaje que inicia una nueva conversación con un usuario externo. 2. En su lugar, usa un mensaje de texto como primer mensaje y luego envía un segundo mensaje que puede ser un mensaje de lista.
list.descriptionstringNoObligatorio: mensaje de descripción a nivel del cuadro del mensaje de lista maxLength: 1024
list.buttonstringNoObligatorio: texto del botón para abrir la lista que se muestra al usuario, hasta 20 caracteres, incluidos los emojis. minLength: 1 · maxLength: 20
list.titlestringNoOpcional: mensaje de título a nivel del cuadro del mensaje de lista maxLength: 60
list.footerstringNoOpcional: mensaje de pie a nivel del cuadro del mensaje de lista maxLength: 60
list.sectionsarray<object>NoObligatorio: sección de la lista compuesta por un título y una lista de filas por sección. Hasta 10 secciones, cada una con hasta 10 filas por mensaje.
flowMessageobjectNoEnvía un WhatsApp Flow como mensaje interactivo nativo. El texto del mensaje se toma del campo message, con header/footer opcionales.
flowMessage.flowIdstringSíID del WhatsApp Flow a enviar.
flowMessage.flowCtastringSíEtiqueta del botón de llamada a la acción, hasta 30 caracteres. minLength: 1 · maxLength: 30
flowMessage.screenstringNoID de la pantalla de entrada que se abrirá. Obligatorio para flujos navigate (flujos estáticos).
flowMessage.actionstringNoAcción del flujo. Los flujos estáticos usan navigate. enum: ['navigate', 'data_exchange'] · default: navigate
flowMessage.dataobjectNoDatos iniciales opcionales que se pasan a la pantalla de entrada.
flowMessage.flowTokenstringNoToken opcional de idempotencia/sesión. Se genera automáticamente si se omite.
flowMessage.modestringNoEnvía un flujo publicado o en borrador. enum: ['published', 'draft'] · default: published

Respuestas

CódigoDescripción
201Mensaje creado
400Solicitud incorrecta
401No autorizado
403El estado de la cola no permite poner en cola o entregar mensajes nuevos
404El número de teléfono no existe en WhatsApp
409Conflicto - El mensaje ya existe
429Demasiadas solicitudes
500Error del servidor
501No implementado
503Servicio no disponible
// This code example requires you to have installed curl package
// Installation instructions here: https://curl.haxx.se/download.html

// Send text message to a phone number
curl --request POST \
  --url https://api.getincloud.ai/v1/messages \
  --header 'Content-Type: application/json' \
  --header 'Token: <api token goes here>' \
  --data '{"phone":"+1234567890","message":"Hello world! This is a test message."}'


// Send text message with high priority to a group
curl --request POST \
  --url https://api.getincloud.ai/v1/messages \
  --header 'Content-Type: application/json' \
  --header 'Token: <api token goes here>' \
  --data '{"group":"123456789000000000@g.us","priority":"high","message":"Hello world! This is a simple test message."}'


// Send media message to user. Note the file must be updated first, see API endpoint: Files > Upload file
curl --request POST \
  --url https://api.getincloud.ai/v1/messages \
  --header 'Content-Type: application/json' \
  --header 'Token: <api token goes here>' \
  --data '{"phone":"+1234567890","message":"Hello world! This is a test media message.","media":{"file":"<24 characters length file ID>"}}'


// Send text message that should be delivered now
curl --request POST \
  --url https://api.getincloud.ai/v1/messages \
  --header 'Content-Type: application/json' \
  --header 'Token: <api token goes here>' \
  --data '{"phone":"+1234567890","message":"Hello world! This is a simple test message.","enqueue":"never"}'


// Send a scheduled messages with a custom delay. See "schedule.delayTo" datetime notation shortcuts: https://i.ibb.co/g3DJLSH/datetime-shortcuts.png
curl --request POST \
  --url https://api.getincloud.ai/v1/messages \
  --header 'Content-Type: application/json' \
  --header 'Token: <api token goes here>' \
  --data '{"phone":"+1234567890","schedule":{"delayTo":"1h"},"message":"Hello world! This is a simple test message."}'


// Send a scheduled messages at a concrete date with a valid ISO 8601 date
curl --request POST \
  --url https://api.getincloud.ai/v1/messages \
  --header 'Content-Type: application/json' \
  --header 'Token: <api token goes here>' \
  --data '{"phone":"+1234567890","deliverAt":"2019-01-01T11:00:00.410Z","message":"Hello world! This is a simple test message."}'
AnteriorEliminar mensajeSiguienteObtener mensaje por ID
¿Te sirvió esta página?