Bot de Telegram de transcripción
Bot de Telegram de transcripción
Crea un bot de Telegram que transcriba mensajes de audio y vídeo en más de 90 idiomas con TypeScript, Deno y Supabase Edge Functions.
Guía práctica · Parte de que ya has completado la guía de inicio rápido de Voz a Texto y cuentas con un token de bot de Telegram y una cuenta de Supabase.
Introducción
En este tutorial aprenderás a crear un bot de Telegram que transcribe mensajes de audio y vídeo en más de 90 idiomas con TypeScript y el modelo Scribe de ElevenLabs a través de la API de voz a texto.
Requisitos
- Una cuenta de ElevenLabs con una clave de API.
- Una cuenta de Supabase (puedes crear una cuenta gratuita a través de database.new).
- La CLI de Supabase instalada en tu equipo.
- El runtime de Deno instalado en tu equipo y, opcionalmente, configurado en tu IDE favorito.
- Una cuenta de Telegram.
Configuración
Registra un bot de Telegram
Usa BotFather para crear un nuevo bot de Telegram. Ejecuta el comando /newbot y sigue las instrucciones para crear un bot. Al final, recibirás el token secreto de tu bot. Guárdalo de forma segura para el siguiente paso.

Crea un proyecto de Supabase localmente
Después de instalar la CLI de Supabase, ejecuta el siguiente comando para crear un nuevo proyecto de Supabase localmente:
Crea una tabla de base de datos para registrar los resultados de transcripción
A continuación, crea una tabla de base de datos para registrar los resultados de transcripción:
Esto creará un nuevo archivo de migración en el directorio supabase/migrations. Abre el archivo y añade el siguiente SQL:
Crea una Edge Function de Supabase para gestionar las solicitudes de webhook de Telegram
A continuación, crea una Edge Function para gestionar las solicitudes de webhook de Telegram:
Si usas VS Code o Cursor, selecciona y cuando la CLI te pregunte “Generate VS Code settings for Deno? [y/N]”.
Configura las variables de entorno
En el directorio supabase/functions, crea un archivo .env y añade las siguientes variables:
Dependencias
El proyecto usa varias dependencias:
- El framework de código abierto grammY para gestionar las solicitudes de webhook de Telegram.
- La biblioteca @supabase/supabase-js para interactuar con la base de datos de Supabase.
- El SDK de JavaScript de ElevenLabs para interactuar con la API de voz a texto.
Como las Edge Functions de Supabase usan el runtime de Deno, no necesitas instalar las dependencias; puedes importarlas mediante el prefijo npm:.
Programa el bot de Telegram
En el archivo scribe-bot/index.ts que acabas de crear, añade el siguiente código:
Análisis detallado del código
Hay algunos aspectos importantes que conviene destacar sobre el código. Vamos a repasarlo paso a paso.
Gestión de la solicitud entrante
Para gestionar la solicitud entrante, usa el controlador Deno.serve. El controlador comprueba si la solicitud tiene el secreto correcto y, después, la pasa a la función handleUpdate.
Gestiona mensajes de voz, audio y vídeo
El framework grammY ofrece una forma práctica de filtrar tipos de mensajes específicos. En este caso, el bot escucha mensajes de voz, audio y vídeo.
Mediante el contexto de la solicitud, el bot extrae los metadatos del archivo y usa EdgeRuntime.waitUntil de las tareas en segundo plano de Supabase para ejecutar la transcripción en segundo plano.
Así puedes ofrecer una respuesta inmediata al usuario y gestionar la transcripción del archivo en segundo plano.
Transcripción con la API de ElevenLabs
Por último, en el proceso en segundo plano, el bot usa el SDK de JavaScript de ElevenLabs para transcribir el archivo. Cuando se completa la transcripción, el bot responde al usuario con la transcripción y escribe una entrada de registro en la base de datos de Supabase con supabase-js.
Despliega en Supabase
Si aún no lo has hecho, crea una cuenta de Supabase en database.new y vincula el proyecto local a tu cuenta de Supabase:
Aplica las migraciones de la base de datos
Ejecuta el siguiente comando para aplicar las migraciones de la base de datos desde el directorio supabase/migrations:
Ve al editor de tablas en tu panel de Supabase; deberías ver una tabla transcription_logs vacía.

Por último, ejecuta el siguiente comando para desplegar la Edge Function:
Ve a la vista de Edge Functions en tu panel de Supabase; deberías ver la función scribe-bot desplegada. Anota la URL de la función, ya que la necesitarás más adelante. Debería tener un aspecto similar a https://<project-ref>.functions.supabase.co/scribe-bot.

Configura el webhook
Configura la URL de webhook de tu bot como https://<PROJECT_REFERENCE>.functions.supabase.co/telegram-bot (sustituye <...> por los valores correspondientes). Para ello, solo tienes que realizar una solicitud GET a la siguiente URL (por ejemplo, en tu navegador):
Ten en cuenta que FUNCTION_SECRET es el secreto que configuraste en tu archivo .env.

Configura los secretos de la función
Ahora que ya tienes todos los secretos configurados localmente, puedes ejecutar el siguiente comando para configurar los secretos en tu proyecto de Supabase:
Prueba el bot
Por último, puedes probar el bot enviándole un mensaje de voz, un archivo de audio o un vídeo.

Cuando veas la transcripción como respuesta, vuelve al editor de tablas de tu panel de Supabase; deberías ver una nueva fila en tu tabla transcription_logs.
