Se actualizó este documento.
La traducción en español no está disponible todavía.
Actualización del documento en inglés: 16 de may.

Envío de mensajes

Puedes usar la API para enviar los siguientes tipos de mensajes:

Todos estos tipos, excepto los mensajes de reacciones, pueden designarse como respuesta.

Sintaxis de la solicitud

Usa el punto de conexión POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messages para enviar mensajes a los usuarios de WhatsApp:

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/messages

Cuerpo de la publicación

Todas las solicitudes de mensajes utilizan el siguiente formato de objeto.

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<TO>",
  "type": "<TYPE>",
  
  /* TEXT MESSAGES ONLY */
  "text": {<TEXT>}

  /* REACTION MESSAGES ONLY */
  "reaction": {<REACTION>}

  /* MEDIA MESSAGES ONLY. FOR EXAMPLE, FOR IMAGE MEDIA: */
  "image": {<IMAGE>}

  /* LOCATION MESSAGES ONLY */
  "location": {<LOCATION>}

  /* CONTACTS MESSAGES ONLY */
  "contacts": {<CONTACTS>}

  /* INTERACTIVE MESSAGES ONLY */
  "interactive": {<INTERACTIVE>}

  /* TEMPLATE MESSAGES ONLY */
  "template": {<TEMPLATE>}

}

Parámetros del cuerpo de la publicación

Marcador de posiciónDescripciónEjemplo de valor

<TO>

Cadena

El identificador o número de teléfono de WhatsApp del cliente al que se le envía el mensaje. Consulta Formatos de número de teléfono.

+16315551234

<TYPE>

Cadena

Indica el tipo de mensaje.

text

<TEXT>

Objeto

Contenido de los mensajes de texto.

Consulta Mensajes de texto.

<REACTION>

Objeto

Contenido del mensaje de reacción.

Consulta Mensajes de reacción.

<IMAGE>

Objeto

Contenido del mensaje multimedia. El nombre de la propiedad debería coincidir con el tipo de mensaje multimedia que envías (image en el caso de un mensaje con imagen, video en el caso de un mensaje con video, etc.).

Consulta Mensajes multimedia.

<LOCATION>

Objeto

Contenido del mensaje de ubicación.

Consulta Mensajes de ubicación.

<CONTACTS>

Objeto

Contenido del mensaje de contactos.

Consulta Mensajes de contactos.

<INTERACTIVE>

Objeto

Contenido del mensaje interactivo.

Consulta Mensajes interactivos.

En los ejemplos que se incluyen en este documento, se describen los requisitos de carga útil del cuerpo de la publicación de cada tipo de mensaje.

Sintaxis de la respuesta

Si la solicitud se procesa correctamente, la API responderá con los siguientes elementos:

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "<WHATSAPP_USER_PHONE_NUMBER>",
      "wa_id": "<WHATSAPP_USER_ID>"
    }
  ],
  "messages": [
    {
      "id": "<WHATSAPP_MESSAGE_ID>"
    }
  ]
}

Parámetros de respuesta

PlaceholderDescriptionSample Value

<WHATSAPP_USER_PHONE_NUMBER>

String

WhatsApp user's WhatsApp phone number. May not match wa_id value.

+16505551234

<WHATSAPP_USER_ID>

String

WhatsApp user's WhatsApp ID. May not match input value.

16505551234

<WHATSAPP_MESSAGE_ID>

String

WhatsApp Message ID.


This ID appears in associated messages webhooks, such as sent, read, and delivered webhooks.

wamid.HBgLMTY0NjcwNDM1OTUVAgARGBI4MjZGRDA0OUE2OTQ3RkEyMzcA

Phone Number Formats

Plus signs (+), hyphens (-), parenthesis ((,)), and spaces are supported in send message requests.

We highly recommend that you include both the plus sign and country calling code when sending a message to a customer. If the plus sign is omitted, your business phone number's country calling code is prepended to the customer's phone number. This can result in undelivered or misdelivered messages.

For example, if your business is in India (country calling code 91) and you send a message to the following customer phone number in various formats:

Number In Send Message RequestNumber Message Delivered ToOutcome

