Introducción
La API de Integración Pública te permite consultar cierta información de tu Integración WhatsApp Cloud, o realizar ciertas acciones sin la necesidad de operar en la interfaz de la plataforma.
Punto de Acceso API
Por favor, utiliza la siguiente URL de Punto de Acceso para la API Pública:
https://api.whatsapp-cloud.woztell.sanuker.com/v1.2/api/
Autenticación
Token de Acceso WhatsApp Cloud
El token de acceso del canal WhatsApp Cloud puede aplicarse a las APIs públicas excepto a la GET /conversation-analytics, APIs de Encriptación Empresarial y APIs de Flujos.
- En "Configuración" -> "Canales", haz clic en "Editar" para ingresar al canal WhatsApp Cloud correspondiente.
- En "Plataforma", dirígete a "Acceso Avanzado".
- Haz clic en "Generar" para crear el token de acceso.
- El token de acceso ha sido generado. Los tokens existentes pueden gestionarse en la sección siguiente.
- El token de acceso debe enviarse como parámetro de consulta accessToken, por ejemplo:
Carga Útil & Contexto Firmado
Este método de autenticación solo puede aplicarse a GET /conversation-analytics, GET /whatsapp-displayname-status, APIs de Encriptación Empresarial y APIs de Flujos.
Para realizar la autenticación en la API de Integración Pública, es necesario utilizar la correspondiente Carga Útil y Contexto Firmado que requiere la integración.
- Carga Útil:
{"app":"appId","appIntegration":"appIntegrationId","channel":"channelId"} - Contexto Firmado:
(firma).{{base64(JSON.stringify(payload))}}
- Obtén la información relacionada con el canal WhatsApp Cloud correspondiente consultando el
canal con Open API.
Solicitud:
query {
apiViewer{
channel(channelId:"696327315430a1f98231dfde"){
appId
environment(envId:"7lQNjrXbDO"){
info
integration{
integrationId
}
appIntegrationSignature
}
}
}
}
Copiar
Respuesta:
{
"data": {
"apiViewer": {
"channel": {
"appId": "699802d69a73fc555f1c6bc4",
"environment": {
"info": {
"integrationId": "whatsapp-cloud",
"build": 3,
"alias": "dev-whats-app-cloud",
"appIntegrationId": "696327325430a1cbd131dfdf",
"subscribed": true
},
"integration": {
"integrationId": "whatsapp-cloud"
},
"appIntegrationSignature": "1RJ7rKRTHbOBoY95AgtXF5WT2578gy9+b4ekBp727cQ="
}
}
}
}
}
Copiar
Crea la Carga Útil con el siguiente formato:
{"app":"appId","appIntegration":"appIntegrationId","channel":"channelId"}
Ejemplo de Carga Útil:
{"app":"699802d69a73fc555f1c6bc4","appIntegration":"696327325430a1cbd131dfdf","channel":"696327315430a1f98231dfde"}
Copiar
-
Codifica la Carga Útil en formato Base64
Combina la Carga Útil codificada y la Firma para crear el Contexto Firmado con el siguiente formato:
(firma).{{base64(JSON.stringify(payload))}}
Ejemplo de Contexto Firmado
WAIBCzM6tnzboIwkEPAVVyaVq7VGaIKBaQ/Q+gP6qdA=.eyJhcHAiOiI2MjA2MmMwYjcxNzE5NTMyMDE5MmIxOGY3IiwiYXBwSW50ZWdyYXRpb24iOiI2NDIwZmlnMjhlNjViNDY2ZDQ2MDdlYTIiLCJjaGFubmVsIjoiNzIxZjMyYWM0ZTEyMzYzZGUxMjBkMjlkIg==
Copiar
- Agrégalos en el encabezado como
X-Woztell-Payload y X-Woztell-SignedContext.
APIs Generales
GET /waba-info
Esta llamada a la API puede obtener información relacionada con WABA incluyendo nombre WABA, número de teléfono, namespace WABA, ID WABA de un canal.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| accessToken |
cadena |
Token de acceso generado desde el canal WhatsApp Cloud |
sí |
| channelId |
cadena |
ID del canal |
este o wabaID |
| wabaId |
cadena |
ID WABA |
este o channelId |
Solicitud
curl --location --request GET '/waba-info?accessToken=${ACCESS_TOKEN}&channelId=${CHANNEL_ID}'
Copiar
o
curl --location --request GET '/waba-info?accessToken=${ACCESS_TOKEN}&wabaId=${WABA_ID}'
Copiar
Respuesta
{
"ok": 1,
"result": {
"waId" : "11111111111",
"phoneNumberId" : "123124123232",
"wabaId" : "422126422872292",
"name" : "Mi Negocio",
"phoneNumber" : "85212345678",
"phoneNumberCC" : "1",
"formattedPhoneNumber" : "+1 111-111-1111",
"namespace" : "2dwsa4_e24e_42f8_6b5a_110232ae4d5",
"embeddedSignup" : true
}
}
Copiar
GET /whatsapp-business-profile
Esta llamada a la API puede obtener el perfil comercial de un número de WhatsApp.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| accessToken |
cadena |
Token de acceso generado desde el canal WhatsApp Cloud |
sí |
| phoneNumberId |
cadena |
ID del número telefónico |
sí |
Solicitud
curl --location --request GET '/whatsapp-business-profile?accessToken=${ACCESS_TOKEN}&phoneNumberId=${PHONE_NUMBER_ID}'
Copiar
Respuesta
{
"ok": 1,
"data": {
"about": "Hello this is John!",
"address": "ABC Building",
"description": "Testing 123",
"email": "testemail@woztell.com",
"profile_picture_url": "IMAGE_URL",
"websites": [
"https://woztell.com/"
],
"vertical": "PROF_SERVICES",
"messaging_product": "whatsapp"
}
}
Copiar
GET /whatsapp-displayname-status
Esta llamada a la API es para obtener los detalles relacionados con el número de WhatsApp
Autenticación
El Payload y contexto firmado son requeridos en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| accessToken |
cadena |
Token de acceso generado desde el canal WhatsApp Cloud |
sí |
| phoneNumberId |
cadena |
ID del número telefónico |
sí |
Solicitud
Respuesta
{
"ok": 1,
"data": {
"account_mode": "LIVE",
"verified_name": "WozTell Test",
"code_verification_status": "EXPIRED",
"display_phone_number": "+1 123-321-2652",
"quality_rating": "GREEN",
"is_official_business_account": false,
"messaging_limit_tier": "TIER_1K",
"id": "123465061846704"
}
}
Copiar
PATCH /whatsapp-business-profile
Esta llamada a la API puede actualizar el perfil comercial de un número de WhatsApp.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| accessToken |
cadena |
Token de acceso generado desde el canal WhatsApp Cloud |
sí |
| phoneNumberId |
cadena |
ID del número telefónico |
sí |
| profile |
objeto |
Contenido a actualizar en el perfil comercial |
sí |
Objeto Perfil
| Nombre |
Tipo |
Descripción |
Requerido |
| messaging_product |
cadena |
Solo acepta whatsapp |
sí |
| about |
cadena |
El texto "Acerca de" |
no |
| address |
cadena |
La dirección de tu negocio |
no |
| description |
cadena |
El texto "Descripción" |
no |
| email |
cadena |
Correo electrónico de tu negocio |
no |
| vertical |
cadena |
Industria del negocio, por favor consulta aquí para los valores aceptados |
no |
| website |
arreglo |
URL(s) del(los) sitio(s) web de tu negocio incluyendo http:// o https://; máximo 2 sitios web. |
no |
| profile_picture_url |
cadena |
URL de la imagen de perfil |
no |
Endpoint
Cuerpo de la Solicitud
{
"accessToken": "ACCESS_TOKEN",
"phoneNumberId": "123456890999",
"profile": {
"about": "This is the about text.",
"address": "Office",
"description": "Testing Text",
"email": "test999@woztell.com",
"profile_picture_url": "IMAGE_URL",
"websites": [
"https://woztell.com/blog/", "https://woztell.com/pricing/"
],
"vertical": "PROF_SERVICES",
"messaging_product": "whatsapp"
}
}
Copiar
Respuesta
Esta llamada a la API podría subir un archivo multimedia al servidor de WhatsApp para obtener un ID de medio.
El archivo multimedia subido se mantendrá en el servidor WhatsApp Cloud por 30 días. Después de la expiración, los usuarios deberán subirlo nuevamente para obtener otro ID de medio.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| phoneNumberId |
cadena |
ID del número telefónico |
sí |
| accessToken |
cadena |
Token de acceso generado desde WhatsApp |
sí |
| type |
cadena |
image, audio, video, file |
sí |
| url |
cadena |
Enlace al archivo multimedia |
sí |
Endpoint
Cuerpo de la Solicitud
{
"phoneNumberId": "123164329653069",
"accessToken": "ACCESS_TOKEN",
"type": "image",
"url": "MEDIA_URL",
}
Copiar
Respuesta
{
"ok": 1,
"mediaId": "5770270532993662",
"fileType": "image"
}
Copiar
GET /conversation-analytics
Esta API es para obtener el análisis de conversaciones dentro del rango de fechas seleccionado.
Autenticación
El Payload y contexto firmado son requeridos en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| from |
Timestamp UNIX |
Fecha de inicio para el rango de fechas objetivo |
sí |
| to |
Timestamp UNIX |
Fecha de fin para el rango de fechas objetivo |
sí |
| granularity |
cadena |
La granularidad con la que deseas obtener el análisis; HALF_HOUR, DAILY o MONTHLY |
sí |
| numbers |
arreglo |
Lista de números telefónicos para obtener el análisis |
no |
| metric_types |
cadena |
Lista de métricas a obtener; COST y CONVERSATION |
no |
| conversation_types |
cadena |
Lista de tipos de conversación; FREE_ENTRY_POINT, FREE_TIER, REGULAR y UNKNOWN |
no |
| conversation_directions |
cadena |
Lista de direcciones para iniciar la conversación; business_initiated y user_initiated |
no |
| dimensions |
cadena |
Lista de desgloses para aplicar al análisis; phone, country, conversation_type y conversation_reaction |
no |
Solicitud
Respuesta
{
"ok": 1,
"conversationAnalytics": {
"data_points": [
{
"start": 1672675200,
"end": 1672761600,
"conversation": 1,
"phone_number": "14132521446",
"country": "HK",
"conversation_type": "FREE_TIER",
"conversation_direction": "USER_INITIATED",
"cost": 0
},
{
"start": 1664899200,
"end": 1664985600,
"conversation": 1,
"phone_number": "14132521446",
"country": "HK",
"conversation_type": "FREE_TIER",
"conversation_direction": "BUSINESS_INITIATED",
"cost": 0
},
{
"start": 1676476800,
"end": 1676563200,
"conversation": 1,
"phone_number": "14132521446",
"country": "HK",
"conversation_type": "FREE_TIER",
"conversation_direction": "USER_INITIATED",
"cost": 0
}
]
}
}
Copiar
GET /catalogs
Esta llamada a la API puede listar los catálogos asociados a un WABA específico.
Autenticación
El Payload y contexto firmado son requeridos en el encabezado.
Solicitud
Respuesta
{
"ok": 1,
"data": [
{
"id": "1234577510532066",
"name": "test_products"
}
],
"paging": {
"hasPrevious": false,
"hasNext": false
}
}
Copiar
GET /products
Esta llamada a la API puede listar los productos dentro de un catálogo asociado a un WABA específico.
Autenticación
El Payload y contexto firmado son requeridos en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| catalogId |
cadena |
ID del catálogo |
sí |
Solicitud
Respuesta
{
"ok": 1,
"data": [
{
"name": "Test Product 1",
"price": "HK$900.00",
"image_url": "IMAGE_URL_1",
"retailer_id": "a6y7a9y6f0",
"id": "25233996219581593"
},
{
"name": "Test Product 2",
"price": "HK$2,000.00",
"image_url": "IMAGE_URL_2",
"retailer_id": "yu7q27pbg1",
"id": "7887884911230830"
}
],
"paging": {
"cursors": {
"before": "QVFIUjNtVGtsNzNVRF9sTlhla2JOLVhzUGtlbGdSUURvRDFzelB2MVQwZAHpCb3NieHZAvbXhwZADVud09hZA1pwQVhNMHk4NkNwOEw2ZAEt4MFNpZAk4tR05YVTZAB",
"after": "QVFIUmRwOElZAeHVsWHhiUmk2WlJWcTdnY181UTUzUmx0NEpiSDAzSGdJcHFZALURQSXdmSFZALWHI0ekwyMkx1dU4tXzZAXQnppWjc5MTVWZAmNtb0oyOU9KcEhB"
},
"hasPrevious": false,
"hasNext": false
}
}
Copiar
APIs de Plantillas de Mensajes
GET /whatsapp-message-templates
Esta llamada a la API puede listar las plantillas de mensajes de WhatsApp de un WABA específico con paginación y filtros opcionales.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| wabaId |
cadena |
ID del WABA objetivo |
sí |
| first |
entero |
Número de plantillas de mensajes; máximo 100 |
sí |
| after |
cadena |
Cursor para obtener el resultado de paginación de la página siguiente; se debe especificar "after" o "before" |
no |
| before |
cadena |
Cursor para obtener el resultado de paginación de la página anterior; se debe especificar "after" o "before" |
no |
| status |
cadena |
Arreglo de estados para filtrar; por defecto: ["APPROVED"], ["PENDING"], ["REJECTED"], ["PENDING_DELETION"], ["DELETED"] si no se especifica |
no |
| category |
cadena |
Categoría de la plantilla de mensaje: ["TRANSACTIONAL"], ["MARKETING"] o ["OTP"] |
no |
| quality_score |
cadena |
Calificación de calidad de la plantilla: GREEN, YELLOW o RED |
no |
| language |
arreglo |
Idioma de la plantilla de mensaje; debe estar en arreglo y usar el código de idioma soportado, como en_US, es. |
no |
| name |
cadena |
Búsqueda por nombre de la plantilla de mensaje |
no |
| content |
contenido |
Búsqueda por contenido de la plantilla de mensaje |
no |
| name or content |
cadena |
Búsqueda por nombre o contenido de las plantillas de mensaje |
no |
Solicitud
curl --location --request GET '/whatsapp-message-templates?accessToken=${ACCESS_TOKEN}&wabaId=${WABA_ID}&first=10&after=MAZDZD&status=["APPROVED"]'
Copiar
Respuesta
"ok": 1,
"data": [
{
"id": "363730401994967",
"name": "sample_flight_confirmation",
"category": "TICKET_UPDATE",
"languages": [
"pt_BR",
"es",
"id",
"en_US"
],
"statuses": [
{
"language": "pt_BR",
"status": "APPROVED"
},
{
"language": "es",
"status": "APPROVED"
},
{
"language": "id",
"status": "APPROVED"
},
{
"language": "en_US",
"status": "APPROVED"
}
],
"templates": [
{
"language": "pt_BR",
"status": "APPROVED",
"rejected_reason": "NONE",
"components": [
{
"type": "HEADER",
"format": "DOCUMENT"
},
{
"type": "BODY",
"text": "Esta é a sua confirmação de voo para {{1}}-{{2}} em {{3}}."
},
{
"type": "FOOTER",
"text": "Esta mensagem é de uma empresa não verificada."
}
],
"quality_score": {
"score": "UNKNOWN"
}
},
{
"language": "es",
"status": "APPROVED",
"rejected_reason": "NONE",
"components": [
{
"type": "HEADER",
"format": "DOCUMENT"
},
{
"type": "BODY",
"text": "Confirmamos tu vuelo a {{1}}-{{2}} para el {{3}}."
},
{
"type": "FOOTER",
"text": "Este mensaje proviene de un negocio no verificado."
}
],
"quality_score": {
"score": "UNKNOWN"
}
},
{
"language": "id",
"status": "APPROVED",
"rejected_reason": "NONE",
"components": [
{
"type": "HEADER",
"format": "DOCUMENT"
},
{
"type": "BODY",
"text": "Ini merupakan konfirmasi penerbangan Anda untuk {{1}}-{{2}} di {{3}}."
},
{
"type": "FOOTER",
"text": "Pesan ini berasal dari bisnis yang tidak terverifikasi."
}
],
"quality_score": {
"score": "UNKNOWN"
}
},
{
"language": "en_US",
"status": "APPROVED",
"rejected_reason": "NONE",
"components": [
{
"type": "HEADER",
"format": "DOCUMENT"
},
{
"type": "BODY",
"text": "This is your flight confirmation for {{1}}-{{2}} on {{3}}."
},
{
"type": "FOOTER",
"text": "This message is from an unverified business."
}
],
"quality_score": {
"score": "UNKNOWN"
}
}
]
}
],
"paging": {
"cursors": {
"before": "MAZDZD",
"after": "MAZDZD"
},
"hasNext": true,
"hasPrevious": false
}
}
Copiar
PUT /whatsapp-message-template
Esta llamada a la API puede crear una nueva plantilla de mensaje de WhatsApp.
Cada cuenta de WhatsApp Business puede crear 100 plantillas de mensaje por hora.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| wabaId |
cadena |
ID de WABA |
sí |
| accessToken |
cadena |
Token de acceso generado desde el canal WhatsApp Cloud |
sí |
| name |
cadena |
Nombre de la plantilla de mensaje |
sí |
| language |
cadena |
Idioma de la plantilla de mensaje |
sí |
| category |
cadena |
Categoría de la plantilla de mensaje: TRANSACTIONAL, MARKETING o OTP |
sí |
| components |
arreglo |
Contenido de la plantilla de mensaje. Por favor, consulta aquí para la estructura del componente. |
sí |
Al insertar la URL de la imagen en "example":{"header_handle":["IMAGE_URL"]}, esta API cargará automáticamente el ejemplo mientras crea la plantilla de mensaje para ti.
Endpoint
Cuerpo de la Solicitud
Ejemplo de solicitud (Encabezado de imagen)
{
"wabaId": "190787529545503",
"accessToken": "ACCESS_TOKEN",
"name": "test_template",
"language": "en_US",
"category": "MARKETING"
"components": [
{
"type": "BODY",
"text": "Hi there! Are you interested in our latest promotional sale?"
},
{
"type": "HEADER",
"format": "IMAGE",
"example":{"header_handle":["IMAGE_URL"]}
}
]
}
Copiar
Ejemplo de solicitud (Parámetros, Pie de página y Botones de llamada a la acción)
{
"wabaId": "190787529545503",
"accessToken": "ACCESS_TOKEN",
"name": "test_template",
"language": "en_US",
"category": "MARKETING"
"components": [
{
"type": "BODY",
"text": "hello {{1}} this is body template",
"example":{"body_text":[["Test"]]}
},
{
"type": "FOOTER",
"text": "this is footer template"
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "PHONE_NUMBER",
"text": "Call",
"phone_number":"+85212769072"
},
{
"type": "URL",
"text": "URL",
"url":"https://www.woztell.com/"
}
]
}
]
}
Copiar
Ejemplo de solicitud (Parámetros y botones de respuesta rápida)
{
"wabaId": "190787529545503",
"accessToken": "ACCESS_TOKEN",
"name": "test_template",
"language": "en_US",
"category": "MARKETING"
"components": [
{
"type": "BODY",
"text": "hello {{1}} this is body template",
"example":{
"body_text":[["Test"]]
}
},
{
"type": "BUTTONS",
"buttons": [
{
"type": "QUICK_REPLY",
"text": "yes"
},
{
"type": "QUICK_REPLY",
"text": "no"
}
]
}
]
}
Copiar
Respuesta
{
"ok": 1,
"id": "516723536625510",
"language": "en_US"
}
Copiar
PATCH /whatsapp-message-template
Esta llamada a la API puede editar una plantilla de mensaje existente.
NOTA
Una plantilla de mensaje solo puede ser editada una vez en un período de 24 horas, y hasta 10 veces en un período de 30 días.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| wabaId |
cadena |
ID de WABA |
sí |
| accessToken |
cadena |
Token de acceso generado desde el canal WhatsApp Cloud |
sí |
| messageTemplateName |
cadena |
Nombre de la plantilla de mensaje |
sí |
| messageTemplateLanguage |
cadena |
Idioma de la plantilla de mensaje |
sí |
| messageTemplateId |
cadena |
ID único de la plantilla de mensaje |
sí |
| components |
arreglo |
Contenido para actualizar en la plantilla de mensaje |
sí |
NOTAS
Cada versión de idioma de una plantilla de mensaje tiene su propio ID. Para editar una plantilla con PATCH /whatsapp-message-templates, deberás especificar la versión del idioma de la plantilla.
Normalmente, la llamada GET /whatsapp-message-templates solo devuelve el ID del idioma más reciente. Por lo tanto, primero deberías obtener el ID de un idioma particular aplicando el filtro de idioma en GET /whatsapp-message-templates.
Endpoint
Cuerpo de la Solicitud
{
"wabaId": "12986521265530",
"accessToken": "ACCESS_TOKEN",
"messageTemplateLanguage": "en_US",
"messageTemplateName": "test_template",
"messageTemplateId": "1748340935544945",
"components": [
{
"type": "BODY",
"text": "Winter's coming, it's time to check out our latest winter collection!"
}
]
}
Copiar
Respuesta
{
"ok": 1,
"success": true
}
Copiar
DEL /whatsapp-message-template
Esta API puede eliminar una plantilla de mensaje existente.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| wabaId |
cadena |
ID de WABA |
sí |
| accessToken |
cadena |
Token de acceso generado desde el canal WhatsApp Cloud |
sí |
| name |
cadena |
Nombre de la plantilla de mensaje |
sí |
Endpoint
Cuerpo de la Solicitud
{
"wabaId": "12986521265530",
"accessToken": "ACCESS_TOKEN",
"name": "test_template"
}
Copiar
Respuesta
{
"ok": 1,
"success": true
}
Copiar
APIs de Flujo
GET /flow
Esta API sirve para recuperar la lista de flujos.
Autenticación
El Payload y el contexto firmado son necesarios en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| limit |
entero |
Número de flujos a obtener |
sí |
| after |
cadena |
Para obtener el siguiente lote de hilos, puede obtenerse de paging.cursors en la respuesta |
no |
| before |
cadena |
Para obtener el siguiente lote de hilos, puede obtenerse de paging.cursors en la respuesta |
no |
Requisito
Respuesta
{
"ok": 1,
"data": [
{
"label": "TEST FLOW (DRAFT)",
"value": "885692686603466",
"status": "draft",
"assets": [
{
"id": "SIGN_UP",
"label": "Customer Success (SIGN_UP)",
"data": "{}",
"preview": {
"preview_url": "https://business.facebook.com/wa/manage/flows/885692686603466/preview/?token=abdfac6c-1319-4a01-a896-d26482f44659",
"expires_at": "2024-03-08T04:52:37+0000"
}
}
],
"triggerMatchingObject": null
}
],
"paging": {
"cursors": {
"before": "QVFIUnJEbERTSFN1TEM5THFDdkJYNjExaF9xSUxjNjVGazJUWHBWTWV3Ukx0V2JQSFlMYmRzT0RXanpMeUVnd1VnSUlnQVBkamVyNkQ5dW9Ocm5YNVpoY2VR",
"after": "QVFIUnJEbERTSFN1TEM5THFDdkJYNjExaF9xSUxjNjVGazJUWHBWTWV3Ukx0V2JQSFlMYmRzT0RXanpMeUVnd1VnSUlnQVBkamVyNkQ5dW9Ocm5YNVpoY2VR"
},
"hasNext": false,
"hasPrevious": false
}
}
Copiar
GET /flow-screen-payload
Esta API se utiliza para recuperar el payload de la pantalla de flujo de un flujo.
Autenticación
El Payload y el contexto firmado son necesarios en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| flowId |
cadena |
El ID único de un flujo. | sí |
Requisito
Respuesta
{
"ok": 1,
"payload": {
"id": "screen_with_data",
"label": "Feedback With Data (screen_with_data)",
"data": "{\n \"would_recommend\": \"\",\n \"how_to_do_better\": \"\"\n}",
"screens": [
{
"id": "screen_with_data",
"label": "Feedback With Data (screen_with_data)",
"data": "{\n \"would_recommend\": \"\",\n \"how_to_do_better\": \"\"\n}",
"preview": {
"preview_url": "https://business.facebook.com/wa/manage/flows/1332875717353551/preview/?token=ed47bb0a-f749-4a0f-87f3-889f003b53ed",
"expires_at": "2024-03-06T03:56:10+0000"
}
}
]
}
}
Copiar
GET /flow-preview
Esta API es para recuperar la URL de la vista previa de un flujo.
Autenticación
El Payload y el contexto firmado son necesarios en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| flowId |
cadena |
El ID único de un flujo. |
sí |
Requisito
Respuesta
GET /flow-detail
Esta API es para recuperar los detalles de un flujo.
Autenticación
El Payload y el contexto firmado son necesarios en el encabezado.
Parámetros
| Nombre | Tipo | Descripción | Requerido |
|---|
| flowId | cadena | El ID único de un flujo. | sí |
Requisito
Respuesta
{
"ok": 1,
"id": "678952344393952",
"name": "Test Flow 2",
"categories": [
"OTHER"
],
"preview": {
"preview_url": "https://business.facebook.com/wa/manage/flows/678952344393952/preview/?token=90fd19f9-edf7-4a6a-8fea-8da4cbb687f7",
"expires_at": "2024-03-06T07:39:50+0000"
},
"status": "DRAFT",
"validation_errors": [],
"json_version": "3.1",
"whatsapp_business_account": {
"id": "619018099309339",
"name": "Test Group Limited (UAT)",
"currency": "USD",
"timezone_id": "42",
"message_template_namespace": "a02e2441_69dd_4ea2_a90b_4aca392f0afa"
},
"application": {
"link": "https://platform.woztell.com/",
"name": "Woztell",
"id": "689996742158814"
}
}Copiar
PUT /create-flow
Esta API es para crear un nuevo flujo.
Autenticación
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| name |
cadena |
Nombre del nuevo flujo. |
sí |
| categories |
arreglo |
Una lista de categorías de flujo. Se pueden proporcionar varios valores, pero al menos uno es obligatorio: SIGN_UP, SIGN_IN, APPOINTMENT_BOOKING, LEAD_GENERATION, CONTACT_US, CUSTOMER_SUPPORT, SURVEY, OTHER |
sí |
| clone_flow_id |
cadena |
ID del flujo a ser clonado |
no |
| endpoint_url |
cadena |
La URL del endpoint del flujo. No proporcione este campo si está clonando un flujo con versión JSON inferior a la 3.0. |
no |
Endpoint
Cuerpo de la Solicitud
Respuesta
{
"ok": 1,
"id": "1557286081777970"
}Copiar
Esta API es para actualizar los metadatos de un flujo.
Autenticación
El Payload y el contexto firmado son necesarios en el encabezado.
Parámetros
| Nombre | Tipo | Descripción | Requerido |
|---|
| flowId | cadena | ID del flujo que está siendo actualizado | sí |
| name | cadena | Nuevo nombre del flujo | no |
| categories | arreglo | Nuevas categorías del flujo | no |
| endpoint_uri | cadena | La URL del Endpoint de WA Flow. No proporcione este campo si está actualizando un flujo con versión de Flow JSON inferior a la 3.0 | no |
Endpoint
Cuerpo de la Solicitud
Respuesta
{
"ok": 1,
"success": true
}
Copiar
PATCH /flow-json
Esta API es para actualizar el JSON de un flujo.
Autenticación
El Payload y el contexto firmado son necesarios en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| name |
cadena |
Nombre del flujo |
sí |
| version |
cadena |
Versión del JSON del flujo |
sí |
| screens |
JSON |
Las pantallas del flujo que pueden ser insertadas en el constructor de flujos en WhatsApp Manager |
sí |
Endpoint
Cuerpo de la Solicitud
{
"flowId": "910367050421850",
"data": {
"version": "3.1",
"screens": [
{
"id": "PREFERENCES",
"title": "Update Preferences",
"data": {},
"terminal": true,
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "form",
"children": [
{
"type": "CheckboxGroup",
"label": "Communication types",
"required": true,
"name": "communicationTypes",
"data-source": [
{
"id": "0",
"title": "Special offers and promotions"
},
{
"id": "1",
"title": "Changes to my subscription"
},
{
"id": "2",
"title": "News and events"
},
{
"id": "3",
"title": "New products"
}
]
},
{
"type": "CheckboxGroup",
"label": "Contact Preferences",
"required": false,
"name": "contactPrefs",
"data-source": [
{
"id": "0",
"title": "Whatsapp"
},
{
"id": "1",
"title": "Email"
},
{
"id": "2",
"title": "SMS"
}
]
},
{
"type": "Footer",
"label": "Done",
"on-click-action": {
"name": "complete",
"payload": {
"communicationTypes": "${form.communicationTypes}",
"contactPrefs": "${form.contactPrefs}"
}
}
}
]
}
]
}
}
]
}
}Copiar
Respuesta
{
"ok": 1,
"success": true,
"validation_errors": []
}
Copiar
DEL /flow
Esta API es para eliminar un flow.
Autenticación
El Payload y el contexto firmado son requeridos en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| flowId |
cadena |
ID del flow a eliminar |
sí |
Endpoint
Cuerpo de la Solicitud
{
"flowId": "913687770028833"
} Copiar
Respuesta
{
"ok": 1,
"success": true
}Copiar
POST /publish-flow
Esta API es para publicar un flujo.
Autenticación
El Payload y el contexto firmado son requeridos en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| flowId |
cadena |
ID del flujo a publicar |
sí |
Endpoint
Cuerpo de la Solicitud
{
"flowId": "913687770028833"
} Copiar
Respuesta
{
"ok": 1,
"success": true
}Copiar
POST /deprecate-flow
Esta API sirve para descontinuar un flujo.
Autenticación
El Payload y el contexto firmado son requeridos en el encabezado.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| flowId |
cadena |
ID del flujo a descontinuar |
sí |
Endpoint
Cuerpo de la Solicitud
{
"flowId": "913687770028833"
} Copiar
Respuesta
{
"ok": 1,
"success": true
}Copiar
APIs de Encriptación para Negocios
POST /whatsapp-business-encryption
Esta API sirve para establecer la clave pública del negocio.
Autenticación
El Payload y el contexto firmado son requeridos en la cabecera.
Parámetros
| Nombre |
Tipo |
Descripción |
Requerido |
| publicKey |
cadena | Clave pública RSA de 2048 bits generada para el negocio. Por favor, consulta aquí para saber cómo generar la clave pública. |
sí |
Endpoint
Cuerpo de la Solicitud
{
"publicKey": "-----BEGIN PUBLIC KEY-----\nABCDIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAls1409DedWXmHnt0Pb6s\nIdGkL6pFXxd5vPxrk/CChQssCGLK7jEPQwzhAZ/La7Cg/IvxjxvgC8DD3v8ZniU7\nHu5xPftKm3rEvNRwstRHaoPF+CNxHzHMy2DkgdVxvnBI6qtEjn+yZXdEOHhGHejH\nEf0EfFSMoyCaXea4E3LqvOE8iJ42uNtC7D4TmyeE+dTKudclswNA3QDA0zLH1M+Y\n9Oxv06FgD9S8gmvSwJgn3hfwLc/j5Dj5Qr6NAd9dRMQGLGeFEbg/JJXAVaAAxFlb\nvITHRG1ynRZDcrAri377Z+HS8G43o3TmrPyD0zRXQFbHCu+kOH5DBs3yFRcFjA7L\nwQIDAQAB\n-----END PUBLIC KEY-----"
}
Copiar
Respuesta
GET /whatsapp-business-encryption
Esta API es para obtener la clave pública del negocio.
Autenticación
El Payload y contexto firmado son requeridos en el encabezado.
Solicitud
Respuesta
{
"ok": 1,
"data": [
{
"business_public_key": "-----BEGIN PUBLIC KEY-----\nABCDIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAls1409DedWXmHnt0Pb6s\nIdGkL6pFXxd5vPxrk/CChQssCGLK7jEPQwzhAZ/La7Cg/IvxjxvgC8DD3v8ZniU7\nHu5xPftKm3rEvNRwstRHaoPF+CNxHzHMy2DkgdVxvnBI6qtEjn+yZXdEOHhGHejH\nEf0EfFSMoyCaXea4E3LqvOE8iJ42uNtC7D4TmyeE+dTKudclswNA3QDA0zLH1M+Y\n9Oxv06FgD9S8gmvSwJgn3hfwLc/j5Dj5Qr6NAd9dRMQGLGeFEbg/JJXAVaAAxFlb\nvITHRG1ynRZDcrAri377Z+HS8G43o3TmrPyD0zRXQFbHCu+kOH5DBs3yFRcFjA7L\nwQIDAQAB\n-----END PUBLIC KEY-----",
"business_public_key_signature_status": "VALID"
}
]
}Copiar