# Webhook

<Aside type="caution" icon="setting" title="Se necesita la ayuda de un desarrollador">
 Necesitará la ayuda de su equipo de desarrolladores para configurar el elemento Webhook. Comparta esta guía con ellos para empezar.
</Aside>

Los webhooks le permiten enviar datos de Journey a servicios externos como análisis, sistemas CRM y herramientas de marketing. Puede:

* Notificar a sistemas externos cuando un cliente realiza una acción en el Journey
* Enviar datos de clientes a herramientas de análisis
* Activar correos electrónicos, SMS o WhatsApp de terceros en eventos específicos del Journey

<Aside type="note">
Consulte algunos ejemplos de cómo implementar webhooks para diferentes casos de uso y servicios: [Ejemplos de integración de webhooks](/es/developer/guides/customer-journey/webhook-samples/)
</Aside>

## Cómo configurar el elemento Webhook 
### Añadir el elemento Webhook
Arrastre y suelte el elemento **Webhook** en el lienzo. Coloque el **Webhook** en cualquier lugar que desee, teniendo en cuenta qué información del Journey va a enviar a un servicio de terceros.

<img src="/journey-elements-README-40.webp" alt="Elemento Webhook en el lienzo con nombre y configuración de solicitud"/>

### Nombrar el paso del Webhook y especificar la URL y el tipo de solicitud
En el campo **NOMBRE DEL PASO**, introduzca un nombre para el webhook. Puede ser útil nombrar los webhooks según los servicios a los que envían datos o el caso de uso.

A continuación, en el campo **URL**, especifique la URL de la solicitud a la que se deben enviar los datos. Junto al campo de la URL, seleccione el tipo de solicitud en el menú desplegable **TIPO DE SOLICITUD**: `GET` o `POST`.
<img src="/journey-elements-webhook-1.webp" alt="Interfaz de configuración de Webhook que muestra el campo URL y el menú desplegable TIPO DE SOLICITUD para seleccionar el método GET o POST"/>
### Configurar las cabeceras
En la sección **CABECERAS**, establezca el tipo de contenido. 

Por defecto, el tipo de contenido es **application/json**. Si el servicio al que envía el webhook requiere otro tipo de contenido, introduzca el apropiado en el valor de la cabecera **Content-Type**. 

Ejemplos de tipos de contenido son:

* `x-www-form-urlencoded`
* `text/plain`
* `text/xml`

Añada cabeceras adicionales si es necesario haciendo clic en **+ AÑADIR CABECERA**. Puede eliminar cualquier cabecera haciendo clic en el icono 'x' que aparece junto a ella.

Por ejemplo, algunas API pueden requerir **autenticación básica HTTP**. Para autenticar dichas solicitudes, haga lo siguiente:

1. Abra un editor de texto plano y escriba su nombre de usuario y contraseña sin espacios, separados por dos puntos. Por ejemplo: `myuser:mypass`
2. Codifique esta cadena en Base64.
3. Copie la cadena Base64 resultante (por ejemplo, `bXl1c2VyOm15cGFzcw==`).
4. En la configuración del webhook, añada una cabecera de Autorización con el valor: `Basic <SU CADENA BASE64>`. Asegúrese de que hay un espacio después de la palabra "Basic".

<img src="/journey-elements-webhook-2.webp" alt="Ejemplo de cabecera de autorización para autenticación básica en la configuración de webhook que muestra las cabeceras Content-Type y Authorization"/>
### Añadir el cuerpo de la solicitud JSON
En la sección **DATOS**, introduzca el cuerpo de su solicitud JSON. Asegúrese de que el cuerpo de la solicitud está en el formato JSON correcto.

<Aside type="note">
Si no hay ningún valor para el marcador de posición de Datos Dinámicos cuando se envía la solicitud POST, se transmitirá el valor nulo.
</Aside>

Ejemplo:
```
{
  "hwid": "{{device:hwid}}"
}
```



### Utilizar datos dinámicos y macros

El panel **CONSTRUCTOR DE DATOS** le permite insertar información dinámica (como datos de usuario, dispositivo, etiqueta o evento) directamente en el cuerpo de su solicitud JSON. Con los Datos Dinámicos, puede incluir valores específicos del usuario individual que progresa a través del Journey.