+16315551234

+16315551234

Correct number

+1 (631) 555-1234

+16315551234

Correct number

(631) 555-1234

+916315551234

Potentially wrong number

1 (631) 555-1234

+9116315551234

Potentially wrong number

Mensajes de texto

Los mensajes de texto son mensajes que solo contienen un cuerpo de texto y una vista previa del enlace opcional.

Mensajes de reacciones

En el caso de los mensajes de reacciones, se trata de reacciones con emojis que puedes aplicar al mensaje anterior de un usuario de WhatsApp que hayas recibido.

Mensajes multimedia

Puedes enviar mensajes de audio, documentos, imágenes, stickers y videos a los usuarios de WhatsApp.

Mensajes de audio

Los mensajes de audio muestran un ícono de audio y un enlace al archivo de audio. Cuando el usuario de WhatsApp toca el icono, el cliente de WhatsApp carga y reproduce el archivo de audio.

Mensajes de documentos

En los mensajes de documentos, se muestra un icono de un documento que está vinculado a un documento y que un usuario de WhatsApp puede tocar para descargarlo.

Mensajes de imágenes

En los mensajes de imágenes, se muestra una sola imagen y una descripción opcional.

Mensajes de stickers

Los mensajes de stickers muestran imágenes de sticker animadas o estáticas en un mensaje de WhatsApp.

Mensajes de video

Los mensajes de video muestran una vista previa en miniatura de una imagen del video con un título opcional. Cuando el usuario de WhatsApp toca la vista previa, se activa la carga del video y se lo muestra al usuario.

Recursos multimedia

Los recursos multimedia deben cargarse al número de teléfono del negocio que enviará el mensaje, o bien debes alojar el recurso de un servidor público e incluir su URL en la solicitud de envío de mensajes.

Para reducir la probabilidad de errores y evitar solicitudes innecesarias a tu servidor público, te recomendamos que subas tus recursos multimedia y uses sus identificadores al enviar mensajes.

Almacenamiento de contenido multimedia en caché HTTP

La API de la nube de WhatsApp admite el almacenamiento de archivos multimedia en caché HTTP. Si usas un enlace (link) que te dirige a un recurso multimedia de tu servidor (a diferencia de un identificador [id] de un recurso que subiste a nuestros servidores), puedes solicitarnos almacenar en caché el recurso para reutilizarlo en el futuro en otros mensajes. Para ello, incluye los encabezados que se muestran a continuación en la respuesta al servidor cuando solicitemos el recurso. Si no se incluye ninguno de estos encabezados, no almacenaremos en caché el activo.

Cache-Control: <CACHE_CONTROL>
Last-Modified: <LAST_MODIFIED>
ETag: <ETAG>

Cache-Control

El encabezado Cache-Control nos indica cómo controlar el almacenamiento en caché de los activos. Admitimos las siguientes directivas:

  • max-age=n: indica cuántos segundos del activo (n) se deben almacenar en caché. Reutilizaremos el activo almacenado en caché en los siguientes mensajes hasta que se supere el tiempo. Con posterioridad, volveremos a solicitarlo, si es necesario. Ejemplo: Cache-Control: max-age=604800.
  • no-cache: indica que el activo se puede almacenar en caché, pero que deberá actualizarse si el valor del encabezado Last-Modified es diferente al de una respuesta anterior. Requiere el encabezado Last-Modified. Ejemplo: Cache-Control: no-cache.
  • no-store: indica que el activo no se deberá almacenar en caché. Ejemplo: Cache-Control: no-store.
  • private: indica que el activo está personalizado para el destinatario y que no se debería almacenar en caché.

Last-Modified

Indica cuándo se modificó el activo por última vez. Se usa con Cache-Control: no-cache. Si el valor de Last-Modified es diferente al de una respuesta anterior y se incluye Cache-Control: no-cache en la respuesta, actualizaremos nuestra versión almacenada en caché del activo con el activo de la respuesta. Ejemplo: Date: Tue, 22 Feb 2022 22:22:22 GMT.

ETag

