Lesen Sie jeden Montag um 09:00 Uhr in Tokio die Zahlen der letzten Woche aus Ihrer Analytics-API, schreiben Sie einen kurzen Bericht und senden Sie ihn an Slack oder per E-Mail. Der Agent liest über eine Verbindung, die nur GET erlaubt, sodass er Ihre Zahlen ansehen, aber nicht ändern kann.
Die Ausführung dauert etwa 10 Sekunden. Den größten Teil der Kosten macht die Rechenzeit aus, die mit $0.0002 pro Sekunde berechnet wird, vier Ausführungen im Monat kosten also etwa einen Cent. Der Anteil des Modells hängt vom gewählten Modell ab; lesen Sie bei den ersten Ausführungen cost_micros aus, um ihn zu sehen.
Was Sie brauchen
- Ein API-Schlüssel mit der Rolle Admin, denn nur Inhaber und Admins erstellen Verbindungen und Zeitpläne. Siehe Rollen und Schlüssel.
- Ihre Analytics-API über HTTPS und ein Schlüssel nur zum Lesen dafür. Dieses Rezept geht davon aus, dass sie
GET /metrics?period=…bietet, wobeiperiodentwederlast_weekoder eine ISO-Woche wie2026-W40ist. Passen Sie die Pfade an Ihre API an. - Eine eingehende Slack-Webhook-URL oder ein Endpunkt von Ihnen, der E-Mails sendet.
Verbindung nur zum Lesen erstellen
Die Verbindung hält den API-Schlüssel innerhalb von Ephemeral und erlaubt nur
GET. Dieinstructionssagen dem Agenten, was die API bietet.curl -X PUT $EPHEMERAL_URL/v1/connections/analytics-api \ -H "Authorization: Bearer $EPHEMERAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "http", "url": "https://analytics.example.com/v2", "auth": { "type": "header", "header": "X-API-Key", "token": "an_live_…" }, "allowed_methods": ["GET"], "instructions": "GET /metrics?period=last_week or period=2026-W40 returns signups, active_users, revenue_cents and churned_accounts for that ISO week, with the same figures for the week before. Amounts are in cents." }'Workflow speichern
Der Prompt liest den Zeitraum aus der Eingabe der Ausführung. Der Agent hat keinen verlässlichen Kalender, übergeben Sie also einen Zeitraum, den Ihre API auflösen kann, etwa
last_week, statt den Agenten Datumsangaben ausrechnen zu lassen.curl -X PUT $EPHEMERAL_URL/v1/workflows/weekly-report \ -H "Authorization: Bearer $EPHEMERAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "prompt": "Write the weekly business report for input.period. Call GET /metrics?period=<input.period> on the analytics connection and use only what it returns. Reply in Markdown, at most 150 words: a one-line headline, then signups, active users, revenue in dollars and churned accounts, each with the change from the week before. If the call fails, say so instead of estimating.", "connections": { "analytics": { "ref": "analytics-api", "allowed_methods": ["GET"] } }, "shell": false, "timeout_seconds": 120 }'Es gibt keine
web-Einstellung, die Ausführung hat also gar keinen Internetzugang; ihre einzige Reichweite ist die Analytics-Verbindung. Ein Workflow kann wederinputnoch ein Budget oder einen Callback enthalten; diese kommen mit jeder Ausführung.Für Montagmorgen einplanen
0 9 * * 1ist 09:00 Uhr an Montagen, gelesen in dertimezonedes Zeitplans. Dieinputdes Zeitplans erhält jede Ausführung, die er startet; hier legen Sie also den Zeitraum fest. Sehen Sie sich ihn zuerst in der Vorschau an.curl -X POST $EPHEMERAL_URL/v1/schedules/preview \ -H "Authorization: Bearer $EPHEMERAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "cron": "0 9 * * 1", "timezone": "Asia/Tokyo" }'Die Zeiten sind in UTC: 00:00 UTC ist 09:00 Uhr in Tokio. Erstellen Sie den Zeitplan:
curl -X POST $EPHEMERAL_URL/v1/schedules \ -H "Authorization: Bearer $EPHEMERAL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "workflow": "weekly-report", "name": "Monday report", "cron": "0 9 * * 1", "timezone": "Asia/Tokyo", "input": { "period": "last_week" }, "max_cost_micros": 300000 }'Das Budget von $0.30 wird bei jedem Start reserviert und freigegeben, wenn die Ausführung abgerechnet ist. Da der Zeitplan die Eingabe besitzt, können Sie einen weiteren Zeitplan für denselben Workflow mit anderer Eingabe anlegen oder diesen später mit
PATCH /v1/schedules/{id}und einer neueninputändern. Um ihn vor Montag zu erleben, starten Sie jetzt eine Ausführung mitPOST /v1/schedules/{id}/runoderephemeral schedules run ID.Bericht zustellen
Geplante Ausführungen senden keine Callbacks, stellen Sie also zu, indem Sie das Ergebnis abholen. Dieses Skript, alle zehn Minuten aus cron oder CI ausgeführt, fragt nach der neuesten erfolgreichen Ausführung des Zeitplans, sendet deren Ausgabe einmal und merkt sich die Ausführungs-ID. Ersetzen Sie den Slack-Aufruf durch einen Aufruf Ihres Mail-Dienstes, wenn Sie E-Mail bevorzugen.
import { readFile, writeFile } from "node:fs/promises"; const { EPHEMERAL_URL, EPHEMERAL_API_KEY, SCHEDULE_ID, SLACK_WEBHOOK_URL } = process.env; const stateFile = "report-state.json"; const { sent } = JSON.parse(await readFile(stateFile, "utf8").catch(() => "{}")); const response = await fetch(`${EPHEMERAL_URL}/v1/runs?schedule=${SCHEDULE_ID}&status=succeeded&limit=1`, { headers: { Authorization: `Bearer ${EPHEMERAL_API_KEY}` }, }); if (!response.ok) throw new Error(`Ephemeral returned ${response.status}`); const [run] = (await response.json()).items; if (!run || run.id === sent) process.exit(0); // nothing new since the last report await fetch(SLACK_WEBHOOK_URL, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ text: run.output }), }); await writeFile(stateFile, JSON.stringify({ sent: run.id }));Eine fehlgeschlagene Ausführung sendet nichts. Sehen Sie sich daher auch
GET /v1/runs?schedule={id}&status=failed&limit=1an oder beobachten Sie daslast_errordes Zeitplans, damit ein fehlender Bericht nicht unbemerkt bleibt.Einen Bericht für eine vergangene Woche erneut ausführen
"Jetzt starten" verwendet die Eingabe des Zeitplans erneut. Für eine andere Woche starten Sie daher den Workflow direkt mit dem gewünschten Zeitraum. Diesmal können Sie einen signierten Callback anfordern, der das Ergebnis an Ihren Endpunkt liefert, sobald es fertig ist. Verwenden Sie einen Idempotency-Key, der die Woche nennt, damit eine wiederholte Anfrage nie einen zweiten Bericht sendet.
curl $EPHEMERAL_URL/v1/runs \ -H "Authorization: Bearer $EPHEMERAL_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: weekly-report-2026-W38" \ -d '{ "workflow": "weekly-report", "input": { "period": "2026-W38" }, "max_cost_micros": 300000, "callback": { "url": "https://example.com/hooks/ephemeral", "secret": "'"$EPHEMERAL_CALLBACK_SECRET"'" } }'Ihr Callback-Endpunkt prüft die Signatur und leitet
run.outputweiter; den Empfänger finden Sie im Rezept zur Zahlungsuntersuchung. Eine so gestartete Ausführung trägt nicht die ID des Zeitplans und erscheint daher nicht unter?schedule=.
Gut zu wissen
| Thema | Verhalten |
|---|---|
| Zeitzone | Zeiten werden in der timezone des Zeitplans gelesen, ein Bericht für 09:00 Uhr bleibt daher auch bei Zeitumstellungen bei 09:00 Uhr Ortszeit. |
| Verpasste Starts | War Ephemeral um 09:00 Uhr nicht verfügbar, läuft der Bericht einmal, sobald es wieder erreichbar ist, danach geht der Fahrplan weiter. |
| Überlappung | Ist skip_if_running an, wird ein Start übersprungen, solange die vorherige Ausführung noch läuft. |
| Pausieren | ephemeral schedules pause ID vor einem Feiertag und resume danach. |
GET, und der Schlüssel erreicht nie die microVM. Der Workflow hat keinen Webzugriff und keine Shell, die Ausführung kann also Ihre Analytics-API lesen und sonst nichts. Das Budget begrenzt jede Ausführung auf $0.30. Verwenden Sie einen Analytics-Schlüssel nur zum Lesen, damit selbst die Verbindung nicht schreiben könnte.