feat(i18n): update translations (#1465)

* feat(i18n): update translations

* fixed french i18n error

---------
This commit is contained in:
Waleed
2025-09-26 19:01:22 -07:00
committed by GitHub
parent 2ae30f1399
commit 3ff6509028
41 changed files with 1656 additions and 889 deletions

View File

@@ -1,168 +1,40 @@
---
title: Workflow
title: Workflow-Block
description: Führe einen anderen Workflow innerhalb des aktuellen Ablaufs aus
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
Der Workflow-Block ermöglicht es, andere Workflows als wiederverwendbare Komponenten innerhalb deines aktuellen Workflows auszuführen. Dies ermöglicht modulares Design, Codewiederverwendung und die Erstellung komplexer verschachtelter Workflows, die aus kleineren, fokussierten Workflows zusammengesetzt werden können.
## Was er macht
<div className="flex justify-center my-6">
<div className='flex justify-center my-6'>
<Image
src="/static/blocks/workflow.png"
alt="Workflow-Block"
src='/static/blocks/workflow.png'
alt='Workflow-Block-Konfiguration'
width={400}
height={280}
className="rounded-xl border border-border shadow-sm"
className='rounded-xl border border-border shadow-sm'
/>
</div>
<Callout type="info">
Workflow-Blöcke ermöglichen modulares Design, indem sie es erlauben, komplexe Workflows aus kleineren, wiederverwendbaren Komponenten zusammenzusetzen.
Füge einen Workflow-Block hinzu, wenn du einen untergeordneten Workflow als Teil eines größeren Ablaufs aufrufen möchtest. Der Block führt die neueste bereitgestellte Version dieses Workflows aus, wartet auf dessen Abschluss und setzt dann mit dem übergeordneten Workflow fort.
## Konfiguration
1. **Wähle einen Workflow** aus dem Dropdown-Menü (Selbstreferenzen sind blockiert, um Schleifen zu verhindern).
2. **Eingaben zuordnen**: Wenn der untergeordnete Workflow einen Eingabeformular-Trigger hat, siehst du jedes Feld und kannst übergeordnete Variablen verbinden. Die zugeordneten Werte sind das, was der untergeordnete Workflow erhält.
3. **Ausgaben**: Nach Abschluss des untergeordneten Workflows stellt der Block folgendes bereit:
- `result` die endgültige Antwort des untergeordneten Workflows
- `success` ob er ohne Fehler ausgeführt wurde
- `error` Nachricht, wenn die Ausführung fehlschlägt
## Ausführungshinweise
- Untergeordnete Workflows laufen im gleichen Workspace-Kontext, sodass Umgebungsvariablen und Tools übernommen werden.
- Der Block verwendet Deployment-Versionierung: Jede API-, Zeitplan-, Webhook-, manuelle oder Chat-Ausführung ruft den bereitgestellten Snapshot auf. Stelle den untergeordneten Workflow neu bereit, wenn du ihn änderst.
- Wenn der untergeordnete Workflow fehlschlägt, löst der Block einen Fehler aus, es sei denn, du behandelst ihn nachgelagert.
<Callout>
Halte untergeordnete Workflows fokussiert. Kleine, wiederverwendbare Abläufe machen es einfacher, sie zu kombinieren, ohne tiefe Verschachtelungen zu erzeugen.
</Callout>
## Überblick
Der Workflow-Block dient als Brücke zwischen Workflows und ermöglicht es dir:
<Steps>
<Step>
<strong>Bestehende Workflows wiederzuverwenden</strong>: Führe zuvor erstellte Workflows als Komponenten innerhalb neuer Workflows aus
</Step>
<Step>
<strong>Modulare Designs zu erstellen</strong>: Zerlege komplexe Prozesse in kleinere, überschaubare Workflows
</Step>
<Step>
<strong>Trennung der Zuständigkeiten beizubehalten</strong>: Halte verschiedene Geschäftslogik in separaten Workflows isoliert
</Step>
<Step>
<strong>Teamzusammenarbeit zu ermöglichen</strong>: Teile und verwende Workflows über verschiedene Projekte und Teammitglieder hinweg wieder
</Step>
</Steps>
## Funktionsweise
Der Workflow-Block:
1. Nimmt eine Referenz zu einem anderen Workflow in deinem Workspace
2. Übergibt Eingabedaten vom aktuellen Workflow an den untergeordneten Workflow (verfügbar über start.input)
3. Führt den untergeordneten Workflow in einem isolierten Kontext aus
4. Gibt das Ergebnis zur weiteren Verarbeitung an den übergeordneten Workflow zurück
## Konfigurationsoptionen
### Workflow-Auswahl
Wähle aus einer Dropdown-Liste der verfügbaren Workflows in deinem Workspace aus, welcher Workflow ausgeführt werden soll. Die Liste umfasst:
- Alle Workflows, auf die du im aktuellen Workspace Zugriff hast
- Workflows, die von anderen Teammitgliedern mit dir geteilt wurden
- Sowohl aktivierte als auch deaktivierte Workflows (obwohl nur aktivierte Workflows ausgeführt werden können)
### Ausführungskontext
Der untergeordnete Workflow wird ausgeführt mit:
- Seinem eigenen isolierten Ausführungskontext
- Zugriff auf dieselben Workspace-Ressourcen (API-Schlüssel, Umgebungsvariablen)
- Korrekten Workspace-Mitgliedschafts- und Berechtigungsprüfungen
- Verschachteltem Tracespan im Ausführungsprotokoll
<Callout type="warning">
**Zykluserkennung**: Das System erkennt und verhindert automatisch zirkuläre Abhängigkeiten zwischen Workflows, um Endlosschleifen zu vermeiden.
</Callout>
## Eingaben und Ausgaben
<Tabs items={['Configuration', 'Variables', 'Results']}>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Workflow-Auswahl</strong>: Wählen Sie aus, welcher Workflow ausgeführt werden soll
</li>
<li>
<strong>Eingabedaten</strong>: Variable oder Blockreferenz, die an den untergeordneten Workflow übergeben wird
</li>
<li>
<strong>Ausführungskontext</strong>: Isolierte Umgebung mit Workspace-Ressourcen
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>workflow.success</strong>: Boolescher Wert, der den Abschlussstatus angibt
</li>
<li>
<strong>workflow.childWorkflowName</strong>: Name des ausgeführten untergeordneten Workflows
</li>
<li>
<strong>workflow.result</strong>: Vom untergeordneten Workflow zurückgegebenes Ergebnis
</li>
<li>
<strong>workflow.error</strong>: Fehlerdetails, falls der Workflow fehlgeschlagen ist
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Workflow-Antwort</strong>: Primäre Ausgabe des untergeordneten Workflows
</li>
<li>
<strong>Ausführungsstatus</strong>: Erfolgsstatus und Fehlerinformationen
</li>
<li>
<strong>Zugriff</strong>: Verfügbar in Blöcken nach dem Workflow
</li>
</ul>
</Tab>
</Tabs>
## Beispielanwendungsfälle
### Modulares Kunden-Onboarding
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Komplexes Onboarding in wiederverwendbare Komponenten aufteilen</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Hauptworkflow empfängt Kundendaten</li>
<li>Workflow-Block führt Validierungs-Workflow aus</li>
<li>Workflow-Block führt Kontoeinrichtungs-Workflow aus</li>
<li>Workflow-Block führt Willkommens-E-Mail-Workflow aus</li>
</ol>
</div>
### Microservice-Architektur
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Unabhängige Service-Workflows erstellen</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Zahlungsabwicklungs-Workflow verarbeitet Transaktionen</li>
<li>Bestandsverwaltungs-Workflow aktualisiert den Lagerbestand</li>
<li>Benachrichtigungs-Workflow sendet Bestätigungen</li>
<li>Hauptworkflow orchestriert alle Dienste</li>
</ol>
</div>
### Bedingte Verarbeitung
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Szenario: Führe verschiedene Workflows basierend auf Bedingungen aus</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Bedingungsblock bewertet den Benutzertyp</li>
<li>Enterprise-Benutzer → Komplexer Genehmigungsworkflow</li>
<li>Standard-Benutzer → Einfacher Genehmigungsworkflow</li>
<li>Kostenlose Benutzer → Grundlegender Verarbeitungsworkflow</li>
</ol>
</div>
## Bewährte Praktiken
- **Workflows fokussiert halten**: Gestalte untergeordnete Workflows für spezifische, klar definierte Aufgaben mit eindeutigen Ein- und Ausgaben
- **Verschachtelungstiefe minimieren**: Vermeide tief verschachtelte Workflow-Hierarchien für bessere Wartbarkeit und Leistung
- **Fehler elegant behandeln**: Implementiere eine ordnungsgemäße Fehlerbehandlung für Fehler in untergeordneten Workflows und stelle Fallback-Mechanismen bereit
- **Unabhängig testen**: Stelle sicher, dass untergeordnete Workflows unabhängig von übergeordneten Workflows getestet und validiert werden können
- **Semantische Benennung verwenden**: Gib Workflows beschreibende Namen, die ihren Zweck und ihre Funktionalität klar angeben

View File

@@ -4,6 +4,7 @@ title: Ausführung
import { Callout } from 'fumadocs-ui/components/callout'
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Image } from '@/components/ui/image'
Die Ausführungs-Engine von Sim bringt Ihre Workflows zum Leben, indem sie Blöcke in der richtigen Reihenfolge verarbeitet, den Datenfluss verwaltet und Fehler elegant behandelt, sodass Sie genau verstehen können, wie Workflows in Sim ausgeführt werden.
@@ -89,9 +90,25 @@ Die Chat-Bereitstellung erstellt eine Konversationsschnittstelle für Ihren Work
Jede Bereitstellungsmethode übergibt Daten an den Starter-Block Ihres Workflows und beginnt so den Ausführungsfluss.
## Deployment-Snapshots
Alle öffentlichen Einstiegspunkte—API, Chat, Zeitplan, Webhook und manuelle Ausführungen—führen den aktiven Deployment-Snapshot des Workflows aus. Veröffentliche ein neues Deployment, wann immer du die Arbeitsfläche änderst, damit jeder Trigger die aktualisierte Version verwendet.
<div className='flex justify-center my-6'>
<Image
src='/static/execution/deployment-versions-light.png'
alt='Tabelle mit Deployment-Versionen'
width={500}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Das Deploy-Modal behält eine vollständige Versionshistorie bei—inspiziere jeden Snapshot, vergleiche ihn mit deinem Entwurf und führe Upgrades oder Rollbacks mit einem Klick durch, wenn du eine frühere Version wiederherstellen musst.
## Programmatische Ausführung
Führen Sie Workflows aus Ihren Anwendungen mit unseren offiziellen SDKs aus:
Führe Workflows aus deinen Anwendungen mit unseren offiziellen SDKs aus:
```bash
# TypeScript/JavaScript
@@ -116,21 +133,21 @@ const result = await client.executeWorkflow('workflow-id', {
## Best Practices
### Für Zuverlässigkeit entwickeln
- Fehler elegant mit geeigneten Fallback-Pfaden behandeln
- Umgebungsvariablen für sensible Daten verwenden
- Logging zu Funktionsblöcken für Debugging hinzufügen
### Design für Zuverlässigkeit
- Behandle Fehler elegant mit geeigneten Fallback-Pfaden
- Verwende Umgebungsvariablen für sensible Daten
- Füge Logging zu Funktionsblöcken für Debugging hinzu
### Leistung optimieren
- Externe API-Aufrufe wenn möglich minimieren
- Parallele Ausführung für unabhängige Operationen nutzen
- Ergebnisse mit Memory-Blöcken bei Bedarf zwischenspeichern
- Minimiere externe API-Aufrufe wo möglich
- Nutze parallele Ausführung für unabhängige Operationen
- Cache Ergebnisse mit Memory-Blöcken, wenn angemessen
### Ausführungen überwachen
- Logs regelmäßig überprüfen, um Leistungsmuster zu verstehen
- Kosten für KI-Modellnutzung verfolgen
- Workflow-Snapshots zur Fehlerbehebung verwenden
- Überprüfe Logs regelmäßig, um Leistungsmuster zu verstehen
- Verfolge Kosten für KI-Modellnutzung
- Verwende Workflow-Snapshots zur Fehlerbehebung
## Was kommt als nächstes?
Beginnen Sie mit [Ausführungsgrundlagen](/execution/basics), um zu verstehen, wie Workflows ausgeführt werden, und erkunden Sie dann [Protokollierung](/execution/logging), um Ihre Ausführungen zu überwachen, sowie [Kostenberechnung](/execution/costs), um Ihre Ausgaben zu optimieren.
Beginne mit [Ausführungsgrundlagen](/execution/basics), um zu verstehen, wie Workflows laufen, und erkunde dann [Logging](/execution/logging), um deine Ausführungen zu überwachen, sowie [Kostenberechnung](/execution/costs), um deine Ausgaben zu optimieren.

View File

@@ -0,0 +1,60 @@
---
title: API-Trigger
description: Starten Sie einen Workflow über eine authentifizierte HTTP-Anfrage
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der API-Trigger stellt Ihren Workflow als sicheren HTTP-Endpunkt bereit. Senden Sie JSON-Daten an den Endpunkt und Ihr Workflow verarbeitet diese sofort. API-Aufrufe werden immer gegen Ihre neueste Bereitstellung ausgeführt.
## Eingabeformat konfigurieren
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/api-trigger-light.png'
alt='API-Trigger Eingabeformat'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Fügen Sie für jeden Parameter ein Feld **Eingabeformat** hinzu. Die Ausgabeschlüssel zur Laufzeit spiegeln das Schema wider und sind auch unter `<api.input>` verfügbar.
```yaml
- type: string
name: userId
value: demo-user # optional manual test value
- type: number
name: maxTokens
```
Manuelle Ausführungen im Editor verwenden die Spalte `value`, damit Sie testen können, ohne eine Anfrage zu senden. Während der Ausführung füllt der Resolver sowohl `<api.userId>` als auch `<api.input.userId>`.
## Anfrage-Beispiel
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{"userId":"demo-user","maxTokens":1024}'
```
Erfolgreiche Antworten geben das serialisierte Ausführungsergebnis vom Executor zurück. Fehler zeigen Validierungs-, Authentifizierungs- oder Workflow-Fehler an.
## Ausgabe-Referenz
| Referenz | Beschreibung |
|-----------|-------------|
| `<api.field>` | Im Eingabeformat definiertes Feld |
| `<api.input>` | Gesamter strukturierter Anfragekörper |
Wenn kein Eingabeformat definiert ist, stellt der Executor das rohe JSON nur unter `<api.input>` bereit.
<Callout type="warning">
Ein Workflow kann nur einen API-Trigger enthalten. Veröffentlichen Sie eine neue Bereitstellung nach Änderungen, damit der Endpunkt aktuell bleibt.
</Callout>

