Este proyecto es una Edge Function en Supabase (Deno) que:
- Obtiene las noticias más relevantes (internacionales y nacionales) del día mediante la API de Perplexity.
- Filtra noticias ya publicadas para evitar duplicados.
- Genera un hilo de Twitter con las noticias nuevas.
- Publica el hilo tweet por tweet usando OAuth 1.0a.
- Registra y controla los límites de uso de API de Perplexity y Twitter en Supabase.
- Cuenta Supabase activa.
- Proyecto Supabase creado.
- Credenciales de Twitter (API Key, API Secret, Access Token, Access Token Secret).
- Clave de API de Perplexity.
En tu proyecto Supabase, ve al SQL Editor y ejecuta:
create table api_usage (
id bigint generated by default as identity primary key,
service text not null,
requests_count integer not null default 0,
month_year text not null,
last_reset timestamp with time zone not null default now()
);
create table news_cache (
id bigint generated by default as identity primary key,
title text not null,
description text not null,
url text,
published_date timestamp with time zone,
type text not null,
content_hash text not null unique
);
create table twitter_threads (
id bigint generated by default as identity primary key,
thread_topic text not null,
posts_count integer not null,
posts_published integer not null default 0,
first_tweet_id text,
status text not null default 'pending',
inserted_at timestamp with time zone not null default now()
);
create table twitter_posts (
id bigint generated by default as identity primary key,
thread_id bigint references twitter_threads(id),
content text not null,
tweet_id text not null,
position integer not null,
inserted_at timestamp with time zone not null default now()
);- En Database → Policies, habilita RLS para cada tabla.
- Crea estas políticas, reemplazando
<service_role>por el role interno de Supabase:
create policy "service_role_full_access"
on api_usage
for all using (auth.role() = '<service_role>');
create policy "service_role_full_access"
on news_cache
for all using (auth.role() = '<service_role>');
create policy "service_role_full_access"
on twitter_threads
for all using (auth.role() = '<service_role>');
create policy "service_role_full_access"
on twitter_posts
for all using (auth.role() = '<service_role>');En el Dashboard → Edge Functions → Settings, agrega estas variables de entorno:
SUPABASE_URLSUPABASE_SERVICE_ROLE_KEYPERPLEXITY_API_KEYTWITTER_API_KEYTWITTER_API_SECRETTWITTER_ACCESS_TOKENTWITTER_ACCESS_TOKEN_SECRET
- Entra al Dashboard de tu proyecto en app.supabase.com.
- En el menú de la izquierda, selecciona Edge Functions.
- Haz clic en New Function.
- Asigna el nombre
news-tweet-thready crea la función. - En el editor que aparece, sube o copia y pega el contenido de
index.ts. - Haz clic en Save & Deploy. Espera a que termine el despliegue.
- Una vez desplegada, en la pestaña Settings de la función, configura las Environment Variables (igual que en el paso 3).
- Copia la Function URL que aparece en la pestaña Overview.
Usa Scheduled Functions de Supabase:
- Ve a Dashboard → Edge Functions → Schedules.
- Haz clic en New Schedule y crea dos entradas:
- daily-morning: Cron
0 6 * * *, Functionnews-tweet-thread. - daily-evening: Cron
0 19 * * *, Functionnews-tweet-thread.
- daily-morning: Cron
Cada ejecución:
- Inicializa cliente Supabase con service role.
- Verifica límite mensual en
api_usage. - Solicita noticias a Perplexity.
- Filtra duplicados usando
news_cache. - Genera y publica tweets en Twitter vía OAuth 1.0a.
- Registra hilos en
twitter_threadsy tweets entwitter_posts. - Actualiza contador en
api_usage.
- Credenciales faltantes: revisa Variables de Entorno en Settings.
- Límites alcanzados: consulta
api_usage, espera al siguiente mes o ajusta consumo. - Acceso bloqueado por RLS: confirma que la función use el role definido.
