We are making changes to the WhatsApp Business Platform pricing model. See Pricing Updates on the WhatsApp Business Platform.
Las plantillas constan de cuatro componentes principales que se definen cuando se crea una: encabezado, cuerpo, pie de página y botones. Los componentes que elijas para tus plantillas deben basarse en las necesidades de tu negocio. El único componente necesario es el cuerpo.
Algunos componentes admiten variables, cuyos valores puedes proporcionar cuando usas la API de la nube o la API de instalaciones locales para enviar la plantilla en un mensaje de plantilla. Si tus plantillas usan variables, cuando las creas, es necesario incluir ejemplos de valores de variables.
Los encabezados son componentes opcionales que aparecen en la parte superior de los mensajes de plantillas. Los encabezados admiten texto, contenido multimedia (imágenes, videos, documentos) y ubicaciones. Las plantillas se limitan a un componente de encabezado.
{ "type": "HEADER", "format": "TEXT", "text": "<TEXT>", # Required if <TEXT> string contains variables "example": { "header_text": [ "<HEADER_TEXT>" ] } }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| Muestra de texto de encabezado. |
|
| Texto que debe aparecer en el encabezado de la plantilla cuando se envía. Admite 1 variable. Si la cadena contiene una variable, debe incluir la propiedad 60 caracteres como máximo. |
|
{ "type": "HEADER", "format": "TEXT", "text": "Our {{1}} is on!", "example": { "header_text": [ "Summer Sale" ] } }
Los encabezados de contenido multimedia pueden ser una imagen, un video o un documento (por ejemplo, un PDF). Todos los contenidos multimedia se deben subir con la API de subida reanudable. La sintaxis para definir un encabezado de contenido multimedia es la misma para todos los tipos de medios.
{ "type": "HEADER", "format": "<FORMAT>", "example": { "header_handle": [ "<HEADER_HANDLE>" ] } }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| Indica el tipo de recurso del contenido multimedia. Confíguralo como |
|
| Identificador de recursos de contenido multimedia subido. Usa la API de subida reanudable para generar un identificador de recurso. |
|
{ "type": "HEADER", "format": "IMAGE", "example": { "header_handle": [ "4::aW..." ] } }
Los encabezados de ubicación aparecen como mapas genéricos en la parte superior de la plantilla y son útiles para el seguimiento de pedidos, actualizaciones de entrega, recogida o entrega de servicios de transporte, localización de tiendas físicas, etc. Cuando se tocan, se abre la app de mapa predeterminada del usuario de la app y carga la ubicación especificada. Se especifican las ubicaciones cuando envías la plantilla mediante la API de la nube o la API de instalaciones locales.
Los encabezados de ubicación solo pueden usarse en las plantillas categorizadas como UTILITY
o MARKETING
. No se admiten las ubicaciones en tiempo real.
{ "type": "HEADER", "format": "LOCATION" }
Los valores de propiedades no se pueden personalizar.
{ "type": "HEADER", "format": "LOCATION" }
Los componentes de cuerpo son componentes de solo texto y son obligatorios para todas las plantillas. Las plantillas se limitan a un componente de cuerpo.
{ "type": "BODY", "text": "<TEXT>", # Required if <TEXT> string contains variables "example": { "body_text": [ [ <BODY_TEXT> ] ] } }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| Matriz de muestras de cadenas. El número de cadenas debe coincidir con el número de variables incluidas en las cadenas. |
|
| Cadena de texto. Admite múltiples variables. Si la cadena contiene una variable, debes incluir la propiedad 1024 caracteres como máximo. |
|
{ "type": "BODY", "text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.", "example": { "body_text": [ [ "the end of August","25OFF","25%" ] ] } }
Los pies de página son componentes opcionales de solo texto que aparecen inmediatamente después del componente de cuerpo. Las plantillas se limitan a un componente de pie de página.
{ "type": "FOOTER", "text": "<TEXT>" }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| El texto debe aparecer en el pie de página cuando se envía. 60 caracteres como máximo. |
|
{ "type": "FOOTER", "text": "Use the buttons below to manage your marketing subscriptions" }
Los botones son componentes interactivos opcionales que realizan acciones concretas cuando se los toca. Las plantillas pueden tener una mezcla de hasta 10 componentes de botones en total. No obstante, hay límites para los botones individuales del mismo tipo y, también, para las combinaciones. Estos límites se describen a continuación.
Los botones se definen dentro de un único objeto del componente de botones y se incluyen en una sola matriz buttons
. Por ejemplo, esta plantilla usa un botón de número de teléfono y un botón de URL:
{ "type": "BUTTONS", "buttons": [ { "type": "PHONE_NUMBER", "text": "Call", "phone_number": "15550051310" }, { "type": "URL", "text": "Shop Now", "url": "https://www.luckyshrub.com/shop/" } ] }
Si una plantilla tiene más de tres botones, dos botones aparecerán en el mensaje entregado y los botones restantes se reemplazarán con un botón Ver todas las opciones. Al tocar el botón Ver todas las opciones, se revelan los botones restantes.
Cuando el usuario de la app presiona los botones de copiar código, puede copiar una cadena de texto (que se define cuando se envía la plantilla en un mensaje de plantilla) en el portapapeles del dispositivo. Las plantillas están limitadas a un botón de copiar código.
{ "type": "COPY_CODE", "example": "<EXAMPLE>" }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| Cadena que se copiará en el portapapeles del dispositivo cuando el usuario de la app lo presione. Máximo de 15 caracteres. |
|
{ "type": "COPY_CODE", "example": "250FF" }
Los botones de procesos se utilizan para enviar mensajes de procesos como plantillas. Las plantillas están limitadas a un botón de procesos.
Los procesos se pueden crear rápidamente en Playground y adjuntar con formato JSON, o bien se puede especificar un identificador de proceso anterior.
{ "type": "FLOW", "text": "<TEXT>", "flow_id": "<FLOW_ID>", "flow_json": "<FLOW_JSON>", "flow_action": "<FLOW_ACTION>", "navigate_screen": "<NAVIGATE_SCREEN>" }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| Texto de la etiqueta del botón. 25 caracteres como máximo. |
|
| Identificador único del proceso proporcionado por WhatsApp. El proceso se debe publicar. No se puede usar si se proporciona el atributo |
|
| El proceso con formato JSON codificado como cadena, que especifica el diseño del proceso que se adjunta a la plantilla. Se puede generar rápidamente el proceso con formato JSON en el proceso de PlayGround. Para consultar la referencia completa, consulta la documentación del proceso con formato JSON. No se puede usar si se proporciona el atributo |
|
|
Valor predeterminado: |
|
| Obligatorio solo si |
|
{ "type": "FLOW", "text": "Sign up", "flow_action": "navigate", "navigate_screen": "WELCOME_SCREEN" "flow_json" : { "version": "3.1", "screens": [ { "id": "WELCOME_SCREEN", "layout": { "type": "SingleColumnLayout", "children": [ { "type": "TextHeading", "text": "Hello World" }, { "type": "TextBody", "text": "Let's start building things!" }, { "type": "Footer", "label": "Complete", "on-click-action": { "name": "complete", "payload": {} } } ] }, "title": "Welcome", "terminal": true, "success": true, "data": {} } ] } }
Los botones de mensajes multiproducto (MPM) son botones especiales que no se pueden personalizar. Cuando se los toca, muestran hasta 30 productos de tu catálogo de comercio electrónico, organizados en un máximo de 10 secciones, en un solo mensaje. Consulta Plantillas de mensajes multiproducto.
Los botones de contraseña de un solo uso (OTP) son un tipo especial de componente botón de URL, y se utilizan con plantillas de autenticación. Consulta Plantillas de autenticación.
Los números de botón de teléfono llaman al número de teléfono del negocio específico cuando el usuario de la app los toca. Las plantillas se limitan a un botón de número de teléfono.
{ "type": "PHONE_NUMBER", "text": "<TEXT>", "phone_number": "<PHONE_NUMBER>" }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| Cadena alfanumérica. El número de teléfono del negocio al que se llamará cuando el usuario toque el botón. Ten en cuenta que algunos países tienen números de teléfono especiales, que presentan ceros después del código de país (por ejemplo, +55-0-955-585-95436). Si asignas alguno de estos números al botón, se quitará el cero. Si tu número no funciona sin ese cero, asigna un número alternativo al botón, o bien, agrega el número como texto en el cuerpo del mensaje. 20 caracteres como máximo. |
|
| Texto de la etiqueta del botón. 25 caracteres como máximo. |
|
{ "type": "PHONE_NUMBER", "text": "Call", "phone_number": "15550051310" }
Los botones de respuesta rápida son botones personalizados de solo texto que te envían inmediatamente un mensaje con la cadena de texto especificada cuando el usuario de la app los toca. Una caso de uso común es un botón que permite a tu cliente dejar de recibir fácilmente cualquier mensaje de marketing.
Las plantillas se limitan a 10 botones de respuesta rápida. Si se utilizan botones de respuesta rápida con otros botones, los botones deben organizarse en dos grupos: botones de respuesta rápida y botones de respuesta no rápida. Si se agrupan incorrectamente, la API devolverá un error que indica que una combinación no es válida.
Ejemplos de grupos válidos:
Ejemplos de grupos no válidos:
Cuando se usa la API de la nube o la API de instalaciones locales para enviar una plantilla que tiene múltiples botones de respuesta rápida, puedes usar la propiedad de índice para designar el orden en el que aparecerán los botones en el mensaje de la plantilla.
{ "type": "QUICK_REPLY", "text": "<TEXT>" }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| Texto de la etiqueta del botón. 25 caracteres como máximo. |
|
{ "type": "QUICK_REPLY", "text": "Unsubscribe from Promos" }
Los botones de mensajes de un solo producto (SPM) son botones especiales que no se pueden personalizar y se pueden asignar a un producto de tu catálogo. Cuando se los toca, cargan detalles sobre el producto, que extraen de tu catálogo. Luego, los usuarios pueden agregar al producto su tarjeta y realizar un pedido. Consulta Plantillas de mensajes de un solo producto y Plantillas de secuencias de tarjetas de productos.
Los botones de URL cargan la URL especificada en el navegador web predeterminado del dispositivo cuando el usuario de la app los toca. Las plantillas se limitan a dos botones URL.
{ "type": "URL", "text": "<TEXT>", "url": "<URL>", # Required if <URL> contains a variable "example": [ "<EXAMPLE>" ] }
Marcador de posición | Descripción | Valor de ejemplo |
---|---|---|
| URL de sitio web. Admite 1 variable. Si usas una variable, agrega una muestra de propiedad de variable al final de la cadena de URL. La URL se carga en el navegador web móvil predeterminado del dispositivo cuando el cliente toca el botón. 2000 caracteres como máximo. |
|
| Texto de la etiqueta de botón. Admite 1 variable. Si usas una variable, debes incluir la propiedad de ejemplo y una muestra de valor. 25 caracteres como máximo. |
|
| URL del sitio web que se carga en el navegador web móvil predeterminado del dispositivo cuando el usuario de la app toca el botón. Admite 1 variable, añadida al final de la cadena de URL. 2.000 caracteres como máximo. |
|
{ "type": "URL", "text": "Shop Now", "url": "https://www.luckyshrub.com/shop?promo={{1}}", "example": [ "summer2023" ] }
Los componentes de oferta por tiempo limitado son componentes especiales que se usan para crear plantillas de ofertas por tiempo limitado.
Un ejemplo de solicitud de creación de una plantilla de marketing con los siguientes componentes:
curl -L 'https://graph.facebook.com/v21.0
/102290129340398/message_templates' \
-H 'Authorization: Bearer EAAJB...' \
-H 'Content-Type: application/json' \
-d '
{
"name": "seasonal_promotion",
"language": "en_US",
"category": "MARKETING",
"components": [
{
"type": "HEADER",
"format": "TEXT",
"text": "Our {{1}} is on!",
"example": {
"header_text": [
"Summer Sale"
]
}
},
{
"type": "BODY",
"text": "Shop now through {{1}} and use code {{2}} to get {{3}} off of all merchandise.",
"example": {
"body_text": [
[
"the end of August","25OFF","25%"
]
]
}
},
{
"type": "FOOTER",
"text": "Use the buttons below to manage your marketing subscriptions"
},
{
"type":"BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Unsubscribe from Promos"
},
{
"type":"QUICK_REPLY",
"text": "Unsubscribe from All"
}
]
}
]
}'
Un ejemplo de solicitud de creación de una plantilla de servicio público con los siguientes componentes:
curl -L 'https://graph.facebook.com/v16.0/102290129340398/message_templates' \ -H 'Authorization: Bearer EAAJB...' \ -H 'Content-Type: application/json' \ -d ' { "name": "order_confirmation", "language": "en_US", "category": "UTILITY", "components": [ { "type": "HEADER", "format": "DOCUMENT", "example": { "header_handle": [ "4::YX..." ] } }, { "type": "BODY", "text": "Thank you for your order, {{1}}! Your order number is {{2}}. Tap the PDF linked above to view your receipt. If you have any questions, please use the buttons below to contact support. Thank you for being a customer!", "example": { "body_text": [ [ "Pablo","860198-230332" ] ] } }, { "type": "BUTTONS", "buttons": [ { "type": "PHONE_NUMBER", "text": "Call", "phone_number": "15550051310" }, { "type": "URL", "text": "Contact Support", "url": "https://www.luckyshrub.com/support" } ] } ] }'
Un ejemplo de solicitud de creación de una plantilla de servicio público con los siguientes componentes:
curl 'https://graph.facebook.com/v21.0
/102290129340398/message_templates' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer EAAJB...' \
-d '
{
"name": "order_delivery_update",
"language": "en_US",
"category": "UTILITY",
"components": [
{
"type": "HEADER",
"format": "LOCATION"
},
{
"type": "BODY",
"text": "Good news {{1}}! Your order #{{2}} is on its way to the location above. Thank you for your order!",
"example": {
"body_text": [
[
"Mark",
"566701"
]
]
}
},
{
"type": "FOOTER",
"text": "To stop receiving delivery updates, tap the button below."
},
{
"type":"BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "Stop Delivery Updates"
}
]
}
]
}'
Suscríbete al campo de webhook message_template_components_update
para recibir notificaciones de los cambios realizados en los componentes de una plantilla, como un cambio en el título o el cuerpo, o la adición de un botón.
"message_template_id": <id>, "message_template_name": <string>, "message_template_language": <string>, "message_template_title": <string>, "message_template_element": <string>, "message_template_footer": <string>, "message_template_buttons": [ { "message_template_button_type": <string>, "message_template_button_text": <string>, "message_template_button_url": <string>, "message_template_button_phone_number": <string> } ]
"message_template_id": 1234567890, "message_template_name": “promo_summer_sale_11_en”, "message_template_language": “en_US”, "message_template_title": “header”, "message_template_element": “body”, "message_template_footer": “footer”, "message_template_buttons": [ { "message_template_button_type": URL, "message_template_button_text": “click me”, "message_template_button_url": “https://www.example.com”, "message_template_button_phone_number": “+1(123)4565678” } ]
Campo | Descripción |
---|---|
Identificador | Identificador de la plantilla. |
Cadena | Nombre de la plantilla. |
Cadena | Idioma de la plantilla. |
Cadena | Nuevo encabezado de la plantilla luego del cambio. Permanece vacío si el usuario no ingresó un encabezado. |
Cadena | Nuevo cuerpo de la plantilla luego del cambio. Permanece vacío si el usuario no ingresó un texto de cuerpo nuevo. |
Cadena | Nuevo pie de página de la plantilla luego del cambio. Permanece vacío si el usuario no ingresó un texto de pie de página nuevo. |
Matriz [botón] | Nueva lista de botones de la plantilla luego del cambio. En este webhook, solo se admiten los botones de tipo URL y número de teléfono. |