View File

@@ -0,0 +1,43 @@
---
title: Chat-Auslöser
description: Starten Sie einen Workflow aus einer Chat-Bereitstellung
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der Chat-Auslöser erstellt eine Konversationsschnittstelle für Ihren Workflow. Stellen Sie Ihren Workflow als Chat bereit, und Benutzer können über eine teilbare URL damit interagieren. Jede Nachricht startet eine neue Workflow-Ausführung mit Ihrer neuesten Bereitstellung.
## Laufzeit-Ausgaben
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/chat-trigger-light.png'
alt='Chat-Bereitstellungskonversation'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Der Auslöser schreibt drei Felder, auf die nachfolgende Blöcke verweisen können:
| Referenz | Beschreibung |
|-----------|-------------|
| `<chat.input>` | Neueste Benutzernachricht |
| `<chat.conversationId>` | Konversations-Thread-ID |
| `<chat.files>` | Optionale hochgeladene Dateien |
Dateien enthalten `name`, `mimeType` und einen signierten Download `url`.
## Nutzungshinweise
1. Fügen Sie einen Chat-Auslöser-Block pro Workflow hinzu.
2. Stellen Sie den Workflow im Chat-Modus bereit.
3. Teilen Sie den Bereitstellungslink jede Antwort verwendet die Konversations-ID wieder, sodass der Workflow den Kontext beibehalten kann.
<Callout type="info">
Der Builder blockiert mehrere Chat-Auslöser-Blöcke im selben Workflow.
</Callout>

View File

@@ -0,0 +1,52 @@
---
title: Auslöser
description: Grundlegende Möglichkeiten, Sim-Workflows zu starten
---
import { Card, Cards } from 'fumadocs-ui/components/card'
## Kern-Auslöser
Wähle einen Auslöser pro Workflow, um zu definieren, wie er startet:
<Cards>
<Card title="API" href="/triggers/api">
HTTP-Endpunkt, der JSON-Bodies in Workflow-Eingaben umwandelt
</Card>
<Card title="Chat" href="/triggers/chat">
Bereitgestellte Chat-Oberfläche mit Streaming-Antworten
</Card>
<Card title="Eingabeformular" href="/triggers/input-form">
Typisierte manuelle Eingabe für Editor-Ausführungen und Unterworkflows
</Card>
<Card title="Manuell" href="/triggers/manual">
Bedarfsgesteuerte Ausführungen ohne zusätzliche Daten
</Card>
<Card title="Zeitplan" href="/triggers/schedule">
Cron- oder intervallbasierte Ausführung
</Card>
<Card title="Webhook" href="/triggers/webhook">
Externe Webhook-Payloads empfangen
</Card>
</Cards>
## Schneller Vergleich
| Auslöser | Startbedingung |
|---------|-----------------|
| **API** | Authentifizierter HTTP POST |
| **Chat** | Chat-Deployment-Nachricht |
| **Eingabeformular** | Bei manueller Übermittlung im Editor oder übergeordneten Workflow |
| **Manuell** | Ausführen-Schaltfläche im Editor |
| **Zeitplan** | Timer, der im Zeitplan-Modal verwaltet wird |
| **Webhook** | Bei eingehendem HTTP-Request |
## Verwendung von Auslösern
1. Platziere den Auslöser-Block im Startslot.
2. Konfiguriere alle erforderlichen Schemas oder Authentifizierungen.
3. Verbinde den Block mit dem Rest des Workflows.
> Deployments unterstützen jeden Auslöser. Aktualisiere den Workflow, stelle ihn neu bereit, und alle Auslöser-Einstiegspunkte übernehmen den neuen Snapshot. Erfahre mehr unter [Ausführung → Deployment-Snapshots](/execution).
Legacy-Starter-Blöcke bleiben für bestehende Flows erhalten, erscheinen aber nicht mehr in neuen Builds.

View File

@@ -0,0 +1,52 @@
---
title: Eingabeformular-Trigger
description: Manueller Trigger mit einem strukturierten Eingabeschema
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Verwenden Sie einen Eingabeformular-Trigger, wenn ein Workflow vom Editor aus mit typisierten Feldern gestartet werden soll. Das Ausführungspanel zeigt genau die Felder an, die Sie definieren, sodass der Workflow immer saubere Daten erhält.
## Was Sie definieren
Fügen Sie Felder im Eingabeformat-Builder hinzu (Text, Zahl, Boolean, JSON usw.). Für jedes Feld:
- Der Wert erscheint als `<blockName.field>` im Workflow.
- Die vollständige Nutzlast wird zur Vereinfachung unter `<blockName.input>` gespiegelt.
Wenn Sie das Formular leer lassen, hat der Trigger keine Ausgaben.
## Manuelle Ausführungen
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/input-form-panel-light.png'
alt='Eingabeformular-Ausführungspanel'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Wenn Sie im Editor auf Ausführen drücken, rendert das Panel das Formular. Übermittelte Werte fließen direkt in die Trigger-Ausgabe ein, sodass nachgelagerte Blöcke darauf verweisen können, ohne zusätzliches Parsing. Zahlen werden in Zahlentypen umgewandelt, Booleans werden zu true/false, und JSON-Felder werden geparst, bevor der Workflow sie verarbeitet.
## Untergeordnete Workflows
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/workflow-input-mapping-light.png'
alt='Workflow-Eingabezuordnung'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Eingabeformular-Trigger steuern auch den Workflow-Block. Wenn Sie einen untergeordneten Workflow einbetten, zeigt der Zuordnungsschritt die Formularfelder des untergeordneten Workflows an, sodass Sie Variablen aus dem übergeordneten Workflow verbinden können. Was auch immer Sie zuordnen, wird zur Eingabeformular-Übermittlung des untergeordneten Workflows.
<Callout>
Benötigen Sie eine schnelle Ausführungsschaltfläche ohne Felder? Verwenden Sie einen manuellen Trigger. Wählen Sie Eingabeformular, wenn Sie Validierung und eine vorhersehbare Struktur wünschen.
</Callout>

View File

@@ -0,0 +1,41 @@
---
title: Manueller Auslöser
description: Führen Sie einen Workflow auf Anforderung ohne Eingaben aus
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Übersicht
Der manuelle Auslöser fügt einen einfachen Ausführen-Button am Anfang Ihres Workflows hinzu. Verwenden Sie ihn, wenn Sie den Workflow sofort ausführen möchten, ohne zusätzliche Daten zu sammeln.
## Funktionsweise
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/manual-run-light.png'
alt='Ausführen-Button für manuellen Auslöser'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
- Startet den Workflow mit dem aktiven Deployment-Snapshot
- Sendet keine Nutzlast nachgelagerte Blöcke sehen nur, was sie bereits konfiguriert haben
- Perfekt für schnelle Plausibilitätsprüfungen, Smoke-Tests oder Abläufe, die nur auf internen Variablen basieren
## Anwendungsfälle
- Starten Sie einen Workflow nach der Veröffentlichung eines neuen Deployments, um zu bestätigen, dass alles noch funktioniert
- Führen Sie Wartungsaufgaben aus, die keine externe Eingabe erfordern
- Lösen Sie untergeordnete Workflows aus, die nur Status- oder Umgebungsvariablen lesen
## Vergleich mit Eingabeformular
Benötigen Sie strukturierte Werte oder Typvalidierung zur Laufzeit? Wechseln Sie stattdessen zu einem Eingabeformular-Auslöser das Ausführungspanel sammelt diese Felder, bevor der Workflow startet.
<Callout>
Manuelle Auslöser-Ausführungen überschreiben nicht Ihren Deployment-Verlauf. Aktualisieren und stellen Sie neu bereit, wenn Canvas-Änderungen live gehen sollen.
</Callout>

View File

@@ -1,5 +1,5 @@
---
title: Starter
title: Starter (Veraltet)
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -7,6 +7,10 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
<Callout type="warning">
Der Starter-Block ist veraltet und wurde durch spezialisierte Core-Trigger ersetzt. Bitte beachten Sie die [Core-Trigger-Dokumentation](/triggers) für die neuen API-, Chat-, Eingabeformular-, Manuell-, Zeitplan- und Webhook-Trigger.
</Callout>
Der Starter-Block ermöglicht es Ihnen, die Workflow-Ausführung manuell mit Eingabeparametern zu starten und bietet zwei Eingabemodi: strukturierte Parameter oder konversationellen Chat.
<div className="flex justify-center">
@@ -23,7 +27,7 @@ Der Starter-Block ermöglicht es Ihnen, die Workflow-Ausführung manuell mit Ein
Wählen Sie Ihre Eingabemethode aus dem Dropdown-Menü:
<Tabs items={['Manual Mode', 'Chat Mode']}>
<Tabs items={['Manueller Modus', 'Chat-Modus']}>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
@@ -59,5 +63,5 @@ Wählen Sie Ihre Eingabemethode aus dem Dropdown-Menü:
Im Chat-Modus können Sie über spezielle Variablen auf Benutzereingaben und Konversationskontext zugreifen:
- **`<start.input>`** - Enthält den Nachrichtentext des Benutzers
- **`<start.conversationId>`** - Eindeutige Kennung für den Konversationsthread
- **`<start.files>`** - Array der vom Benutzer hochgeladenen Dateien (falls vorhanden)
- **`<start.conversationId>`** - Eindeutige Kennung für den Konversationsverlauf
- **`<start.files>`** - Array von Dateien, die vom Benutzer hochgeladen wurden (falls vorhanden)

View File

@@ -1,168 +1,40 @@
---
title: Flujo de trabajo
title: Bloque de flujo de trabajo
description: Ejecuta otro flujo de trabajo dentro del flujo actual
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
El bloque de Flujo de trabajo te permite ejecutar otros flujos de trabajo como componentes reutilizables dentro de tu flujo de trabajo actual. Esto permite un diseño modular, reutilización de código y la creación de flujos de trabajo complejos anidados que pueden componerse a partir de flujos de trabajo más pequeños y enfocados.
## Qué hace
<div className="flex justify-center">
<div className='flex justify-center my-6'>
<Image
src="/static/blocks/workflow.png"
alt="Bloque de Flujo de trabajo"
width={500}
height={350}
className="my-6"
src='/static/blocks/workflow.png'
alt='Configuración del bloque de flujo de trabajo'
width={400}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
<Callout type="info">
Los bloques de Flujo de trabajo permiten un diseño modular al permitirte componer flujos de trabajo complejos a partir de componentes más pequeños y reutilizables.
Coloca un bloque de Flujo de trabajo cuando quieras llamar a un flujo de trabajo secundario como parte de un flujo más grande. El bloque ejecuta la última versión implementada de ese flujo de trabajo, espera a que termine y luego continúa con el principal.
## Cómo configurarlo
1. **Elige un flujo de trabajo** del menú desplegable (las auto-referencias están bloqueadas para evitar bucles).
2. **Asigna entradas**: Si el flujo de trabajo secundario tiene un disparador de Formulario de entrada, verás cada campo y podrás conectar variables del principal. Los valores asignados son los que recibe el secundario.
3. **Salidas**: Después de que el secundario finaliza, el bloque expone:
- `result` la respuesta final del flujo de trabajo secundario
- `success` si se ejecutó sin errores
- `error` mensaje cuando la ejecución falla
## Notas de ejecución
- Los flujos de trabajo secundarios se ejecutan en el mismo contexto de espacio de trabajo, por lo que las variables de entorno y herramientas se mantienen.
- El bloque utiliza el versionado de implementación: cualquier ejecución de API, programación, webhook, manual o chat llama a la instantánea implementada. Vuelve a implementar el secundario cuando lo cambies.
- Si el secundario falla, el bloque genera un error a menos que lo gestiones posteriormente.
<Callout>
Mantén los flujos de trabajo secundarios enfocados. Los flujos pequeños y reutilizables facilitan su combinación sin crear anidamientos profundos.
</Callout>
## Descripción general
El bloque de Flujo de trabajo sirve como puente entre flujos de trabajo, permitiéndote:
<Steps>
<Step>
<strong>Reutilizar flujos de trabajo existentes</strong>: Ejecutar flujos de trabajo previamente creados como componentes dentro de nuevos flujos de trabajo
</Step>
<Step>
<strong>Crear diseños modulares</strong>: Desglosar procesos complejos en flujos de trabajo más pequeños y manejables
</Step>
<Step>
<strong>Mantener la separación de responsabilidades</strong>: Mantener diferentes lógicas de negocio aisladas en flujos de trabajo separados
</Step>
<Step>
<strong>Facilitar la colaboración en equipo</strong>: Compartir y reutilizar flujos de trabajo entre diferentes proyectos y miembros del equipo
</Step>
</Steps>
## Cómo funciona
El bloque de Flujo de trabajo:
1. Toma una referencia a otro flujo de trabajo en tu espacio de trabajo
2. Pasa datos de entrada desde el flujo de trabajo actual al flujo de trabajo hijo (disponible a través de start.input)
3. Ejecuta el flujo de trabajo hijo en un contexto aislado
4. Devuelve el resultado al flujo de trabajo padre para su posterior procesamiento
## Opciones de configuración
### Selección de flujo de trabajo
Elige qué flujo de trabajo ejecutar desde una lista desplegable de flujos de trabajo disponibles en tu espacio de trabajo. La lista incluye:
- Todos los flujos de trabajo a los que tienes acceso en el espacio de trabajo actual
- Flujos de trabajo compartidos contigo por otros miembros del equipo
- Tanto flujos de trabajo habilitados como deshabilitados (aunque solo los habilitados pueden ser ejecutados)
### Contexto de ejecución
El flujo de trabajo secundario se ejecuta con:
- Su propio contexto de ejecución aislado
- Acceso a los mismos recursos del espacio de trabajo (claves API, variables de entorno)
- Verificaciones adecuadas de permisos y membresía del espacio de trabajo
- Tracespan anidado en el registro de ejecución
<Callout type="warning">
**Detección de ciclos**: El sistema detecta y previene automáticamente dependencias circulares entre flujos de trabajo para evitar bucles infinitos.
</Callout>
## Entradas y salidas
<Tabs items={['Configuration', 'Variables', 'Results']}>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Selección de flujo de trabajo</strong>: Elige qué flujo de trabajo ejecutar
</li>
<li>
<strong>Datos de entrada</strong>: Variable o referencia de bloque para pasar al flujo de trabajo secundario
</li>
<li>
<strong>Contexto de ejecución</strong>: Entorno aislado con recursos del espacio de trabajo
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>workflow.success</strong>: Booleano que indica el estado de finalización
</li>
<li>
<strong>workflow.childWorkflowName</strong>: Nombre del flujo de trabajo secundario ejecutado
</li>
<li>
<strong>workflow.result</strong>: Resultado devuelto por el flujo de trabajo secundario
</li>
<li>
<strong>workflow.error</strong>: Detalles del error si el flujo de trabajo falló
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Respuesta del flujo de trabajo</strong>: Salida principal del flujo de trabajo secundario
</li>
<li>
<strong>Estado de ejecución</strong>: Estado de éxito e información de error
</li>
<li>
<strong>Acceso</strong>: Disponible en bloques después del flujo de trabajo
</li>
</ul>
</Tab>
</Tabs>
## Ejemplos de casos de uso
### Incorporación modular de clientes
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Escenario: Dividir la incorporación compleja en componentes reutilizables</h4>
<ol className="list-decimal pl-5 text-sm">
<li>El flujo de trabajo principal recibe datos del cliente</li>
<li>El bloque de flujo de trabajo ejecuta el flujo de validación</li>
<li>El bloque de flujo de trabajo ejecuta el flujo de configuración de cuenta</li>
<li>El bloque de flujo de trabajo ejecuta el flujo de correo de bienvenida</li>
</ol>
</div>
### Arquitectura de microservicios
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Escenario: Crear flujos de trabajo de servicios independientes</h4>
<ol className="list-decimal pl-5 text-sm">
<li>El flujo de trabajo de procesamiento de pagos gestiona transacciones</li>
<li>El flujo de trabajo de gestión de inventario actualiza el stock</li>
<li>El flujo de trabajo de notificaciones envía confirmaciones</li>
<li>El flujo de trabajo principal orquesta todos los servicios</li>
</ol>
</div>
### Procesamiento condicional
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Escenario: Ejecutar diferentes flujos de trabajo según condiciones</h4>
<ol className="list-decimal pl-5 text-sm">
<li>El bloque de condición evalúa el tipo de usuario</li>
<li>Usuarios empresariales → Flujo de trabajo de aprobación complejo</li>
<li>Usuarios estándar → Flujo de trabajo de aprobación simple</li>
<li>Usuarios gratuitos → Flujo de trabajo de procesamiento básico</li>
</ol>
</div>
## Mejores prácticas
- **Mantén los flujos de trabajo enfocados**: Diseña flujos de trabajo secundarios para manejar tareas específicas y bien definidas con entradas y salidas claras
- **Minimiza la profundidad de anidación**: Evita jerarquías de flujos de trabajo profundamente anidadas para mejorar la mantenibilidad y el rendimiento
- **Maneja los errores con elegancia**: Implementa un manejo adecuado de errores para fallos en flujos de trabajo secundarios y proporciona mecanismos alternativos
- **Prueba de forma independiente**: Asegúrate de que los flujos de trabajo secundarios puedan ser probados y validados independientemente de los flujos de trabajo principales
- **Usa nomenclatura semántica**: Asigna a los flujos de trabajo nombres descriptivos que indiquen claramente su propósito y funcionalidad

