Agent IA d'analyse des paiements échoués : pourquoi ce paiement a-t-il échoué ?

Un agent lit un paiement, ses tentatives et la page de statut du processeur, puis explique la cause et la prochaine étape à votre équipe support.

  • Fichiers
  • Connexion en lecture seule
  • Web
  • Callback
  • Plafond de budget

Regardez une vraie exécution

Une vraie exécution du 7 oct. 2026, rejouée. Modèle : openai/gpt-6-luna.

Entrée
{
  "payment_id": "pay_123"
}
Réussierun_80b0a7e12e1b4ee6bc00299ba70cd933$0.004055 sur $0.04
  1. En file d'attentebudget de $0.04 réservé
  2. MicroVMmicroVM ready
  3. MicroVMworker started · shell off · web on
  4. Fichierread playbook.md
  5. Connexionpayments GET /payments/pay_123
  6. Résultatpayments GET → 200
  7. Connexionpayments GET /payments/pay_123/attempts
  8. Résultatpayments GET → 200
  9. MicroVMmicroVM destroyed
  10. Réussie4 appels au modèle, 6,787 jetonsSortie enregistrée (en anglais)

    Cause: The card issuer declined the payment for insufficient funds.
    Evidence: failure_code=insufficient_funds; failure_message=The card issuer declined the charge: insufficient funds. Both attempts failed for the same reason.
    Next step: Suggest the customer retry or use another card.

  11. Worker détruit$0.004055 facturé, $0.035945 libéré
Modèle $0.000255 · Web $0.00 · Calcul $0.0038

Lancez-le vous-même

Ouvrez l'exemple dans le playground avec toute la requête déjà remplie. Il s'exécute sur votre propre compte, dans le budget indiqué, sur les mêmes systèmes d'exemple en lecture seule.

Budget pour cet exemple : $0.04

Fonctionnement

Donnez-lui un identifiant de paiement et un court playbook. Il appelle votre API de paiements via une connexion en lecture seule, consulte la page de statut quand l'échec ressemble à une panne, et répond en six lignes. Il ne peut ni rembourser ni relancer quoi que ce soit, car la connexion n'autorise que GET.

Ce que l'agent peut et ne peut pas faire

Les permissions font partie de la requête. Tout ce qui n'est pas listé ici n'est pas disponible pour l'exécution.

ParamètreAutorisé
Connexions
payments : GET uniquement, sur ephemer.al/api/samples/payments-api
WebUniquement ephemer.al
ShellDésactivé
Fichiersplaybook.md (lecture seule)
Rétention zéro des donnéesDésactivée : l'historique est conservé 30 jours
Budget$0.04, un plafond strict
Délai90 secondes

Les identifiants n'entrent jamais dans la machine : un broker les ajoute à chaque appel et impose les méthodes ci-dessus.

Le code

Voici la requête exacte envoyée par l'exemple. Définissez EPHEMERAL_API_KEY avec une clé de membre de votre organisation.

curl -X POST $EPHEMERAL_URL/v1/runs \
  -H "Authorization: Bearer $EPHEMERAL_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @request.json

Fichiers de la requête

Transmis en ligne, rien n'est donc importé au préalable. L'agent voit chacun comme un fichier en lecture seule.

playbook.md
playbook.md
# Failed payment playbook

You can only read. The payments connection allows GET, and web access is limited to ephemer.al.

1. GET /payments/{payment_id}. Note status, amount, currency, failure_code and failure_message.
2. GET /payments/{payment_id}/attempts. Check whether earlier attempts failed for the same reason.
3. If failure_code is processor_error or timeout, read https://ephemer.al/api/samples/status for incidents around that time.
4. Decide the cause:
   - card_declined, insufficient_funds, expired_card: the customer's bank or card. Suggest a retry or another card.
   - processor_error, timeout: ours or the processor's. Say whether the status page shows an incident.
   - fraud_review: a risk rule held it. Do not suggest bypassing it.
5. Never guess. If a call fails or a field is missing, say so.

Answer in at most six lines: the cause, the evidence (field and value) and the next step for the support agent.
Do not include card numbers or customer email addresses.
Corps complet de la requête request.json

Le même corps, avec les fichiers en ligne.

request.json
{
  "prompt": "Find out why the payment in input.payment_id failed. Follow playbook.md exactly. Use only what the data returns and never guess; if a call fails or a field is missing, say so.",
  "input": {
    "payment_id": "pay_123"
  },
  "files": [
    {
      "path": "playbook.md",
      "content": "# Failed payment playbook\n\nYou can only read. The payments connection allows GET, and web access is limited to ephemer.al.\n\n1. GET /payments/{payment_id}. Note status, amount, currency, failure_code and failure_message.\n2. GET /payments/{payment_id}/attempts. Check whether earlier attempts failed for the same reason.\n3. If failure_code is processor_error or timeout, read https://ephemer.al/api/samples/status for incidents around that time.\n4. Decide the cause:\n   - card_declined, insufficient_funds, expired_card: the customer's bank or card. Suggest a retry or another card.\n   - processor_error, timeout: ours or the processor's. Say whether the status page shows an incident.\n   - fraud_review: a risk rule held it. Do not suggest bypassing it.\n5. Never guess. If a call fails or a field is missing, say so.\n\nAnswer in at most six lines: the cause, the evidence (field and value) and the next step for the support agent.\nDo not include card numbers or customer email addresses.\n"
    }
  ],
  "connections": {
    "payments": {
      "type": "http",
      "url": "https://ephemer.al/api/samples/payments-api",
      "auth": {
        "type": "bearer",
        "token": "sample_read_key"
      },
      "allowed_methods": [
        "GET"
      ],
      "instructions": "GET /payments/{id} returns a payment (status, amount in cents, currency, failure_code, failure_message, attempt_count). GET /payments/{id}/attempts returns its attempts."
    }
  },
  "web": {
    "allow": [
      "ephemer.al"
    ],
    "search": false
  },
  "shell": false,
  "timeout_seconds": 90,
  "max_cost_micros": 40000
}

En savoir plus

Exemples liés

esc

Aucun résultat pour « ».