AnveVoice

Añade un agente de voz con IA a una app de Flask

Añade el agente de voz de AnveVoice a una app de Flask 3 con una etiqueta script en tu plantilla Jinja base, un bloque para el control por página y notas.

Cómo añadir AnveVoice a una aplicación de Flask

Flask renderiza las páginas con Jinja, y una plantilla base con bloques es la forma estándar de compartir un layout. Pon la etiqueta de AnveVoice en esa plantilla base, justo antes de la etiqueta de cierre body, y cada página que la extienda tendrá el botón de voz. Pasos comprobados con la documentación oficial el 2026-10-14.

En resumen

  • Dónde va el código: templates/layout.html (o base.html), la plantilla que extienden tus páginas
  • Código necesario: Una línea de Jinja; sin cambios en Python ni extensiones
  • Límites del plan: Ninguno por parte de Flask; funciona en cualquier host WSGI (Gunicorn, uWSGI, PythonAnywhere, Render y similares)
  • Tiempo: Unos 3 minutos

Dónde busca Flask tu layout

Flask usa el motor de plantillas Jinja, y el patrón oficial de herencia de plantillas construye cada página a partir de un único esqueleto, normalmente llamado layout.html. El esqueleto define bloques (head, title, content y footer en el ejemplo de la documentación), y las páginas hijas empiezan con {% extends “layout.html” %}. Flask encuentra estos archivos en la carpeta templates junto al módulo de tu aplicación, o dentro de la carpeta templates propia de un blueprint. Así que el trabajo consiste en abrir el esqueleto y añadir una línea. No se registra nada en Python. La documentación de plantillas de Flask confirma que el autoescapado está activo para las plantillas .html, .htm, .xml y .xhtml, pero eso solo afecta a las variables; una etiqueta script escrita literalmente en la plantilla se muestra exactamente como está escrita. Si tu app devuelve HTML desde render_template_string o desde cadenas simples en una vista, no hay archivo de plantilla que editar. Añade la etiqueta a la cadena o, mejor aún, mueve ese marcado a una plantilla para que haya un único lugar que mantener.

  • 1. Obtén tu etiqueta de instalación — En el panel de AnveVoice, en app.anvevoice.app, crea un bot para tu sitio y copia el ID de incrustación en la URL. El botón predeterminado aparece abajo a la derecha; añade &position=bottom-left para moverlo. <script src="https://anvevoice.app/embed.js?embedId=YOUR_EMBED_ID" async></script>

Método 1: colócala en la plantilla base

  • 1. Abre templates/layout.html — Usa el archivo que extienden tus páginas. Las páginas de blueprints que extienden otra base necesitan la etiqueta también en esa base.
  • 2. Añade la etiqueta con su propio bloque — Un bloque dedicado facilita desactivar más adelante el agente de voz en páginas concretas, sobrescribiendo el bloque sin contenido. {% block voice_agent %} <script src="https://anvevoice.app/embed.js?embedId=YOUR_EMBED_ID" async></script> {% endblock %} </body> </html>
  • 3. Reinicia si hace falta — El servidor de desarrollo de Flask con debug activado se recarga al detectar cambios. Con Gunicorn u otro servidor de producción, reinicia los workers para que carguen la plantilla actualizada.

Método 2: añádela solo en algunas páginas

Deja el bloque vacío en la base y rellénalo desde las páginas que deban tener el agente. La página de patrones de Flask también muestra super() para añadir contenido a un bloque sin reemplazar el del padre, lo cual resulta útil si la base ya coloca algo en ese punto.

  • 1. Declara un bloque vacío en layout.html — Usa {% block voice_agent %}{% endblock %} encima de la etiqueta de cierre body.
  • 2. Rellena el bloque en una página — En templates/pricing.html: {% extends "layout.html" %} {% block voice_agent %} <script src="https://anvevoice.app/embed.js?embedId=YOUR_EMBED_ID" async></script> {% endblock %}

Particularidades de Flask

  • Archivos estáticos frente a un script remoto: la carpeta static de Flask y url_for('static', ...) son para tus propios archivos. El script de AnveVoice se carga desde anvevoice.app, así que usa la dirección completa y no copies embed.js en static; una copia local no recibiría actualizaciones.
  • Cabeceras de seguridad: Flask no envía por sí mismo ninguna Content Security Policy. Si añades una (en un manejador after_request o mediante una extensión), incluye https://anvevoice.app en script-src; si no, el navegador bloquea la etiqueta y la consola muestra una infracción de CSP.
  • Detrás de un proxy: si Nginx o un CDN almacenan HTML completo en caché, purgalo después de desplegar, o seguirá sirviéndose la página antigua sin la etiqueta.
  • Espacios y llaves de Jinja: la etiqueta no contiene dobles llaves, así que no hay nada que escapar ni hace falta un bloque raw.
  • ID de incrustación por entorno: si lo guardas en la configuración, pásalo a la plantilla con un context processor y escribe ...embedId={{ anvevoice_embed_id }} en la URL.

Comprueba que funciona

  • 1. Revisa la página renderizada — Abre una página en una ventana privada, ve el código fuente y confirma que embed.js aparece una vez, cerca del final del body.
  • 2. Prueba una conversación — Haz clic en el botón redondo del micrófono, concede el permiso del micrófono (la página debe usar HTTPS o localhost) y haz una pregunta.

Problemas frecuentes

  • El cambio en la plantilla no tiene efecto: el proceso sirve una plantilla en caché o una carpeta de plantillas distinta. Reinicia y confirma qué layout extiende la página que falla.
  • TemplateSyntaxError tras editar: un bloque se cerró con la etiqueta equivocada. Revisa que cada {% block %} tenga su {% endblock %}.
  • Falta el botón en un blueprint: ese blueprint tiene su propia plantilla base.
  • La consola informa de una infracción de CSP: permite el host en script-src.

Fuentes

  • Documentación de Flask 3.1: herencia de plantillas (https://flask.palletsprojects.com/en/stable/patterns/templateinheritance/) — consultado el 2026-10-14
  • Documentación de Flask 3.1: plantillas (configuración de Jinja, autoescapado) (https://flask.palletsprojects.com/en/stable/templating/) — consultado el 2026-10-14

Relacionado

  • Cómo añadir AnveVoice a un proyecto de Django
  • Cómo añadir AnveVoice a un sitio de Express (Node.js)
  • Cómo añadir AnveVoice a una aplicación de Ruby on Rails
  • Cómo añadir AnveVoice a una aplicación Laravel

Prueba AnveVoice en tu sitio

Plan gratuito: 0 US$, 50.000 tokens al mes, sin tarjeta. Obtén tu ID de inserción en el panel y pega una etiqueta.