El encabezado ETag es una cadena única que identifica la versión específica de un activo. Ejemplo: ETag: "33a64df5". Este encabezado se ignora, a menos que los encabezados Cache-Control y Last-Modified no se incluyan en la respuesta. En este caso, almacenaremos en caché el activo según nuestra lógica interna (que no divulgamos).

Ejemplo de respuesta con encabezados

HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 1024
Date: Tue, 22 Feb 2022 22:22:22 GMT
ETag: "33a64df5"
Cache-Control: max-age=604800

<IMAGE_PAYLOAD>

Mensajes de ubicación

Los mensajes de ubicación te permiten enviar las coordenadas de latitud y longitud de una ubicación a un usuario de WhatsApp.

Mensajes de contactos

Para enviar mensajes de contactos, haz una llamada POST a /PHONE_NUMBER_ID/messages y adjunta un objeto message con type=contact. Luego, agrega un objeto contacts.

Ejemplo de solicitud:

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "contacts",
  "contacts": [{
      "addresses": [{
          "street": "STREET",
          "city": "CITY",
          "state": "STATE",
          "zip": "ZIP",
          "country": "COUNTRY",
          "country_code": "COUNTRY_CODE",
          "type": "HOME"
        },
        {
          "street": "STREET",
          "city": "CITY",
          "state": "STATE",
          "zip": "ZIP",
          "country": "COUNTRY",
          "country_code": "COUNTRY_CODE",
          "type": "WORK"
        }],
      "birthday": "YEAR_MONTH_DAY",
      "emails": [{
          "email": "EMAIL",
          "type": "WORK"
        },
        {
          "email": "EMAIL",
          "type": "HOME"
        }],
      "name": {
        "formatted_name": "NAME",
        "first_name": "FIRST_NAME",
        "last_name": "LAST_NAME",
        "middle_name": "MIDDLE_NAME",
        "suffix": "SUFFIX",
        "prefix": "PREFIX"
      },
      "org": {
        "company": "COMPANY",
        "department": "DEPARTMENT",
        "title": "TITLE"
      },
      "phones": [{
          "phone": "PHONE_NUMBER",
          "type": "HOME"
        },
        {
          "phone": "PHONE_NUMBER",
          "type": "WORK",
          "wa_id": "PHONE_OR_WA_ID"
        }],
      "urls": [{
          "url": "URL",
          "type": "WORK"
        },
        {
          "url": "URL",
          "type": "HOME"
        }]
    }]
}'

Una respuesta correcta incluye un objeto con un identificador que contiene un prefijo "wamid". Usa el identificador que figura después de "wamid" para hacer un seguimiento del estado de tu mensaje.

{
  "messaging_product": "whatsapp",
  "contacts": [{
      "input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID",
    }]
  "messages": [{
      "id": "wamid.ID",
    }]
}

Mensajes interactivos

Los mensajes interactivos incluyen botones y otros componentes de UI que permiten a los usuarios de WhatsApp interactuar con el mensaje en el cliente de WhatsApp.

Mensajes comerciales interactivos

Consulta Compartir productos con los clientes.

Mensajes de lista interactivos

Los mensajes de lista interactivos te permiten proporcionar a los usuarios de WhatsApp una lista de opciones entre las que pueden hacer una selección.

Mensajes de solicitud de ubicación interactivos

Los mensajes de solicitud de ubicación contienen el texto del cuerpo y un botón para enviar la ubicación. Cuando un usuarios de WhatsApp toca el botón, se muestra una pantalla que indica la ubicación que el usuario puede usar para compartir la ubicación.

Mensajes interactivos con botones de respuesta

Los mensajes interactivos con botones de respuesta te permiten enviar hasta tres respuestas predefinidas que deben seleccionar los usuarios.

Botones interactivos con URL de llamada a la acción

Es posible que tus clientes duden en tocar la URL que contienen cadenas largas o confusas en mensajes de texto. En estas situaciones, te conviene enviar un mensaje interactivo con texto y un botón de URL de llamada a la acción (CTA).

Estos botones te permiten asignar cualquier URL a un botón, de modo que no tengas que incluir toda la URL en el cuerpo del mensaje interactivo.

Sintaxis de la solicitud

