feat(phase-1): Complete foundation setup
- Add User model and authentication system with JWT cookies - Implement login/logout routes and protected dashboard - Add Alembic database migration configuration - Add create_admin.py script for initial user setup - Make ContentGenerator and ImageGenerator lazy-initialized - Add comprehensive API keys setup documentation - Fix startup errors when services unavailable Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
309
docs/API_KEYS_SETUP.md
Normal file
309
docs/API_KEYS_SETUP.md
Normal file
@@ -0,0 +1,309 @@
|
||||
# Guía de Configuración de API Keys
|
||||
|
||||
Esta guía detalla el proceso para obtener las credenciales necesarias para cada plataforma.
|
||||
|
||||
## Tabla de Contenidos
|
||||
|
||||
1. [X (Twitter) Developer](#x-twitter-developer)
|
||||
2. [Meta Developer (Facebook, Instagram, Threads)](#meta-developer)
|
||||
3. [DeepSeek API](#deepseek-api)
|
||||
4. [Configuración en el Sistema](#configuración-en-el-sistema)
|
||||
|
||||
---
|
||||
|
||||
## X (Twitter) Developer
|
||||
|
||||
### Paso 1: Crear cuenta de desarrollador
|
||||
|
||||
1. Visita [developer.twitter.com](https://developer.twitter.com/)
|
||||
2. Inicia sesión con tu cuenta de X/Twitter
|
||||
3. Haz clic en "Sign up for Free Account" o "Apply for access"
|
||||
|
||||
### Paso 2: Crear un Proyecto y App
|
||||
|
||||
1. En el Dashboard, ve a **Projects & Apps** > **Overview**
|
||||
2. Crea un nuevo proyecto:
|
||||
- Nombre: `Consultoria-AS-Social-Automation`
|
||||
- Caso de uso: `Making a bot` o `Building tools for Twitter users`
|
||||
3. Dentro del proyecto, crea una App:
|
||||
- Nombre: `social-media-automation`
|
||||
|
||||
### Paso 3: Configurar permisos
|
||||
|
||||
1. En la configuración de la App, ve a **User authentication settings**
|
||||
2. Configura:
|
||||
- **App permissions**: Read and Write
|
||||
- **Type of App**: Web App, Automated App or Bot
|
||||
- **Callback URL**: `https://tu-dominio.com/callback` (o `http://localhost:8000/callback` para desarrollo)
|
||||
- **Website URL**: `https://consultoria-as.com`
|
||||
|
||||
### Paso 4: Obtener credenciales
|
||||
|
||||
En la sección **Keys and Tokens**, genera y guarda:
|
||||
|
||||
| Credencial | Variable de Entorno |
|
||||
|------------|---------------------|
|
||||
| API Key | `TWITTER_API_KEY` |
|
||||
| API Key Secret | `TWITTER_API_SECRET` |
|
||||
| Access Token | `TWITTER_ACCESS_TOKEN` |
|
||||
| Access Token Secret | `TWITTER_ACCESS_TOKEN_SECRET` |
|
||||
| Bearer Token | `TWITTER_BEARER_TOKEN` |
|
||||
|
||||
> **Importante**: El plan gratuito permite 1,500 tweets/mes. Para más volumen, considera el plan Basic ($100/mes) con 3,000 tweets/mes.
|
||||
|
||||
---
|
||||
|
||||
## Meta Developer
|
||||
|
||||
Meta maneja Facebook, Instagram y Threads desde el mismo portal de desarrolladores.
|
||||
|
||||
### Paso 1: Crear cuenta de desarrollador
|
||||
|
||||
1. Visita [developers.facebook.com](https://developers.facebook.com/)
|
||||
2. Inicia sesión con tu cuenta de Facebook
|
||||
3. Acepta los términos de desarrollador
|
||||
|
||||
### Paso 2: Crear una App
|
||||
|
||||
1. Ve a **My Apps** > **Create App**
|
||||
2. Selecciona tipo de app: **Business**
|
||||
3. Configura:
|
||||
- Nombre: `Consultoria-AS-Social-Automation`
|
||||
- Contacto: tu email
|
||||
- Business Account: selecciona o crea una
|
||||
|
||||
### Paso 3: Agregar productos
|
||||
|
||||
En el dashboard de tu app, agrega estos productos:
|
||||
|
||||
#### Para Facebook Pages:
|
||||
1. Añade el producto **Facebook Login for Business**
|
||||
2. Añade **Pages API**
|
||||
3. Configura los permisos:
|
||||
- `pages_manage_posts`
|
||||
- `pages_read_engagement`
|
||||
- `pages_show_list`
|
||||
|
||||
#### Para Instagram:
|
||||
1. Añade el producto **Instagram Graph API**
|
||||
2. Permisos necesarios:
|
||||
- `instagram_basic`
|
||||
- `instagram_content_publish`
|
||||
- `instagram_manage_comments`
|
||||
- `instagram_manage_insights`
|
||||
|
||||
#### Para Threads:
|
||||
1. Añade el producto **Threads API**
|
||||
2. Permisos necesarios:
|
||||
- `threads_basic`
|
||||
- `threads_content_publish`
|
||||
- `threads_manage_replies`
|
||||
|
||||
### Paso 4: Conectar cuentas
|
||||
|
||||
1. Ve a **Settings** > **Basic** para obtener:
|
||||
- App ID → `META_APP_ID`
|
||||
- App Secret → `META_APP_SECRET`
|
||||
|
||||
2. Para Facebook Page:
|
||||
- Ve a **Tools** > **Graph API Explorer**
|
||||
- Selecciona tu app y página
|
||||
- Genera un Page Access Token con los permisos necesarios
|
||||
- Convierte a Long-Lived Token (60 días)
|
||||
|
||||
3. Para Instagram:
|
||||
- La cuenta de Instagram debe estar conectada a una Facebook Page
|
||||
- Ve a Graph API Explorer
|
||||
- Obtén el Instagram Business Account ID
|
||||
- Genera Access Token con permisos de Instagram
|
||||
|
||||
### Paso 5: Obtener tokens de larga duración
|
||||
|
||||
```bash
|
||||
# Convertir token de corta a larga duración (60 días)
|
||||
curl -X GET "https://graph.facebook.com/v18.0/oauth/access_token?grant_type=fb_exchange_token&client_id={APP_ID}&client_secret={APP_SECRET}&fb_exchange_token={SHORT_LIVED_TOKEN}"
|
||||
```
|
||||
|
||||
| Credencial | Variable de Entorno |
|
||||
|------------|---------------------|
|
||||
| App ID | `META_APP_ID` |
|
||||
| App Secret | `META_APP_SECRET` |
|
||||
| Page Access Token | `FACEBOOK_PAGE_ACCESS_TOKEN` |
|
||||
| Page ID | `FACEBOOK_PAGE_ID` |
|
||||
| Instagram User ID | `INSTAGRAM_USER_ID` |
|
||||
| Threads User ID | `THREADS_USER_ID` |
|
||||
|
||||
> **Nota**: Los tokens de Meta expiran. Implementa un sistema de refresh o regenera manualmente cada 60 días.
|
||||
|
||||
---
|
||||
|
||||
## DeepSeek API
|
||||
|
||||
### Paso 1: Crear cuenta
|
||||
|
||||
1. Visita [platform.deepseek.com](https://platform.deepseek.com/)
|
||||
2. Regístrate con email o Google
|
||||
3. Verifica tu cuenta
|
||||
|
||||
### Paso 2: Obtener API Key
|
||||
|
||||
1. Ve a **API Keys** en el dashboard
|
||||
2. Crea una nueva API Key
|
||||
3. Copia y guarda la key (solo se muestra una vez)
|
||||
|
||||
### Paso 3: Agregar créditos
|
||||
|
||||
1. Ve a **Billing** > **Top Up**
|
||||
2. Agrega créditos (mínimo $5 USD recomendado para empezar)
|
||||
3. Los precios son muy económicos (~$0.14/1M tokens input, ~$0.28/1M tokens output)
|
||||
|
||||
| Credencial | Variable de Entorno |
|
||||
|------------|---------------------|
|
||||
| API Key | `DEEPSEEK_API_KEY` |
|
||||
| Base URL | `https://api.deepseek.com` (ya configurado por defecto) |
|
||||
|
||||
---
|
||||
|
||||
## Configuración en el Sistema
|
||||
|
||||
### Archivo `.env`
|
||||
|
||||
Crea el archivo `.env` en la raíz del proyecto:
|
||||
|
||||
```env
|
||||
# ==============================================
|
||||
# BASE DE DATOS
|
||||
# ==============================================
|
||||
DATABASE_URL=postgresql://postgres:tu_password@localhost:5432/social_automation
|
||||
REDIS_URL=redis://localhost:6379/0
|
||||
|
||||
# ==============================================
|
||||
# SEGURIDAD
|
||||
# ==============================================
|
||||
SECRET_KEY=genera-una-clave-segura-de-32-caracteres-minimo
|
||||
ALGORITHM=HS256
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
||||
|
||||
# ==============================================
|
||||
# X (TWITTER) API
|
||||
# ==============================================
|
||||
TWITTER_API_KEY=tu_api_key
|
||||
TWITTER_API_SECRET=tu_api_secret
|
||||
TWITTER_ACCESS_TOKEN=tu_access_token
|
||||
TWITTER_ACCESS_TOKEN_SECRET=tu_access_token_secret
|
||||
TWITTER_BEARER_TOKEN=tu_bearer_token
|
||||
|
||||
# ==============================================
|
||||
# META APIs (Facebook, Instagram, Threads)
|
||||
# ==============================================
|
||||
META_APP_ID=tu_app_id
|
||||
META_APP_SECRET=tu_app_secret
|
||||
|
||||
# Facebook
|
||||
FACEBOOK_PAGE_ACCESS_TOKEN=tu_page_access_token
|
||||
FACEBOOK_PAGE_ID=tu_page_id
|
||||
|
||||
# Instagram
|
||||
INSTAGRAM_USER_ID=tu_instagram_user_id
|
||||
INSTAGRAM_ACCESS_TOKEN=tu_instagram_access_token
|
||||
|
||||
# Threads
|
||||
THREADS_USER_ID=tu_threads_user_id
|
||||
THREADS_ACCESS_TOKEN=tu_threads_access_token
|
||||
|
||||
# ==============================================
|
||||
# DEEPSEEK API (Generación de contenido)
|
||||
# ==============================================
|
||||
DEEPSEEK_API_KEY=tu_deepseek_api_key
|
||||
DEEPSEEK_BASE_URL=https://api.deepseek.com
|
||||
|
||||
# ==============================================
|
||||
# CONFIGURACIÓN DE NEGOCIO
|
||||
# ==============================================
|
||||
BUSINESS_NAME=Consultoría AS
|
||||
BUSINESS_DESCRIPTION=Consultoría tecnológica y venta de equipos de cómputo e impresión 3D
|
||||
BUSINESS_WEBSITE=https://consultoria-as.com
|
||||
BUSINESS_LOCATION=Tijuana, México
|
||||
```
|
||||
|
||||
### Generar SECRET_KEY
|
||||
|
||||
```bash
|
||||
# Usando Python
|
||||
python -c "import secrets; print(secrets.token_urlsafe(32))"
|
||||
|
||||
# Usando OpenSSL
|
||||
openssl rand -base64 32
|
||||
```
|
||||
|
||||
### Verificar configuración
|
||||
|
||||
Después de configurar el `.env`, verifica que todo esté correcto:
|
||||
|
||||
```bash
|
||||
# Activar entorno virtual
|
||||
source venv/bin/activate
|
||||
|
||||
# Verificar que las variables se cargan
|
||||
python -c "from app.core.config import settings; print('DB:', settings.DATABASE_URL[:20] + '...'); print('DeepSeek:', 'OK' if settings.DEEPSEEK_API_KEY else 'NO CONFIGURADO')"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Límites de API y Costos Estimados
|
||||
|
||||
### X (Twitter)
|
||||
|
||||
| Plan | Tweets/mes | Costo |
|
||||
|------|-----------|-------|
|
||||
| Free | 1,500 | $0 |
|
||||
| Basic | 3,000 | $100/mes |
|
||||
| Pro | 300,000 | $5,000/mes |
|
||||
|
||||
### Meta (Facebook/Instagram/Threads)
|
||||
|
||||
- Sin límite de publicaciones para cuentas propias
|
||||
- Rate limits: ~200 llamadas/hora por usuario
|
||||
- Costo: Gratuito
|
||||
|
||||
### DeepSeek
|
||||
|
||||
| Modelo | Input | Output |
|
||||
|--------|-------|--------|
|
||||
| deepseek-chat | $0.14/1M tokens | $0.28/1M tokens |
|
||||
| deepseek-coder | $0.14/1M tokens | $0.28/1M tokens |
|
||||
|
||||
**Estimación mensual**: ~$5-10 USD para 300 posts/mes
|
||||
|
||||
---
|
||||
|
||||
## Solución de Problemas
|
||||
|
||||
### Error: "Invalid API Key" en X
|
||||
|
||||
1. Verifica que copiaste la key completa
|
||||
2. Regenera las credenciales si es necesario
|
||||
3. Asegúrate de que la app tiene permisos de escritura
|
||||
|
||||
### Error: "Token expired" en Meta
|
||||
|
||||
1. Los tokens de página expiran cada 60 días
|
||||
2. Usa el Graph API Explorer para generar uno nuevo
|
||||
3. Considera implementar refresh automático
|
||||
|
||||
### Error: "Insufficient balance" en DeepSeek
|
||||
|
||||
1. Agrega más créditos en el dashboard
|
||||
2. Verifica el consumo en la sección de billing
|
||||
|
||||
---
|
||||
|
||||
## Próximos Pasos
|
||||
|
||||
1. Configura las credenciales en `.env`
|
||||
2. Ejecuta `docker-compose up -d` para iniciar servicios
|
||||
3. Crea el usuario admin: `python scripts/create_admin.py`
|
||||
4. Accede al dashboard: `http://localhost:8000/dashboard`
|
||||
5. Configura el calendario de contenido
|
||||
|
||||
Para más información, consulta la [documentación principal](./README.md).
|
||||
Reference in New Issue
Block a user