Este documento se ha actualizado.
La traducción en Español (España) no está disponible todavía.
Actualización del documento en inglés: Hoy

Enviar mensajes

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

Todos estos tipos de mensajes, excepto los mensajes de reacción, se pueden designar como respuesta.

Sintaxis de la solicitud

Utiliza el extremoPOST /<WHATSAPP_BUSINESS_PHONE_NUMBER_ID/messages para enviar mensajes a usuarios de WhatsApp:

POST /<WHATSAPP_BUSINESS_PHONE_NUMBER>/messages

Cuerpo de la solicitud POST

Todas las solicitudes de envío de mensajes utilizan el siguiente formato de objeto principal genérico.

{
  "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 solicitud POST

Marcador de posiciónDescripciónValor de ejemplo

<TO>

Cadena

Identificador de WhatsApp o número de teléfono del cliente al que se le va a enviar 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 de los mensajes de reacción.

Consulta Mensajes de reacción.

<IMAGE>

Objeto

Contenido de los mensajes multimedia. El nombre de la propiedad debe coincidir con el tipo de mensaje multimedia que se envía (image para mensajes de imágenes, video para mensajes de vídeo, etc.).

Consulta Mensajes multimedia.

<LOCATION>

Objeto

Contenido de los mensajes de ubicación.

Consulta Mensajes de ubicación.

<CONTACTS>

Objeto

Contenido de los mensajes de contactos.

Consulta Mensajes de contactos.

<INTERACTIVE>

Objeto

Contenido de los mensajes interactivos.

Consulta Mensajes interactivos.

Los ejemplos de este documento describen los requisitos de la carga útil del cuerpo de la solicitud POST para cada tipo de mensaje.

Sintaxis de la respuesta

Si la operación se realiza correctamente, la API responderá con lo siguiente:

{
  "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 mensaje y una vista previa del enlace opcional.

Mensajes de reacción

Los mensajes de reacción son reacciones mediante emoticonos que puedes aplicar a los mensajes recibidos de usuarios de WhatsApp.

Mensajes de contenido multimedia

Puedes enviar mensajes de audio, documento, imagen, sticker y vídeo a usuarios de WhatsApp.

Mensajes de audio

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

Mensajes de documento

Los mensajes de documento muestran un icono de documento vinculado a un documento que el usuario de WhatsApp puede tocar para descargar.

Mensajes de imagen

Por ejemplo, a continuación se muestra un mensaje de imagen en el que se incluye un pie de foto opcional:

Mensajes de sticker

Los mensajes de sticker muestran stickers con animaciones o imágenes estáticas en mensajes de WhatsApp.

Mensajes de vídeo

Los mensajes de vídeo muestran una vista previa del vídeo mediante una miniatura de una imagen del vídeo y un pie de vídeo opcional. Cuando el usuario de WhatsApp toca la vista previa, se carga el vídeo y se le reproduce al usuario.

Activos multimedia

Debes subir los activos multimedia al número de teléfono de empresa que enviará el mensaje o alojar los activos en un servidor público e incluir la URL en la solicitud de envío de mensaje.

Para reducir la probabilidad de errores y evitar solicitudes innecesarias al servidor público, te recomendamos que subas los activos multimedia y utilices los identificadores correspondientes al enviar mensajes.

Almacenamiento en caché HTTP de contenido multimedia

La API de nube de WhatsApp admite el almacenamiento en caché HTTP de contenido multimedia. Si utilizas un enlace (link) a un activo de contenido multimedia de tu servidor (en lugar del identificador, id, de un activo que hayas subido a nuestros servidores), puedes indicarnos que almacenemos en caché el activo para volver a utilizarlo con mensajes futuros; para ello, incluye los encabezados siguientes en la respuesta del servidor cuando solicitemos el activo. 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 gestionar el almacenamiento en caché del activo. Admitimos las siguientes directivas:

  • max-age=n: indica cuántos segundos (n) se debe almacenar en caché el activo. Volveremos a utilizar el activo almacenado en caché en las llamadas posteriores hasta que se supere este tiempo; después, solicitaremos de nuevo el activo si es necesario. Ejemplo: Cache-Control: max-age=604800.
  • no-cache: indica que el activo se puede almacenar en caché, pero se debe actualizar 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 debe almacenar en caché. Ejemplo: Cache-Control: no-store.
  • private: indica que el activo se ha personalizado para el destinatario y no se debe 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 Cache-Control: no-cache se incluye en la respuesta, actualizaremos nuestra versión del activo almacenada en caché 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 una versión concreta 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 tu propia lógica interna (que no revelaremos).

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. A continuación, añade 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 contiene un objeto con un identificador con el prefijo “wamid”. Utiliza el identificador que se muestra después de “wamid” para hacer un seguimiento del estado del mensaje.

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

Mensajes interactivos

Los mensajes interactivos incluyen mensajes de lista, botones de respuesta, botones de URL de llamada a la acción y mensajes de Flows. Para enviar mensajes interactivos, haz una llamada POST a /PHONE_NUMBER_ID/messages y adjunta un objeto de mensaje con type=interactive. A continuación, añade un objeto interactive.

Mensajes interactivos de lista

Los mensajes interactivos de lista te permiten presentar a los usuarios de WhatsApp una lista de opciones entre las que elegir.

Mensajes interactivos de solicitud de ubicación

Los mensajes de solicitud de ubicación muestran un cuerpo de texto y un botón de envío de la ubicación. Cuando un usuario de WhatsApp toca el botón, aparece una pantalla para compartir la ubicación que el usuario puede utilizar para compartir su ubicación.

Mensajes interactivos de botones de respuesta

Los mensajes interactivos de botones de respuesta te permiten enviar hasta tres respuestas predefinidas entre las que los usuarios pueden elegir.

Botones interactivos de URL de llamada a la acción

Es posible que los clientes se muestren reticentes a tocar URL sin formato con cadenas largas o poco claras en los mensajes de texto. En estas situaciones, puede que quieras enviar un mensaje interactivo con un botón de URL de llamada a la acción y texto en el cuerpo.

Los botones de URL de llamada a la acción te permiten asignar una URL a un botón para no tener que incluir la URL sin formato en el cuerpo del mensaje interactivo.

Sintaxis de la solicitud

POST /<BUSINESS_PHONE_NUMBER_ID>/messages

Cuerpo de la solicitud POST

{
  "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ónValor de ejemplo

<CUSTOMER_PHONE_NUMBER>

Cadena

Obligatorio.


Identificador de WhatsApp o número de teléfono del cliente al que se 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 pie de página del mensaje.

Dates subject to change.

<BUTTON_TEXT>

Cadena

Obligatorio.


Texto del botón.

See Dates

<BUTTON_URL>

Cadena

Obligatorio.


URL que se va a cargar en el navegador web predeterminado del dispositivo cuando el usuario de WhatsApp toque el botón.

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 Flows

Cuando crees un Flow de WhatsApp, puedes enviarlo. Para enviar un mensaje con un Flow, hemos introducido un nuevo tipo de objeto interactivo llamado flow. A continuación se indican las propiedades del objeto interactivo específico de los Flows:

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 Flow 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

Identificador del Flow que genera la empresa para servir de identificador.

interactive.action.parameters.flow_id

Cadena

Identificador único del Flow que proporciona WhatsApp.

interactive.action.parameters.flow_cta

Cadena

Texto del botón de llamada a la acción. Por ejemplo: “Regístrate”.

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

interactive.action.parameters.flow_action

Cadena

navigate o data_exchange. El valor predeterminado es navigate.

interactive.action.parameters.flow_action_payload

Cadena

Obligatorio solo si el valor de flow_action es navigate. En los demás casos se debe omitir.

interactive.action.parameters.flow_action_payload.screen

Cadena

Valor de id de la primera pantalla.

interactive.action.parameters.flow_action_payload.data

Cadena

Opcional. Datos de entrada de la primera pantalla del Flow. Debe ser un objeto que no esté 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

Para enviar cualquier mensaje como respuesta a un mensaje anterior en una conversación, incluye el identificador de mensaje anterior en el objeto context. El destinatario recibirá el mensaje nuevo junto con una burbuja contextual que muestra el contenido del mensaje anterior.

Los destinatarios no verán ninguna burbuja contextual si:

  • responden con un mensaje de plantilla ("type":"template");
  • responden con una imagen, vídeo, PTT o audio y el destinatario está usando KaiOS.

Son errores conocidos que estamos solucionando.

Ejemplo de solicitud:

curl -X  POST \
 'https://graph.facebook.com/v19.0/FROM_PHONE_NUMBER_ID/messages' \
 -H 'Authorization: ACCESS_TOKEN' \
 -d '{
   "messaging_product": "whatsapp",
   "context": {
     "message_id": "MESSAGE_ID"
   },
   "to": "<phone number> or <wa_id>",
   "type": "text",
   "text": {
     "preview_url": False,
     "body": "your-text-message-content"
   }
 }'

Una respuesta correcta contiene un objeto con un identificador con el prefijo “wamid”. Utiliza el identificador que se muestra después de wamid para hacer un seguimiento del estado del mensaje.

Nota: Si el mensaje anterior tiene más de 30 días o no se corresponde con ningún mensaje de la conversación, el mensaje se enviará como mensaje normal en lugar de como respuesta.

Ejemplo de respuesta:

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

Mensajes de dirección

Esta función solo está disponible para empresas con sede en Singapur y en la India, así como para sus clientes en ambos países.

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

Se trata de mensajes interactivos que incluyen las cuatro partes principales: header, body, footer y action. En el componente de acción, la empresa especifica el nombre “address_message” y los parámetros pertinentes.

En este momento, los mensajes de dirección se admiten en los dos siguientes países: India y Singapur. En la tabla siguiente, se indican los campos que se admiten en cada país en concreto.

Nombre del campo Etiqueta para mostrar Tipo de entrada Países admitidos Limitaciones

name

Nombre

Texto

India y Singapur

Ninguna

phone_number

Número de teléfono

Teléfono

India y 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 casa o piso

Texto

India

Ninguna

floor_number

Número de planta

Texto

India

Ninguna

tower_number

Número de torre

Texto

India

Ninguna

building_name

Nombre del apartamento o edificio

Texto

India

Ninguna

address

Dirección

Texto

India y Singapur

Ninguna

landmark_area

Punto de referencia o área

Texto

India

Ninguna

unit_number

Número de unidad

Texto

Singapur

Ninguna

city

Ciudad

Texto

India y Singapur

Ninguna

state

Estado

Texto

India

Ninguna

Ejemplo de llamada a la API

A continuación, se incluye un ejemplo de llamada a la API para el mensaje de dirección. El atributo country es un campo obligatorio en los parámetros de acción. Si no se incluye, 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"
                   }
              }
          }
    }' 