POST /<BUSINESS_PHONE_NUMBER_ID>/messages

Cuerpo de la publicación

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<CUSTOMER_PHONE_NUMBER>",
  "type": "interactive",
  "interactive": {
    "type": "cta_url",

    /* Header optional */
    "header": {
      "type": "text",
      "text": "<HEADER_TEXT>"
    },

    /* Body optional */
    "body": {
      "text": "<BODY_TEXT>"
    },

    /* Footer optional */
    "footer": {
      "text": "<FOOTER_TEXT>"
    },
    "action": {
      "name": "cta_url",
      "parameters": {
        "display_text": "<BUTTON_TEXT>",
        "url": "<BUTTON_URL>"
      }
    }
  }
}

Propiedades del cuerpo


Marcador de posiciónDescripciónEjemplo de valor

<CUSTOMER_PHONE_NUMBER>

Cadena

Obligatorio.


El identificador o número de teléfono de WhatsApp del cliente al que se le envía el mensaje. Consulta Formatos de número de teléfono.

+15558543153

<HEADER_TEXT>

Cadena

Opcional.


Texto del encabezado.

Available Dates

<BODY_TEXT>

Cadena

Obligatorio.


Texto del cuerpo del mensaje.

Tap the button below to see available dates.

<FOOTER_TEXT>

Cadena

Opcional.


Texto del encabezado del mensaje.

Dates subject to change.

<BUTTON_TEXT>

Cadena

Obligatorio.


Texto del botón.

See Dates

<BUTTON_URL>

Cadena

Obligatorio.


URL que se cargará en el navegador web predeterminado del dispositivo cuando el usuario de WhatsApp la toque.

https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4

Ejemplo de solicitud

curl 'https://graph.facebook.com/v19.0/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '{
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "+16505555555",
    "type": "interactive",
    "interactive": {
        "type": "cta_url",
        "header": {
            "text": "Available Dates"
        },
        "body": {
            "text": "Tap the button below to see available dates."
        },
        "footer": {
            "text": "Dates subject to change."
        },
        "action": {
            "name": "cta_url",
            "parameters": {
                "display_text": "See Dates",
                "url": "https://www.luckyshrub.com?clickID=kqDGWd24Q5TRwoEQTICY7W1JKoXvaZOXWAS7h1P76s0R7Paec4"
            }
        }
    }
}'

Ejemplo de respuesta

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "+16505555555",
      "wa_id": "+16505555555"
    }
  ],
  "messages": [
    {
      "id": "wamid.HBgLMTY1MDUwNzY1MjAVAgARGBI5QTNDQTVCM0Q0Q0Q2RTY3RTcA"
    }
  ]
}

Mensajes de procesos

Después de crear un proceso de WhatsApp, puedes enviarlo. Para enviar un mensaje con un proceso, creamos un nuevo tipo de objeto interactivo llamado flow. Las siguientes propiedades del objeto interactivo son específicas de los procesos:

Propiedad Tipo Descripción

interactive.type

Cadena

El valor debe ser flow

interactive.action.name

Cadena

El valor debe ser flow

interactive.action.parameters.mode

Cadena

El proceso puede estar en modo draft o published. published es el valor predeterminado de este campo.

interactive.action.parameters.flow_message_version

Cadena

El valor debe ser 3.

interactive.action.parameters.flow_token

Cadena

Token del proceso que genera la empresa y sirve como identificador.

interactive.action.parameters.flow_id

Cadena

Identificador único del proceso proporcionado por WhatsApp.

interactive.action.parameters.flow_cta

Cadena

Texto en el botón de llamada a la acción. Por ejemplo: "Regístrate"

Límite de caracteres: 20 (sin emojis).

interactive.action.parameters.flow_action

Cadena

navigate o data_exchange. El valor predeterminado es navigate

interactive.action.parameters.flow_action_payload

Cadena

Obligatoria si flow_action es navigate. De lo contrario, se debería omitir.

interactive.action.parameters.flow_action_payload.screen

Cadena

El id de la primera pantalla.

interactive.action.parameters.flow_action_payload.data

Cadena

