6. Agentes conversacionales de IA para WhatsApp

0 de 11 lecciones completas (0%)

Evolution API

11. Envío de Mensajes en Bucle y Limpieza Final

Descarga el WorkFlow de la lección:

¡Bienvenido/a a la última lección de construcción de nuestro agente! Tenemos una serie de mensajes listos para ser enviados, y nuestro objetivo es entregarlos al usuario de una manera natural, uno por uno, con una pequeña pausa entre ellos. Una vez enviados, limpiaremos los datos temporales para que el sistema esté preparado para la próxima conversación.

Objetivos de esta lección:

  • Implementar un bucle Loop para procesar y enviar cada mensaje de forma individual.
  • Configurar el nodo de Evolution API para enviar mensajes de texto.
  • Añadir pausas dinámicas para simular el tiempo de escritura humano.
  • Realizar la limpieza de la memoria temporal en Redis para finalizar el ciclo.

Paso 1: Crear el Bucle de Envío

Para procesar una lista de ítems uno por uno, la herramienta perfecta en N8n es el nodo Loop Over Items.

  1. Añade un nodo Loop Over Items después de dividir_mensajes.
  2. Renómbralo a Bucle.
  3. En la configuración, deja el Batch Size en 1. Esto asegura que los ítems (nuestros mensajes) se procesen de uno en uno, que es exactamente lo que queremos.

El nodo Loop tiene dos salidas: loop (por donde pasará cada ítem) y done (por donde pasará el flujo una vez que se hayan procesado todos los ítems).

Paso 2: Comprobar que tipo de mensaje vamos a mandar (Si es texto o una imagen)

Dentro del bucle, colocaremos un nodo If para saber si vamos a enviar texto o una imagen con una condición.

  1. Añade un nodo If en la rama Loop del nodo Bucle.
  2. Renómbralo a ¿es_texto_o_imagen?.
  3. Configuraremos una condición para comparar dos cosas:
    • Value 1:
      • Cambia el modo a Expression. Escribe la siguiente expresión: {{ $json[‘output.respuesta’] }}
    • Operation: ends with
    • Value 2: .png

La Lógica: Esta condición pregunta: «¿termina en .png?». Si la respuesta es sí, significa que es una imagen, Si la respuesta es No es texto.

Paso 3: Enviar una imagen en el Mensaje con Evolution API

  1. Desde la salida True del nodo ¿es_texto_o_imagen?, añade un nodo de Evolution API.
  2. Renómbralo a enviar_imagen.
  3. Configúralo de la siguiente manera:
    • Recurso: Mensagem
    • Operação: Enviar Imagem
    • Nome Da Instancia: Arrastra la variable instancia desde organizar_datos.
    • Número Do Destinatário: Arrastra la variable numero_remitente desde organizar_datos.
    • Imagem: Aquí va el contenido del mensaje. Arrastra el campo de texto que viene del nodo ¿es_texto_o_imagen?

Paso 4: Enviar Texto en el Mensaje con Evolution API

  1. Desde la salida False del nodo ¿es_texto_o_imagen?, añade un nodo de Evolution API.
  2. Renómbralo a enviar_texto.
  3. Configúralo de la siguiente manera:
    • Recurso: Mensagem
    • Operação: Send Text
    • Nome Da Instancia: Arrastra la variable instancia desde 1. Organizar Datos.
    • Número Do Destinatário: Arrastra la variable numero_remitente desde 1. Organizar Datos.
    • Mensagem: Aquí va el contenido del mensaje. Arrastra el campo de texto que viene del nodo ¿es_texto_o_imagen?
    • Opções: Adcionar campo y selecciona Delay para hacer la interacción aún más humana, podemos simular que el agente está «escribiendo»
      • Este campo espera un valor en milisegundos. Vamos a hacerlo dinámico basado en la longitud del mensaje. Cambia el modo a Expression y pega lo siguiente:codeJavaScript{{ $json.value.length * 45 }}
      • Análisis de la Expresión:
        • $json.value es el texto del mensaje que se va a enviar en esta iteración del bucle.
        • .length cuenta el número de caracteres de ese mensaje.
        • * 45 multiplicamos esa cantidad por un factor (45 milisegundos por carácter es un buen estimado) para calcular un tiempo de escritura más o menos realista.

Paso 5: Pausa entre Mensajes y Cierre del Bucle

No queremos que los mensajes lleguen todos juntos. Añadiremos una pequeña pausa fija después de enviar cada uno.

  1. Añade un nodo Wait después de los nodos anteriores.
  2. Establece un tiempo de espera corto, por ejemplo, 2 segundos.
  3. ¡Paso crucial! Ahora debemos cerrar el bucle. Arrastra el conector de salida del nodo Wait y conéctalo de nuevo a la entrada del nodo Bucle de Envío de Mensajes. Esto crea el ciclo: enviar mensaje -> esperar -> tomar siguiente mensaje.

Paso 6: Limpieza Final de Redis

Una vez que el bucle ha terminado de enviar todos los mensajes, el flujo continuará por la salida done. Aquí es donde haremos la limpieza.

Por la rama done salen muchos items y queremos que solo salga un item, para ellos usamos un nodo Aggregate

Nodo Aggregate:

  1. Desde la salida done del nodo Loop, añade un nodo Aggregate.
  2. No tenemos que configurar nada, lo que hace es que simplemente sale un único item para que se ejecute solo una vez los siguientes nodos.

Nodo Redis:

  1. Desde la salida Done Aggregate, añade un nodo Redis.
  2. Renómbralo a borrar_mensajes.
  3. Configúralo así:
    • Operation: Delete
    • Key: Debemos decirle qué lista borrar. De nuevo, arrastra la variable numero_remitente desde organizar_datos.

¿Por qué hacemos esto? Borrar la lista de Redis asegura que la próxima vez que el mismo usuario nos escriba, la conversación comience de cero en la memoria temporal. La memoria a largo plazo de Postgres no se ve afectada, pero evitamos que los mensajes de la interacción actual se mezclen con los de la siguiente.


Resumen de la Lección y del Flujo Completo:

¡Lo has conseguido! Has construido desde cero un agente de IA para WhatsApp increíblemente completo y robusto.

En esta última lección, hemos aprendido a:

  • Crear un bucle para ejecutar acciones de forma iterativa sobre una lista de ítems.
  • Enviar mensajes a través de la API de Evolution.
  • Añadir pausas dinámicas y fijas para crear una experiencia de usuario más natural.
  • Realizar la limpieza de datos temporales para asegurar que el sistema sea reutilizable y no acumule información innecesaria.

Próximos Pasos (Puesta en Producción):

Tu agente está listo para el mundo. Para ponerlo en producción, solo necesitas hacer dos cosas:

  1. Desactivar el Filtro: Ve a tu nodo Filter y apágalo o elimínalo.
  2. Usar la URL de Producción: Ve a tu nodo Webhook inicial, cambia de «Test URL» a «Production URL», copia la nueva URL y pégala en la configuración del webhook en tu instancia de Evolution API.
  3. Activar el Flujo: Finalmente, activa el interruptor principal en la parte superior de tu flujo de N8n.

¡Felicidades por completar este proyecto! Ahora tienes una base sólida sobre la cual puedes construir agentes aún más complejos y especializados.

Resumen de privacidad
Logo JeroCuevas.com

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Analítica

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.