> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ycloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Enviar códigos de verificación a través de WhatsApp

Utilice códigos de verificación de WhatsApp para el registro, inicio de sesión, recuperación de cuentas y verificación adicional de acciones confidenciales. Cuando un cliente elige WhatsApp, su sistema envía una plantilla de autenticación. El cliente copia o autocompleta el código y su backend lo valida.

## ¿Por qué usar WhatsApp para la verificación?

### Añada otro canal de entrega junto con SMS

WhatsApp recibe mensajes a través de una conexión a internet. Ofrece a los clientes otra forma de recibir un código cuando hay Wi-Fi disponible pero la recepción de SMS no es confiable. El destinatario aún necesita WhatsApp y una conexión a internet activa.

### Reduzca los pasos para ingresar el código

Los botones para copiar códigos reducen la transcripción manual. Las experiencias de un toque (one-tap) y sin toques (zero-tap) pueden reducir el cambio entre aplicaciones en apps de Android compatibles e integradas. Para los clientes que ya usan WhatsApp, estas opciones pueden facilitar la verificación. Mida el impacto en la tasa de finalización en su propio flujo.

### Optimice el costo de una verificación completada

Evalúe WhatsApp como una vía potencial para reducir los costos de verificación por mercado. Compare las tarifas de autenticación y de autenticación internacional aplicables, los cargos de YCloud, los costos de respaldo por SMS y las tasas de finalización.