Opcional. Los datos de entrada de la primera pantalla del proceso. Debe ser un objeto no vacío.

Ejemplo de solicitud

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: Bearer ACCESS_TOKEN' \
 -H 'Content-Type: application/json' \
 -d '{
  "recipient_type": "individual",
  "messaging_product": "whatsapp",
  "to": "PHONE_NUMBER",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Flow message header"
    },
    "body": {
      "text": "Flow message body"
    },
    "footer": {
      "text": "Flow message footer"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "AQAAAAACS5FpgQ_cAAAAAD0QI3s.",
        "flow_id": "1",
        "flow_cta": "Book!",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "<SCREEN_NAME>",
          "data": { 
            "product_name": "name",
            "product_description": "description",
            "product_price": 100
          }
        }
      }
    }
  }
}'

Ejemplo de respuesta

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "Input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID"
    }
  ],
  "messages": [
    {
      "id": "wamid.ID"
    }
  ]
}

Respuestas

Puedes enviar cualquier tipo de mensaje como respuesta a un mensaje anterior. El mensaje anterior aparecerá en la parte superior del nuevo mensaje, citado dentro de una burbuja de contexto.

Limitaciones

La burbuja de contexto no aparecerá en la parte superior del mensaje enviado como respuesta en los siguientes casos:

  • Si el mensaje anterior se eliminó o se guardó en el almacenamiento a largo plazo (por lo general, los mensajes se guardan en el almacenamiento a largo plazo después de 30 días, a menos que hayas activado el almacenamiento local).
  • Si respondes con un mensaje de audio, con imagen o con video y el usuario de WhatsApp utiliza KaiOS.
  • Si usas el cliente de WhatsApp para responder con un mensaje de tipo presionar para hablar y el usuario de WhatsApp utiliza KaiOS.
  • Si respondes con un mensaje de plantilla.

Sintaxis de la solicitud

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID>/messages

Cuerpo de la publicación

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "<WHATSAPP_USER_PHONE_NUMBER>",
  "context": {
    "message_id": "WAMID_TO_REPLY_TO"
  },

  /* Message type and type contents goes here */

}

Parámetros del cuerpo de la publicación

Marcador de posiciónDescripciónEjemplo de valor

<WAMID_TO_REPLY_TO>

Cadena

Obligatorio.

Identificador del mensaje de WhatsApp (wamid) del mensaje anterior al que deseas responder.

wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA=

<WHATSAPP_USER_PHONE_NUMBER>

String

Required.

WhatsApp user phone number.

+16505551234

Ejemplo de solicitud

curl 'https://graph.facebook.com/v19.0/106540352242922/messages' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+16505551234",
  "context": {
    "message_id": "wamid.HBgLMTY0NjcwNDM1OTUVAgASGBQzQTdCNTg5RjY1MEMyRjlGMjRGNgA="
  },
  "type": "text",
  "text": {
    "body": "You'\''re welcome, Pablo!"
  }
}'

Mensajes de direcciones

Esta función solo está disponible para empresas de Singapur, cuyos clientes son de Singapur, y para empresas de India, cuyos clientes son de India.

Los mensajes de direcciones brindan a tus usuarios una forma más sencilla de compartir la dirección de envío con la empresa en WhatsApp.

Los mensajes de direcciones son mensajes interactivos que contienen las 4 partes principales: header, body, footer y action. En el componente de acción, el negocio especifica el nombre "address_message" y los parámetros relevantes.

Por el momento, los mensajes de direcciones se admiten en los siguientes dos países: India y Singapur. A continuación, se describen los campos que se admiten específicamente en qué país.

Nombre del campo Mostrar etiqueta Tipo de entrada Países admitidos Limitaciones

name

Nombre

Texto

India, Singapur

Ninguna

phone_number

Número de teléfono

Teléfono

India, Singapur

Solo números de teléfono válidos

in_pin_code

Código PIN

Texto

India

Longitud máxima: 6

sg_post_code

Código postal

Número

Singapur

Longitud máxima: 6

house_number

Número de departamento/casa

Texto

India

Ninguna

floor_number

Número de piso

Texto

India

Ninguna

tower_number

Número de torre

