Generación dinámica de código con Punchh
Un código de cupón es un código único que puede ser utilizado por un solo usuario (ya sea de uso único o múltiple). El marco Punchh genera códigos de cupón, que pueden procesarse dentro de una aplicación móvil o en el sistema de punto de venta (TPV).
Esta integración está mantenida por Punchh.
Acerca de la integración
Usando el marco de cupones de Punchh y Braze, puedes lograr los siguientes escenarios:
- Generar un código de cupón cuando el usuario selecciona un enlace de generación de cupón en un correo electrónico: El código de cupón se genera dinámicamente y se muestra en una página web.
- Generar un código de cupón cuando el usuario abre un correo electrónico: El código de cupón se genera dinámicamente y se muestra como una imagen dentro del correo electrónico.
Integración de la generación dinámica de códigos de cupones
Paso 1: Crear una campaña de cupones
- Usando una campaña de cupones de Punchh, crea una campaña de generación dinámica de cupones como se muestra en la siguiente imagen.
- El framework de cupones de Punchh genera los siguientes parámetros para habilitar la generación dinámica de cupones:
- Token de generación dinámica de cupones: Este es un token de seguridad generado por el sistema para el cifrado.
- URL de generación dinámica de cupones: Esta URL se incorpora en el correo electrónico como un enlace o imagen, según lo requiera el negocio.

Paso 2: Generar la firma y construir la URL
La biblioteca JWT.IO decodifica, verifica y genera tokens web JSON, un método abierto y estándar de la industria RFC 7519 para representar claims de forma segura entre dos partes.
Los siguientes nombres de ClaimType pueden usarse para garantizar la unicidad de invitados y cupones:
campaign_id: representa el ID de la Campaign de Punchh generado por el sistema.email: representa la dirección de correo electrónico del usuario.first_name: captura el nombre del usuario.last_name: captura el apellido del usuario.
Para usar la API de código de cupón dinámico de Punchh, se debe construir un token JWT. Agrega la siguiente plantilla Liquid en tu panel de Braze en el cuerpo del mensaje del canal que desees utilizar:
{% assign header = '{"alg":"HS256","typ":"JWT"}' | base64_encode | replace: '=', '' | replace: '+', '-' | replace: '/', '_' %}
{% capture payload_raw %}
{
"campaign_id": "CAMPAIGN_ID",
"email": "{{${email_address}}}",
"first_name": "{{${first_name}}}",
"last_name": "{{${last_name}}}"
}
{% endcapture %}
{% assign payload = payload_raw | replace: ' ', '' | replace: '\n', '' | base64_encode | replace: '=', '' | replace: '+', '-' | replace: '/', '_' %}
{% assign unsigned_token = header | append: "." | append: payload %}
{% assign secret = "DYNAMIC_COUPON_GENERATION_TOKEN" %}
{% assign signature_raw = unsigned_token | hmac_sha256_base64: secret %}
{% assign signature = signature_raw | replace: '=', '' | replace: '+', '-' | replace: '/', '_' %}
{% assign jwt = unsigned_token | append: "." | append: signature %}
Reemplaza lo siguiente:
| Marcador de posición | Descripción |
|---|---|
DYNAMIC_COUPON_GENERATION_TOKEN |
Tu token de generación dinámica de cupones. |
CAMPAIGN_ID |
Tu ID de Campaign. |
Paso 3: Agregar el código de cupón al cuerpo del mensaje
Enlazar a una página web de Punchh
Para enlazar a una página web alojada en Punchh, agrega {{jwt}} a la URL de generación dinámica que creaste anteriormente. Tu enlace debería ser similar al siguiente:
https://fakebrandz.punchh.com/request_coupons/7xY3bL9jRfZ1pA6mc8qD2eS4vT5wX?sign={{jwt}}
Cuando un usuario selecciona la URL del cupón, es redirigido a una página web alojada en Punchh, donde se muestra su cupón generado.

Extraer el código vía JSON como texto plano
Para obtener una respuesta JSON, agrega {{jwt}} a la URL de generación dinámica que creaste anteriormente, luego agrega .json después del token en la cadena de la URL. Tu enlace debería ser similar al siguiente:
https://fakebrandz.punchh.com/request_coupons/7xY3bL9jRfZ1pA6mc8qD2eS4vT5wX.json?sign={{jwt}}
Luego podrías aprovechar el contenido conectado para insertar el código como texto plano en cualquier cuerpo de mensaje. Por ejemplo:
{% connected_content https://fakebrandz.punchh.com/request_coupons/7xY3bL9jRfZ1pA6mc8qD2eS4vT5wX.json?sign={{jwt}} :save punchh_coupon %}
{{punchh_coupon.coupon}}
Enlazar una imagen dentro del contenido de correo electrónico
Para enlazar el código de cupón dentro de una imagen:
- Agrega
{{jwt}}a la URL de generación dinámica que creaste anteriormente. - Agrega
.pngdespués del token en la cadena de la URL. - Incorpora tu enlace en una etiqueta HTML
<img>.
<img src="https://fakebrandz.punchh.com/request_coupons/7xY3bL9jRfZ1pA6mc8qD2eS4vT5wX.png?sign={{jwt}}">

Mensajes de error
| Código de error | Mensaje de error | Descripción |
|---|---|---|
coupon_code_expired |
Este código promocional ha expirado | El código se usa después de su fecha de expiración configurada. |
coupon_code_success |
Felicitaciones, código promocional aplicado con éxito. | El código se usa correctamente. |
coupon_code_error |
Introduce un código promocional válido | El código utilizado no es válido. |
coupon_code_type_error |
Tipo de cupón incorrecto. Este cupón solo se puede canjear en %{coupon_type}. |
Cuando un código que debería usarse en el punto de venta se usa en la aplicación móvil, se produce este error. |
usage_exceeded |
El uso de la Campaign de este código de cupón está completo. Inténtalo la próxima vez. | El uso del código excede el número de usuarios autorizados para usarlo. Por ejemplo, si la configuración del panel permite que un código sea usado por 3000 usuarios y el número de usuarios excede los 3000, se produce este error. |
usage_exceeded_by_guest |
Este código promocional ya ha sido procesado. | El uso del código por un usuario excede el número de veces que un usuario puede usarlo. Por ejemplo, la configuración del panel permite que un solo código sea usado tres veces por un usuario. Si se usa más de esa cantidad, se produce este error. |
already_used_by_other_guest |
Este código promocional ya ha sido usado por otro invitado. | Otro usuario ya ha usado el código. |