Utilice los cargos totales del canal de verificación divididos por las verificaciones exitosas como una métrica práctica. Meta cobra por los mensajes entregados; un mensaje no entregado no genera la tarifa de mensaje correspondiente de Meta. Otros cargos dependen de su plan de YCloud. Consulte [Precios de WhatsApp](/es/documentation/whatsapp-business-platform/pricing-limits-and-quality/whatsapp-pricing) y [Precios de Meta](https://business.whatsapp.com/products/platform-pricing).

### Ubique los puntos de abandono en el flujo de verificación

Rastree por separado la aceptación de la solicitud, la entrega del mensaje y la verificación exitosa. Esto le ayuda a distinguir los problemas de envío de los problemas al recibir o ingresar un código.

WhatsApp transporta el código. Su sistema de verificación sigue decidiendo si es válido, si ha caducado, si ya se utilizó y si está autorizado para la acción solicitada.

## Antes de comenzar

1. Inicie sesión en [YCloud](https://www.ycloud.com/console/#/entry/login) y [conecte una WABA y un remitente](/es/documentation/quick-start/connect-whatsapp-to-ycloud).
2. Prepare la lógica de solicitud, generación, almacenamiento y validación de códigos. Esta guía utiliza la API de WhatsApp Messages; su sistema gestiona el ciclo de vida del código. Para el servicio de verificación de YCloud, consulte [Verify](/es/documentation/integrations/channels/verify/index).
3. Prepare una [clave de API del lado del servidor](/es/documentation/developer/manage-api-keys) y un [receptor de Webhook](/es/documentation/developer/webhooks).
4. Utilice un destinatario de prueba que haya solicitado el código. Una solicitud de código no constituye un permiso para envíos de marketing posteriores.
5. Configure y pruebe un canal de SMS si necesita un mecanismo de respaldo. La API de WhatsApp Messages no envía SMS automáticamente por el solo hecho de seguir las recomendaciones de esta guía.

## 1. Elija la experiencia del código

| Experiencia | Acción del cliente | Qué debe preparar | Cuándo elegirla |
| - | - | - | - |
| **Copiar código** | Copiar en WhatsApp e ingresar el código en su sitio web o aplicación. | Una pantalla de entrada y verificación en el backend. | Sitios web, múltiples plataformas y una integración inicial. |
| **Un toque / Autocompletar** | Tocar un botón que pasa el código a una aplicación de Android compatible. | Nombre del paquete, hash de firma e integración del handshake. | Reducir el cambio de aplicaciones y el pegado en Android. |
| **Sin toques (Zero-tap)** | Una aplicación de Android compatible recibe el código sin cambiar a WhatsApp. | Integración de Android, comprobaciones de elegibilidad y aceptación de los términos aplicables. | Reducir aún más la interacción cuando pueda probar las condiciones compatibles. |

Las opciones de un toque o sin toques pueden recurrir a otra experiencia, como copiar código, cuando no se cumplen los requisitos del dispositivo o de la aplicación. Asegúrese de admitir este respaldo. Seleccionar la opción en el editor no integra su aplicación cliente.

Meta también documenta sugerencias de teclado para OTP desde notificaciones en iOS 26 y versiones posteriores. Esto es independiente de un toque y sin toques en Android; pruébelos por separado. Consulte [Plantillas de autenticación](/es/documentation/whatsapp-business-platform/messaging/message-templates/authentication-message-templates/index) y la [documentación de autenticación de Meta](https://developers.facebook.com/docs/whatsapp/business-management-api/authentication-templates/).

<Frame caption="Meta example: the customer copies the verification code and enters it in your app. The code and expiry shown are demonstration values.">
  <img src="https://mintcdn.com/lchnan/gXEJIQXV2JH2VUQJ/product-assets/english-help-2026-09-22/meta-authentication-copy-code-annotated.svg?fit=max&auto=format&n=gXEJIQXV2JH2VUQJ&q=85&s=285ea260055d40a8647623d797848f19" alt="Ejemplo de autenticación de Meta con una flecha corta que apunta a Copiar código." width={380} data-path="product-assets/english-help-2026-09-22/meta-authentication-copy-code-annotated.svg" />
</Frame>

Fuente: [Plantillas de autenticación de Meta](https://developers.facebook.com/documentation/business-messaging/whatsapp/templates/authentication-templates/authentication-templates/).

## 2. Crear una plantilla de autenticación

### Seleccione la WABA, el nombre y el idioma

Abra **Plantillas** para la WABA deseada en YCloud, seleccione **Agregar plantilla** y elija **Autenticación**.

Use letras minúsculas, dígitos y guiones bajos para un nombre como `login_verification`. Elija el idioma de su cliente y registre el nombre aprobado exacto y el código de idioma para el envío. Consulte [Crear plantilla](/es/documentation/channels/whatsapp-accounts-management/template-management/create-template/index).

### Configurar el contenido y la acción del código

La autenticación utiliza un texto de código predeterminado, con avisos de seguridad y caducidad compatibles. No inserte textos promocionales comunes, URL, archivos multimedia ni emojis en el cuerpo.

Elige **Copiar código**, **Autorrellenar** o **Zero Tap**. Para Autorrellenar y Zero Tap, introduce el nombre del paquete de Android y el hash de firma reales y completa la integración de la app. Zero Tap también requiere aceptar las condiciones aplicables.

Para la configuración de la API, utiliza el contrato actual de `supported_apps` en lugar de los ejemplos más antiguos de nivel superior de `package_name` y `signature_hash`. Sigue las [guías de integración de autenticación](/es/documentation/whatsapp-business-platform/messaging/message-templates/authentication-message-templates/index) para consultar los detalles del SDK de Android y el handshake.

### Configurar tres ajustes de caducidad independientes

| Parámetro | Qué controla | Ejemplo de cinco minutos |
| - | - | - |
| Caducidad del código en el backend | Cuándo rechaza el código tu servidor. | Cinco minutos después de su generación. |
| Aviso de caducidad mostrado | Lo que se le comunica al cliente. | Cinco minutos, coincidiendo con tu política real. |
| Tiempo de vida de entrega (TTL) | Durante cuánto tiempo se puede intentar la entrega. | No más que la vida útil restante del código, teniendo en cuenta el tiempo transcurrido entre la generación y el envío. |

El contrato actual de YCloud admite valores de TTL de autenticación personalizados regulares de **30 a 900 segundos**, con un valor predeterminado de **10 minutos** para plantillas nuevas. Los valores predeterminados históricos pueden variar; revisa el `messageSendTtlSeconds` guardado. El aviso de caducidad mostrado admite de **1 a 90 minutos** , pero no modifica la caducidad en el backend ni amplía el rango regular de TTL de entrega.

El contrato también admite `-1`, que establece un TTL personalizado de 30 días. Esto no se recomienda para códigos de corta duración y no significa una caducidad inmediata ni la desactivación de reintentos. Consulta el [contrato OpenAPI de YCloud](https://newdocs.ycloud.com/openapi/endpoints/ycloud-api-v2.yaml).

Por ejemplo, un código generado a las 10:00 que caduca a las 10:05 tiene un minuto restante si llega a las 10:04. Su recepción no reinicia su tiempo de vida. La caducidad del TTL detiene los intentos de entrega pendientes; no revoca un mensaje que ya se haya entregado en el dispositivo del cliente.

### Enviar y comprobar la disponibilidad

Envía la plantilla y revisa su estado de revisión real. Realiza envíos únicamente después de que esté aprobada y lista para usarse. Si es rechazada, revisa el motivo y sigue la sección [Revisión y ciclo de vida de plantillas](/es/documentation/whatsapp-business-platform/messaging/message-templates/template-review-and-lifecycle). No dependas de un tiempo de aprobación fijo.

## 3. Enviar a través de la API

Envía inmediatamente después de que el cliente solicite un código. Elige el comportamiento de envío que requiera tu flujo:

| Endpoint | Comportamiento |
| - | - |
| `POST /v2/whatsapp/messages/sendDirectly` | Envío sincrónico a la WhatsApp Business API; útil cuando el flujo de OTP necesita el resultado del envío de inmediato. |
| `POST /v2/whatsapp/messages` | Pone el mensaje en cola para su envío asincrónico. |

El nombre del endpoint `sendDirectly` describe el momento del envío. Es independiente de la función Utility Direct Send que gestiona la generación de plantillas. Este flujo sigue utilizando una plantilla de mensaje de autenticación aprobada.

### Preparar la solicitud

* Autentícate en el servidor con `X-API-Key`.
* Usa números en formato E.164, incluidos los prefijos de país, para `from` y `to`.
* Establece `type` en `template` y utiliza el nombre y el idioma aprobados para la WABA seleccionada.
* Proporciona el mismo código en el cuerpo y en los parámetros del botón de OTP.
* Asocia tu solicitud de verificación con el ID de mensaje de YCloud. `externalId` ayuda a la conciliación, pero no garantiza la idempotencia.

Ejemplo de cuerpo de solicitud para Copiar código. Reemplaza los marcadores de posición; `123456` es ficticio y debe ser generado por tu sistema de verificación en producción:

```json theme={"theme":{"light":"github-light","dark":"github-dark"}}
{
  "from": "BUSINESS_PHONE_NUMBER",
  "to": "CUSTOMER_PHONE_NUMBER",
  "type": "template",
  "template": {
    "name": "APPROVED_TEMPLATE_NAME",
    "language": { "code": "APPROVED_LANGUAGE_CODE" },
    "components": [
      {
        "type": "body",
        "parameters": [{ "type": "text", "text": "123456" }]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": 0,
        "parameters": [{ "type": "text", "text": "123456" }]
      }
    ]
  },
  "externalId": "VERIFICATION_REQUEST_REFERENCE"
}
```

Los parámetros de envío para el botón de OTP usan `sub_type: url`; no uses una estructura ordinaria de botón de código de cupón de marketing. Consulta [Autenticación con copia de código](/es/documentation/whatsapp-business-platform/messaging/message-templates/authentication-message-templates/copy-code-authentication) y [Enviar un mensaje de WhatsApp](/es/api-reference/guides/whatsapp-platform/send-whatsapp-message). También puedes seleccionar **Más → Copiar como cURL** en una plantilla aprobada y cotejar los parámetros generados con su configuración.

Una respuesta correcta de la API no confirma la entrega. Si una solicitud agota el tiempo de espera, inspecciona los registros de mensajes y las devoluciones de llamada disponibles antes de volver a enviar.

## 4. Recibir actualizaciones de entrega

En **Desarrolladores → Webhooks**, crea un endpoint, introduce tu URL de callback y suscríbete a `whatsapp.message.updated`. Sigue la [Guía de Webhook](/es/documentation/developer/webhooks) para la verificación de firmas, confirmaciones y reintentos.

Asocia cada ID de mensaje con su solicitud de verificación:

| Estado | Significado | Respuesta del flujo |
| - | - | - |
| `sent` | Enviado, sin confirmación de llegada al dispositivo del cliente. | Espera las actualizaciones de entrega o fallo. |
| `delivered` | Entregado al destinatario. | Espera la validación correcta del código. |
| `read` | Se recibió una confirmación de lectura. | No marques la verificación como completada ni trates la falta de confirmaciones como un fallo. |
| `failed` | Falló el envío o la entrega. | Revisa el error antes de corregir la configuración, reintentar o cambiar de canal. |

Marca la verificación como completada solo cuando tu backend valide el código. Gestiona las retrollamadas duplicadas y tardías sin permitir que un estado anterior sobrescriba uno posterior. Usa [Registros de mensajes](/es/documentation/channels/whatsapp-accounts-management/data-analysis/message-logs) para la investigación manual.

## 5. Diseñar la interfaz y el respaldo por SMS

### Aclarar el canal de recepción

Antes del envío, indica que el código llegará a través de WhatsApp. Tras el envío, muestra un destino enmascarado, un mensaje de espera, una cuenta regresiva para el reenvío y las alternativas disponibles. Permite que los clientes regresen y corrijan el número.

| Estrategia | Cuándo conviene | Experiencia |
| - | - | - |
| WhatsApp primero, respaldo por SMS | Tus datos muestran que los clientes utilizan predominantemente WhatsApp. | Identifica el primer canal; ofrece SMS en caso de fallo o retraso, o envía según una política de respaldo informada. |
| El cliente elige | Los mercados, dispositivos o preferencias varían. | Ofrece WhatsApp y SMS juntos y recuerda las preferencias adecuadas. |

Donde el sistema operativo lo permita, tu aplicación puede usar la detección de disponibilidad de WhatsApp para sugerir un canal. La instalación no demuestra que el número ingresado esté registrado o accesible. Un resultado negativo no descarta la recepción en otro dispositivo. No uses la detección de instalación como verificación de número.

### Gestionar los fallos y los retrasos por separado

| Situación | Acción recomendada |
| - | - |
| Fallo explícito | Clasifica el error. Usa SMS cuando la política de respaldo lo permita y el número y el código sigan siendo válidos. Corrige los errores de clave de API, plantilla o cuenta en lugar de enmascararlos únicamente con el respaldo. |
| Envío sin confirmación de entrega a tiempo | Usa una espera configurable antes de ofrecer otro canal o aplicar el respaldo. La falta de confirmación no es prueba de no entrega. |
| Entregado sin completar la verificación | Mantén disponibles las opciones de entrada y reintento; no reenvíes continuamente solo porque la verificación esté incompleta. |
| Verificación completada o código expirado | Detén envíos adicionales para esta solicitud. |

El rango de **15–60 segundos** de la guía original puede ser un intervalo de espera experimental. Ajústalo según la latencia observada y el abandono. No es un requisito de WhatsApp ni una promesa de entrega.

Para el mismo desafío, puedes enviar el mismo código que aún sea válido a través del canal de respaldo. Si generas un nuevo código, invalida el anterior de acuerdo con tu política y explica este comportamiento. El respaldo no debe extender el tiempo de vida de un código antiguo.

Usa una única solicitud de verificación para controlar los intentos por canal, el tiempo de reutilización y la finalización. Las pulsaciones repetidas o las retrollamadas duplicadas y tardías no deben desencadenar múltiples mensajes SMS. Si llegan tanto WhatsApp como SMS, cada canal puede generar cargos.

## 6. Probar antes del lanzamiento

| Prueba | Resultado esperado |
| - | - |
| Verificación normal | Los valores del cuerpo y del botón coinciden; un código correcto no expirado tiene éxito. |
| Código incorrecto, expirado o reutilizado | El backend lo rechaza de acuerdo con la política y la interfaz explica el resultado. |
| Solicitud de nuevo código | La validez del código nuevo y del anterior coincide con tu política. |
| Destinatario sin conexión o con retraso | El TTL de entrega se mantiene separado del tiempo de vida del código; la espera y el respaldo siguen la configuración. |
| Condiciones de autocompletado no admitidas en Android | Un respaldo utilizable permite al cliente continuar. |
| iOS y múltiples dispositivos | Prueba la notificación, el copiado y el llenado en los clientes reales; no asumas un comportamiento idéntico. |
| Retrollamadas duplicadas, retrollamadas tardías, tiempo de espera de solicitud agotado | No crees resultados duplicados ni reenvíos descontrolados. |
| Respaldo por SMS | Usa el destino correcto y un código válido; detén el proceso tras una verificación exitosa. |

Tras el lanzamiento, compara la tasa de entrega, la latencia de entrega, la finalización de la verificación, la proporción de respaldo por SMS y el costo por verificación exitosa por mercado, canal y dispositivo. Utiliza estos resultados para ajustar la prioridad de los canales y los umbrales de espera en lugar de prometer que WhatsApp siempre es más rápido o más económico que los SMS.

## Escenario adicional: verificación iniciada por el cliente

En un flujo de verificación iniciado por el cliente, este abre WhatsApp desde una aplicación, envía un mensaje que contiene información para la verificación actual y luego regresa a la aplicación. Evalúe esto por separado. Un mensaje entrante ordinario de WhatsApp no es suficiente por sí solo para iniciar la sesión de alguien en un sitio web o aplicación.

Este enfoque requiere un desafío de un solo uso, vinculación de sesión, caducidad, protección contra repeticiones y confirmación del usuario. El material citado de YCloud no establece una función de inicio de sesión lista para usar, por lo que esta guía no la presenta como un paso de integración predeterminado.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.