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.
38 lines
1.3 KiB
Plaintext
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
|