View File

@@ -4,6 +4,7 @@ title: Ejecución
import { Callout } from 'fumadocs-ui/components/callout'
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Image } from '@/components/ui/image'
El motor de ejecución de Sim da vida a tus flujos de trabajo procesando bloques en el orden correcto, gestionando el flujo de datos y manejando errores con elegancia, para que puedas entender exactamente cómo se ejecutan los flujos de trabajo en Sim.
@@ -89,6 +90,22 @@ El despliegue de chat crea una interfaz conversacional para tu flujo de trabajo:
Cada método de despliegue pasa datos al bloque inicial de tu flujo de trabajo, comenzando el flujo de ejecución.
## Instantáneas de despliegue
Todos los puntos de entrada públicos—API, Chat, Programación, Webhook y ejecuciones manuales—ejecutan la instantánea de despliegue activa del flujo de trabajo. Publica un nuevo despliegue cada vez que cambies el lienzo para que cada disparador utilice la versión actualizada.
<div className='flex justify-center my-6'>
<Image
src='/static/execution/deployment-versions-light.png'
alt='Tabla de versiones de despliegue'
width={500}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
El modal de Despliegue mantiene un historial completo de versiones—inspecciona cualquier instantánea, compárala con tu borrador, y promueve o revierte con un clic cuando necesites restaurar una versión anterior.
## Ejecución programática
Ejecuta flujos de trabajo desde tus aplicaciones usando nuestros SDK oficiales:
@@ -116,21 +133,21 @@ const result = await client.executeWorkflow('workflow-id', {
## Mejores prácticas
### Diseño para fiabilidad
### Diseña para la fiabilidad
- Maneja los errores con elegancia mediante rutas de respaldo apropiadas
- Usa variables de entorno para datos sensibles
- Añade registro en bloques de Función para depuración
- Añade registros a los bloques de Función para depuración
### Optimiza el rendimiento
- Minimiza las llamadas a API externas cuando sea posible
- Usa ejecución paralela para operaciones independientes
- Almacena en caché los resultados con bloques de Memoria cuando sea apropiado
- Almacena resultados en caché con bloques de Memoria cuando sea apropiado
### Monitorea las ejecuciones
- Revisa los registros regularmente para entender patrones de rendimiento
- Realiza seguimiento de costos para el uso de modelos de IA
- Haz seguimiento de los costos por uso de modelos de IA
- Usa instantáneas de flujo de trabajo para depurar problemas
## ¿Qué sigue?
Comienza con [Conceptos básicos de ejecución](/execution/basics) para entender cómo funcionan los flujos de trabajo, luego explora [Registro](/execution/logging) para monitorear tus ejecuciones y [Cálculo de costos](/execution/costs) para optimizar tu gasto.
Comienza con [Fundamentos de ejecución](/execution/basics) para entender cómo funcionan los flujos de trabajo, luego explora [Registro](/execution/logging) para monitorear tus ejecuciones y [Cálculo de costos](/execution/costs) para optimizar tu gasto.

View File

@@ -0,0 +1,60 @@
---
title: Disparador de API
description: Inicia un flujo de trabajo desde una solicitud HTTP autenticada
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Descripción general
El disparador de API expone tu flujo de trabajo como un punto de conexión HTTP seguro. Envía datos JSON al punto de conexión y tu flujo de trabajo los procesa inmediatamente. Las llamadas a la API siempre se ejecutan contra tu última implementación.
## Configurar formato de entrada
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/api-trigger-light.png'
alt='Formato de entrada del disparador de API'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Añade un campo de **Formato de entrada** para cada parámetro. Las claves de salida en tiempo de ejecución reflejan el esquema y también están disponibles bajo `<api.input>`.
```yaml
- type: string
name: userId
value: demo-user # optional manual test value
- type: number
name: maxTokens
```
Las ejecuciones manuales en el editor utilizan la columna `value` para que puedas realizar pruebas sin enviar una solicitud. Durante la ejecución, el resolutor completa tanto `<api.userId>` como `<api.input.userId>`.
## Ejemplo de solicitud
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{"userId":"demo-user","maxTokens":1024}'
```
Las respuestas exitosas devuelven el resultado de ejecución serializado del Ejecutor. Los errores muestran fallos de validación, autenticación o del flujo de trabajo.
## Referencia de salida
| Referencia | Descripción |
|-----------|-------------|
| `<api.field>` | Campo definido en el formato de entrada |
| `<api.input>` | Cuerpo completo estructurado de la solicitud |
Si no se define un formato de entrada, el ejecutor expone el JSON sin procesar solo en `<api.input>`.
<Callout type="warning">
Un flujo de trabajo puede contener solo un disparador de API. Publica una nueva implementación después de realizar cambios para que el punto de conexión se mantenga actualizado.
</Callout>

View File

@@ -0,0 +1,43 @@
---
title: Disparador de chat
description: Inicia un flujo de trabajo desde un despliegue de chat
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Descripción general
El disparador de Chat crea una interfaz conversacional para tu flujo de trabajo. Despliega tu flujo de trabajo como un chat y los usuarios pueden interactuar con él a través de una URL compartible. Cada mensaje inicia una nueva ejecución del flujo de trabajo utilizando tu último despliegue.
## Salidas en tiempo de ejecución
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/chat-trigger-light.png'
alt='Conversación de despliegue de chat'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
El disparador escribe tres campos que los bloques posteriores pueden referenciar:
| Referencia | Descripción |
|-----------|-------------|
| `<chat.input>` | Último mensaje del usuario |
| `<chat.conversationId>` | ID del hilo de conversación |
| `<chat.files>` | Archivos subidos opcionales |
Los archivos incluyen `name`, `mimeType`, y una descarga firmada `url`.
## Notas de uso
1. Añade un bloque de Disparador de Chat por flujo de trabajo.
2. Despliega el flujo de trabajo en modo chat.
3. Comparte el enlace de despliegue—cada respuesta reutiliza el ID de conversación para que el flujo de trabajo pueda mantener el contexto.
<Callout type="info">
El constructor bloquea múltiples bloques de Disparador de Chat en el mismo flujo de trabajo.
</Callout>

View File

@@ -0,0 +1,52 @@
---
title: Disparadores
description: Formas principales de iniciar flujos de trabajo de Sim
---
import { Card, Cards } from 'fumadocs-ui/components/card'
## Disparadores principales
Elige un disparador por flujo de trabajo para definir cómo comienza:
<Cards>
<Card title="API" href="/triggers/api">
Punto final HTTP que mapea cuerpos JSON a entradas de flujo de trabajo
</Card>
<Card title="Chat" href="/triggers/chat">
Interfaz de chat implementada con respuestas en streaming
</Card>
<Card title="Formulario de entrada" href="/triggers/input-form">
Entrada manual tipada utilizada en ejecuciones del editor y flujos de trabajo secundarios
</Card>
<Card title="Manual" href="/triggers/manual">
Ejecuciones bajo demanda sin datos adicionales
</Card>
<Card title="Programación" href="/triggers/schedule">
Ejecución basada en cron o intervalos
</Card>
<Card title="Webhook" href="/triggers/webhook">
Recibe cargas útiles de webhooks externos
</Card>
</Cards>
## Comparación rápida
| Disparador | Condición de inicio |
|---------|-----------------|
| **API** | POST HTTP autenticado |
| **Chat** | Mensaje de implementación de chat |
| **Formulario de entrada** | Al enviar manualmente en el editor o flujo de trabajo principal |
| **Manual** | Botón de ejecución en el editor |
| **Programación** | Temporizador gestionado en el modal de programación |
| **Webhook** | Al recibir una solicitud HTTP |
## Uso de disparadores
1. Coloca el bloque disparador en la ranura de inicio.
2. Configura cualquier esquema o autenticación requerida.
3. Conecta el bloque al resto del flujo de trabajo.
> Las implementaciones potencian cada disparador. Actualiza el flujo de trabajo, vuelve a implementarlo, y todos los puntos de entrada de disparadores recogen la nueva instantánea. Aprende más en [Ejecución → Instantáneas de implementación](/execution).
Los bloques de inicio heredados permanecen para flujos existentes pero ya no aparecen en nuevas compilaciones.

View File

@@ -0,0 +1,52 @@
---
title: Disparador de formulario de entrada
description: Disparador manual con un esquema de entrada estructurado
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Descripción general
Utiliza un disparador de formulario de entrada cuando un flujo de trabajo debe iniciarse desde el editor con campos tipados. El panel de ejecución muestra exactamente los campos que defines, por lo que el flujo de trabajo siempre recibe datos limpios.
## Lo que defines
Añade campos en el constructor de formato de entrada (texto, número, booleano, JSON, etc.). Para cada campo:
- El valor aparece como `<blockName.field>` en el flujo de trabajo.
- La carga completa se refleja en `<blockName.input>` para mayor comodidad.
Si dejas el formulario vacío, el disparador no tiene salidas.
## Ejecuciones manuales
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/input-form-panel-light.png'
alt='Panel de ejecución del formulario de entrada'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Cuando presionas Ejecutar en el editor, el panel muestra el formulario. Los valores enviados alimentan directamente la salida del disparador, por lo que los bloques posteriores pueden referenciarlos sin análisis adicional. Los números se convierten a números, los booleanos se convierten en verdadero/falso, y los campos JSON se analizan antes de que el flujo de trabajo los vea.
## Flujos de trabajo secundarios
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/workflow-input-mapping-light.png'
alt='Mapeo de entrada de flujo de trabajo'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Los disparadores de formulario de entrada también alimentan el bloque de flujo de trabajo. Cuando incrustas un flujo de trabajo secundario, el paso de mapeo muestra los campos del formulario secundario para que puedas conectar variables desde el padre. Todo lo que mapeas se convierte en el envío del formulario de entrada del flujo de trabajo secundario.
<Callout>
¿Necesitas un botón de ejecución rápida sin campos? Usa un disparador manual. Elige el formulario de entrada cuando quieras validación y una estructura predecible.
</Callout>

View File

@@ -0,0 +1,41 @@
---
title: Disparador manual
description: Ejecuta un flujo de trabajo bajo demanda sin entradas
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Descripción general
El disparador manual añade un simple botón Ejecutar en la parte superior de tu flujo de trabajo. Úsalo cuando quieras ejecutar el flujo de trabajo inmediatamente sin recopilar datos adicionales.
## Cómo funciona
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/manual-run-light.png'
alt='Botón de ejecución del disparador manual'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
- Inicia el flujo de trabajo utilizando la instantánea de despliegue activa
- No envía ninguna carga útil—los bloques posteriores solo ven lo que ya tienen configurado
- Perfecto para comprobaciones rápidas, pruebas de humo o flujos que solo dependen de variables internas
## Cuándo usarlo
- Inicia un flujo de trabajo después de publicar un nuevo despliegue para confirmar que todo sigue funcionando
- Ejecuta tareas de mantenimiento que no requieren entrada externa
- Activa flujos de trabajo secundarios que solo leen estado o variables de entorno
## Comparación con el formulario de entrada
¿Necesitas valores estructurados o validación de tipos en tiempo de ejecución? Cambia a un disparador de formulario de entrada en su lugar—el panel de ejecución recopilará esos campos antes de que comience el flujo de trabajo.
<Callout>
Las ejecuciones del disparador manual no sobrescriben tu historial de despliegue. Actualiza y vuelve a desplegar cuando los cambios en el lienzo necesiten entrar en producción.
</Callout>

View File

@@ -1,5 +1,5 @@
---
title: Starter
title: Starter (Obsoleto)
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -7,12 +7,16 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
<Callout type="warning">
El bloque Starter ha quedado obsoleto y ha sido reemplazado por Disparadores Core más especializados. Consulta la [documentación de Disparadores Core](/triggers) para conocer la nueva API y los disparadores de Chat, Formulario de entrada, Manual, Programación y Webhook.
</Callout>
El bloque Starter te permite iniciar manualmente la ejecución del flujo de trabajo con parámetros de entrada, ofreciendo dos modos de entrada: parámetros estructurados o chat conversacional.
<div className="flex justify-center">
<Image
src="/static/starter.png"
alt="Bloque Starter con opciones de modo manual y modo chat"
alt="Bloque Starter con opciones de modo Manual y Chat"
width={500}
height={400}
className="my-6"
@@ -23,7 +27,7 @@ El bloque Starter te permite iniciar manualmente la ejecución del flujo de trab
Elige tu método de entrada desde el menú desplegable:
<Tabs items={['Manual Mode', 'Chat Mode']}>
<Tabs items={['Modo Manual', 'Modo Chat']}>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
@@ -35,7 +39,7 @@ Elige tu método de entrada desde el menú desplegable:
<Video src="input-format.mp4" width={700} height={450} />
</div>
<p className="text-sm text-gray-600">Configura parámetros de entrada que estarán disponibles al implementar como un punto final de API.</p>
<p className="text-sm text-gray-600">Configura parámetros de entrada que estarán disponibles al implementar como un punto de conexión API.</p>
</div>
</Tab>
<Tab>
@@ -54,7 +58,7 @@ Elige tu método de entrada desde el menú desplegable:
</Tab>
</Tabs>
## Uso de variables de chat
## Uso de variables de Chat
En el modo Chat, accede a la entrada del usuario y al contexto de la conversación a través de variables especiales:

View File

@@ -1,168 +1,40 @@
---
title: Flux de travail
title: Bloc de flux de travail
description: Exécuter un autre flux de travail à l'intérieur du flux actuel
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
Le bloc Flux de travail vous permet d'exécuter d'autres flux de travail comme composants réutilisables au sein de votre flux de travail actuel. Cela permet une conception modulaire, la réutilisation du code et la création de flux de travail imbriqués complexes qui peuvent être composés à partir de flux de travail plus petits et ciblés.
## Ce qu'il fait
<div className="flex justify-center">
<div className='flex justify-center my-6'>
<Image
src="/static/blocks/workflow.png"
alt="Bloc de flux de travail"
width={500}
height={350}
className="my-6"
src='/static/blocks/workflow.png'
alt='Configuration du bloc de flux de travail'
width={400}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
<Callout type="info">
Les blocs de flux de travail permettent une conception modulaire en vous permettant de composer des flux de travail complexes à partir de composants plus petits et réutilisables.
Déposez un bloc de flux de travail lorsque vous souhaitez appeler un flux de travail enfant dans le cadre d'un flux plus large. Le bloc exécute la dernière version déployée de ce flux de travail, attend qu'il se termine, puis continue avec le parent.
## Comment le configurer
1. **Choisissez un flux de travail** dans le menu déroulant (les auto-références sont bloquées pour éviter les boucles).
2. **Mappez les entrées** : si le flux de travail enfant a un déclencheur de formulaire d'entrée, vous verrez chaque champ et pourrez connecter les variables parentes. Les valeurs mappées sont ce que l'enfant reçoit.
3. **Sorties** : une fois que l'enfant a terminé, le bloc expose :
- `result` la réponse finale du flux de travail enfant
- `success` s'il s'est exécuté sans erreurs
- `error` message lorsque l'exécution échoue
## Notes d'exécution
- Les flux de travail enfants s'exécutent dans le même contexte d'espace de travail, donc les variables d'environnement et les outils sont conservés.
- Le bloc utilise le versionnement des déploiements : toute exécution API, planifiée, webhook, manuelle ou par chat appelle l'instantané déployé. Redéployez l'enfant lorsque vous le modifiez.
- Si l'enfant échoue, le bloc génère une erreur, sauf si vous la gérez en aval.
<Callout>
Gardez les flux de travail enfants ciblés. Des flux petits et réutilisables facilitent leur combinaison sans créer d'imbrication profonde.
</Callout>
## Aperçu
Le bloc Flux de travail sert de pont entre les flux de travail, vous permettant de :
<Steps>
<Step>
<strong>Réutiliser des flux de travail existants</strong> : exécuter des flux de travail précédemment créés comme composants dans de nouveaux flux de travail
</Step>
<Step>
<strong>Créer des conceptions modulaires</strong> : décomposer des processus complexes en flux de travail plus petits et gérables
</Step>
<Step>
<strong>Maintenir la séparation des préoccupations</strong> : garder différentes logiques métier isolées dans des flux de travail séparés
</Step>
<Step>
<strong>Permettre la collaboration d'équipe</strong> : partager et réutiliser des flux de travail entre différents projets et membres d'équipe
</Step>
</Steps>
## Comment ça fonctionne
Le bloc Flux de travail :
1. Prend une référence à un autre flux de travail dans votre espace de travail
2. Transmet les données d'entrée du flux de travail actuel au flux de travail enfant (disponibles via start.input)
3. Exécute le flux de travail enfant dans un contexte isolé
4. Renvoie le résultat au flux de travail parent pour un traitement ultérieur
## Options de configuration
### Sélection du flux de travail
Choisissez quel flux de travail exécuter à partir d'une liste déroulante des flux de travail disponibles dans votre espace de travail. La liste comprend :
- Tous les flux de travail auxquels vous avez accès dans l'espace de travail actuel
- Les flux de travail partagés avec vous par d'autres membres de l'équipe
- Les flux de travail activés et désactivés (bien que seuls les flux de travail activés puissent être exécutés)
### Contexte d'exécution
Le workflow enfant s'exécute avec :
- Son propre contexte d'exécution isolé
- Accès aux mêmes ressources de l'espace de travail (clés API, variables d'environnement)
- Vérifications appropriées d'appartenance et de permissions de l'espace de travail
- Segment de trace imbriqué dans le journal d'exécution
<Callout type="warning">
**Détection de cycles** : Le système détecte et empêche automatiquement les dépendances circulaires entre les workflows pour éviter les boucles infinies.
</Callout>
## Entrées et sorties
<Tabs items={['Configuration', 'Variables', 'Résultats']}>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Sélection du workflow</strong> : Choisir quel workflow exécuter
</li>
<li>
<strong>Données d'entrée</strong> : Variable ou référence de bloc à transmettre au workflow enfant
</li>
<li>
<strong>Contexte d'exécution</strong> : Environnement isolé avec les ressources de l'espace de travail
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>workflow.success</strong> : Booléen indiquant le statut d'achèvement
</li>
<li>
<strong>workflow.childWorkflowName</strong> : Nom du workflow enfant exécuté
</li>
<li>
<strong>workflow.result</strong> : Résultat renvoyé par le workflow enfant
</li>
<li>
<strong>workflow.error</strong> : Détails de l'erreur si le workflow a échoué
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>Réponse du workflow</strong> : Sortie principale du workflow enfant
</li>
<li>
<strong>Statut d'exécution</strong> : Statut de réussite et informations d'erreur
</li>
<li>
<strong>Accès</strong> : Disponible dans les blocs après le workflow
</li>
</ul>
</Tab>
</Tabs>
## Exemples de cas d'utilisation
### Intégration modulaire des clients
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scénario : Décomposer une intégration complexe en composants réutilisables</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Le workflow principal reçoit les données client</li>
<li>Le bloc workflow exécute le workflow de validation</li>
<li>Le bloc workflow exécute le workflow de configuration du compte</li>
<li>Le bloc workflow exécute le workflow d'e-mail de bienvenue</li>
</ol>
</div>
### Architecture de microservices
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scénario : Créer des workflows de services indépendants</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Le workflow de traitement des paiements gère les transactions</li>
<li>Le workflow de gestion des stocks met à jour l'inventaire</li>
<li>Le workflow de notification envoie les confirmations</li>
<li>Le workflow principal orchestre tous les services</li>
</ol>
</div>
### Traitement conditionnel
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">Scénario : exécuter différents workflows selon les conditions</h4>
<ol className="list-decimal pl-5 text-sm">
<li>Le bloc de condition évalue le type d'utilisateur</li>
<li>Utilisateurs entreprise → Workflow d'approbation complexe</li>
<li>Utilisateurs standard → Workflow d'approbation simple</li>
<li>Utilisateurs gratuits → Workflow de traitement basique</li>
</ol>
</div>
## Bonnes pratiques
- **Gardez les workflows ciblés** : concevez des workflows enfants pour gérer des tâches spécifiques et bien définies avec des entrées et sorties claires
- **Minimisez la profondeur d'imbrication** : évitez les hiérarchies de workflow profondément imbriquées pour une meilleure maintenabilité et performance
- **Gérez les erreurs avec élégance** : implémentez une gestion d'erreurs appropriée pour les échecs de workflows enfants et prévoyez des mécanismes de secours
- **Testez indépendamment** : assurez-vous que les workflows enfants peuvent être testés et validés indépendamment des workflows parents
- **Utilisez une nomenclature sémantique** : donnez aux workflows des noms descriptifs qui indiquent clairement leur objectif et leur fonctionnalité

View File

@@ -4,6 +4,7 @@ title: Exécution
import { Callout } from 'fumadocs-ui/components/callout'
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Image } from '@/components/ui/image'
Le moteur d'exécution de Sim donne vie à vos flux de travail en traitant les blocs dans le bon ordre, en gérant le flux de données et en traitant les erreurs avec élégance, afin que vous puissiez comprendre exactement comment les flux de travail sont exécutés dans Sim.
@@ -89,6 +90,22 @@ Le déploiement en tant que Chat crée une interface conversationnelle pour votr
Chaque méthode de déploiement transmet des données au bloc de démarrage de votre workflow, initiant ainsi le flux d'exécution.
## Instantanés de déploiement
Tous les points d'entrée publics — API, Chat, Planification, Webhook et exécutions manuelles — exécutent l'instantané de déploiement actif du workflow. Publiez un nouveau déploiement chaque fois que vous modifiez le canevas afin que chaque déclencheur utilise la version mise à jour.
<div className='flex justify-center my-6'>
<Image
src='/static/execution/deployment-versions-light.png'
alt='Tableau des versions de déploiement'
width={500}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
La fenêtre de déploiement conserve un historique complet des versions — inspectez n'importe quel instantané, comparez-le à votre brouillon, et promouvez ou revenez en arrière en un clic lorsque vous devez restaurer une version antérieure.
## Exécution programmatique
Exécutez des workflows depuis vos applications en utilisant nos SDK officiels :
@@ -122,7 +139,7 @@ const result = await client.executeWorkflow('workflow-id', {
- Ajoutez des journalisations aux blocs de fonction pour le débogage
### Optimisation des performances
- Minimisez les appels API externes lorsque c'est possible
- Minimisez les appels API externes lorsque possible
- Utilisez l'exécution parallèle pour les opérations indépendantes
- Mettez en cache les résultats avec des blocs de mémoire lorsque c'est approprié
@@ -131,6 +148,6 @@ const result = await client.executeWorkflow('workflow-id', {
- Suivez les coûts d'utilisation des modèles d'IA
- Utilisez des instantanés de workflow pour déboguer les problèmes
## Quelle est la suite ?
## Et ensuite ?
Commencez par les [Principes fondamentaux d'exécution](/execution/basics) pour comprendre comment les workflows s'exécutent, puis explorez la [Journalisation](/execution/logging) pour surveiller vos exécutions et le [Calcul des coûts](/execution/costs) pour optimiser vos dépenses.
Commencez par les [Principes de base de l'exécution](/execution/basics) pour comprendre comment les workflows s'exécutent, puis explorez la [Journalisation](/execution/logging) pour surveiller vos exécutions et le [Calcul des coûts](/execution/costs) pour optimiser vos dépenses.

View File

@@ -0,0 +1,60 @@
---
title: Déclencheur d'API
description: Démarrez un flux de travail à partir d'une requête HTTP authentifiée
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Aperçu
Le déclencheur d'API expose votre flux de travail en tant que point de terminaison HTTP sécurisé. Envoyez des données JSON au point de terminaison et votre flux de travail les traite immédiatement. Les appels API s'exécutent toujours sur votre dernier déploiement.
## Configurer le format d'entrée
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/api-trigger-light.png'
alt="Format d'entrée du déclencheur d'API"
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Ajoutez un champ **Format d'entrée** pour chaque paramètre. Les clés de sortie d'exécution reflètent le schéma et sont également disponibles sous `<api.input>`.
```yaml
- type: string
name: userId
value: demo-user # optional manual test value
- type: number
name: maxTokens
```
Les exécutions manuelles dans l'éditeur utilisent la colonne `value` pour que vous puissiez tester sans envoyer de requête. Pendant l'exécution, le résolveur remplit à la fois `<api.userId>` et `<api.input.userId>`.
## Exemple de requête
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{"userId":"demo-user","maxTokens":1024}'
```
Les réponses réussies renvoient le résultat d'exécution sérialisé de l'Exécuteur. Les erreurs révèlent des problèmes de validation, d'authentification ou d'échec du flux de travail.
## Référence de sortie
| Référence | Description |
|-----------|-------------|
| `<api.field>` | Champ défini dans le Format d'entrée |
| `<api.input>` | Corps de la requête structuré complet |
Si aucun Format d'entrée n'est défini, l'exécuteur expose le JSON brut uniquement à `<api.input>`.
<Callout type="warning">
Un flux de travail ne peut contenir qu'un seul déclencheur d'API. Publiez un nouveau déploiement après les modifications pour que le point de terminaison reste à jour.
</Callout>

View File

@@ -0,0 +1,43 @@
---
title: Déclencheur de chat
description: Démarrer un flux de travail à partir d'un déploiement de chat
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Aperçu
Le déclencheur de chat crée une interface conversationnelle pour votre flux de travail. Déployez votre flux de travail sous forme de chat et les utilisateurs peuvent interagir avec lui via une URL partageable. Chaque message démarre une nouvelle exécution du flux de travail en utilisant votre dernier déploiement.
## Sorties d'exécution
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/chat-trigger-light.png'
alt='Conversation de déploiement de chat'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Le déclencheur écrit trois champs que les blocs en aval peuvent référencer :
| Référence | Description |
|-----------|-------------|
| `<chat.input>` | Dernier message de l'utilisateur |
| `<chat.conversationId>` | ID du fil de conversation |
| `<chat.files>` | Fichiers téléchargés optionnels |
Les fichiers incluent `name`, `mimeType`, et un `url` signé.
## Notes d'utilisation
1. Ajoutez un bloc Déclencheur de chat par flux de travail.
2. Déployez le flux de travail en mode chat.
3. Partagez le lien de déploiement — chaque réponse réutilise l'ID de conversation pour que le flux de travail puisse conserver le contexte.
<Callout type="info">
Le constructeur bloque plusieurs blocs Déclencheur de chat dans le même flux de travail.
</Callout>

View File

@@ -0,0 +1,52 @@
---
title: Déclencheurs
description: Méthodes principales pour démarrer les workflows Sim
---
import { Card, Cards } from 'fumadocs-ui/components/card'
## Déclencheurs principaux
Choisissez un déclencheur par workflow pour définir comment il démarre :
<Cards>
<Card title="API" href="/triggers/api">
Point de terminaison HTTP qui transforme les corps JSON en entrées de workflow
</Card>
<Card title="Chat" href="/triggers/chat">
Interface de chat déployée avec réponses en streaming
</Card>
<Card title="Formulaire d'entrée" href="/triggers/input-form">
Saisie manuelle typée utilisée dans les exécutions d'éditeur et les workflows enfants
</Card>
<Card title="Manuel" href="/triggers/manual">
Exécutions à la demande sans données supplémentaires
</Card>
<Card title="Planification" href="/triggers/schedule">
Exécution basée sur cron ou intervalle
</Card>
<Card title="Webhook" href="/triggers/webhook">
Réception de charges utiles webhook externes
</Card>
</Cards>
## Comparaison rapide
| Déclencheur | Condition de démarrage |
|---------|-----------------|
| **API** | POST HTTP authentifié |
| **Chat** | Message de déploiement de chat |
| **Formulaire d'entrée** | À la soumission manuelle dans l'éditeur ou le workflow parent |
| **Manuel** | Bouton d'exécution dans l'éditeur |
| **Planification** | Minuteur géré dans la fenêtre de planification |
| **Webhook** | À la réception d'une requête HTTP entrante |
## Utilisation des déclencheurs
1. Déposez le bloc déclencheur dans l'emplacement de départ.
2. Configurez tout schéma ou authentification requis.
3. Connectez le bloc au reste du workflow.
> Les déploiements alimentent chaque déclencheur. Mettez à jour le workflow, redéployez, et tous les points d'entrée des déclencheurs récupèrent le nouveau snapshot. En savoir plus dans [Exécution → Snapshots de déploiement](/execution).
Les anciens blocs de démarrage restent disponibles pour les flux existants mais n'apparaissent plus dans les nouvelles versions.

View File

@@ -0,0 +1,52 @@
---
title: Déclencheur de formulaire d'entrée
description: Déclencheur manuel avec un schéma d'entrée structuré
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Aperçu
Utilisez un déclencheur de formulaire d'entrée lorsqu'un flux de travail doit démarrer depuis l'éditeur avec des champs typés. Le panneau d'exécution affiche exactement les champs que vous définissez, ainsi le flux de travail reçoit toujours des données propres.
## Ce que vous définissez
Ajoutez des champs dans le constructeur de format d'entrée (texte, nombre, booléen, JSON, etc.). Pour chaque champ :
- La valeur apparaît comme `<blockName.field>` dans le flux de travail.
- La charge utile complète est reflétée à `<blockName.input>` pour plus de commodité.
Si vous laissez le formulaire vide, le déclencheur n'a pas de sorties.
## Exécutions manuelles
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/input-form-panel-light.png'
alt='Panneau d'exécution du formulaire d'entrée'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Lorsque vous appuyez sur Exécuter dans l'éditeur, le panneau affiche le formulaire. Les valeurs soumises alimentent directement la sortie du déclencheur, ainsi les blocs en aval peuvent y faire référence sans analyse supplémentaire. Les nombres sont convertis en nombres, les booléens deviennent vrai/faux, et les champs JSON sont analysés avant que le flux de travail ne les voie.
## Flux de travail enfants
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/workflow-input-mapping-light.png'
alt='Mappage des entrées du flux de travail'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
Les déclencheurs de formulaire d'entrée alimentent également le bloc Flux de travail. Lorsque vous intégrez un flux de travail enfant, l'étape de mappage affiche les champs du formulaire enfant afin que vous puissiez connecter des variables depuis le parent. Tout ce que vous mappez devient la soumission du formulaire d'entrée du flux de travail enfant.
<Callout>
Besoin d'un bouton d'exécution rapide sans champs ? Utilisez un déclencheur manuel. Choisissez le formulaire d'entrée lorsque vous voulez une validation et une structure prévisible.
</Callout>

View File

@@ -0,0 +1,41 @@
---
title: Déclenchement manuel
description: Exécuter un workflow à la demande sans entrées
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## Aperçu
Le déclencheur manuel ajoute un simple bouton Exécuter en haut de votre workflow. Utilisez-le lorsque vous souhaitez exécuter le workflow immédiatement sans collecter de données supplémentaires.
## Comment ça fonctionne
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/manual-run-light.png'
alt='Bouton d'exécution du déclencheur manuel'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
- Lance le workflow en utilisant l'instantané du déploiement actif
- N'envoie aucune charge utile — les blocs en aval ne voient que ce qu'ils ont déjà configuré
- Parfait pour des vérifications rapides, des tests de fumée ou des flux qui ne dépendent que de variables internes
## Quand l'utiliser
- Démarrer un workflow après avoir publié un nouveau déploiement pour confirmer que tout fonctionne toujours
- Exécuter des tâches de maintenance qui ne nécessitent pas d'entrée externe
- Déclencher des workflows enfants qui lisent uniquement l'état ou les variables d'environnement
## Comparé au formulaire d'entrée
Besoin de valeurs structurées ou de validation de type à l'exécution ? Passez plutôt à un déclencheur de formulaire d'entrée — le panneau d'exécution collectera ces champs avant le démarrage du workflow.
<Callout>
Les exécutions de déclenchement manuel ne remplacent pas votre historique de déploiement. Mettez à jour et redéployez chaque fois que des modifications du canevas doivent être mises en production.
</Callout>

View File

@@ -1,5 +1,5 @@
---
title: Starter
title: Starter (Obsolète)
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -7,12 +7,16 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
Le bloc Starter vous permet de lancer manuellement l'exécution d'un workflow avec des paramètres d'entrée, offrant deux modes de saisie : des paramètres structurés ou une conversation par chat.
<Callout type="warning">
Le bloc Starter est obsolète et a été remplacé par des déclencheurs Core plus spécialisés. Veuillez consulter la [documentation des déclencheurs Core](/triggers) pour les nouveaux déclencheurs API, Chat, Formulaire d'entrée, Manuel, Planification et Webhook.
</Callout>
Le bloc Starter vous permet de lancer manuellement l'exécution d'un flux de travail avec des paramètres d'entrée, offrant deux modes d'entrée : des paramètres structurés ou une conversation par chat.
<div className="flex justify-center">
<Image
src="/static/starter.png"
alt="Bloc Starter avec options de mode manuel et mode chat"
alt="Bloc Starter avec options de mode manuel et chat"
width={500}
height={400}
className="my-6"
@@ -21,14 +25,14 @@ Le bloc Starter vous permet de lancer manuellement l'exécution d'un workflow av
## Modes d'exécution
Choisissez votre méthode de saisie dans le menu déroulant :
Choisissez votre méthode d'entrée dans le menu déroulant :
<Tabs items={['Mode manuel', 'Mode chat']}>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
<li><strong>Entrées structurées compatibles API</strong> : définissez des paramètres spécifiques (texte, nombre, booléen, JSON, fichier, date)</li>
<li><strong>Test pendant la construction de votre workflow</strong> : itération rapide lors du débogage des workflows</li>
<li><strong>Test pendant la construction de votre flux de travail</strong> : itération rapide lors du débogage des flux de travail</li>
</ul>
<div className="mx-auto w-full overflow-hidden rounded-lg">
@@ -42,21 +46,21 @@ Choisissez votre méthode de saisie dans le menu déroulant :
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
<li><strong>Langage naturel</strong> : les utilisateurs tapent des questions ou des demandes</li>
<li><strong>Conversationnel</strong> : idéal pour les workflows alimentés par l'IA</li>
<li><strong>Conversationnel</strong> : idéal pour les flux de travail alimentés par l'IA</li>
</ul>
<div className="mx-auto w-full overflow-hidden rounded-lg">
<Video src="chat-input.mp4" width={700} height={450} />
</div>
<p className="text-sm text-gray-600">Discutez avec votre workflow et accédez au texte saisi, à l'ID de conversation et aux fichiers téléchargés pour des réponses contextuelles.</p>
<p className="text-sm text-gray-600">Discutez avec votre flux de travail et accédez au texte saisi, à l'identifiant de conversation et aux fichiers téléchargés pour des réponses contextuelles.</p>
</div>
</Tab>
</Tabs>
## Utilisation des variables de chat
En mode Chat, accédez aux entrées utilisateur et au contexte de la conversation grâce à des variables spéciales :
En mode Chat, accédez aux entrées utilisateur et au contexte de conversation via des variables spéciales :
- **`<start.input>`** - Contient le texte du message de l'utilisateur
- **`<start.conversationId>`** - Identifiant unique pour le fil de conversation

View File

@@ -1,168 +1,40 @@
---
title: ワークフロー
title: ワークフローブロック
description: 現在のフロー内で別のワークフローを実行する
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
ワークフローブロックを使用すると、現在のワークフロー内で他のワークフローを再利用可能なコンポーネントとして実行できます。これにより、モジュール式の設計、コードの再利用、そして小規模で焦点を絞ったワークフローから構成される複雑なネストされたワークフローの作成が可能になります。
## 機能
<div className="flex justify-center">
<div className='flex justify-center my-6'>
<Image
src="/static/blocks/workflow.png"
alt="ワークフローブロック"
width={500}
height={350}
className="my-6"
src='/static/blocks/workflow.png'
alt='ワークフローブロックの設定'
width={400}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
<Callout type="info">
ワークフローブロックは、小規模で再利用可能なコンポーネントから複雑なワークフローを構成できるようにすることで、モジュール式の設計を可能にします。
より大きなフローの一部として子ワークフローを呼び出したい場合は、ワークフローブロックをドロップします。このブロックは、そのワークフローの最新デプロイバージョンを実行し、完了するまで待機してから、親ワークフローを続行します。
## 設定方法
1. **ワークフローを選択** ドロップダウンから選びます(ループを防ぐため自己参照はブロックされています)。
2. **入力のマッピング**: 子ワークフローに入力フォームトリガーがある場合、各フィールドが表示され、親変数を接続できます。マッピングされた値が子ワークフローが受け取る内容になります。
3. **出力**: 子ワークフローが完了すると、ブロックは以下を公開します:
- `result` 子ワークフローの最終応答
- `success` エラーなく実行されたかどうか
- `error` 実行が失敗した場合のメッセージ
## 実行に関する注意点
- 子ワークフローは同じワークスペースコンテキストで実行されるため、環境変数とツールは引き継がれます。
- このブロックはデプロイメントバージョニングを使用しますAPI、スケジュール、Webhook、手動、またはチャット実行はデプロイされたスナップショットを呼び出します。子ワークフローを変更した場合は再デプロイしてください。
- 子ワークフローが失敗すると、下流で処理しない限り、ブロックはエラーを発生させます。
<Callout>
子ワークフローは焦点を絞ったものにしましょう。小さく再利用可能なフローにすることで、深いネストを作らずに組み合わせやすくなります。
</Callout>
## 概要
ワークフローブロックはワークフロー間の橋渡しとして機能し、以下のことを可能にします:
<Steps>
<Step>
<strong>既存のワークフローを再利用する</strong>:以前に作成したワークフローを新しいワークフロー内のコンポーネントとして実行する
</Step>
<Step>
<strong>モジュール式の設計を作成する</strong>:複雑なプロセスを小さく管理しやすいワークフローに分解する
</Step>
<Step>
<strong>関心の分離を維持する</strong>:異なるビジネスロジックを別々のワークフローに分離して保持する
</Step>
<Step>
<strong>チームコラボレーションを可能にする</strong>:異なるプロジェクトやチームメンバー間でワークフローを共有し再利用する
</Step>
</Steps>
## 動作の仕組み
ワークフローブロックは:
1. ワークスペース内の別のワークフローへの参照を取得します
2. 現在のワークフローから子ワークフローに入力データを渡しますstart.inputを通じて利用可能
3. 子ワークフローを分離されたコンテキストで実行します
4. 結果を親ワークフローに返して、さらに処理を行います
## 設定オプション
### ワークフローの選択
ワークスペースで利用可能なワークフローのドロップダウンリストから実行するワークフローを選択します。リストには以下が含まれます:
- 現在のワークスペースでアクセスできるすべてのワークフロー
- チームの他のメンバーから共有されたワークフロー
- 有効および無効の両方のワークフロー(ただし実行できるのは有効なワークフローのみ)
### 実行コンテキスト
子ワークフローは以下の条件で実行されます:
- 独自の分離された実行コンテキスト
- 同じワークスペースリソースAPIキー、環境変数へのアクセス
- 適切なワークスペースメンバーシップと権限チェック
- 実行ログ内のネストされたトレーススパン
<Callout type="warning">
**循環検出**: システムは自動的にワークフロー間の循環依存関係を検出し、無限ループを防止します。
</Callout>
## 入力と出力
<Tabs items={['Configuration', 'Variables', 'Results']}>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>ワークフロー選択</strong>: 実行するワークフローを選択
</li>
<li>
<strong>入力データ</strong>: 子ワークフローに渡す変数またはブロック参照
</li>
<li>
<strong>実行コンテキスト</strong>: ワークスペースリソースを持つ分離環境
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>workflow.success</strong>: 完了ステータスを示すブール値
</li>
<li>
<strong>workflow.childWorkflowName</strong>: 実行された子ワークフローの名前
</li>
<li>
<strong>workflow.result</strong>: 子ワークフローから返された結果
</li>
<li>
<strong>workflow.error</strong>: ワークフローが失敗した場合のエラー詳細
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>ワークフローレスポンス</strong>: 子ワークフローからの主要な出力
</li>
<li>
<strong>実行ステータス</strong>: 成功ステータスとエラー情報
</li>
<li>
<strong>アクセス</strong>: ワークフロー後のブロックで利用可能
</li>
</ul>
</Tab>
</Tabs>
## 使用例
### モジュール式顧客オンボーディング
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">シナリオ: 複雑なオンボーディングを再利用可能なコンポーネントに分解</h4>
<ol className="list-decimal pl-5 text-sm">
<li>メインワークフローが顧客データを受信</li>
<li>ワークフローブロックが検証ワークフローを実行</li>
<li>ワークフローブロックがアカウント設定ワークフローを実行</li>
<li>ワークフローブロックが歓迎メールワークフローを実行</li>
</ol>
</div>
### マイクロサービスアーキテクチャ
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">シナリオ: 独立したサービスワークフローを作成</h4>
<ol className="list-decimal pl-5 text-sm">
<li>決済処理ワークフローがトランザクションを処理</li>
<li>在庫管理ワークフローが在庫を更新</li>
<li>通知ワークフローが確認を送信</li>
<li>メインワークフローがすべてのサービスを調整</li>
</ol>
</div>
### 条件付き処理
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">シナリオ:条件に基づいて異なるワークフローを実行する</h4>
<ol className="list-decimal pl-5 text-sm">
<li>条件ブロックがユーザータイプを評価</li>
<li>エンタープライズユーザー → 複雑な承認ワークフロー</li>
<li>標準ユーザー → シンプルな承認ワークフロー</li>
<li>無料ユーザー → 基本的な処理ワークフロー</li>
</ol>
</div>
## ベストプラクティス
- **ワークフローを集中させる**:子ワークフローは明確な入力と出力を持つ特定の、明確に定義されたタスクを処理するように設計する
- **ネストの深さを最小限に抑える**:保守性とパフォーマンスを向上させるため、深くネストされたワークフロー階層を避ける
- **エラーを適切に処理する**:子ワークフローの失敗に対する適切なエラー処理を実装し、フォールバックメカニズムを提供する
- **独立してテストする**:子ワークフローが親ワークフローから独立してテストおよび検証できることを確認する
- **セマンティックな命名を使用する**:ワークフローには目的と機能を明確に示す説明的な名前を付ける

View File

@@ -4,6 +4,7 @@ title: 実行
import { Callout } from 'fumadocs-ui/components/callout'
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Image } from '@/components/ui/image'
Simの実行エンジンは、ブロックを正しい順序で処理し、データフローを管理し、エラーを適切に処理することで、ワークフローに命を吹き込みます。これにより、Simでワークフローがどのように実行されるかを正確に理解することができます。
@@ -88,9 +89,25 @@ curl -X POST https://sim.ai/api/workflows/your-workflow-id/execute \
各デプロイメント方法はデータをワークフローのスターターブロックに渡し、実行フローを開始します。
## デプロイメントスナップショット
すべての公開エントリーポイントAPI、チャット、スケジュール、Webhook、手動実行は、ワークフローのアクティブなデプロイメントスナップショットを実行します。キャンバスを変更するたびに新しいデプロイメントを公開することで、すべてのトリガーが更新されたバージョンを使用するようになります。
<div className='flex justify-center my-6'>
<Image
src='/static/execution/deployment-versions-light.png'
alt='デプロイメントバージョン一覧表'
width={500}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
デプロイモーダルは完全なバージョン履歴を保持しています。任意のスナップショットを検査し、ドラフトと比較して、必要に応じてワンクリックで昇格またはロールバックし、以前のリリースを復元することができます。
## プログラムによる実行
公式SDKを使用してアプリケーションからワークフローを実行ます:
公式SDKを使用してアプリケーションからワークフローを実行できます:
```bash
# TypeScript/JavaScript
@@ -118,18 +135,18 @@ const result = await client.executeWorkflow('workflow-id', {
### 信頼性を考慮した設計
- 適切なフォールバックパスでエラーを適切に処理する
- 機密データには環境変数を使用する
- デバッグ用に関数ブロックにログを追加する
- デバッグ用にFunction関数ブロックにログ記録を追加する
### パフォーマンスの最適化
- 可能な限り外部APIコールを最小限に抑える
- 独立した操作には並列実行を使用する
- 適切な場合はメモリブロックで結果をキャッシュする
- 適切な場合はMemoryメモリー)ブロックで結果をキャッシュする
### 実行の監視
- パフォーマンスパターンを理解するために定期的にログを確認する
- AIモデル使用のコストを追跡する
- 問題をデバッグするためにワークフロースナップショットを使用する
## 次のステップは?
## 次のステップ
[実行の基本](/execution/basics)からスタートしてワークフローの実行方法を理解し、次に[ログ記録](/execution/logging)で実行状況を監視し、[コスト計算](/execution/costs)で支出を最適化する方法を探りましょう。
[実行の基本](/execution/basics)からスタートしてワークフローの実行方法を理解し、[ログ記録](/execution/logging)で実行を監視し、[コスト計算](/execution/costs)で支出を最適化する方法を探りましょう。

View File

@@ -0,0 +1,60 @@
---
title: API トリガー
description: 認証済みHTTPリクエストからワークフローを開始する
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## 概要
APIトリガーは、ワークフローを安全なHTTPエンドポイントとして公開します。JSONデータをエンドポイントに送信すると、ワークフローがすぐにそれを処理します。API呼び出しは常に最新のデプロイメントに対して実行されます。
## 入力フォーマットの設定
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/api-trigger-light.png'
alt='APIトリガー入力フォーマット'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
各パラメータに**入力フォーマット**フィールドを追加します。実行時の出力キーはスキーマを反映し、`<api.input>`でも利用できます。
```yaml
- type: string
name: userId
value: demo-user # optional manual test value
- type: number
name: maxTokens
```
エディタでの手動実行では、リクエストを送信せずにテストできるように`value`列を使用します。実行中、リゾルバは`<api.userId>`と`<api.input.userId>`の両方に値を設定します。
## リクエスト例
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{"userId":"demo-user","maxTokens":1024}'
```
成功したレスポンスはエグゼキュータからのシリアル化された実行結果を返します。エラーは検証、認証、またはワークフローの失敗を表示します。
## 出力リファレンス
| リファレンス | 説明 |
|-----------|-------------|
| `<api.field>` | 入力フォーマットで定義されたフィールド |
| `<api.input>` | 構造化されたリクエスト本文全体 |
入力フォーマットが定義されていない場合、エグゼキュータは生のJSONを`<api.input>`でのみ公開します。
<Callout type="warning">
ワークフローには1つのAPIトリガーしか含めることができません。変更後は新しいデプロイメントを公開して、エンドポイントを最新の状態に保ってください。
</Callout>

View File

@@ -0,0 +1,43 @@
---
title: チャットトリガー
description: チャットデプロイメントからワークフローを開始する
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## 概要
チャットトリガーはワークフロー用の会話インターフェースを作成します。ワークフローをチャットとしてデプロイすると、ユーザーは共有可能なURLを通じてそれと対話できます。各メッセージは最新のデプロイメントを使用して新しいワークフロー実行を開始します。
## ランタイム出力
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/chat-trigger-light.png'
alt='チャットデプロイメントの会話'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
このトリガーは、下流のブロックが参照できる3つのフィールドを書き込みます
| 参照 | 説明 |
|-----------|-------------|
| `<chat.input>` | 最新のユーザーメッセージ |
| `<chat.conversationId>` | 会話スレッドID |
| `<chat.files>` | オプションのアップロードファイル |
ファイルには `name`、`mimeType`、および署名付きダウンロード `url` が含まれます。
## 使用上の注意
1. ワークフローごとにチャットトリガーブロックを1つ追加します。
2. ワークフローをチャットモードでデプロイします。
3. デプロイメントリンクを共有します—各返信は同じ会話IDを再利用するため、ワークフローはコンテキストを保持できます。
<Callout type="info">
ビルダーは同じワークフロー内の複数のチャットトリガーブロックをブロックします。
</Callout>

View File

@@ -0,0 +1,52 @@
---
title: トリガー
description: Simワークフローを開始する主要な方法
---
import { Card, Cards } from 'fumadocs-ui/components/card'
## 主要なトリガー
ワークフローごとに1つのトリガーを選択して、開始方法を定義します
<Cards>
<Card title="API" href="/triggers/api">
JSONボディをワークフロー入力にマッピングするHTTPエンドポイント
</Card>
<Card title="チャット" href="/triggers/chat">
ストリーミングレスポンスを備えたデプロイ済みチャットインターフェース
</Card>
<Card title="入力フォーム" href="/triggers/input-form">
エディタ実行と子ワークフローで使用される型付き手動入力
</Card>
<Card title="手動" href="/triggers/manual">
追加データなしのオンデマンド実行
</Card>
<Card title="スケジュール" href="/triggers/schedule">
Cronまたは間隔ベースの実行
</Card>
<Card title="Webhook" href="/triggers/webhook">
外部のWebhookペイロードを受信
</Card>
</Cards>
## クイック比較
| トリガー | 開始条件 |
|---------|-----------------|
| **API** | 認証されたHTTP POST |
| **チャット** | チャットデプロイメントメッセージ |
| **入力フォーム** | エディタまたは親ワークフローでの手動送信時 |
| **手動** | エディタの実行ボタン |
| **スケジュール** | スケジュールモーダルで管理されるタイマー |
| **Webhook** | 受信HTTPリクエスト時 |
## トリガーの使用方法
1. トリガーブロックを開始スロットにドロップします。
2. 必要なスキーマや認証を設定します。
3. ブロックをワークフローの残りの部分に接続します。
> デプロイメントはすべてのトリガーを動作させます。ワークフローを更新し、再デプロイすると、すべてのトリガーエントリーポイントが新しいスナップショットを取得します。詳細は[実行 → デプロイメントスナップショット](/execution)をご覧ください。
既存のフロー用にレガシースタータブロックは残っていますが、新しいビルドには表示されなくなりました。

View File

@@ -0,0 +1,52 @@
---
title: 入力フォームトリガー
description: 構造化された入力スキーマを持つ手動トリガー
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## 概要
ワークフローがエディターから型付きフィールドで開始される必要がある場合は、入力フォームトリガーを使用します。実行パネルには定義したフィールドが正確に表示されるため、ワークフローは常にクリーンなデータを受け取ります。
## 定義するもの
入力フォーマットビルダーにフィールドテキスト、数値、ブール値、JSONなどを追加します。各フィールドについて
- 値はワークフロー内で `<blockName.field>` として表示されます。
- 完全なペイロードは便宜上 `<blockName.input>` にミラーリングされます。
フォームを空のままにすると、トリガーは出力を持ちません。
## 手動実行
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/input-form-panel-light.png'
alt='入力フォーム実行パネル'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
エディターで実行ボタンを押すと、パネルにフォームがレンダリングされます。送信された値はトリガー出力に直接送られるため、下流のブロックは追加の解析なしにそれらを参照できます。数値は数値型に変換され、ブール値はtrue/falseになり、JSONフィールドはワークフローが処理する前に解析されます。
## 子ワークフロー
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/workflow-input-mapping-light.png'
alt='ワークフロー入力マッピング'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
入力フォームトリガーはワークフローブロックも強化します。子ワークフローを埋め込むと、マッピングステップで子フォームフィールドが表示され、親から変数を接続できます。マッピングしたものは子ワークフローの入力フォーム送信になります。
<Callout>
フィールドのない簡単な実行ボタンが必要ですか?手動トリガーを使用してください。検証と予測可能な構造が必要な場合は、入力フォームを選択してください。
</Callout>

View File

@@ -0,0 +1,41 @@
---
title: 手動トリガー
description: 入力なしでオンデマンドでワークフローを実行する
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## 概要
手動トリガーはワークフローの上部に単純な実行ボタンを追加します。追加データを収集せずにワークフローをすぐに実行したい場合に使用します。
## 仕組み
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/manual-run-light.png'
alt='手動トリガー実行ボタン'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
- アクティブなデプロイメントスナップショットを使用してワークフローを起動します
- ペイロードを送信しません—下流のブロックは既に設定されているものだけを参照します
- 簡単な動作確認、スモークテスト、または内部変数のみに依存するフローに最適です
## 使用するタイミング
- 新しいデプロイメントを公開した後、すべてがまだ正常に動作することを確認するためにワークフローを開始する
- 外部入力を必要としないメンテナンスジョブを実行する
- 状態や環境変数のみを読み取る子ワークフローをトリガーする
## 入力フォームとの比較
実行時に構造化された値や型の検証が必要ですか?代わりに入力フォームトリガーに切り替えると、実行パネルはワークフローが開始する前にそれらのフィールドを収集します。
<Callout>
手動トリガーの実行はデプロイメント履歴を上書きしません。キャンバスの変更を反映させるには、更新して再デプロイしてください。
</Callout>

View File

@@ -1,5 +1,5 @@
---
title: スターター
title: スターター(非推奨)
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -7,7 +7,11 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
スターターブロックを使用すると、入力パラメータを使用してワークフローの実行を手動で開始できます。構造化されたパラメータまたは会話型チャットという2つの入力モードを提供しています。
<Callout type="warning">
スターターブロックは非推奨となり、より専門的なコアトリガーに置き換えられました。新しいAPI、チャット、入力フォーム、手動、スケジュール、Webhookトリガーについては[コアトリガーのドキュメント](/triggers)をご覧ください。
</Callout>
スターターブロックでは、入力パラメータを使用してワークフローの実行を手動で開始することができ、構造化されたパラメータまたは会話型チャットという2つの入力モードを提供しています。
<div className="flex justify-center">
<Image
@@ -23,11 +27,11 @@ import { Video } from '@/components/ui/video'
ドロップダウンから入力方法を選択してください:
<Tabs items={['Manual Mode', 'Chat Mode']}>
<Tabs items={['手動モード', 'チャットモード']}>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
<li><strong>API対応の構造化された入力</strong>特定のパラメータテキスト、数値、ブール値、JSON、ファイル、日付を定義</li>
<li><strong>API対応の構造化入力</strong>特定のパラメータテキスト、数値、ブール値、JSON、ファイル、日付を定義</li>
<li><strong>ワークフロー構築中のテスト</strong>:ワークフローのデバッグ中に素早く反復</li>
</ul>
@@ -49,7 +53,7 @@ import { Video } from '@/components/ui/video'
<Video src="chat-input.mp4" width={700} height={450} />
</div>
<p className="text-sm text-gray-600">ワークフローとチャットし、入力テキスト、会話ID、アップロードされたファイルにアクセスして、コンテキストを考慮した応答を得られます。</p>
<p className="text-sm text-gray-600">ワークフローとチャットし、入力テキスト、会話ID、アップロードされたファイルにアクセスして、文脈を考慮した応答を得られます。</p>
</div>
</Tab>
</Tabs>
@@ -60,4 +64,4 @@ import { Video } from '@/components/ui/video'
- **`<start.input>`** - ユーザーのメッセージテキストが含まれます
- **`<start.conversationId>`** - 会話スレッドの一意の識別子
- **`<start.files>`** - ユーザーがアップロードしたファイルの配列(存在する場合)
- **`<start.files>`** - ユーザーがアップロードしたファイルの配列(る場合)

View File

@@ -1,168 +1,40 @@
---
title: 工作流
title: 工作流模块
description: 在当前流程中运行另一个工作流
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Step, Steps } from 'fumadocs-ui/components/steps'
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
工作流模块允许您在当前工作流中将其他工作流作为可重用组件执行。这使得模块化设计、代码复用以及由更小、更专注的工作流组成的复杂嵌套工作流的创建成为可能。
## 功能简介
<div className="flex justify-center">
<div className='flex justify-center my-6'>
<Image
src="/static/blocks/workflow.png"
alt="工作流模块"
width={500}
height={350}
className="my-6"
src='/static/blocks/workflow.png'
alt='工作流模块配置'
width={400}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
<Callout type="info">
工作流模块通过允许您使用更小的可重用组件来组成复杂的工作流,从而实现模块化设计。
当您希望在更大的流程中调用子工作流时,可以使用工作流模块。该模块运行该工作流的最新部署版本,等待其完成后,再继续执行父流程。
## 配置方法
1. **选择一个工作流**:从下拉菜单中选择(为了防止循环,禁止自引用)。
2. **映射输入**:如果子工作流有输入表单触发器,您将看到每个字段,并可以连接父变量。映射的值是子工作流接收到的值。
3. **输出**:子工作流完成后,该模块会提供以下输出:
- `result` 子工作流的最终响应
- `success` 是否运行无错误
- `error` 运行失败时的消息
## 执行注意事项
- 子工作流在相同的工作区上下文中运行,因此环境变量和工具会被继承。
- 该模块使用部署版本控制:任何 API、计划任务、Webhook、手动或聊天执行都会调用已部署的快照。当您更改子工作流时需要重新部署。
- 如果子工作流失败,该模块会引发错误,除非您在下游处理了该错误。
<Callout>
保持子工作流的专注性。小型、可复用的流程更容易组合使用,而不会导致深层嵌套。
</Callout>
## 概述
工作流模块充当工作流之间的桥梁,使您能够:
<Steps>
<Step>
<strong>复用现有工作流</strong>:在新工作流中将之前创建的工作流作为组件执行
</Step>
<Step>
<strong>创建模块化设计</strong>:将复杂的流程分解为更小、更易管理的工作流
</Step>
<Step>
<strong>保持关注点分离</strong>:将不同的业务逻辑隔离在独立的工作流中
</Step>
<Step>
<strong>支持团队协作</strong>:在不同项目和团队成员之间共享和复用工作流
</Step>
</Steps>
## 工作原理
工作流模块:
1. 引用工作区中的另一个工作流
2. 将当前工作流的输入数据传递给子工作流(通过 start.input 提供)
3. 在隔离的上下文中执行子工作流
4. 将结果返回给父工作流以进行进一步处理
## 配置选项
### 工作流选择
从工作区中可用工作流的下拉列表中选择要执行的工作流。列表包括:
- 您在当前工作区中有权限访问的所有工作流
- 其他团队成员与您共享的工作流
- 启用和禁用的工作流(但只有启用的工作流可以执行)
### 执行上下文
子工作流的执行包括:
- 独立的执行上下文
- 访问相同的工作区资源API 密钥、环境变量)
- 正确的工作区成员资格和权限检查
- 在执行日志中嵌套的追踪跨度
<Callout type="warning">
**循环检测**:系统会自动检测并防止工作流之间的循环依赖,以避免无限循环。
</Callout>
## 输入和输出
<Tabs items={['配置', '变量', '结果']}>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>工作流选择</strong>:选择要执行的工作流
</li>
<li>
<strong>输入数据</strong>:传递给子工作流的变量或块引用
</li>
<li>
<strong>执行上下文</strong>:带有工作区资源的独立环境
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>workflow.success</strong>:布尔值,指示完成状态
</li>
<li>
<strong>workflow.childWorkflowName</strong>:已执行的子工作流名称
</li>
<li>
<strong>workflow.result</strong>:子工作流返回的结果
</li>
<li>
<strong>workflow.error</strong>:如果工作流失败,提供错误详情
</li>
</ul>
</Tab>
<Tab>
<ul className="list-disc space-y-2 pl-6">
<li>
<strong>工作流响应</strong>:子工作流的主要输出
</li>
<li>
<strong>执行状态</strong>:成功状态和错误信息
</li>
<li>
<strong>访问</strong>:在工作流之后的块中可用
</li>
</ul>
</Tab>
</Tabs>
## 示例用例
### 模块化客户入职
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">场景:将复杂的入职流程分解为可重用的组件</h4>
<ol className="list-decimal pl-5 text-sm">
<li>主工作流接收客户数据</li>
<li>工作流块执行验证工作流</li>
<li>工作流块执行账户设置工作流</li>
<li>工作流块执行欢迎邮件工作流</li>
</ol>
</div>
### 微服务架构
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">场景:创建独立的服务工作流</h4>
<ol className="list-decimal pl-5 text-sm">
<li>支付处理工作流处理交易</li>
<li>库存管理工作流更新库存</li>
<li>通知工作流发送确认信息</li>
<li>主工作流协调所有服务</li>
</ol>
</div>
### 条件处理
<div className="mb-4 rounded-md border p-4">
<h4 className="font-medium">场景:根据条件执行不同的工作流</h4>
<ol className="list-decimal pl-5 text-sm">
<li>条件块评估用户类型</li>
<li>企业用户 → 复杂的审批工作流</li>
<li>标准用户 → 简单的审批工作流</li>
<li>免费用户 → 基础的处理工作流</li>
</ol>
</div>
## 最佳实践
- **保持工作流专注**:设计子工作流以处理特定的、定义明确的任务,并具有清晰的输入和输出
- **最小化嵌套深度**:避免深度嵌套的工作流层级,以提高可维护性和性能
- **优雅地处理错误**:为子工作流失败实施适当的错误处理,并提供备用机制
- **独立测试**:确保子工作流可以独立于父工作流进行测试和验证
- **使用语义化命名**:为工作流赋予描述性名称,清楚地表明其目的和功能