Texto

India

Ninguna

building_name

Nombre del edificio/departamento

Texto

India

Ninguna

address

Dirección

Texto

India, Singapur

Ninguna

landmark_area

Punto de referencia/área

Texto

India

Ninguna

unit_number

Número de unidad

Texto

Singapur

Ninguna

city

Ciudad

Texto

India, Singapur

Ninguna

state

Estado

Texto

India

Ninguna

Ejemplo de llamada a la API

Esta es una muestra de llamada a la API en relación con el mensaje de dirección. El atributo country es un campo obligatorio de los parámetros de acción. Si no está incluido, se producirá un error de validación.

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
          "messaging_product": "whatsapp",
          "recipient_type": "individual",
          "to": "PHONE_NUMBER",
          "type": "interactive",
          "interactive": {
              "type": "address_message",
              "body": {
                   "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
              },
              "action": {
                   "name": "address_message",
                   "parameters": {
                      "country" :"COUNTRY_ISO_CODE"
                   }
              }
          }
    }' 

Administración de errores

Si el código de área del número de teléfono de un determinado país no es correcto, los negocios no podrán solicitar el mensaje de dirección al destinatario. Por ejemplo, los negocios no podrán solicitar un mensaje de dirección a un destinatario que tenga el país configurado en "Singapur", pero cuyo número de teléfono contenga el código de área "91".

Los mensajes de dirección no permitirán que se pasen de manera simultánea campos en conflicto. Por ejemplo, no puedes pasar sg_post_code si country está configurado en "IN".

Una vez enviado el mensaje de dirección, el negocio espera a que el usuario complete la dirección y la vuelva a enviar. La dirección que ingresa el usuario se comparte mediante el webhook que se registró en el proceso de configuración.

Pasos de los mensajes de dirección

Los pasos que se deben realizar en un mensaje de dirección son los siguientes:

  1. El negocio envía un mensaje de dirección con el nombre de acción address_message al usuario.
  2. El usuario interactúa con el mensaje haciendo clic en la llamada a la acción, por lo que aparece una pantalla de mensaje de dirección. El usuario completa su dirección y envía el formulario.
  3. Después de que el usuario envía el formulario de mensaje de dirección, el socio recibe una notificación de webhook, que contiene los detalles de la dirección que envió el usuario.
Ejemplo de mensaje de dirección de la India
Ejemplo de mensaje de dirección de Singapur

El siguiente diagrama de secuencia muestra un proceso de integración típico de un mensaje de dirección.

Parámetros de acción adicionales

El negocio puede pasar otros atributos, como values, validation_errors o saved_addresses como parte de los parámetros de acción adicionales. A continuación, podrás encontrar información sobre el uso de cada uno.

Parámetro de acción Uso

values

Los negocios completan previamente los campos de dirección (por ejemplo, completan el campo de dirección de la ciudad con "Singapur").

saved_addresses

En relación con los negocios, pueden pasar direcciones guardadas previamente asociadas con el usuario.

Se ofrece a los usuarios la opción de elegir la dirección guardada, en lugar de completarla manualmente.

validation_errors

Los negocios pueden tener errores en los campos de dirección, y WhatsApp impedirá que el usuario envíe la dirección hasta que el problema esté resuelto.

Enviar un mensaje de dirección a un usuario

Haz una llamada POST a /PHONE_NUMBER_ID/messages mediante la API de WhatsApp para enviar a un usuario un mensaje de dirección con cifrado de extremo a extremo:

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d ' {
            "messaging_product": "whatsapp",
            "recipient_type": "individual",
            "to": "PHONE_NUMBER",
            "type": "interactive",
            "interactive": {
                 "type": "address_message",
                 "body": {
                       "text": "Thanks for your order! Tell us what address you’d like this order delivered 
                        to."
                 },
                "action": {
                      "name": "address_message",
                      "parameters": "JSON Payload"
                 }
            }
     }'

Si deseas enviar un mensaje de dirección en el que no hay ninguna dirección guardada, WhatsApp instará al usuario o negocio a ingresar una nueva dirección a través de un formulario de dirección.

