José Manuel Gómez 9239e2f67f Initial scaffold: Meta Optimizer for RoiFormacion campaigns
Ports meta-optimizer's Meta Ads execution/approval/creative-analysis layer
(agent.py, meta_ads_client.py, baserow_client.py, slack_notifier.py,
approval_server.py) and replaces the per-vertical CPL model with the
PPL + monthly-capping-per-course model already used by leads-optimizer,
via a new airtable_client.py that shares Cursos/Familias/CentroCurso/
CursoMes/Leads Lake with that project and adds Meta Ads Campaigns /
MetaCampaignMes alongside its Google Ads Campaigns / GACampaignMes.
2026-07-07 16:53:03 +02:00

38 lines
1.3 KiB
Plaintext

# Meta Ads (misma cuenta que meta-optimizer/Viviful)
META_APP_ID=your_app_id
META_APP_SECRET=your_app_secret
META_ACCESS_TOKEN=your_long_lived_access_token
META_AD_ACCOUNT_ID=act_XXXXXXXXXX
# Anthropic
ANTHROPIC_API_KEY=your_anthropic_key
# Baserow (self-hosted) — solo lo operativo de Meta: acciones, snapshots,
# creatividades y logs. Run setup_baserow.py once to get the IDs below:
BASEROW_URL=https://baserow.yourdomain.com
BASEROW_TOKEN=your_baserow_api_token
BASEROW_TABLE_ACTIONS=0
BASEROW_TABLE_CREATIVES=0
BASEROW_TABLE_LOGS=0
BASEROW_TABLE_SNAPSHOTS=0
# Solo necesarias para ejecutar setup_baserow.py una vez:
# BASEROW_EMAIL=
# BASEROW_PASSWORD=
# Airtable (misma base que leads-optimizer) — PPL, capping y Familia por curso.
# Run setup_airtable_meta_tables.py once to create "Meta Ads Campaigns" y
# "MetaCampaignMes" en esa base (requiere token con scope schema.bases:write).
AIRTABLE_TOKEN=your_airtable_personal_access_token
AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX
# Slack App (mismo bot que Viviful, canal dedicado a Formación)
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_SIGNING_SECRET=your_signing_secret
SLACK_CHANNEL_ID=C0XXXXXXXXX
# Campaign filter
META_CAMPAIGN_PREFIX=RoiFormacion
# Operation (set to false in production to actually execute actions)
DRY_RUN=true