Aller au contenu principal
Docs reporting
Use case Codex + Yield

Sortie planning lisible par LLM

Forecast key-values et order en JSON

Resolvez l'order GAM, resolvez les IDs de custom targeting, lancez un forecast contraint, puis retournez un objet JSON stable qu'un autre LLM peut lire sans deviner.

Prompt utilisateur

"Codex, prepare un forecast JSON lisible LLM pour l'order OR-2026-SUMMER. Retrouve l'order, resous les key-values audience=sports et hb_pb=20, forecaste les ad units Homepage/Sports du 2026-07-01 au 2026-07-31 pour 500000 impressions en 300x250 et 728x90, separe la disponibilite par format, puis retourne uniquement le JSON de decision."

Résultat attendu

Un objet forecastDecision normalise avec metadata order, IDs key/value resolus, chiffres de forecast, split par format, niveau de risque et prochaine action safe.

Workflow agent

  1. 01

    Retrouver l'order avec list_orders, puis appeler get_order pour porter orderId, status, advertiserId et traffickerId dans le JSON.

  2. 02

    Resoudre chaque key-value avec search_custom_targeting et get_custom_targeting_values; ne jamais passer seulement des labels comme audience=sports au forecast.

  3. 03

    Lancer get_standalone_forecast pour un besoin draft, get_delivery_forecast_by_line_item pour un line item existant, ou get_prospective_delivery_forecast si plusieurs line items planifies doivent etre simules ensemble.

  4. 04

    Ajouter breakdownTargets par format creative pour que le LLM compare 300x250 et 728x90 au lieu de lire une capacite globale melangee.

  5. 05

    Mapper le forecast brut dans un objet forecastDecision strict avant de demander une recommandation au LLM.

Fonctions MCP

Appel MCP parent montré avec l'action reporting.

FonctionCoûtUsage
reporting(action="list_orders")0 crRetrouve l'order GAM par nom.
reporting(action="get_order")0 crRecupere les metadata completes de l'order.
reporting(action="search_custom_targeting")0 crResout les noms de keys en key IDs.
reporting(action="get_custom_targeting_values")0 crResout les value IDs autorises par key.
reporting(action="get_standalone_forecast")0 crForecaste le targeting resolu avant booking.
reporting(action="get_delivery_forecast_by_line_item")0 crCompare avec le forecast d'un line item existant.
reporting(action="get_prospective_delivery_forecast")0 crSimule plusieurs line items planifies ensemble.

Payload JSON

{
  "objective": "forecast_key_values_order_json",
  "prerequisiteCalls": [
    {
      "tool": "orders",
      "arguments": {
        "action": "list",
        "params": {
          "q": "OR-2026-SUMMER",
          "limit": 5
        }
      }
    },
    {
      "tool": "orders",
      "arguments": {
        "action": "get",
        "params": {
          "orderId": "9482"
        }
      }
    },
    {
      "tool": "targeting",
      "arguments": {
        "action": "search_custom_targeting",
        "params": {
          "q": "audience",
          "limit": 10
        }
      }
    },
    {
      "tool": "targeting",
      "arguments": {
        "action": "get_custom_targeting_values",
        "params": {
          "keyId": "1871",
          "limit": 200
        }
      }
    }
  ],
  "forecastCall": {
    "tool": "reporting",
    "arguments": {
      "action": "get_standalone_forecast",
      "params": {
        "adUnitIds": [
          "1234567",
          "1234568"
        ],
        "startDate": "2026-07-01T00:00:00",
        "endDate": "2026-07-31T23:59:59",
        "primaryGoalUnits": 500000,
        "lineItemType": "STANDARD",
        "priority": 8,
        "keyValues": [
          {
            "keyId": 1871,
            "valueIds": [
              9912
            ]
          },
          {
            "keyId": 2450,
            "valueIds": [
              3301
            ]
          }
        ],
        "geoTargeting": [
          "2250"
        ],
        "creativeSizes": [
          {
            "width": 300,
            "height": 250
          },
          {
            "width": 728,
            "height": 90
          }
        ],
        "breakdownTargets": [
          {
            "name": "format_300x250",
            "creative": {
              "width": 300,
              "height": 250
            }
          },
          {
            "name": "format_728x90",
            "creative": {
              "width": 728,
              "height": 90
            }
          }
        ],
        "frequencyCaps": [
          {
            "maxImpressions": 3,
            "numTimeUnits": 1,
            "timeUnit": "DAY"
          }
        ],
        "includeTargetingCriteriaBreakdown": true
      }
    }
  },
  "llmJsonContract": {
    "forecastDecision": {
      "order": [
        "id",
        "name",
        "status",
        "advertiserId",
        "traffickerId"
      ],
      "targeting": [
        "adUnitIds",
        "keyValues",
        "geoTargeting",
        "creativeSizes"
      ],
      "forecast": [
        "availableUnits",
        "matchedUnits",
        "deliveredUnits",
        "utilizationPercent",
        "formatSplit",
        "contendingLineItems"
      ],
      "decision": [
        "riskLevel",
        "status",
        "relaxFirst",
        "nextAction"
      ]
    }
  }
}