Gestión de errores

Si el código de área del número de teléfono del país indicado no es correcto, las empresas no podrán solicitar el mensaje de dirección al destinatario. Por ejemplo, las empresas no podrán solicitar un mensaje de dirección a un destinatario cuyo país sea “Singapur”, pero que tenga un número de teléfono con el código de área “91”.

Los mensajes de dirección no permitirán pasar campos en conflicto de forma simultánea. Por ejemplo, no puedes pasar sg_post_code si el valor de country se ha definido como “IN”.

Una vez enviado el mensaje de dirección, la empresa espera a que el usuario rellene la dirección y la devuelva. La dirección indicada por el usuario se comparte mediante el webhook registrado en el proceso de configuración.

Pasos de mensajes de dirección

Los pasos relacionados con un mensaje de dirección son los siguientes:

  1. La empresa envía un mensaje de dirección con el nombre de acción address_message al usuario.
  2. El usuario hace clic en la llamada a la acción para interactuar con el mensaje, de modo que se abre una pantalla de mensajes de dirección. El usuario rellena la dirección y envía el formulario.
  3. Cuando el usuario envía el formulario de mensaje de dirección, el socio recibe una notificación de webhook con los detalles de la dirección que ha enviado el usuario.
Ejemplo de mensaje de dirección de la India
Ejemplo de mensaje de dirección de Singapur

