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.
53 lines
1.8 KiB
YAML
53 lines
1.8 KiB
YAML
name: Daily Meta Optimizer Formación
|
|
|
|
on:
|
|
# schedule:
|
|
# - cron: '0 4 * * *' # 6:00 AM hora española — antes que Viviful (07:00), evita competir por rate limit de la misma cuenta Meta
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
run:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v5
|
|
with:
|
|
python-version: '3.12'
|
|
|
|
- name: Install dependencies
|
|
run: pip install -r requirements.txt
|
|
|
|
- name: Run optimizer
|
|
env:
|
|
META_APP_ID: ${{ secrets.META_APP_ID }}
|
|
META_APP_SECRET: ${{ secrets.META_APP_SECRET }}
|
|
META_ACCESS_TOKEN: ${{ secrets.META_ACCESS_TOKEN }}
|
|
META_AD_ACCOUNT_ID: ${{ secrets.META_AD_ACCOUNT_ID }}
|
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
BASEROW_URL: ${{ secrets.BASEROW_URL }}
|
|
BASEROW_TOKEN: ${{ secrets.BASEROW_TOKEN }}
|
|
BASEROW_TABLE_ACTIONS: ${{ secrets.BASEROW_TABLE_ACTIONS }}
|
|
BASEROW_TABLE_CREATIVES: ${{ secrets.BASEROW_TABLE_CREATIVES }}
|
|
BASEROW_TABLE_LOGS: ${{ secrets.BASEROW_TABLE_LOGS }}
|
|
BASEROW_TABLE_SNAPSHOTS: ${{ secrets.BASEROW_TABLE_SNAPSHOTS }}
|
|
AIRTABLE_TOKEN: ${{ secrets.AIRTABLE_TOKEN }}
|
|
AIRTABLE_BASE_ID: ${{ secrets.AIRTABLE_BASE_ID }}
|
|
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
|
|
SLACK_SIGNING_SECRET: ${{ secrets.SLACK_SIGNING_SECRET }}
|
|
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}
|
|
META_CAMPAIGN_PREFIX: RoiFormacion
|
|
DRY_RUN: ${{ vars.DRY_RUN }}
|
|
run: python run.py
|
|
|
|
- name: Upload log
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: meta-optimizer-formacion-log-${{ github.run_id }}
|
|
path: logs/
|
|
retention-days: 30
|