India

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "+91xxxxxxxxxx",
      "type": "interactive",
      "interactive": {
        "type": "address_message",
        "body": {
          "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
        },
        "action": {
          "name": "address_message",
          "parameters": {
              "country": "IN",
              "values": {
                 "name": "CUSTOMER_NAME",
                 "phone_number": "+91xxxxxxxxxx"
              }
           }
        }
      }
   }'

Singapur

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
      "messaging_product": "whatsapp",
      "recipient_type": "individual",
      "to": "+65xxxxxxxxxx",
      "type": "interactive",
      "interactive": {
        "type": "address_message",
        "body": {
          "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
        },
        "action": {
          "name": "address_message",
          "parameters": {
              "country": "SG",
              "values": {
                  "name": "CUSTOMER_NAME",
                  "phone_number": "+65xxxxxxxxxx"
              }
           }
        }
      }
   }'

Para enviar un mensaje de dirección con direcciones guardadas, WhatsApp ofrecerá al usuario o negocio la posibilidad de seleccionar una dirección entre las direcciones guardas o agregar una nueva dirección. Los usuarios pueden ignorar las direcciones guardadas e ingresar una nueva dirección.

India

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "91xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
          "country": "IN",
          "saved_addresses": [
             {
                 "id": "address1",
                 "value": {
                    "name": "CUSTOMER_NAME",
                    "phone_number": "+91xxxxxxxxxx",
                    "in_pin_code": "400063",
                    "floor_number": "8",
                    "building_name": "",
                    "address": "Wing A, Cello Triumph,IB Patel Rd",
                    "landmark_area": "Goregaon",
                    "city": "Mumbai"
                 }
             }
          ]
       }
    }
  }
}'

Singapur

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "+65xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
         "country": "SG",
         "values": {
             "name": "CUSTOMER_NAME",
             "phone_number": "+65xxxxxxxxxx"
         },
         "saved_addresses": [
            {
                "id": "address1",
                "value": {
                   "name": "CUSTOMER_NAME",
                   "phone_number": "+65xxxxxxxxxx",
                   "sg_post_code": "018937",
                   "address": "9 Straits View, Marina One West Tower",
                   "unit_number": "Suite 29-00",
                   "city": "Singapore"
                }
            }
         ]
      }
    }
  }
}'

Verifica tu respuesta

Una respuesta correcta incluye un objeto messages con un identificador del mensaje creado recientemente.

{
  "messaging_product": "whatsapp",
  "contacts": [{
      "input": "PHONE_NUMBER",
      "wa_id": "WHATSAPP_ID",
    }]
  "messages": [{
      "id": "wamid.ID",
    }]
}

Una respuesta no exitosa contiene un mensaje de error. Consulta Códigos de error y de estado para obtener más información.

Enviar un mensaje de dirección con errores de validación

Se debe reenviar un mensaje de dirección al usuario en caso si hay un error de validación en el servidor comercial. El negocio debe devolver el conjunto de valores que ingresó previamente el usuario, junto con los respectivos errores de validación de los campos no válidos, como se muestra en los ejemplos de cargas a continuación.

India

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "91xxxxxxxxxx",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
          "country": "IN",
          "values": {
             "name": "CUSTOMER_NAME",
             "phone_number": "+91xxxxxxxxxx",
             "in_pin_code": "666666",
             "address": "Some other location",
             "city": "Delhi"
          },
          "validation_errors": {
             "in_pin_code": "We could not locate this pin code."
          }
       }
    }
  }
}'

Singapur

curl -X  POST \
'https://graph.facebook.com/v15.0/FROM_PHONE_NUMBER_ID/messages' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d 
'{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "12065550107",
  "type": "interactive",
  "interactive": {
    "type": "address_message",
    "body": {
      "text": "Thanks for your order! Tell us what address you’d like this order delivered to."
    },
    "action": {
      "name": "address_message",
      "parameters": {
           "country": "SG",
           "values": {
              "name": "CUSTOMER_NAME",
              "phone_number": "+65xxxxxxxxxx",
              "sg_post_code": "666666",
              "address": "Some other location",
              "city": "Singapore"
           },
           "validation_errors": {
              "sg_post_code": "We could not locate this pin code."
           }
        }
     }
  }
}'

