Zum Hauptinhalt springen
WerkstubeDokumentation
Zur Werkstube
Dokumentation/Automatisierungen
Abläufe, die mitarbeiten

Beispiele für Automatisierungen

Ausführbare Lua-Vorlagen für Aufträge, Rechnungen, Mails, Lager, Webhooks und sichere Fehlerbehandlung.

Beispiele für Automatisierungen

Diese Vorlagen verwenden die versionierte Lua-Standardbibliothek. Im Skripteditor kannst du sie über die rechte Referenz suchen, vollständig einsetzen und mit dem angegebenen Beispiel-Ereignis testen.

Fertigen Auftrag dokumentieren

  • Vorlagen-ID: job_status_history
  • Auslöser: Ereignis job.status_changed
  • Benötigte Aktion: jobs.add_history
  • Beispiel-Ereignis: {"type":"job.status_changed","entity_type":"job","entity_id":"42","payload":{"from":"in_progress","to":"done","title":"Badsanierung","job_number":"AU-1042"}}
  • Erwarteter Probelauf: Protokolliert den übersprungenen Verlaufseintrag und die betroffene Auftrags-ID.
  • Risiko: Der Live-Lauf schreibt einen dauerhaften Auftragsverlaufseintrag.
-- @werkstube api=1
local target_status = ctx.require("payload.to", "Neuer Auftragsstatus fehlt")
if target_status ~= "done" then
  action.log("Kein Verlaufseintrag: Auftrag ist noch nicht fertig")
  return
end

local job_id = ctx.require("entity_id", "Auftrags-ID fehlt")
local title = std.text.normalize_space(ctx.get("payload.title", "Auftrag"))
action.jobs.add_history{
  jobId = job_id,
  text = title .. " wurde automatisch als fertig dokumentiert.",
  actor = "Automatisierung",
}
action.log("Verlaufseintrag für Auftrag " .. job_id .. " vorbereitet")

Hohe Rechnung zur Prüfung melden

  • Vorlagen-ID: high_value_invoice
  • Auslöser: Ereignis invoice.created
  • Benötigte Aktion: notify
  • Beispiel-Ereignis: {"type":"invoice.created","entity_type":"invoice","entity_id":"9","payload":{"invoice_number":"RE-1009","status":"open","gross_cents":1285000}}
  • Erwarteter Probelauf: Protokolliert eine übersprungene Warnungsbenachrichtigung mit Rechnungsnummer und Betrag.
  • Risiko: Der Live-Lauf erzeugt eine interne Benachrichtigung, verändert aber keine Rechnung.
-- @werkstube api=1
local gross_cents = ctx.require("payload.gross_cents", "Bruttobetrag fehlt")
local threshold_cents = std.money.parse("10000,00")

if gross_cents < threshold_cents then
  action.log("Rechnung unter Prüfschwelle: " .. std.money.format(gross_cents))
  return
end

local invoice_id = ctx.require("entity_id", "Rechnungs-ID fehlt")
local number = std.text.trim(ctx.get("payload.invoice_number", invoice_id))
action.notify(
  "Hohe Rechnung prüfen",
  "Rechnung " .. number .. " über " .. std.money.format(gross_cents) .. " wurde erstellt.",
  { severity = "warning", link = "/finanzen/rechnungen/" .. invoice_id }
)

Eingegangene Mail zusammenfassen

  • Vorlagen-ID: mail_summary
  • Auslöser: Manuell mit übergebenem Mailtext
  • Benötigte Aktionen: ai, notify
  • Beispiel-Ereignis: {"type":"manual","entity_type":"mail","entity_id":"81","payload":{"from":"kunde@example.de","subject":"Heizung tropft","body":"Seit heute Morgen verliert die Heizung Wasser. Bitte rufen Sie mich zurück."}}
  • Erwarteter Probelauf: Führt den KI-Schritt aus und protokolliert die übersprungene Benachrichtigung.
  • Risiko: KI-Aufrufe können auch im Probelauf Kontingent verbrauchen und verarbeiten den angegebenen Mailtext.
-- @werkstube api=1
local sender = std.validate.email(ctx.require("payload.from", "Absender fehlt"))
local subject = std.text.normalize_space(ctx.require("payload.subject", "Betreff fehlt"))
local body = std.text.trim(ctx.get("payload.body", ""))

