Caso técnico · Art. 50.1 · chatbots y agentes

El aviso del artículo 50 en un chatbot

Implementado en nuestros propios asistentes · Alpine.js ·

El requisito, en una frase

Todo sistema de IA que interactúe directamente con personas debe informar de que es una IA, salvo que resulte evidente por el contexto para una persona razonablemente informada. Desde la aclaración de la Comisión de abril de 2026, esto incluye explícitamente a los agentes de IA. Entra en aplicación el 2 de agosto de 2026.

Los tres errores que vemos en cada auditoría

  1. Enterrarlo en los términos de uso. El aviso tiene que llegar «de manera clara y distinguible a más tardar en el momento de la primera interacción». Un enlace a un PDF jurídico no es ninguna de las tres cosas.
  2. Confiar en el nombre. Llamar «Asistente virtual» al widget no es un aviso; hay resoluciones de consumo previas al AI Act que ya consideraban engañoso el bot que se hace pasar por humano.
  3. Mostrarlo una vez y perderlo. Si la conversación se retoma al día siguiente o se transfiere entre canales, el contexto de «primera interacción» se reinicia. El aviso tiene que ser persistente o reaparecer.

Dónde va y cómo se redacta

Nuestra regla: el aviso vive dentro de la ventana del chat, visible antes de que el usuario escriba, y permanece accesible durante toda la conversación (cabecera fija o primer mensaje anclado). La redacción, en una frase corta y sin eufemismos:

ES: «Estás hablando con un asistente de inteligencia artificial. Puede cometer errores; si lo prefieres, pide hablar con una persona.»

EN: "You are talking to an artificial-intelligence assistant. It can make mistakes; you can ask for a human at any time."

La segunda mitad de la frase no la exige el 50.1 — pero convierte el aviso legal en un elemento de confianza, y la derivación a humano te la van a pedir otras normas sectoriales igualmente.

Ejemplo funcional con Alpine.js

Widget de chat con el aviso como primer elemento fijo, estado persistido para no reiniciar la conversación sin aviso y accesibilidad básica (role="status" para lectores de pantalla):

<div x-data="chatWidget()" class="chat">

  <!-- Aviso art. 50.1: fijo en cabecera, presente desde la primera interacción -->
  <header class="chat-notice" role="status">
    <svg aria-hidden="true">…icono IA…</svg>
    <span>
      Estás hablando con un asistente de inteligencia artificial.
      Puede cometer errores;
      <button @click="requestHuman()">pide hablar con una persona</button>.
    </span>
  </header>

  <div class="chat-messages">
    <template x-for="m in messages" :key="m.id">
      <p :class="m.from" x-text="m.text"></p>
    </template>
  </div>

  <form @submit.prevent="send()">
    <input x-model="draft" :placeholder="placeholder" required>
    <button type="submit">Enviar</button>
  </form>
</div>

<script>
function chatWidget() {
  return {
    draft: '',
    messages: [],
    placeholder: 'Escribe tu mensaje…',

    init() {
      // Al retomar una conversación guardada, el aviso sigue en cabecera:
      // no depende de un mensaje efímero ni de un modal ya cerrado.
      this.messages = JSON.parse(localStorage.getItem('chat') || '[]');
    },

    async send() {
      this.messages.push({ id: Date.now(), from: 'user', text: this.draft });
      const reply = await fetch('/api/chat', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({ message: this.draft })
      }).then(r => r.json());
      this.messages.push({ id: Date.now() + 1, from: 'bot', text: reply.text });
      this.draft = '';
      localStorage.setItem('chat', JSON.stringify(this.messages));
    },

    requestHuman() {
      this.messages.push({
        id: Date.now(), from: 'system',
        text: 'Te pasamos con una persona. Te respondemos por email en horario laboral.'
      });
      fetch('/api/chat/handoff', { method: 'POST' });
    }
  };
}
</script>

Canales donde no controlas la interfaz

Si el bot atiende por WhatsApp, Telegram o teléfono, no hay cabecera fija posible. Ahí el aviso va en el primer mensaje de cada conversación (y tras cada periodo de inactividad que reinicie sesión), y en voz, en la locución inicial. Guarda la plantilla del mensaje con control de versiones: esa plantilla fechada es tu evidencia de cumplimiento.

Qué guardar para una inspección

EvidenciaDónde
Captura y código del aviso en cada canalRepositorio, con historial de versiones
Fecha de despliegue del avisoChangelog / deploy log
Análisis de la excepción «evidente por contexto», si decides no avisar en algún canalDocumento firmado — decisión razonada, no omisión
[PENDIENTE — completar por Kraak Works]: añadir la captura real del asistente propio con el aviso desplegado y la fecha de despliegue.

¿Tu chatbot avisa?

Lo implementamos en tu widget, tu WhatsApp o tu IVR, con la redacción y la evidencia documental. Precio por sistema, cerrado.