Recibir notificaciones para envíos de direcciones

Los negocios recibirán notificaciones de envío de direcciones mediante webhooks, como la que se muestra a continuación.

{
    "messages": [
        {
           "id": "gBGGFlAwCWFvAgmrzrKijase8yA",
           "from": "PHONE_NUMBER",
           "Interactive": {
               "type":  "nfm_reply",
               "action":  "address_message",
               "nfm_reply": {
                   "name": "address_message",
                    "response_json": “<response_json from client>”,
                    "body": “<body text from client>”,
            }
           "timestamp": "1670394125",
           "type": "interactive"  
        }
    ]
}

La notificación de webhook tiene los siguientes valores.

Nombre del campo Tipo Descripción

interactive

Objeto

Retiene la respuesta del cliente

type

Cadena

Sería el nfm_reply que indica que se trata de una respuesta nativa del proceso (NFM) del cliente

nfm_reply

Objeto

Retiene los datos recibidos del cliente

response_json

Cadena

Los valores de los campos de dirección que completó el usuario en formato JSON que siempre están presentes

body (opcional)

Cadena

El texto del cuerpo que envía el cliente y que ve el usuario

name (opcional)

Cadena

Sería el address_message que indica el tipo de respuesta de acción NFM del cliente

A continuación, se muestra una respuesta a un mensaje de dirección como tipo de respuesta NFM referida a una solicitud de mensaje de dirección de la India.

{
   "messages": [
      {
          "context": {
	  "from": "FROM_PHONE_NUMBER_ID",
	  "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgARGBI3NjNFN0U5QzMzNDlCQjY0M0QA"
           },
          "from": "PHONE_NUMBER",
         "id": "wamid.HBgLMTIwNjU1NTAxMDcVAgASGCA5RDhBNENEMEQ3RENEOEEzMEI0RUExRDczN0I1NThFQwA=",
         "timestamp": "1671498855",
         "type": "interactive",
         "interactive": {
	 "type": "nfm_reply",
	"nfm_reply": {
	      "response_json": "{\"saved_address_id\":\"address1\",\"values\":{\"in_pin_code\":\"400063\",\"building_name\":\"\",\"landmark_area\":\"Goregaon\",\"address\":\"Wing A, Cello Triumph, IB Patel Rd\",\"city\":\"Mumbai\",\"name\":\"CUSTOMER_NAME\",\"phone_number\":\"+91xxxxxxxxxx\",\"floor_number\":\"8\"}}",
                    "body": "CUSTOMER_NAME\n +91xxxxxxxxxx\n 400063, Goregaon, Wing A, Cello Triumph,IB Patel Rd, Mumbai, 8",
                    "name": "address_message"
                }
            }
        }
    ]
}

Función no admitida

Si el cliente no admite address_message, los mensajes se omiten silenciosamente y se envía un mensaje de error al negocio en un webhook. A continuación, se muestra la notificación de webhook que se devolverá:

{
  "statuses": [
    {
      "errors": [
        {
          "code": 1026,
          "href": "https://developers.facebook.com/docs/whatsapp/api/errors/",
          "title": "Receiver Incapable"
        }
      ],
      "id": "gBGGFlAwCWFvAgkyHMGKnRu4JeA",
      "message": {
        "recipient_id": "+91xxxxxxxxxx"
      },
      "recipient_id": "91xxxxxxxxxx",
      "status": "failed",
      "timestamp": "1670394125",
      "type": "message"
    }
  ]
}

Mensajes de plantillas

Consulta Mensajes de plantilla.

Secuencia de entrega de mensajes múltiples

Cuando envías una serie de mensajes, no se garantiza que el orden en que se entregan los mensajes coincida con el orden de tus solicitudes de la API. Si debes asegurarte de que los mensajes se entreguen en una secuencia determinada, cuando envíes uno, confirma la recepción del estado delivered en un mensajes de webhook antes de enviar el siguiente mensaje de la secuencia.

Solución de problemas

Si tienes problemas con la entrega de mensajes, consulta No se entregó el mensaje.