View File

@@ -4,6 +4,7 @@ title: 执行
import { Callout } from 'fumadocs-ui/components/callout'
import { Card, Cards } from 'fumadocs-ui/components/card'
import { Image } from '@/components/ui/image'
Sim 的执行引擎通过按正确的顺序处理模块、管理数据流并优雅地处理错误,使您的工作流栩栩如生,从而让您能够准确了解工作流在 Sim 中的执行方式。
@@ -88,6 +89,22 @@ curl -X POST https://sim.ai/api/workflows/your-workflow-id/execute \
每种部署方法都会将数据传递到工作流的起始块,从而开始执行流程。
## 部署快照
所有公共入口点——API、Chat、Schedule、Webhook 和手动运行——都会执行工作流的活动部署快照。每次更改画布时发布一个新的部署,以便每个触发器都使用更新的版本。
<div className='flex justify-center my-6'>
<Image
src='/static/execution/deployment-versions-light.png'
alt='部署版本表'
width={500}
height={280}
className='rounded-xl border border-border shadow-sm'
/>
</div>
部署模式会保留完整的版本历史记录——可以检查任何快照,将其与草稿进行比较,并在需要恢复之前的版本时一键提升或回滚。
## 编程执行
使用我们的官方 SDK 从您的应用程序中执行工作流:
@@ -115,21 +132,21 @@ const result = await client.executeWorkflow('workflow-id', {
## 最佳实践
### 设计可靠性
### 可靠性设计
- 使用适当的回退路径优雅地处理错误
- 对敏感数据使用环境变量
- 在功能块中添加日志以便调试
- 在函数模块中添加日志以便调试
### 优化性能
### 性能优化
- 尽量减少外部 API 调用
- 对独立操作使用并行执行
- 在适当情况下使用内存块缓存结果
- 在适当情况下使用内存块缓存结果
### 监控执行
### 执行监控
- 定期查看日志以了解性能模式
- 跟踪 AI 模型使用的成本
- 使用工作流快照调试问题
## 接下来什么?
## 接下来什么?
从 [执行基础](/execution/basics) 开始,了解工作流如何运行,然后探索 [日志记录](/execution/logging) 以监控您的执行情况,以及 [成本计算](/execution/costs) 以优化您的支出。

View File

@@ -0,0 +1,60 @@
---
title: API 触发器
description: 通过经过身份验证的 HTTP 请求启动工作流
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## 概述
API 触发器将您的工作流公开为一个安全的 HTTP 端点。将 JSON 数据发送到该端点您的工作流会立即处理它。API 调用始终针对您的最新部署执行。
## 配置输入格式
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/api-trigger-light.png'
alt='API 触发器输入格式'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
为每个参数添加一个 **输入格式** 字段。运行时输出键会镜像该模式,并且也可以在 `<api.input>` 下使用。
```yaml
- type: string
name: userId
value: demo-user # optional manual test value
- type: number
name: maxTokens
```
编辑器中的手动运行使用 `value` 列,因此您可以在不发送请求的情况下进行测试。在执行期间,解析器会填充 `<api.userId>` 和 `<api.input.userId>`。
## 请求示例
```bash
curl -X POST \
https://sim.ai/api/workflows/WORKFLOW_ID/execute \
-H 'Content-Type: application/json' \
-H 'X-API-Key: YOUR_KEY' \
-d '{"userId":"demo-user","maxTokens":1024}'
```
成功的响应会返回来自执行器的序列化执行结果。错误会显示验证、身份验证或工作流失败的原因。
## 输出参考
| 参考 | 描述 |
|-----------|-------------|
| `<api.field>` | 在输入格式中定义的字段 |
| `<api.input>` | 整个结构化请求体 |
如果未定义输入格式,执行器仅在 `<api.input>` 处公开原始 JSON。
<Callout type="warning">
一个工作流只能包含一个 API 触发器。更改后请发布新的部署,以确保端点保持最新。
</Callout>

View File

@@ -0,0 +1,43 @@
---
title: 聊天触发器
description: 从聊天部署中启动工作流
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## 概述
聊天触发器为您的工作流创建了一个对话界面。将您的工作流部署为聊天,用户可以通过一个可分享的 URL 与其交互。每条消息都会使用您最新的部署启动一个新的工作流执行。
## 运行时输出
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/chat-trigger-light.png'
alt='聊天部署对话'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
触发器会写入三个字段,供下游模块引用:
| 引用 | 描述 |
|-----------|-------------|
| `<chat.input>` | 最新的用户消息 |
| `<chat.conversationId>` | 对话线程 ID |
| `<chat.files>` | 可选的上传文件 |
文件包括 `name`、`mimeType`,以及一个带签名的下载链接 `url`。
## 使用说明
1. 每个工作流添加一个聊天触发器模块。
2. 以聊天模式部署工作流。
3. 分享部署链接——每次回复都会重用对话 ID以便工作流保持上下文。
<Callout type="info">
构建器会阻止在同一工作流中添加多个聊天触发器模块。
</Callout>

View File

@@ -0,0 +1,52 @@
---
title: 触发器
description: 启动 Sim 工作流的核心方式
---
import { Card, Cards } from 'fumadocs-ui/components/card'
## 核心触发器
为每个工作流选择一个触发器以定义其启动方式:
<Cards>
<Card title="API" href="/triggers/api">
将 JSON 数据映射到工作流输入的 HTTP 端点
</Card>
<Card title="Chat" href="/triggers/chat">
部署的聊天界面,支持流式响应
</Card>
<Card title="Input Form" href="/triggers/input-form">
在编辑器运行和子工作流中使用的手动输入
</Card>
<Card title="Manual" href="/triggers/manual">
无需额外数据的按需运行
</Card>
<Card title="Schedule" href="/triggers/schedule">
基于 Cron 或间隔的执行
</Card>
<Card title="Webhook" href="/triggers/webhook">
接收外部 Webhook 负载
</Card>
</Cards>
## 快速对比
| 触发器 | 启动条件 |
|---------|-----------------|
| **API** | 经过身份验证的 HTTP POST |
| **Chat** | 聊天部署消息 |
| **Input Form** | 在编辑器或父工作流中手动提交 |
| **Manual** | 编辑器中的运行按钮 |
| **Schedule** | 在计划模式中管理的计时器 |
| **Webhook** | 入站 HTTP 请求 |
## 使用触发器
1. 将触发器模块放入启动槽中。
2. 配置任何所需的模式或认证。
3. 将模块连接到工作流的其余部分。
> 部署为每个触发器提供支持。更新工作流,重新部署,所有触发器入口点将获取新的快照。了解更多信息,请参阅[执行 → 部署快照](/execution)。
旧版启动模块仍适用于现有流程,但不再出现在新构建中。

View File

@@ -0,0 +1,52 @@
---
title: 输入表单触发器
description: 具有结构化输入模式的手动触发器
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## 概述
当工作流需要从编辑器中以类型化字段开始时,请使用输入表单触发器。运行面板会准确显示您定义的字段,因此工作流始终接收干净的数据。
## 您需要定义的内容
在输入格式构建器中添加字段文本、数字、布尔值、JSON 等)。对于每个字段:
- 该值会作为 `<blockName.field>` 出现在工作流中。
- 为方便起见,完整的有效负载会镜像在 `<blockName.input>`。
如果您将表单留空,触发器将没有输出。
## 手动运行
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/input-form-panel-light.png'
alt='输入表单运行面板'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
当您在编辑器中按下运行按钮时,面板会渲染表单。提交的值会直接输入到触发器输出中,因此下游模块可以直接引用它们而无需额外解析。数字会被转换为数字,布尔值会变为 true/falseJSON 字段在工作流看到它们之前会被解析。
## 子工作流
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/workflow-input-mapping-light.png'
alt='工作流输入映射'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
输入表单触发器还支持工作流模块。当您嵌入子工作流时,映射步骤会显示子表单字段,以便您可以将变量从父级连接到子级。您映射的内容将成为子工作流的输入表单提交。
<Callout>
需要一个没有字段的快速运行按钮?使用手动触发器。当您需要验证和可预测的结构时,请选择输入表单。
</Callout>

View File

@@ -0,0 +1,41 @@
---
title: 手动触发器
description: 无需输入即可按需运行工作流
---
import { Callout } from 'fumadocs-ui/components/callout'
import { Image } from '@/components/ui/image'
## 概述
手动触发器会在工作流顶部添加一个简单的运行按钮。当您希望立即执行工作流而无需收集额外数据时,可以使用它。
## 工作原理
<div className='flex justify-center my-6'>
<Image
src='/static/triggers/manual-run-light.png'
alt='手动触发器运行按钮'
width={400}
height={250}
className='rounded-xl border border-border shadow-sm'
/>
</div>
- 使用活动的部署快照启动工作流
- 不发送任何有效负载——下游模块仅看到它们已配置的内容
- 非常适合快速检查、冒烟测试或仅依赖内部变量的流程
## 使用场景
- 在发布新部署后启动工作流,以确认一切仍然正常运行
- 运行不需要外部输入的维护任务
- 触发仅读取状态或环境变量的子工作流
## 与输入表单的比较
需要在运行时提供结构化值或类型验证?改用输入表单触发器——运行面板将在工作流开始前收集这些字段。
<Callout>
手动触发器运行不会覆盖您的部署历史记录。每当需要上线画布更改时,请更新并重新部署。
</Callout>

View File

@@ -1,5 +1,5 @@
---
title: 入门
title: Starter已弃用
---
import { Callout } from 'fumadocs-ui/components/callout'
@@ -7,12 +7,16 @@ import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
import { Image } from '@/components/ui/image'
import { Video } from '@/components/ui/video'
入门模块允许您通过输入参数手动启动工作流执行,提供两种输入模式:结构化参数或对话式聊天。
<Callout type="warning">
Starter 模块已被弃用,并由更专业的核心触发器取代。请参阅[核心触发器文档](/triggers),了解新的 API、聊天、输入表单、手动、计划和 Webhook 触发器。
</Callout>
Starter 模块允许您通过输入参数手动启动工作流执行,提供两种输入模式:结构化参数或对话式聊天。
<div className="flex justify-center">
<Image
src="/static/starter.png"
alt="有手动和聊天模式选项的入门模块"
alt="有手动和聊天模式选项的 Starter 模块"
width={500}
height={400}
className="my-6"
@@ -21,14 +25,14 @@ import { Video } from '@/components/ui/video'
## 执行模式
从下拉菜单中选择您的输入方
从下拉菜单中选择您的输入方
<Tabs items={['手动模式', '聊天模式']}>
<Tab>
<div className="space-y-4">
<ul className="list-disc space-y-1 pl-6">
<li><strong>API 友好的结构化输入</strong>定义特定参数文本、数字、布尔值、JSON、文件、日期</li>
<li><strong>构建工作流时进行测试</strong>:调试工作流时快速迭代</li>
<li><strong>构建工作流时测试</strong>:调试工作流时快速迭代</li>
</ul>
<div className="mx-auto w-full overflow-hidden rounded-lg">
@@ -49,14 +53,14 @@ import { Video } from '@/components/ui/video'
<Video src="chat-input.mp4" width={700} height={450} />
</div>
<p className="text-sm text-gray-600">与您的工作流进行聊天,并访问输入文本、会话 ID 和上传的文件以实现上下文感知的响应。</p>
<p className="text-sm text-gray-600">与您的工作流对话,并访问输入文本、会话 ID 和上传的文件以实现上下文感知的响应。</p>
</div>
</Tab>
</Tabs>
## 使用聊天变量
在聊天模式下,通过特殊变量访问用户输入和会话上下文:
在聊天模式下,可以通过特殊变量访问用户输入和会话上下文:
- **`<start.input>`** - 包含用户的消息文本
- **`<start.conversationId>`** - 会话线程的唯一标识符

View File

@@ -200,16 +200,17 @@ checksums:
content/32: 8e0e9217f80809b36efdd4f06c8b3407
content/33: 1bccc5c7c9c3faa39621204141b12194
7867ffa0477110b9224b5900cd88af64:
meta/title: d57ceb9ca36fb941537a29beddee5026
meta/title: 5a2605bd1afd6ccfab7ab6bd25d25487
content/0: c0a142478cc5c515f87d368fa72da818
content/1: 216126f06a18fe0345391a41cbf69d96
content/2: 223436341e6581e88678f72dcb5ea8cd
content/3: f2c54965c634f66b5fa5f3406f28f863
content/4: c8f62e98c3b901b6ddeaee9e97405a6f
content/5: 3515ae8970077219b243cc353d330fe9
content/6: c693032e2e6c2d8baf72c1e9fe670597
content/7: c6b79caea92149650904838f89939f40
content/8: cbca5d806da167603e38e7dc90344e57
content/1: 89a68227f96e1e2c0db0fdccf75f309c
content/2: 216126f06a18fe0345391a41cbf69d96
content/3: 223436341e6581e88678f72dcb5ea8cd
content/4: f2c54965c634f66b5fa5f3406f28f863
content/5: c8f62e98c3b901b6ddeaee9e97405a6f
content/6: 3515ae8970077219b243cc353d330fe9
content/7: c693032e2e6c2d8baf72c1e9fe670597
content/8: c6b79caea92149650904838f89939f40
content/9: cbca5d806da167603e38e7dc90344e57
fb53ce2c1fc28db4c6c09f5296ff59c6:
meta/title: a75428cb811bc50150cecde090a3a0d5
content/0: c0a142478cc5c515f87d368fa72da818
@@ -2647,7 +2648,7 @@ checksums:
content/32: ebdbef07196127ef2c7ba23491f62578
0334b7b88d5f6e736984d25a5913ce74:
meta/title: cbac4a3c721123cbc6a883560bf29800
content/0: 4b92e97b7a206361bbc925f3ab1d7b19
content/0: c2b41859d63a751682f0d9aec488e581
content/1: 029b6eaedb318e283ec616271b1c1f31
content/2: cd32f3f914c0d61277663080f084a6c5
content/3: d0884f6f30103599303dbc34ab978afb
@@ -2668,16 +2669,20 @@ checksums:
content/18: bce1e4e161b456fb087eced7989396da
content/19: 5b3d24c353563247b9211822a871fef4
content/20: 1caf64b236828bfeebe960fc20a5ab73
content/21: c80365afbb4bb97e47afb8046aca0e4d
content/22: bcd28da9c1dce1b1fcac124a44c6e3af
content/23: 6bc2fe9d10757bef1c729e6c2a8f641b
content/24: 4a83f87901c49d45be4db1acc8798fcf
content/25: b2a4a0c279f47d58a2456f25a1e1c6f9
content/26: e268aec41ffc038e8a4c0c0f32df6ab7
content/27: 3481ccd057c4b953509346ee2cc5b48e
content/28: 770a4b0d73650cffbaa78c819d6ab4d0
content/29: d2f430ae2dc112f90bc63225b63e93dd
content/30: 03d809b3d2d99b8d5f18610859b64f01
content/21: 7b6c8964f393e9314c294c602f25d408
content/22: 4aea1808e27ec653c759cc117eea48d3
content/23: 8f40b40057951bc518970c6693ac430a
content/24: f04172446018c863976118c67315433a
content/25: c80365afbb4bb97e47afb8046aca0e4d
content/26: bcd28da9c1dce1b1fcac124a44c6e3af
content/27: 6bc2fe9d10757bef1c729e6c2a8f641b
content/28: 4a83f87901c49d45be4db1acc8798fcf
content/29: b2a4a0c279f47d58a2456f25a1e1c6f9
content/30: e268aec41ffc038e8a4c0c0f32df6ab7
content/31: 3481ccd057c4b953509346ee2cc5b48e
content/32: 770a4b0d73650cffbaa78c819d6ab4d0
content/33: d2f430ae2dc112f90bc63225b63e93dd
content/34: 03d809b3d2d99b8d5f18610859b64f01
93a12caff7a5c8e23c8945748341fb3a:
meta/title: ce4f627ba9e60c4718e2441ce884f560
content/0: bdace12b4c85213012e88653277c2ebb
@@ -2949,36 +2954,17 @@ checksums:
content/8: ee7755c785324eed7080a9efb5937ba9
content/9: 4e37faf476573f26ccb9bc7f224662b1
e99baf6ea410c047444ec8592d7d54f3:
meta/title: 0240772c838117f1c837f4913fce9384
content/0: d091aba168f368dcc4e9073c000f47af
content/1: d535b3ffe5440af56ae10210f6b2e637
content/2: 0e302f592b5d0416346f35b7dbc30853
content/3: 0b640cd2c679bdf3bc24885290042dce
content/4: 5e26527ccf8fddebe14c951e6c950b48
content/5: aa55ef9b2a15c211fa509aa1d31534f4
content/6: 3b1e4e2059ba01fc63a4bf4a6853d5c0
content/7: ad8638a3473c909dbcb1e1d9f4f26381
content/8: 7e519b11665ca706936276803d28ca9c
content/9: e513312f3c26e7b7011b3f1e5b15652f
content/10: b2e603592f9c01f26bd7bd067f52ccd5
content/11: c85151df4d0c1de9189c7aae92963973
content/12: 8662c5fb212a0392f9d81adb91e9ad4e
content/13: 39ff6f3fdd0c86fa68ef5b85e6011f63
content/14: f78afc1b4d533d9fd57f39903387af2d
content/15: 7f6e1ef1a2fe004852ebf910f62a98e7
content/16: 4b9041966542eebbf55ea4cfe082af5f
content/17: 045080b64ddf3d6c56d9023f49faab90
content/18: d72903dda50a36b12ec050a06ef23a1b
content/19: 78eb14b27953674512e2957b7dbd68b6
content/20: 9c2f91f89a914bf4661512275e461104
content/21: 2c8be53af05636013555b8775bc0db15
content/22: c03744f1e653869a773692d8334fd6b2
content/23: 67f75b67ff5bb1e8a84393bfc5ab00b6
content/24: 1469dec342ba22a92d5faf20b266936f
content/25: 754efe9696132b408f9b828967fa587c
content/26: 75f7c86d00c3b746e2e44e235a2f38b6
content/27: b2a4a0c279f47d58a2456f25a1e1c6f9
content/28: d2cfaf10c9d2909a6e83a67067c7e1dc
meta/title: 314cb19eb4fc168e662c3ac7e308f8c1
meta/description: 064420321c795472e120795dd3866b6b
content/0: eb0ed7078f192304703144f4cac3442f
content/1: 4a2b79d74390a7f15a0493a5b9811aa6
content/2: 51409378febc14a254bfd47909a470e4
content/3: c470cddccf8e05421006bb87a1934a76
content/4: c712a7c1712d32c3d539a42949437e74
content/5: bbc6fc8324371b3f35d4b2482750627d
content/6: b5679e78347c7b56291bf29c07ea4894
content/7: ad6e9b3e5268ebdc1aacbbe68f1d47d0
content/8: 3d7cbdfdd9717209049859e503965ad0
2370c896de59e5d3a8abcb5a44e245f9:
meta/title: c14965d732abc6e402c866dd7272a37f
content/0: 1852345497a5d49c4c869b368b5d1612
@@ -3905,3 +3891,79 @@ checksums:
content/46: f383a8845c0fe57f4eb82c1c69009925
content/47: b3f310d5ef115bea5a8b75bf25d7ea9a
content/48: 5e1c856b28d30016198e90cda5b05e57
5d496ee293efcfeeabc8ba9cb5bea389:
meta/title: 48133ce7ab3a049b7627329f80a182fb
meta/description: 65f24f2782c9bb82cc5d40ff66d052b6
content/0: eb0ed7078f192304703144f4cac3442f
content/1: 5e26527ccf8fddebe14c951e6c950b48
content/2: 0d81ea82151104adc39c846ac8337431
content/3: ad8638a3473c909dbcb1e1d9f4f26381
content/4: 8c1a52f7cec852a5c7ff47c0e2930a73
content/5: b4a8e39e816091b3964a92ae3bde42ff
content/6: 69140f7129fbf1c47dc5f3e11ed204e3
content/7: 6457e9e8ad810111a17400e900884c93
content/8: ef7204714a75ed639120dd4a6ba18090
content/9: 749a5aa6304dae75fcb691ec5dd62020
content/10: 6ae1fe8e296a5924538ba0468c4d1a6c
4f4fc92cad5b98200e961f8c7e63b114:
meta/title: e3121231039423710489dc40385552ac
meta/description: b48763f2062aa535d0acd84e5a377b8a
content/0: eb0ed7078f192304703144f4cac3442f
content/1: 5e26527ccf8fddebe14c951e6c950b48
content/2: c060b0c739bcb1b0e362e35913e6a021
content/3: aaddc2922e87ac1a91a1c375d3873ef7
content/4: 0caf16c2939919e4c7bcb65acaba4556
content/5: fb1f31982f28c530d1f4a54225f8d69e
content/6: b46d3306465322aa484be51de951ecf0
content/7: c7bac9990b48e0da1b2a14b047e2fed3
content/8: 7f9f3edbc0dfa08d8215523b6dee3759
content/9: 6942b610f6873ccc980ecb6e1317fe6b
content/10: 08e432baa1ebfbce144be785980c9ea3
content/11: a7be0ff0273a72ba92fe57352fff9818
content/12: fa99328ac89f35c19a8833b4a67aed2f
content/13: bcc75d48639b6962a931d0bd9b1964fd
988d7dce2c886500665fbd2457d4cc4d:
meta/title: 66488f38662a4199fb8a18967239c992
meta/description: 96d5e61577085aa1c1a6f1609ae5ebb4
content/0: 0d82f8784f312f9ac51da136fd47e94a
content/1: da2b445db16c149f56558a4ea876a5f0
content/2: 34fecbe521c3ea53e9f288437c36b9c3
content/3: 3e192851df5121e4ee83754ce34be18d
content/4: 4c3a5708af82c1ee42a12d14fd34e950
content/5: 196439ec46589bfee391896e4792f046
content/6: cffe5b901d78ebf2000d07dc7579533e
content/7: 7627b5948da98a1c939540dcdbdac0d3
content/8: 05aed1f03c5717f3bcb10de2935332e8
content/9: 0093cc341f8b972ae8f69eec3452a501
0bf172ef4ee9a2c94a2967d7d320b81b:
meta/title: 330265974a03ee22a09f42fa4ece25f6
meta/description: e3d54cbedf551315cf9e8749228c2d1c
content/0: eb0ed7078f192304703144f4cac3442f
content/1: 5e26527ccf8fddebe14c951e6c950b48
content/2: 2ffa2ee71720895e73353a5e4034a46f
content/3: 78cfe3bc9c911dd9aa75f053f768707d
content/4: d5c510cc37588bf8f3d9a91543544721
content/5: a09e8940e139c0b84886fa7f16f3e690
content/6: 33f032ae58bee4c0e244491b110a22fe
content/7: ef92830705e75d566cb1c6bbc18a2c82
content/8: 8f06e4f0147241cadfbae88fb2fc2057
content/9: c2d4cc3ecf06ac3c07f57c83095e461b
content/10: 3d8114d48bbc82967b2e7c881f571dc0
c1571f6a328a5083bc542ae1ffc98fac:
meta/title: 41fc753f4232b5628873660d94faba90
meta/description: b108bba63132a8a2ddbff6b5264ef993
content/0: eb0ed7078f192304703144f4cac3442f
content/1: 5e26527ccf8fddebe14c951e6c950b48
content/2: 3c7457d4671bdca75eb8847e77b3d09a
content/3: b3c762557a1a308f3531ef1f19701807
content/4: bf29da79344f37eeadd4c176aa19b8ff
content/5: ae52879ebefa5664a6b7bf8ce5dd57ab
content/6: 5e1cbe37c5714b16c908c7e0fe0b23e3
content/7: ce487c9bc7a730e7d9da4a87b8eaa0a6
content/8: e73f4b831f5b77c71d7d86c83abcbf11
content/9: 07e064793f3e0bbcb02c4dc6083b6daa
content/10: a702b191c3f94458bee880d33853e0cb
content/11: ce110ab5da3ff96f8cbf96ce3376fc51
content/12: 83f9b3ab46b0501c8eb3989bec3f4f1b
content/13: e00be80effb71b0acb014f9aa53dfbe1
content/14: 847a381137856ded9faa5994fbc489fb