En el siguiente diagrama de secuencias se muestra un proceso típico de integración de un mensaje de dirección.

Parámetros de acción adicionales

La empresa puede pasar atributos adicionales, como values, validation_errors o saved_addresses, como parte de los parámetros de acción interactivos. A continuación, encontrarás información sobre sus usos.

Parámetro de acción Uso

values

Las empresas rellenan previamente este parámetro para los campos de dirección (p. ej., el campo de dirección de ciudad se rellena previamente con “Singapur”).

saved_addresses

En el caso de las empresas, pueden pasar direcciones guardadas que se hayan asociado previamente al usuario.

En el caso de los usuarios, pueden elegir la dirección guardada en lugar de rellenarla manualmente.

validation_errors

Las empresas pueden devolver errores en los campos de dirección y WhatsApp impedirá que el usuario envíe la dirección hasta que se resuelvan los problemas.

Enviar un mensaje de dirección a un usuario

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

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"
                 }
            }
     }'

Para enviar un mensaje de dirección sin direcciones guardadas, WhatsApp mostrará al usuario o empresa un formulario de dirección para introducir 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",
              "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 mostrará al usuario o empresa una opción para seleccionar entre las direcciones guardadas o añadir una opción de dirección. Los usuarios pueden ignorar la dirección guardada e introducir una nueva.

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"
                }
            }
         ]
      }
    }
  }
}'