if std.text.is_blank(body) then
  action.warn("E-Mail von " .. sender .. " enthält keinen Text")
  return
end

local summary = action.ai(
  "Fasse diese Kundenmail in höchstens drei deutschen Sätzen zusammen. " ..
  "Erfinde keine Angaben.\nBetreff: " .. subject .. "\nText: " .. body
)
action.notify("Neue Mail: " .. std.text.truncate(subject, 60), summary, {
  severity = "info",
  link = "/posteingang",
})

Mindestbestand eskalieren

  • Vorlagen-ID: low_stock_alert
  • Auslöser: Ereignis inventory.low_stock
  • Benötigte Aktion: inventory.reorder_low_stock
  • Beispiel-Ereignis: {"type":"inventory.low_stock","entity_type":"inventory_item","entity_id":"3","payload":{"item_number":"ART-102","name":"Heizkörper Typ 22","on_hand":"3","min_stock":"5","unit":"Stk"}}
  • Erwarteter Probelauf: Schreibt die Bestandswarnung und protokolliert die übersprungene Nachbestellung.
  • Risiko: Der Live-Lauf kann Bestellentwürfe über die vorhandene Lageraktion erzeugen.
-- @werkstube api=1
local item_number = std.text.trim(ctx.require("payload.item_number", "Artikelnummer fehlt"))
local item_name = std.text.normalize_space(ctx.require("payload.name", "Artikelname fehlt"))
local on_hand = tonumber(ctx.require("payload.on_hand", "Bestand fehlt"))
local minimum = tonumber(ctx.require("payload.min_stock", "Mindestbestand fehlt"))

if on_hand == nil or minimum == nil then
  error("Bestand und Mindestbestand müssen Zahlen sein")
end
if on_hand >= minimum then
  action.log(item_number .. " liegt nicht mehr unter Mindestbestand")
  return
end

action.warn(item_number .. " · " .. item_name .. ": " .. on_hand .. " von " .. minimum .. " verfügbar")
action.inventory.reorder_low_stock{}

Webhook als Anfrage erfassen

  • Vorlagen-ID: webhook_inquiry
  • Auslöser: Webhook
  • Benötigte Aktion: inquiries.create
  • Beispiel-Ereignis: {"type":"webhook","payload":{"subject":"Anfrage Badsanierung","email":"kunde@example.de","message":"Bitte senden Sie mir einen Terminvorschlag."}}
  • Erwarteter Probelauf: Protokolliert die übersprungene Anfrageerstellung und den validierten Absender.
  • Risiko: Öffentliche Webhooks brauchen vorgelagerte Rate-Limits; der Live-Lauf legt Datensätze an.
-- @werkstube api=1
local subject = std.text.normalize_space(ctx.require("payload.subject", "Betreff fehlt"))
local email = std.validate.email(ctx.require("payload.email", "E-Mail fehlt"))
local message = std.text.trim(ctx.get("payload.message", ""))

action.inquiries.create{
  subject = std.text.truncate(subject, 120),
  description = message,
  email = email,
  channel = "webhook",
}
action.log("Webhook-Anfrage von " .. email .. " vorbereitet")

Erwarteten Aktionsfehler behandeln

  • Vorlagen-ID: error_handling
  • Auslöser: manuell oder als Ereignis
  • Benötigte Aktion: jobs.get
  • Beispiel-Ereignis: {"type":"manual","entity_type":"job","entity_id":"42","payload":{}}
  • Erwarteter Probelauf: Protokolliert den übersprungenen Ladevorgang und den sicheren Abschluss.
  • Risiko: Fehler nur behandeln, wenn der Ablauf danach fachlich sicher enden darf.
-- @werkstube api=1
local job_id = ctx.require("entity_id", "Auftrags-ID fehlt")

local ok, result = pcall(function()
  return action.jobs.get{ id = job_id }
end)

if not ok then
  action.warn("Auftrag " .. job_id .. " konnte nicht geladen werden: " .. tostring(result))
  return
end

action.log("Auftrag " .. job_id .. " wurde sicher geladen", result)
War diese Seite hilfreich?Dein Hinweis hilft uns, die Dokumentation besser zu machen.