Para ello: 
1. Seleccione una **categoría**. Puede extraer datos de tres categorías:

- **Dispositivo:** Utilice los datos del Dispositivo cuando necesite información técnica vinculada al dispositivo del usuario.

- **Etiqueta:** Utilice los datos de Etiqueta cuando desee enviar información almacenada en el perfil del usuario.

- **Evento:** Utilice los datos de Evento cuando el webhook deba enviar valores del evento desencadenante del Journey.

2. Seleccione un **parámetro** (por ejemplo, HWID, categoría favorita, etc.).
3. Pushwoosh genera una macro que se ve así:

```
{{tag:Language}}
```

4. Copie la macro y péguela en su cuerpo JSON en la sección DATOS.

Cuando el webhook se ejecuta en un Journey en vivo, Pushwoosh reemplaza automáticamente la macro con el valor real para ese usuario.

<img src="/journey-elements-webhook-3.webp" alt="Insertar marcadores de posición de Datos Dinámicos en el cuerpo de la solicitud del webhook"/>

### Asignar datos de respuesta de webhook a variables

Además de enviar datos, el elemento Webhook también puede capturar datos de la respuesta que recibe y convertirlos en variables. Estas variables pueden utilizarse más adelante en el Journey. Por ejemplo, establezca una etiqueta con [**Actualizar perfil de usuario**](/es/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response), o programe un [**Retraso de tiempo**](/es/product/customer-journey/journey-elements/flow-controls/time-delay/#use-a-date-from-a-webhook-response) basado en un valor devuelto por el servicio externo. Para un ejemplo completo de Journey, consulte [Uso de datos de respuesta de webhook en su Journey](/es/product/customer-journey/journey-elements/using-webhook-response-data-in-journeys/).

En la sección **ASIGNACIÓN DE RESPUESTAS**, haga clic en **+ AÑADIR ASIGNACIÓN** y rellene dos campos para cada valor que desee capturar:

* **Ruta:** la ubicación del valor dentro del cuerpo JSON de la respuesta
* **Atributo:** el nombre que utiliza para hacer referencia a este valor más adelante en el Journey

<img src="/journey-elements-webhook-4.webp" alt="Sección de asignación de respuestas con los campos Ruta y Atributo y el botón Añadir asignación en la configuración del webhook"/>

Por ejemplo, si su CRM responde con:

```
{
  "data": {
    "user": {
      "id": "789xyz"
    }
  }
}
```

Establezca **Ruta** en `data.user.id` y **Atributo** en `crm_user_id` para capturar ese ID.

<Aside type="note">
Algunas cosas que debe saber sobre la asignación:

- **Ruta** es una ruta simple separada por puntos (claves de objeto y, para arrays, índices numéricos, por ejemplo `results.0.code`). No admite comodines ni filtros, por lo que solo puede apuntar a un valor específico a la vez.
- Los valores se almacenan exactamente como vienen de la respuesta JSON (texto, número, o verdadero/falso). No hay conversión de tipo. Si planea usar un valor como fecha en un elemento de **Retraso de tiempo**, asegúrese de que su servicio lo devuelva en uno de los formatos de fecha que soporta el **Retraso de tiempo**.
- Si la respuesta no es un JSON válido, o una **Ruta** no coincide con nada, la variable correspondiente no se crea para ese usuario. No se muestra ningún error, y el paso **Webhook** se completa normalmente.
</Aside>

<Aside type="caution">
Los cuerpos de respuesta de más de 64 KB no se procesan para la asignación en absoluto. Mantenga la respuesta que su punto final envía razonablemente pequeña si planea asignar valores de ella.
</Aside>

<LinkCard title="Uso de datos de respuesta de webhook en su Journey" href="/product/customer-journey/journey-elements/using-webhook-response-data-in-journeys/" />

### Probar el Webhook
Haga clic en **Probar webhook** para verificar que la configuración de su webhook es correcta y que la solicitud se envía con éxito.

### Guardar su configuración
Haga clic en **Aplicar** para guardar la configuración de su webhook.