Comprobar la respuesta

Una respuesta correcta incluye un objeto messages con un identificador del mensaje recién creado.

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

Una respuesta incorrecta 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

Será necesario volver a enviar un mensaje de dirección al usuario en caso de que se produzca un error de validación en el servidor de la empresa. La empresa debe devolver el conjunto de valores que ha introducido previamente el usuario, junto con los correspondientes errores de validación de cada campo no válido, como se muestra en los ejemplos de cargas útiles siguientes.

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 de envíos de direcciones

Las empresas recibirán notificaciones de envíos de direcciones mediante webhooks, como 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 valores siguientes.

Nombre del campo Tipo Descripción

interactive

Objeto

Contiene la respuesta del cliente.

type

Cadena

Será nfm_reply para indicar que se trata de una respuesta nativa del proceso (NFM) del cliente.

nfm_reply

Objeto

Contiene los datos recibidos del cliente.

response_json

Cadena

Valores de los campos de dirección que ha rellenado el usuario en formato JSON que aparecen siempre.

body (opcional)

Cadena

Texto del cuerpo del cliente, que es lo que ve el usuario.

name (opcional)

Cadena

Será address_message para indicar el tipo de respuesta de acción de NFM del cliente.

A continuación, se muestra la respuesta de un mensaje de dirección como un tipo de respuesta de NFM para 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

En caso de que el cliente no admita address_message, los mensajes se omitirán de forma silenciosa y se devolverá un mensaje a la empresa 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 plantilla

Consulta mensajes de plantilla.

Secuencia de entrega de varios mensajes

Al enviar varios mensajes, no se garantiza que el orden de entrega coincida con el orden de las solicitudes a la API. Si necesitas asegurarte de que los mensajes se entregan en una secuencia determinada, confirma la recepción del estado delivered en un webhook de mensajes antes de enviar el siguiente mensaje de la secuencia.

Solución de problemas

Si tienes problemas con la entrega de mensajes, consulta Mensaje no entregado.