Petición HTTP
La acción Petición HTTP conecta a tu asistente con cualquier sistema que tenga una dirección web: tu CRM, tu software de planificación, tu propia API o una plataforma de automatización como Make o n8n. Puedes enviar una petición antes de la llamada (para obtener contexto), durante la conversación (como herramienta del asistente) o después de la conversación (para enviar datos a otro sistema).
La acción se crea por asistente en Asistentes → Tareas, en la tarjeta Acciones: haz clic en Añadir nuevo y elige Petición HTTP. Para ello necesitas el rol Editor o Administrador. Los cambios se guardan automáticamente en cuanto la acción tiene un nombre y una dirección web válida.
Encontrarás una explicación general de las acciones, las condiciones y las variables en Acciones.
Ajustes comunes
| Ajuste | Significado | Valor predeterminado |
|---|---|---|
| Nombre | Un nombre reconocible para la acción. Obligatorio. | — |
| Cuándo | Antes de la llamada, Durante la conversación o Después de la conversación. | Después de la conversación |
| Método | GET, POST, PUT, PATCH o DELETE | POST |
| URL | La dirección completa, con https:// o http://. Se admiten variables, por ejemplo https://api.ejemplo.es/clientes/{{inboundContext.customerId}} en una petición después de la conversación. Las direcciones internas y privadas se rechazan. | — |
| Cabeceras | Pares de clave y valor, por ejemplo X-Api-Key: …. Se admiten variables. Estos valores quedan legibles en el formulario. Si no indicas tu propio Content-Type, enviamos application/json. | Ninguna |
| Clave de autorización | Una clave guardada que enviamos como cabecera Authorization. El valor se envía tal como lo guardaste, así que añade tú Bearer si tu sistema lo espera. Elige una clave de la lista, o pégala en Pegar una clave nueva y haz clic en Guardar como clave. También puedes añadirla antes en Ajustes → Conexiones con el tipo Cabecera Authorization. El valor se guarda cifrado y no se vuelve a mostrar. La clave solo se envía durante y después de la conversación, no en una petición antes de la llamada: en ese caso, pon el valor en Cabeceras como Authorization: …. | Ninguna |
| Plantilla del cuerpo | JSON con variables (no con GET, que no lleva cuerpo). Vacío significa: todas las variables disponibles en ese momento, en JSON. | Vacía |
No esperamos una respuesta de forma indefinida, y no puedes cambiar cuánto tiempo: 3 segundos antes de la llamada, 6 segundos durante la conversación y 8 segundos después de la conversación. Una petición fallida no se reintenta.
Firma
Cada petición con cuerpo lleva la cabecera X-Yarla-Signature, para que tu sistema pueda comprobar que de verdad viene de Yarla. Una petición GET no lleva cuerpo y no se firma. La cabecera tiene este aspecto:
X-Yarla-Signature: t=<unix-timestamp>,v1=<hex>Aquí v1 = HMAC-SHA256(secret, t + "." + rawBody): un HMAC sobre la marca de tiempo, un punto y el cuerpo sin procesar, con el secreto de webhook de tu empresa como clave. Ese secreto está en Ajustes → Conexiones, en la tarjeta Secreto de webhook. Solo un Administrador ve esa tarjeta. Con el botón Generar nuevo creas un secreto nuevo; el anterior deja de funcionar al instante, así que actualiza tu sistema enseguida. Tienes un ejemplo de comprobación de la firma en Webhooks.
Antes de la llamada
Una petición antes de la llamada se envía en cuanto se atiende una llamada entrante, antes del saludo. Se ejecuta en cada llamada entrante; aquí una condición no tiene efecto. No se ejecuta en llamadas salientes, SMS, WhatsApp, chat web ni en Probar, así que pruébala con una llamada entrante real.
Con la plantilla del cuerpo vacía enviamos este cuerpo, con el punto tal cual en el nombre del campo:
{
"fromNumber": "+34612345678",
"toNumber": "+34912345678",
"personNumber": "+34612345678",
"agentNumber": "+34912345678",
"company.name": "Fontanería Jansen",
"company.website": "https://www.ejemplo.es",
"company.phone": "+34912345678",
"company.email": "info@ejemplo.es",
"company.address": ""
}Tu sistema responde con un objeto JSON, mejor si es plano. Cada campo pasa a estar disponible como variable. Cualquier otro tipo de respuesta, como una lista o texto sin formato, se ignora. Si tienes varias peticiones antes de la llamada, se ejecutan una tras otra y sus respuestas se combinan.
{ "customerName": "Ana García", "openInvoice": true, "plan": "Comfort" }- En el saludo de esa llamada usas los campos directamente:
{{customerName}},{{plan}}. - El asistente recibe los campos como contexto durante la llamada sin que hagas nada. Por eso no hace falta usarlos como variables en las instrucciones; allí una variable desconocida queda vacía.
- Después, en las acciones, los mismos campos están bajo
inboundContext:{{inboundContext.customerName}}. En la Bandeja los ves en la conversación, en Detalles técnicos.
Un ejemplo de saludo que usa el contexto:
Buenas tardes, {{customerName}}, te damos la bienvenida a {{company.name}}. ¿En qué puedo ayudarte?Responde en 3 segundos
Quien llama está esperando. Si no llega una respuesta en 3 segundos, o tu sistema devuelve un estado de error, la llamada empieza sin contexto y las variables quedan vacías. Procura que la consulta sea rápida y elige un saludo que suene natural también sin nombre.
Más detalles: Webhook entrante (antes de la llamada).
Durante la conversación
Durante la conversación, la petición HTTP se convierte en una herramienta que el asistente usa por su cuenta cuando se cumple la condición, en cualquier canal. La condición se escribe en ¿Cuándo debe usar esto el asistente?. Además indicas tres cosas más:
| Ajuste | Significado | Valor predeterminado |
|---|---|---|
| Parámetros que rellena el asistente | Los datos que el asistente debe sacar de la conversación: nombre, tipo (string, number, boolean), descripción y si son obligatorios. Por ejemplo orderNumber, string, «El número de pedido que menciona quien llama, seis cifras». En la URL y en la plantilla del cuerpo los usas como {{orderNumber}}. | Ninguno |
| Pista sobre la respuesta | Dile al asistente qué contiene la respuesta y cómo usarla, por ejemplo «La respuesta contiene la fecha de entrega. Léela y pregunta si le viene bien». | Vacía |
En una llamada, el asistente puede decir en pocas palabras que lo está comprobando mientras se ejecuta la petición.
El asistente recibe la respuesta de tu sistema (JSON o texto) y la incorpora a la conversación al momento. Recibe 6.000 caracteres como máximo, así que mantén la respuesta breve: solo los campos que el asistente necesita. Si tu sistema devuelve un estado de error, el asistente solo sabe que ha ocurrido.
Cuenta con tus parámetros
Cuenta solo con tus parámetros y con las variables de una campaña o de una llamada por API. Las variables integradas como {{personNumber}} y {{conversationId}} quedan vacías aquí, y lo que se buscó antes de la llamada normalmente también. Si necesitas el número de quien llama, conviértelo en un parámetro.
En Llamar y Chatear, dentro de Probar, la petición solo se envía de verdad si Ejecutar las acciones de verdad está activado. Si no, el asistente recibe una respuesta simulada. Llamada real hace una llamada de verdad: la petición siempre se envía de verdad, y también se ejecutan las acciones de después de la conversación.
Ejemplo de petición para consultar el estado de un pedido:
POST https://api.ejemplo.es/pedidos/estado
{
"orderNumber": "{{orderNumber}}"
}La respuesta de tu sistema:
{ "status": "enviado", "deliveryDate": "2026-09-14", "carrier": "Correos" }En ¿Cuándo debe usar esto el asistente? podrías escribir: «Quien llama pregunta por el estado de su pedido y menciona un número de pedido». Más detalles: Webhook durante la llamada.
¿La respuesta contiene datos personales, como un pedido o la ficha de un cliente? Activa Pedir un código primero. Cuando el cliente llama desde un número que no está oculto, ese número basta para una petición GET, que solo consulta algo, y no hace falta código. Otro método (POST, PUT, PATCH o DELETE) puede cambiar algo: entonces el asistente envía primero un SMS con un código al número desde el que llama, salvo que su operador haya confirmado el número. Con otro número, un número oculto o en un chat, el asistente envía primero un SMS con un código al número del cliente, después de que diga que sí, y solo hace la petición cuando el cliente le devuelve ese código. Busca la ficha con {{verifiedPhone}}, el número que el cliente comprobó, y no solo con un número que pase el asistente: esa variable la rellena nuestra plataforma, no el asistente. Ver Protección de llamadas.
Después de la conversación
Después de la conversación envías datos a otro sistema. Esto también se ejecuta cuando termina una conversación por SMS, WhatsApp o chat web. En ¿Con qué condición debe ejecutarse después de la conversación? escribes una condición en lenguaje llano; vacío significa después de cada conversación. Si dejas vacía la plantilla del cuerpo, enviamos todas las variables integradas y tus propias variables (Variables personalizadas que extraer) en un solo objeto JSON:
{
"personNumber": "+34612345678",
"agentNumber": "+34912345678",
"conversationId": "<id-de-conversacion>",
"conversationLink": "https://<dominio-del-panel>/es/inbox/<id-de-conversacion>",
"startTimestamp": "2026-09-11T14:32:10.000Z",
"direction": "inbound",
"channel": "voice",
"durationSeconds": 184,
"disconnectReason": "normal_clearing",
"summary": "La señora García avisa de un grifo que gotea en la cocina y quiere que la llamen hoy.",
"plainTranscript": "Assistant: Buenas tardes, ...\nCustomer: ...",
"audioLink": "https://<dominio-del-panel>/es/inbox/<id-de-conversacion>",
"outcome": "callback_requested",
"assistant": { "name": "Recepción" },
"company": {
"name": "Fontanería Jansen",
"website": "https://www.ejemplo.es",
"phone": "+34912345678",
"email": "info@ejemplo.es",
"address": ""
},
"contact": { "name": "A. García", "company": "" },
"inboundContext": { "customerId": "12345" },
"postcode": "28001"
}channelesvoice,sms,whatsappowebchat.audioLinkno es un archivo de audio, sino el mismo enlace a la conversación en el panel, y solo tiene valor si hay una grabación.company.addressqueda vacío mientras tu empresa no comparta la dirección con los clientes.- El idioma de
conversationLinkyaudioLinkes el idioma de tu empresa.
¿Quieres tu propia estructura, por ejemplo porque tu CRM espera un formato fijo? Rellena tú la plantilla del cuerpo:
{
"phone": "{{personNumber}}",
"note": "{{summary}}",
"source": "Yarla",
"url": "{{conversationLink}}"
}Lo que hizo una petición después de la conversación se ve en la Bandeja, en la conversación, en Detalles técnicos, bajo Qué hicieron las acciones. Aparece el código de estado y, si hay un error, también el principio de la respuesta de tu sistema.
Más detalles: Webhook después de la llamada.
Recetas para Make, n8n y Zapier
No necesitas montar tu propio servidor. Las plataformas de automatización te dan una URL de webhook que pegas directamente en la acción:
- Crea un disparador de webhook en tu plataforma: en Make el módulo Custom webhook, en n8n el nodo Webhook, en Zapier el disparador Catch Hook. Copia la URL.
- En Yarla, crea una acción Petición HTTP con Cuándo en Después de la conversación y el método
POST, y pega la URL. Deja vacía la plantilla del cuerpo para que se envíen todas las variables. - Abre Probar, elige Chatear y activa Ejecutar las acciones de verdad. Mantén una conversación breve y despídete, para que el asistente cierre la conversación: solo entonces se ejecuta la acción. Durante una llamada hablada en Llamar, las acciones de después de la conversación no se ejecutan. Después deja que tu plataforma reconozca la estructura de los datos.
- Asigna los campos (
summary,personNumber,outcome, …) al siguiente paso: una fila en una hoja de cálculo, una tarjeta en tu tablero de proyectos, un mensaje en el chat de tu equipo.
Para una petición antes de la llamada, tu escenario también debe responder: usa en Make el módulo Webhook response y en n8n el nodo Respond to Webhook, y haz que devuelva un objeto JSON en 3 segundos. Encontrarás escenarios completos en Make y n8n.