Sortie représentative

  • {"order":{"id":"9482","name":"OR-2026-SUMMER","status":"DRAFT","advertiserId":"7712","traffickerId":"4431"},"targeting":{"adUnitIds":["1234567","1234568"],"keyValues":[{"keyId":1871,"keyName":"audience","valueIds":[9912],"valueNames":["sports"]},{"keyId":2450,"keyName":"hb_pb","valueIds":[3301],"valueNames":["20"]}]}}
  • {"forecast":{"availableUnits":612400,"matchedUnits":544900,"deliveredUnits":184200,"utilizationPercent":81.6,"formatSplit":[{"format":"300x250","availableUnits":388100,"matchedUnits":352900,"riskLevel":"LOW"},{"format":"728x90","availableUnits":224300,"matchedUnits":192000,"riskLevel":"REVIEW"}],"contendingLineItems":[{"lineItemId":"90031","name":"Summer Roadblock","priority":6}]}}
  • {"decision":{"riskLevel":"LOW","status":"safe_to_review","relaxFirst":null,"nextAction":"regenerate_before_booking"},"llmSummary":"Order resolu, IDs targeting explicites, forecast read-only."}
Dimensions
NameSourceDescription
ORDER_IDGAMIdentifiant order
ORDER_NAMEGAMNom de l'order
AD_UNIT_IDGAMIDs inventaire cible
CREATIVE_TARGET_AD_UNIT_SIZEGAMSplit par format
KEY_VALUES_IDGAMIDs key-value resolus
KEY_VALUES_NAMEGAMLabels key-value lisibles
Métriques
NameSourceDescription
availableUnitsDerivedDisponibilite forecast
matchedUnitsDerivedUnites matchant le targeting
deliveredUnitsDerivedUnites deja delivrees dans le contexte
utilizationPercentDerivedIndicateur de pression inventaire
formatSplitDerivedDisponibilite separee par format creative
riskLevelDerivedNiveau de risque decisionnel

Limites

  • La disponibilite future n'est pas un rapport REST HISTORICAL; ne pas utiliser run_custom_report pour cette question.
  • Le contexte order est descriptif : il ne reserve pas l'inventaire et ne mute pas l'order.
  • Les key-values doivent etre stockees en keyId/valueIds dans le JSON pour qu'un autre agent puisse rejouer le meme forecast.
  • Les forecasts doivent etre regeneres proche du booking, surtout apres changement de priority, sizes, caps ou targeting.
Le point cle n'est pas la prose; c'est le contrat JSON rejouable qui garde le LLM ancre.
Lire le guide Academy

Utilisez le guide éditorial pour cadrer l'audience, puis revenez ici pour les actions MCP, champs et payloads exacts.

Lire le guide Academy
Références champs