diff --git a/apps/docs/content/docs/de/execution/api.mdx b/apps/docs/content/docs/de/execution/api.mdx index b67765e65af..459a235e2f1 100644 --- a/apps/docs/content/docs/de/execution/api.mdx +++ b/apps/docs/content/docs/de/execution/api.mdx @@ -251,32 +251,78 @@ Rufen Sie Ausführungsdetails einschließlich des Workflow-Zustandsschnappschuss -## Webhook-Abonnements +## Benachrichtigungen -Erhalten Sie Echtzeitbenachrichtigungen, wenn Workflow-Ausführungen abgeschlossen werden. Webhooks werden über die Sim-Benutzeroberfläche im Workflow-Editor konfiguriert. +Erhalten Sie Echtzeit-Benachrichtigungen, wenn Workflow-Ausführungen abgeschlossen sind, per Webhook, E-Mail oder Slack. Benachrichtigungen werden auf Workspace-Ebene von der Protokollseite aus konfiguriert. ### Konfiguration -Webhooks können für jeden Workflow über die Benutzeroberfläche des Workflow-Editors konfiguriert werden. Klicken Sie auf das Webhook-Symbol in der Kontrollleiste, um Ihre Webhook-Abonnements einzurichten. +Konfigurieren Sie Benachrichtigungen von der Protokollseite aus, indem Sie auf die Menütaste klicken und "Benachrichtigungen konfigurieren" auswählen. -
-
+**Benachrichtigungskanäle:** +- **Webhook**: Senden Sie HTTP POST-Anfragen an Ihren Endpunkt +- **E-Mail**: Erhalten Sie E-Mail-Benachrichtigungen mit Ausführungsdetails +- **Slack**: Posten Sie Nachrichten in einen Slack-Kanal -**Verfügbare Konfigurationsoptionen:** +**Workflow-Auswahl:** +- Wählen Sie bestimmte Workflows zur Überwachung aus +- Oder wählen Sie "Alle Workflows", um aktuelle und zukünftige Workflows einzubeziehen + +**Filteroptionen:** +- `levelFilter`: Zu empfangende Protokollebenen (`info`, `error`) +- `triggerFilter`: Zu empfangende Auslösertypen (`api`, `webhook`, `schedule`, `manual`, `chat`) + +**Optionale Daten:** +- `includeFinalOutput`: Schließt die endgültige Ausgabe des Workflows ein +- `includeTraceSpans`: Schließt detaillierte Ausführungs-Trace-Spans ein +- `includeRateLimits`: Schließt Informationen zum Ratenlimit ein (Sync/Async-Limits und verbleibende) +- `includeUsageData`: Schließt Abrechnungszeitraum-Nutzung und -Limits ein + +### Alarmregeln + +Anstatt Benachrichtigungen für jede Ausführung zu erhalten, konfigurieren Sie Alarmregeln, um nur bei erkannten Problemen benachrichtigt zu werden: + +**Aufeinanderfolgende Fehler** +- Alarm nach X aufeinanderfolgenden fehlgeschlagenen Ausführungen (z.B. 3 Fehler in Folge) +- Wird zurückgesetzt, wenn eine Ausführung erfolgreich ist + +**Fehlerrate** +- Alarm, wenn die Fehlerrate X% in den letzten Y Stunden überschreitet +- Erfordert mindestens 5 Ausführungen im Zeitfenster +- Wird erst nach Ablauf des vollständigen Zeitfensters ausgelöst + +**Latenz-Schwellenwert** +- Alarm, wenn eine Ausführung länger als X Sekunden dauert +- Nützlich zum Erkennen langsamer oder hängender Workflows + +**Latenz-Spitze** +- Alarm, wenn die Ausführung X% langsamer als der Durchschnitt ist +- Vergleicht mit der durchschnittlichen Dauer über das konfigurierte Zeitfenster +- Erfordert mindestens 5 Ausführungen, um eine Baseline zu etablieren + +**Kostenschwelle** +- Alarmierung, wenn eine einzelne Ausführung mehr als $X kostet +- Nützlich, um teure LLM-Aufrufe zu erkennen + +**Keine Aktivität** +- Alarmierung, wenn innerhalb von X Stunden keine Ausführungen stattfinden +- Nützlich zur Überwachung geplanter Workflows, die regelmäßig ausgeführt werden sollten + +**Fehlerzählung** +- Alarmierung, wenn die Fehleranzahl X innerhalb eines Zeitfensters überschreitet +- Erfasst die Gesamtfehler, nicht aufeinanderfolgende + +Alle Alarmtypen beinhalten eine Abklingzeit von 1 Stunde, um Benachrichtigungsspam zu vermeiden. + +### Webhook-Konfiguration + +Für Webhooks stehen zusätzliche Optionen zur Verfügung: - `url`: Ihre Webhook-Endpunkt-URL -- `secret`: Optionales Geheimnis für die HMAC-Signaturverifizierung -- `includeFinalOutput`: Die endgültige Ausgabe des Workflows in die Nutzlast einschließen -- `includeTraceSpans`: Detaillierte Ausführungs-Trace-Spans einschließen -- `includeRateLimits`: Informationen zum Ratelimit des Workflow-Besitzers einschließen -- `includeUsageData`: Nutzungs- und Abrechnungsdaten des Workflow-Besitzers einschließen -- `levelFilter`: Array von Log-Ebenen, die empfangen werden sollen (`info`, `error`) -- `triggerFilter`: Array von Auslösertypen, die empfangen werden sollen (`api`, `webhook`, `schedule`, `manual`, `chat`) -- `active`: Webhook-Abonnement aktivieren/deaktivieren +- `secret`: Optionales Geheimnis für HMAC-Signaturverifizierung -### Webhook-Nutzlast +### Payload-Struktur -Wenn eine Workflow-Ausführung abgeschlossen ist, sendet Sim eine POST-Anfrage an Ihre Webhook-URL: +Wenn eine Workflow-Ausführung abgeschlossen ist, sendet Sim die folgende Payload (über Webhook POST, E-Mail oder Slack): ```json { @@ -327,17 +373,17 @@ Wenn eine Workflow-Ausführung abgeschlossen ist, sendet Sim eine POST-Anfrage a ### Webhook-Header -Jede Webhook-Anfrage enthält diese Header: +Jede Webhook-Anfrage enthält diese Header (nur Webhook-Kanal): - `sim-event`: Ereignistyp (immer `workflow.execution.completed`) - `sim-timestamp`: Unix-Zeitstempel in Millisekunden -- `sim-delivery-id`: Eindeutige Lieferungs-ID für Idempotenz -- `sim-signature`: HMAC-SHA256-Signatur zur Verifizierung (falls Secret konfiguriert) -- `Idempotency-Key`: Identisch mit der Lieferungs-ID zur Erkennung von Duplikaten +- `sim-delivery-id`: Eindeutige Zustell-ID für Idempotenz +- `sim-signature`: HMAC-SHA256-Signatur zur Verifizierung (falls Geheimnis konfiguriert) +- `Idempotency-Key`: Gleich wie Zustell-ID zur Erkennung von Duplikaten ### Signaturverifizierung -Wenn Sie ein Webhook-Secret konfigurieren, überprüfen Sie die Signatur, um sicherzustellen, dass der Webhook von Sim stammt: +Wenn Sie ein Webhook-Geheimnis konfigurieren, überprüfen Sie die Signatur, um sicherzustellen, dass der Webhook von Sim stammt: @@ -414,7 +460,7 @@ Fehlgeschlagene Webhook-Zustellungen werden mit exponentiellem Backoff und Jitte - Maximale Versuche: 5 - Wiederholungsverzögerungen: 5 Sekunden, 15 Sekunden, 1 Minute, 3 Minuten, 10 Minuten -- Jitter: Bis zu 10% zusätzliche Verzögerung, um Überlastungen zu vermeiden +- Jitter: Bis zu 10% zusätzliche Verzögerung, um Überlastung zu vermeiden - Nur HTTP 5xx und 429 Antworten lösen Wiederholungen aus - Zustellungen haben ein Timeout nach 30 Sekunden @@ -424,15 +470,15 @@ Fehlgeschlagene Webhook-Zustellungen werden mit exponentiellem Backoff und Jitte ## Best Practices -1. **Polling-Strategie**: Verwenden Sie beim Abfragen von Logs die cursorbasierte Paginierung mit `order=asc` und `startDate`, um neue Logs effizient abzurufen. +1. **Polling-Strategie**: Verwende bei der Abfrage von Logs eine cursor-basierte Paginierung mit `order=asc` und `startDate`, um neue Logs effizient abzurufen. -2. **Webhook-Sicherheit**: Konfigurieren Sie immer ein Webhook-Secret und überprüfen Sie Signaturen, um sicherzustellen, dass Anfragen von Sim stammen. +2. **Webhook-Sicherheit**: Konfiguriere immer ein Webhook-Secret und überprüfe Signaturen, um sicherzustellen, dass Anfragen von Sim stammen. -3. **Idempotenz**: Verwenden Sie den `Idempotency-Key`Header, um doppelte Webhook-Zustellungen zu erkennen und zu behandeln. +3. **Idempotenz**: Verwende den `Idempotency-Key`Header, um doppelte Webhook-Zustellungen zu erkennen und zu behandeln. -4. **Datenschutz**: Standardmäßig werden `finalOutput` und `traceSpans` von den Antworten ausgeschlossen. Aktivieren Sie diese nur, wenn Sie die Daten benötigen und die Datenschutzauswirkungen verstehen. +4. **Datenschutz**: Standardmäßig werden `finalOutput` und `traceSpans` aus den Antworten ausgeschlossen. Aktiviere diese nur, wenn du die Daten benötigst und die Datenschutzauswirkungen verstehst. -5. **Rate-Limiting**: Implementieren Sie exponentielles Backoff, wenn Sie 429-Antworten erhalten. Überprüfen Sie den `Retry-After`Header für die empfohlene Wartezeit. +5. **Rate-Limiting**: Implementiere exponentielles Backoff, wenn du 429-Antworten erhältst. Überprüfe den `Retry-After`Header für die empfohlene Wartezeit. ## Rate-Limiting @@ -443,7 +489,7 @@ Die API implementiert Rate-Limiting, um eine faire Nutzung zu gewährleisten: - **Team-Plan**: 60 Anfragen pro Minute - **Enterprise-Plan**: Individuelle Limits -Informationen zum Rate-Limit sind in den Antwort-Headern enthalten: +Rate-Limit-Informationen sind in den Antwort-Headern enthalten: - `X-RateLimit-Limit`: Maximale Anfragen pro Zeitfenster - `X-RateLimit-Remaining`: Verbleibende Anfragen im aktuellen Zeitfenster - `X-RateLimit-Reset`: ISO-Zeitstempel, wann das Zeitfenster zurückgesetzt wird @@ -495,7 +541,7 @@ async function pollLogs() { setInterval(pollLogs, 30000); ``` -## Beispiel: Verarbeitung von Webhooks +## Beispiel: Verarbeiten von Webhooks ```javascript import express from 'express'; diff --git a/apps/docs/content/docs/de/execution/logging.mdx b/apps/docs/content/docs/de/execution/logging.mdx index 7a004c28a58..d8b38ff9b80 100644 --- a/apps/docs/content/docs/de/execution/logging.mdx +++ b/apps/docs/content/docs/de/execution/logging.mdx @@ -147,4 +147,4 @@ Der Snapshot bietet: - Erfahren Sie mehr über die [Kostenberechnung](/execution/costs), um die Preisgestaltung von Workflows zu verstehen - Erkunden Sie die [externe API](/execution/api) für programmatischen Zugriff auf Protokolle -- Richten Sie [Webhook-Benachrichtigungen](/execution/api#webhook-subscriptions) für Echtzeit-Warnungen ein \ No newline at end of file +- Richten Sie [Benachrichtigungen](/execution/api#notifications) für Echtzeit-Warnungen per Webhook, E-Mail oder Slack ein \ No newline at end of file diff --git a/apps/docs/content/docs/es/execution/api.mdx b/apps/docs/content/docs/es/execution/api.mdx index 05571db1512..35007d87bc6 100644 --- a/apps/docs/content/docs/es/execution/api.mdx +++ b/apps/docs/content/docs/es/execution/api.mdx @@ -251,32 +251,78 @@ Recupera detalles de ejecución incluyendo la instantánea del estado del flujo -## Suscripciones a webhooks +## Notificaciones -Recibe notificaciones en tiempo real cuando se completan las ejecuciones de flujos de trabajo. Los webhooks se configuran a través de la interfaz de usuario de Sim en el editor de flujos de trabajo. +Recibe notificaciones en tiempo real cuando se completan las ejecuciones de flujos de trabajo a través de webhook, correo electrónico o Slack. Las notificaciones se configuran a nivel de espacio de trabajo desde la página de Registros. ### Configuración -Los webhooks pueden configurarse para cada flujo de trabajo a través de la interfaz de usuario del editor de flujos de trabajo. Haz clic en el icono de webhook en la barra de control para configurar tus suscripciones a webhooks. +Configura las notificaciones desde la página de Registros haciendo clic en el botón de menú y seleccionando "Configurar notificaciones". -
-
+**Canales de notificación:** +- **Webhook**: Envía solicitudes HTTP POST a tu punto de conexión +- **Correo electrónico**: Recibe notificaciones por correo con detalles de la ejecución +- **Slack**: Publica mensajes en un canal de Slack -**Opciones de configuración disponibles:** -- `url`: URL del punto final de tu webhook +**Selección de flujos de trabajo:** +- Selecciona flujos de trabajo específicos para monitorear +- O elige "Todos los flujos de trabajo" para incluir los flujos actuales y futuros + +**Opciones de filtrado:** +- `levelFilter`: Niveles de registro a recibir (`info`, `error`) +- `triggerFilter`: Tipos de disparadores a recibir (`api`, `webhook`, `schedule`, `manual`, `chat`) + +**Datos opcionales:** +- `includeFinalOutput`: Incluir la salida final del flujo de trabajo +- `includeTraceSpans`: Incluir trazas detalladas de la ejecución +- `includeRateLimits`: Incluir información de límites de tasa (límites sincrónicos/asincrónicos y restantes) +- `includeUsageData`: Incluir uso y límites del período de facturación + +### Reglas de alerta + +En lugar de recibir notificaciones por cada ejecución, configura reglas de alerta para ser notificado solo cuando se detecten problemas: + +**Fallos consecutivos** +- Alerta después de X ejecuciones fallidas consecutivas (por ejemplo, 3 fallos seguidos) +- Se reinicia cuando una ejecución tiene éxito + +**Tasa de fallos** +- Alerta cuando la tasa de fallos supera el X% durante las últimas Y horas +- Requiere un mínimo de 5 ejecuciones en la ventana de tiempo +- Solo se activa después de que haya transcurrido la ventana de tiempo completa + +**Umbral de latencia** +- Alerta cuando cualquier ejecución tarda más de X segundos +- Útil para detectar flujos de trabajo lentos o bloqueados + +**Pico de latencia** +- Alerta cuando la ejecución es X% más lenta que el promedio +- Compara con la duración promedio durante la ventana de tiempo configurada +- Requiere un mínimo de 5 ejecuciones para establecer una línea base + +**Umbral de costo** +- Alerta cuando una sola ejecución cuesta más de $X +- Útil para detectar llamadas costosas a LLM + +**Sin actividad** +- Alerta cuando no ocurren ejecuciones dentro de X horas +- Útil para monitorear flujos de trabajo programados que deberían ejecutarse regularmente + +**Recuento de errores** +- Alerta cuando el recuento de errores excede X dentro de una ventana de tiempo +- Rastrea errores totales, no consecutivos + +Todos los tipos de alertas incluyen un período de enfriamiento de 1 hora para evitar el spam de notificaciones. + +### Configuración de webhook + +Para webhooks, hay opciones adicionales disponibles: +- `url`: La URL de tu endpoint webhook - `secret`: Secreto opcional para verificación de firma HMAC -- `includeFinalOutput`: Incluir la salida final del flujo de trabajo en la carga útil -- `includeTraceSpans`: Incluir intervalos de seguimiento de ejecución detallados -- `includeRateLimits`: Incluir información del límite de tasa del propietario del flujo de trabajo -- `includeUsageData`: Incluir datos de uso y facturación del propietario del flujo de trabajo -- `levelFilter`: Array de niveles de registro a recibir (`info`, `error`) -- `triggerFilter`: Array de tipos de disparadores a recibir (`api`, `webhook`, `schedule`, `manual`, `chat`) -- `active`: Habilitar/deshabilitar la suscripción al webhook -### Carga útil del webhook +### Estructura de carga útil -Cuando se completa la ejecución de un flujo de trabajo, Sim envía una solicitud POST a tu URL de webhook: +Cuando se completa la ejecución de un flujo de trabajo, Sim envía la siguiente carga útil (vía webhook POST, correo electrónico o Slack): ```json { @@ -325,9 +371,9 @@ Cuando se completa la ejecución de un flujo de trabajo, Sim envía una solicitu } ``` -### Cabeceras de webhook +### Encabezados de webhook -Cada solicitud de webhook incluye estas cabeceras: +Cada solicitud de webhook incluye estos encabezados (solo canal webhook): - `sim-event`: Tipo de evento (siempre `workflow.execution.completed`) - `sim-timestamp`: Marca de tiempo Unix en milisegundos @@ -416,15 +462,15 @@ Las entregas de webhook fallidas se reintentan con retroceso exponencial y fluct - Retrasos de reintento: 5 segundos, 15 segundos, 1 minuto, 3 minutos, 10 minutos - Fluctuación: Hasta un 10% de retraso adicional para prevenir el efecto de manada - Solo las respuestas HTTP 5xx y 429 activan reintentos -- Las entregas agotan el tiempo de espera después de 30 segundos +- Las entregas agotan el tiempo después de 30 segundos - Las entregas de webhook se procesan de forma asíncrona y no afectan al rendimiento de ejecución del flujo de trabajo. + Las entregas de webhook se procesan de forma asíncrona y no afectan el rendimiento de ejecución del flujo de trabajo. ## Mejores prácticas -1. **Estrategia de sondeo**: Al sondear registros, utiliza paginación basada en cursor con `order=asc` y `startDate` para obtener nuevos registros de manera eficiente. +1. **Estrategia de sondeo**: Cuando consultes registros, utiliza paginación basada en cursores con `order=asc` y `startDate` para obtener nuevos registros de manera eficiente. 2. **Seguridad de webhook**: Siempre configura un secreto de webhook y verifica las firmas para asegurar que las solicitudes provienen de Sim. @@ -432,23 +478,23 @@ Las entregas de webhook fallidas se reintentan con retroceso exponencial y fluct 4. **Privacidad**: Por defecto, `finalOutput` y `traceSpans` están excluidos de las respuestas. Habilítalos solo si necesitas los datos y comprendes las implicaciones de privacidad. -5. **Limitación de tasa**: Implementa retroceso exponencial cuando recibas respuestas 429. Consulta la cabecera `Retry-After` para conocer el tiempo de espera recomendado. +5. **Limitación de tasa**: Implementa retroceso exponencial cuando recibas respuestas 429. Verifica la cabecera `Retry-After` para conocer el tiempo de espera recomendado. ## Limitación de tasa -La API implementa limitación de tasa para garantizar un uso justo: +La API implementa limitación de tasa para asegurar un uso justo: - **Plan gratuito**: 10 solicitudes por minuto - **Plan Pro**: 30 solicitudes por minuto - **Plan Team**: 60 solicitudes por minuto - **Plan Enterprise**: Límites personalizados -La información del límite de tasa se incluye en los encabezados de respuesta: -- `X-RateLimit-Limit`: Máximo de solicitudes por ventana +La información de límite de tasa se incluye en las cabeceras de respuesta: +- `X-RateLimit-Limit`: Solicitudes máximas por ventana - `X-RateLimit-Remaining`: Solicitudes restantes en la ventana actual -- `X-RateLimit-Reset`: Marca de tiempo ISO cuando se reinicia la ventana +- `X-RateLimit-Reset`: Marca de tiempo ISO cuando la ventana se reinicia -## Ejemplo: Sondeo para nuevos registros +## Ejemplo: Sondeo de nuevos registros ```javascript let cursor = null; diff --git a/apps/docs/content/docs/es/execution/logging.mdx b/apps/docs/content/docs/es/execution/logging.mdx index 2b1705770b2..98e4ff34cd0 100644 --- a/apps/docs/content/docs/es/execution/logging.mdx +++ b/apps/docs/content/docs/es/execution/logging.mdx @@ -147,4 +147,4 @@ La instantánea proporciona: - Aprende sobre [Cálculo de costos](/execution/costs) para entender los precios de los flujos de trabajo - Explora la [API externa](/execution/api) para acceso programático a los registros -- Configura [notificaciones por Webhook](/execution/api#webhook-subscriptions) para alertas en tiempo real \ No newline at end of file +- Configura [Notificaciones](/execution/api#notifications) para alertas en tiempo real vía webhook, correo electrónico o Slack \ No newline at end of file diff --git a/apps/docs/content/docs/fr/execution/api.mdx b/apps/docs/content/docs/fr/execution/api.mdx index 7503218f420..5be2b7a29fb 100644 --- a/apps/docs/content/docs/fr/execution/api.mdx +++ b/apps/docs/content/docs/fr/execution/api.mdx @@ -251,32 +251,78 @@ Récupérer les détails d'exécution, y compris l'instantané de l'état du wor -## Abonnements aux webhooks +## Notifications -Recevez des notifications en temps réel lorsque les exécutions de workflow sont terminées. Les webhooks sont configurés via l'interface utilisateur Sim dans l'éditeur de workflow. +Recevez des notifications en temps réel lorsque les exécutions de flux de travail sont terminées via webhook, e-mail ou Slack. Les notifications sont configurées au niveau de l'espace de travail depuis la page Logs. ### Configuration -Les webhooks peuvent être configurés pour chaque workflow via l'interface utilisateur de l'éditeur de workflow. Cliquez sur l'icône webhook dans la barre de contrôle pour configurer vos abonnements aux webhooks. +Configurez les notifications depuis la page Logs en cliquant sur le bouton menu et en sélectionnant "Configurer les notifications". -
-
+**Canaux de notification :** +- **Webhook** : envoi de requêtes HTTP POST à votre point de terminaison +- **E-mail** : réception de notifications par e-mail avec les détails d'exécution +- **Slack** : publication de messages dans un canal Slack -**Options de configuration disponibles :** -- `url` : URL de votre endpoint webhook -- `secret` : Secret optionnel pour la vérification de signature HMAC -- `includeFinalOutput` : Inclure la sortie finale du workflow dans la charge utile -- `includeTraceSpans` : Inclure les intervalles de trace d'exécution détaillés -- `includeRateLimits` : Inclure les informations de limite de débit du propriétaire du workflow -- `includeUsageData` : Inclure les données d'utilisation et de facturation du propriétaire du workflow -- `levelFilter` : Tableau des niveaux de journal à recevoir (`info`, `error`) -- `triggerFilter` : Tableau des types de déclencheurs à recevoir (`api`, `webhook`, `schedule`, `manual`, `chat`) -- `active` : Activer/désactiver l'abonnement webhook +**Sélection de flux de travail :** +- Sélectionnez des flux de travail spécifiques à surveiller +- Ou choisissez "Tous les flux de travail" pour inclure les flux actuels et futurs -### Charge utile du webhook +**Options de filtrage :** +- `levelFilter` : niveaux de journalisation à recevoir (`info`, `error`) +- `triggerFilter` : types de déclencheurs à recevoir (`api`, `webhook`, `schedule`, `manual`, `chat`) -Lorsqu'une exécution de workflow est terminée, Sim envoie une requête POST à votre URL webhook : +**Données optionnelles :** +- `includeFinalOutput` : inclure le résultat final du flux de travail +- `includeTraceSpans` : inclure les traces détaillées d'exécution +- `includeRateLimits` : inclure les informations de limite de débit (limites synchrones/asynchrones et restantes) +- `includeUsageData` : inclure l'utilisation et les limites de la période de facturation + +### Règles d'alerte + +Au lieu de recevoir des notifications pour chaque exécution, configurez des règles d'alerte pour être notifié uniquement lorsque des problèmes sont détectés : + +**Échecs consécutifs** +- Alerte après X exécutions échouées consécutives (par exemple, 3 échecs d'affilée) +- Réinitialisation lorsqu'une exécution réussit + +**Taux d'échec** +- Alerte lorsque le taux d'échec dépasse X % au cours des Y dernières heures +- Nécessite un minimum de 5 exécutions dans la fenêtre +- Ne se déclenche qu'après l'écoulement complet de la fenêtre temporelle + +**Seuil de latence** +- Alerte lorsqu'une exécution prend plus de X secondes +- Utile pour détecter les flux de travail lents ou bloqués + +**Pic de latence** +- Alerte lorsque l'exécution est X % plus lente que la moyenne +- Compare à la durée moyenne sur la fenêtre temporelle configurée +- Nécessite un minimum de 5 exécutions pour établir une référence + +**Seuil de coût** +- Alerte lorsqu'une seule exécution coûte plus de X € +- Utile pour détecter les appels LLM coûteux + +**Aucune activité** +- Alerte lorsqu'aucune exécution ne se produit pendant X heures +- Utile pour surveiller les workflows programmés qui devraient s'exécuter régulièrement + +**Nombre d'erreurs** +- Alerte lorsque le nombre d'erreurs dépasse X dans une fenêtre temporelle +- Suit le total des erreurs, pas les erreurs consécutives + +Tous les types d'alertes incluent un temps de récupération d'une heure pour éviter le spam de notifications. + +### Configuration du webhook + +Pour les webhooks, des options supplémentaires sont disponibles : +- `url` : l'URL de votre point de terminaison webhook +- `secret` : secret optionnel pour la vérification de signature HMAC + +### Structure de la charge utile + +Lorsqu'une exécution de workflow se termine, Sim envoie la charge utile suivante (via webhook POST, e-mail ou Slack) : ```json { @@ -325,15 +371,15 @@ Lorsqu'une exécution de workflow est terminée, Sim envoie une requête POST à } ``` -### En-têtes de webhook +### En-têtes webhook -Chaque requête webhook inclut ces en-têtes : +Chaque requête webhook inclut ces en-têtes (canal webhook uniquement) : -- `sim-event` : Type d'événement (toujours `workflow.execution.completed`) -- `sim-timestamp` : Horodatage Unix en millisecondes +- `sim-event` : type d'événement (toujours `workflow.execution.completed`) +- `sim-timestamp` : horodatage Unix en millisecondes - `sim-delivery-id` : ID de livraison unique pour l'idempotence -- `sim-signature` : Signature HMAC-SHA256 pour vérification (si un secret est configuré) -- `Idempotency-Key` : Identique à l'ID de livraison pour la détection des doublons +- `sim-signature` : signature HMAC-SHA256 pour vérification (si un secret est configuré) +- `Idempotency-Key` : identique à l'ID de livraison pour la détection des doublons ### Vérification de signature @@ -408,14 +454,14 @@ Si vous configurez un secret webhook, vérifiez la signature pour vous assurer q -### Politique de réessai +### Politique de nouvelle tentative Les livraisons de webhook échouées sont réessayées avec un backoff exponentiel et du jitter : - Nombre maximum de tentatives : 5 -- Délais de réessai : 5 secondes, 15 secondes, 1 minute, 3 minutes, 10 minutes +- Délais de nouvelle tentative : 5 secondes, 15 secondes, 1 minute, 3 minutes, 10 minutes - Jitter : jusqu'à 10 % de délai supplémentaire pour éviter l'effet de horde -- Seules les réponses HTTP 5xx et 429 déclenchent des réessais +- Seules les réponses HTTP 5xx et 429 déclenchent de nouvelles tentatives - Les livraisons expirent après 30 secondes @@ -424,15 +470,15 @@ Les livraisons de webhook échouées sont réessayées avec un backoff exponenti ## Bonnes pratiques -1. **Stratégie de polling** : lors de l'interrogation des logs, utilisez la pagination basée sur curseur avec `order=asc` et `startDate` pour récupérer efficacement les nouveaux logs. +1. **Stratégie de polling** : Lors du polling des logs, utilisez la pagination basée sur curseur avec `order=asc` et `startDate` pour récupérer efficacement les nouveaux logs. -2. **Sécurité des webhooks** : configurez toujours un secret webhook et vérifiez les signatures pour vous assurer que les requêtes proviennent de Sim. +2. **Sécurité des webhooks** : Configurez toujours un secret de webhook et vérifiez les signatures pour vous assurer que les requêtes proviennent de Sim. -3. **Idempotence** : utilisez l'en-tête `Idempotency-Key` pour détecter et gérer les livraisons de webhook en double. +3. **Idempotence** : Utilisez l'en-tête `Idempotency-Key` pour détecter et gérer les livraisons de webhook en double. -4. **Confidentialité** : par défaut, `finalOutput` et `traceSpans` sont exclus des réponses. Activez-les uniquement si vous avez besoin des données et comprenez les implications en matière de confidentialité. +4. **Confidentialité** : Par défaut, `finalOutput` et `traceSpans` sont exclus des réponses. Activez-les uniquement si vous avez besoin des données et comprenez les implications en matière de confidentialité. -5. **Limitation de débit** : implémentez un backoff exponentiel lorsque vous recevez des réponses 429. Vérifiez l'en-tête `Retry-After` pour connaître le temps d'attente recommandé. +5. **Limitation de débit** : Implémentez un backoff exponentiel lorsque vous recevez des réponses 429. Vérifiez l'en-tête `Retry-After` pour connaître le temps d'attente recommandé. ## Limitation de débit @@ -443,12 +489,12 @@ L'API implémente une limitation de débit pour garantir une utilisation équita - **Plan Équipe** : 60 requêtes par minute - **Plan Entreprise** : Limites personnalisées -Les informations de limite de débit sont incluses dans les en-têtes de réponse : +Les informations de limitation de débit sont incluses dans les en-têtes de réponse : - `X-RateLimit-Limit` : Nombre maximum de requêtes par fenêtre - `X-RateLimit-Remaining` : Requêtes restantes dans la fenêtre actuelle - `X-RateLimit-Reset` : Horodatage ISO indiquant quand la fenêtre se réinitialise -## Exemple : Interrogation pour nouveaux journaux +## Exemple : Polling pour nouveaux logs ```javascript let cursor = null; diff --git a/apps/docs/content/docs/fr/execution/logging.mdx b/apps/docs/content/docs/fr/execution/logging.mdx index 5fad37bc281..1f6927e5779 100644 --- a/apps/docs/content/docs/fr/execution/logging.mdx +++ b/apps/docs/content/docs/fr/execution/logging.mdx @@ -147,4 +147,4 @@ L'instantané fournit : - Découvrez le [Calcul des coûts](/execution/costs) pour comprendre la tarification des workflows - Explorez l'[API externe](/execution/api) pour un accès programmatique aux journaux -- Configurez les [notifications Webhook](/execution/api#webhook-subscriptions) pour des alertes en temps réel \ No newline at end of file +- Configurez les [Notifications](/execution/api#notifications) pour des alertes en temps réel par webhook, e-mail ou Slack \ No newline at end of file diff --git a/apps/docs/content/docs/ja/execution/api.mdx b/apps/docs/content/docs/ja/execution/api.mdx index 1ddf67c1d37..b90c325d934 100644 --- a/apps/docs/content/docs/ja/execution/api.mdx +++ b/apps/docs/content/docs/ja/execution/api.mdx @@ -251,32 +251,78 @@ SimダッシュボードのユーザーセッティングからAPIキーを生 -## Webhookサブスクリプション +## 通知 -ワークフロー実行が完了したときにリアルタイム通知を受け取ります。WebhookはSim UIのワークフローエディタで設定されます。 +ワークフローの実行が完了したときに、Webhook、メール、またはSlackを通じてリアルタイム通知を受け取ることができます。通知はログページからワークスペースレベルで設定されます。 ### 設定 -Webhookは、ワークフローエディタUIを通じて各ワークフローに設定できます。コントロールバーのWebhookアイコンをクリックして、Webhookサブスクリプションを設定します。 +ログページからメニューボタンをクリックし、「通知を設定する」を選択して通知を設定します。 -
-
+**通知チャネル:** +- **Webhook**: エンドポイントにHTTP POSTリクエストを送信 +- **メール**: 実行詳細を含むメール通知を受信 +- **Slack**: Slackチャンネルにメッセージを投稿 -**利用可能な設定オプション:** -- `url`: WebhookエンドポイントURL -- `secret`: HMAC署名検証用のオプションシークレット -- `includeFinalOutput`: ペイロードにワークフローの最終出力を含める +**ワークフロー選択:** +- 監視する特定のワークフローを選択 +- または「すべてのワークフロー」を選択して現在および将来のワークフローを含める + +**フィルタリングオプション:** +- `levelFilter`: 受信するログレベル (`info`, `error`) +- `triggerFilter`: 受信するトリガータイプ (`api`, `webhook`, `schedule`, `manual`, `chat`) + +**オプションデータ:** +- `includeFinalOutput`: ワークフローの最終出力を含める - `includeTraceSpans`: 詳細な実行トレーススパンを含める -- `includeRateLimits`: ワークフロー所有者のレート制限情報を含める -- `includeUsageData`: ワークフロー所有者の使用状況と請求データを含める -- `levelFilter`: 受信するログレベルの配列 (`info`, `error`) -- `triggerFilter`: 受信するトリガータイプの配列 (`api`, `webhook`, `schedule`, `manual`, `chat`) -- `active`: Webhookサブスクリプションの有効化/無効化 +- `includeRateLimits`: レート制限情報(同期/非同期の制限と残り)を含める +- `includeUsageData`: 請求期間の使用状況と制限を含める + +### アラートルール + +すべての実行について通知を受け取る代わりに、問題が検出された場合にのみ通知されるようにアラートルールを設定できます: + +**連続失敗** +- X回連続して実行が失敗した後にアラート(例:3回連続の失敗) +- 実行が成功すると、リセットされます + +**失敗率** +- 過去Y時間の失敗率がX%を超えた場合にアラート +- ウィンドウ内で最低5回の実行が必要 +- 完全な時間ウィンドウが経過した後にのみトリガーされます + +**レイテンシーしきい値** +- 実行がX秒以上かかった場合にアラート +- 遅いまたは停止しているワークフローを検出するのに役立ちます + +**レイテンシースパイク** +- 実行が平均よりX%遅い場合にアラート +- 設定された時間ウィンドウでの平均所要時間と比較 +- ベースラインを確立するために最低5回の実行が必要 + +**コスト閾値** +- 単一の実行コストが$Xを超えた場合にアラート +- 高価なLLM呼び出しを検出するのに役立つ + +**アクティビティなし** +- X時間以内に実行がない場合にアラート +- 定期的に実行されるべきスケジュールされたワークフローの監視に役立つ + +**エラー数** +- 時間枠内でエラー数がXを超えた場合にアラート +- 連続ではなく、総エラー数を追跡 + +すべてのアラートタイプには、通知スパムを防ぐための1時間のクールダウンが含まれています。 + +### Webhook設定 + +Webhookの場合、追加オプションが利用可能です: +- `url`:WebhookエンドポイントURL +- `secret`:HMAC署名検証用のオプションシークレット -### Webhookペイロード +### ペイロード構造 -ワークフロー実行が完了すると、SimはWebhook URLにPOSTリクエストを送信します: +ワークフロー実行が完了すると、Simは以下のペイロードを送信します(webhook POST、メール、またはSlackを介して): ```json { @@ -327,17 +373,17 @@ Webhookは、ワークフローエディタUIを通じて各ワークフロー ### Webhookヘッダー -各Webhookリクエストには以下のヘッダーが含まれます: +各Webhookリクエストには以下のヘッダーが含まれます(Webhookチャンネルのみ): -- `sim-event`: イベントタイプ(常に `workflow.execution.completed`) -- `sim-timestamp`: ミリ秒単位のUnixタイムスタンプ -- `sim-delivery-id`: べき等性のための一意の配信ID -- `sim-signature`: 検証用のHMAC-SHA256署名(シークレットが設定されている場合) -- `Idempotency-Key`: 重複検出のための配信IDと同じ値 +- `sim-event`:イベントタイプ(常に`workflow.execution.completed`) +- `sim-timestamp`:ミリ秒単位のUnixタイムスタンプ +- `sim-delivery-id`:べき等性のための一意の配信ID +- `sim-signature`:検証用のHMAC-SHA256署名(シークレットが設定されている場合) +- `Idempotency-Key`:重複検出のための配信IDと同じ ### 署名検証 -Webhookシークレットを設定した場合、署名を検証してWebhookがSimからのものであることを確認してください: +Webhookシークレットを設定した場合、署名を検証してWebhookがSimからのものであることを確認します: @@ -412,21 +458,21 @@ Webhookシークレットを設定した場合、署名を検証してWebhookが 失敗したWebhook配信は指数バックオフとジッターを使用して再試行されます: -- 最大試行回数: 5回 -- リトライ間隔: 5秒、15秒、1分、3分、10分 -- ジッター: 最大10%の追加遅延(サンダリングハード問題を防ぐため) +- 最大試行回数:5回 +- リトライ遅延:5秒、15秒、1分、3分、10分 +- ジッター:サンダリングハード問題を防ぐために最大10%の追加遅延 - HTTP 5xxと429レスポンスのみがリトライをトリガー - 配信は30秒後にタイムアウト - Webhook配信は非同期で処理され、ワークフロー実行のパフォーマンスには影響しません。 + Webhook配信は非同期で処理され、ワークフロー実行のパフォーマンスに影響しません。 ## ベストプラクティス -1. **ポーリング戦略**: ログをポーリングする場合、`order=asc`と`startDate`を使用したカーソルベースのページネーションを使用して、新しいログを効率的に取得してください。 +1. **ポーリング戦略**: ログをポーリングする場合、`order=asc`と`startDate`を使用したカーソルベースのページネーションを利用して、新しいログを効率的に取得してください。 -2. **Webhookセキュリティ**: 常にWebhookシークレットを設定し、署名を検証してリクエストがSimからのものであることを確認してください。 +2. **Webhookセキュリティ**: 常にWebhookシークレットを設定し、署名を検証して、リクエストがSimからのものであることを確認してください。 3. **べき等性**: `Idempotency-Key`ヘッダーを使用して、重複するWebhook配信を検出し処理してください。 @@ -445,7 +491,7 @@ APIは公平な使用を確保するためにレート制限を実装してい レート制限情報はレスポンスヘッダーに含まれています: - `X-RateLimit-Limit`: ウィンドウあたりの最大リクエスト数 -- `X-RateLimit-Remaining`: 現在のウィンドウで残りのリクエスト数 +- `X-RateLimit-Remaining`: 現在のウィンドウで残っているリクエスト数 - `X-RateLimit-Reset`: ウィンドウがリセットされるISOタイムスタンプ ## 例:新しいログのポーリング @@ -495,7 +541,7 @@ async function pollLogs() { setInterval(pollLogs, 30000); ``` -## 例:ウェブフックの処理 +## 例:Webhookの処理 ```javascript import express from 'express'; diff --git a/apps/docs/content/docs/ja/execution/logging.mdx b/apps/docs/content/docs/ja/execution/logging.mdx index e7d7c81bc7e..23e6539fe3d 100644 --- a/apps/docs/content/docs/ja/execution/logging.mdx +++ b/apps/docs/content/docs/ja/execution/logging.mdx @@ -145,6 +145,6 @@ Simは異なるワークフローとユースケースに対応する2つの補 ## 次のステップ -- ワークフロー価格設定を理解するための[コスト計算](/execution/costs)について学ぶ +- ワークフローの価格設定を理解するための[コスト計算](/execution/costs)について学ぶ - プログラムによるログアクセスのための[外部API](/execution/api)を探索する -- リアルタイムアラート用の[Webhookによる通知](/execution/api#webhook-subscriptions)を設定する \ No newline at end of file +- webhook、メール、またはSlackによるリアルタイムアラートのための[通知](/execution/api#notifications)を設定する \ No newline at end of file diff --git a/apps/docs/content/docs/zh/execution/api.mdx b/apps/docs/content/docs/zh/execution/api.mdx index f65b4e5f035..3df09d944a6 100644 --- a/apps/docs/content/docs/zh/execution/api.mdx +++ b/apps/docs/content/docs/zh/execution/api.mdx @@ -251,32 +251,78 @@ curl -H "x-api-key: YOUR_API_KEY" \ -## Webhook 订阅 +## 通知 -在工作流执行完成时获取实时通知。Webhook 可通过 Sim UI 的工作流编辑器进行配置。 +通过 webhook、电子邮件或 Slack 获取工作流执行完成的实时通知。通知在工作区级别从日志页面进行配置。 ### 配置 -可以通过工作流编辑器 UI 为每个工作流配置 Webhook。点击控制栏中的 Webhook 图标以设置 Webhook 订阅。 +通过点击菜单按钮并选择“配置通知”从日志页面配置通知。 -
-
+**通知渠道:** +- **Webhook**:向您的端点发送 HTTP POST 请求 +- **电子邮件**:接收包含执行详情的电子邮件通知 +- **Slack**:向 Slack 频道发送消息 -**可用配置选项:** -- `url`:您的 Webhook 端点 URL -- `secret`:用于 HMAC 签名验证的可选密钥 -- `includeFinalOutput`:在负载中包含工作流的最终输出 +**工作流选择:** +- 选择特定的工作流进行监控 +- 或选择“所有工作流”以包含当前和未来的工作流 + +**过滤选项:** +- `levelFilter`:接收的日志级别(`info`,`error`) +- `triggerFilter`:接收的触发类型(`api`,`webhook`,`schedule`,`manual`,`chat`) + +**可选数据:** +- `includeFinalOutput`:包含工作流的最终输出 - `includeTraceSpans`:包含详细的执行跟踪跨度 -- `includeRateLimits`:包含工作流所有者的速率限制信息 -- `includeUsageData`:包含工作流所有者的使用和计费数据 -- `levelFilter`:接收的日志级别数组(`info`, `error`) -- `triggerFilter`:接收的触发类型数组(`api`, `webhook`, `schedule`, `manual`, `chat`) -- `active`:启用/禁用 Webhook 订阅 +- `includeRateLimits`:包含速率限制信息(同步/异步限制和剩余) +- `includeUsageData`:包含计费周期的使用情况和限制 + +### 警报规则 + +与其为每次执行接收通知,不如配置警报规则,仅在检测到问题时收到通知: + +**连续失败** +- 在 X 次连续失败执行后发出警报(例如,连续 3 次失败) +- 当执行成功时重置 + +**失败率** +- 当失败率在过去 Y 小时内超过 X% 时发出警报 +- 需要窗口内至少 5 次执行 +- 仅在整个时间窗口结束后触发 + +**延迟阈值** +- 当任何执行时间超过 X 秒时发出警报 +- 用于捕捉缓慢或挂起的工作流 + +**延迟峰值** +- 当执行时间比平均值慢 X% 时发出警报 +- 与配置时间窗口内的平均持续时间进行比较 +- 需要至少 5 次执行以建立基线 + +**成本阈值** +- 当单次执行成本超过 $X 时发出警报 +- 用于捕捉高成本的 LLM 调用 + +**无活动** +- 当 X 小时内没有执行发生时发出警报 +- 用于监控应定期运行的计划工作流 + +**错误计数** +- 当错误计数在某个时间窗口内超过 X 时发出警报 +- 跟踪总错误数,而非连续错误 + +所有警报类型都包括 1 小时的冷却时间,以防止通知过多。 + +### Webhook 配置 + +对于 webhooks,可用以下附加选项: +- `url`:您的 webhook 端点 URL +- `secret`:用于 HMAC 签名验证的可选密钥 -### Webhook 负载 +### 负载结构 -当工作流执行完成时,Sim 会向您的 Webhook URL 发送一个 POST 请求: +当工作流执行完成时,Sim 会发送以下负载(通过 webhook POST、电子邮件或 Slack): ```json { @@ -325,9 +371,9 @@ curl -H "x-api-key: YOUR_API_KEY" \ } ``` -### Webhook 请求头 +### Webhook 头信息 -每个 webhook 请求都包含以下请求头: +每个 webhook 请求都包含以下头信息(仅限 webhook 渠道): - `sim-event`:事件类型(始终为 `workflow.execution.completed`) - `sim-timestamp`:以毫秒为单位的 Unix 时间戳 @@ -410,7 +456,7 @@ curl -H "x-api-key: YOUR_API_KEY" \ ### 重试策略 -失败的 webhook 交付会使用指数退避和抖动进行重试: +失败的 webhook 交付将使用指数退避和抖动进行重试: - 最大尝试次数:5 - 重试延迟:5 秒、15 秒、1 分钟、3 分钟、10 分钟 @@ -424,15 +470,15 @@ curl -H "x-api-key: YOUR_API_KEY" \ ## 最佳实践 -1. **轮询策略**:在轮询日志时,使用基于游标的分页与 `order=asc` 和 `startDate` 高效获取新日志。 +1. **轮询策略**:在轮询日志时,使用基于游标的分页与 `order=asc` 和 `startDate` 来高效获取新日志。 -2. **Webhook 安全性**:始终配置 webhook 密钥并验证签名以确保请求来自 Sim。 +2. **Webhook 安全性**:始终配置一个 webhook 密钥并验证签名,以确保请求来自 Sim。 -3. **幂等性**:使用 `Idempotency-Key` 请求头检测并处理重复的 webhook 交付。 +3. **幂等性**:使用 `Idempotency-Key` 标头检测并处理重复的 webhook 交付。 -4. **隐私**:默认情况下,`finalOutput` 和 `traceSpans` 不包含在响应中。仅在需要这些数据并了解隐私影响时启用它们。 +4. **隐私**:默认情况下,`finalOutput` 和 `traceSpans` 会从响应中排除。仅在需要这些数据并了解隐私影响时启用它们。 -5. **速率限制**:当收到 429 响应时,实施指数退避。检查 `Retry-After` 请求头以获取推荐的等待时间。 +5. **速率限制**:当收到 429 响应时,实施指数退避。检查 `Retry-After` 标头以获取推荐的等待时间。 ## 速率限制 @@ -443,7 +489,7 @@ API 实现了速率限制以确保公平使用: - **团队计划**:每分钟 60 次请求 - **企业计划**:自定义限制 -速率限制信息包含在响应头中: +速率限制信息包含在响应标头中: - `X-RateLimit-Limit`:每个窗口的最大请求数 - `X-RateLimit-Remaining`:当前窗口中剩余的请求数 - `X-RateLimit-Reset`:窗口重置时的 ISO 时间戳 @@ -495,7 +541,7 @@ async function pollLogs() { setInterval(pollLogs, 30000); ``` -## 示例:处理 Webhooks +## 示例:处理 Webhook ```javascript import express from 'express'; diff --git a/apps/docs/content/docs/zh/execution/logging.mdx b/apps/docs/content/docs/zh/execution/logging.mdx index 1c56e9aa3a8..62285c57af3 100644 --- a/apps/docs/content/docs/zh/execution/logging.mdx +++ b/apps/docs/content/docs/zh/execution/logging.mdx @@ -146,5 +146,5 @@ Sim 提供了两种互补的日志界面,以适应不同的工作流和使用 ## 下一步 - 了解 [成本计算](/execution/costs) 以理解工作流定价 -- 探索 [外部 API](/execution/api) 以进行编程日志访问 -- 设置 [Webhook 通知](/execution/api#webhook-subscriptions) 以获取实时警报 \ No newline at end of file +- 探索 [外部 API](/execution/api) 以编程方式访问日志 +- 设置 [通知](/execution/api#notifications) 以通过 webhook、电子邮件或 Slack 接收实时警报 \ No newline at end of file diff --git a/apps/docs/i18n.lock b/apps/docs/i18n.lock index 99242954189..3ac592fc537 100644 --- a/apps/docs/i18n.lock +++ b/apps/docs/i18n.lock @@ -4488,7 +4488,7 @@ checksums: content/29: 1a98ac22faecc543d8f2d4065023e774 content/30: fa0c9faaa2ffef89fb19f70e271912c3 content/31: c2cef2688104adaf6641092f43d4969a - content/32: ebdbef07196127ef2c7ba23491f62578 + content/32: 16ae245dc265324548e4b7f443b57d71 0334b7b88d5f6e736984d25a5913ce74: meta/title: 30c54e4dc4ce599b87d94be34a8617f5 content/0: c2b41859d63a751682f0d9aec488e581 @@ -4639,43 +4639,57 @@ checksums: content/31: 620d49f6fa198176bf6e59685e246e2c content/32: 736aa604a0310410baaf7723027d3cdb content/33: 3304a33dfb626c6e2267c062e8956a9d - content/34: 3d833eb8f8e6bd1feebea1cb6c388309 - content/35: f4e933e28b226f3b5b35d1401d4a8649 + content/34: 1dcfad686ae5b282bc1666e422d3a05c + content/35: 852efbf14e8f30db0806cd41b90812ac content/36: 95ec79465a3a0d67bf1eaf0ef0574b71 - content/37: a995cdc6044f9b6745b7fc7e3a0d6d79 - content/38: 4a6b924e56225096e27be99282e0924d - content/39: 9a32a035dfbb07c1daec8939fcec70fd - content/40: ffd9a3c7a121a6a22758a7efc9af55b9 - content/41: 8bece06923c42ca045eaffc282b8a0e6 - content/42: 68926c22cd421a38f0fb4e51eb68dca5 - content/43: f29cfb9cfcc3e4eb4bd63c0c4aa78832 - content/44: d27a1d4f71d599ebf7b0dd6f748a5e04 - content/45: c378967adfff8419115144415d96f47c - content/46: 44383ae82f1d6e0e0bb70bfc4dc558d6 - content/47: c681ed9371c4285112b6cf0c75a14d90 - content/48: 7c872ba10b1a7bd9aa66f965b8aa35c0 - content/49: c6ae2bcbff69a19c7bf2a50de79a6d45 - content/50: cbfe1ade60934bcf4914255350760e4f - content/51: 42b378d3e7ee5b53893f4aed2df7371e - content/52: 3304a33dfb626c6e2267c062e8956a9d - content/53: 7d213c6776c3a2c9094cec87ff25b533 - content/54: 4abd5155d278bf5a8e313c464cc232c7 - content/55: 54d9518f5153dfc440daaeb4c30aa236 - content/56: a577d5715cc0369536eed19cb5a4e6ad - content/57: b2a4a0c279f47d58a2456f25a1e1c6f9 - content/58: 4f0ae0ea5cd3920a1f5a4a4cc42c3e10 - content/59: 25545e546719f2dce0e3865aef7a5f1f - content/60: b3253e17dc54f4092bffb91d55ac5afa - content/61: c13873edfa750ce6caa155ef2f3f1883 - content/62: 0bc07e36a42f7e25d5426b6a9deaac02 - content/63: 017c829dd54fde20fa9fac7712342236 - content/64: ceba97287cca68b1291142a38175d6d8 - content/65: 02072ea1e956490139dbe8bbb0bc3e16 - content/66: 44871834b9cb423a9978843c08623979 - content/67: 0b22ed8a7e64005c666505c48e09f715 - content/68: 494dcadaea5e62eddd599700511ecee5 - content/69: 8332b16a0bf7a4c862f5104e9ffeb98d - content/70: 90e2f984a874a8f954ddfd127ec8178a + content/37: fc5f5a62b8d58cabbb3e26f1da4fb174 + content/38: 361f583959e1599ed744b8bb076d7a63 + content/39: 34ce28c18ded945e0ed7adc2fea7a767 + content/40: cbfe3780725022693dbe8bca77166ebf + content/41: 6e6eca3194853de1383060f28e62428e + content/42: ab22182e07b366a5ad8aeaa4cd33c98b + content/43: 9757cdca1f88b3501ab320067ffc69f5 + content/44: a9766f789c10b20e7616a89977913461 + content/45: 93fcde5246eed5fbbda2c38499991caa + content/46: 74075c0a46913bfb13c5677706a6add1 + content/47: ec9cca1ed40ff37ecbbd9079ff7e20b8 + content/48: 568646d11f867050de7dc098c172cbdb + content/49: 602e3ba652a74c425b233faa001fd885 + content/50: 0dd6137b756a3b6c9c68adc89bda4766 + content/51: 827b9be3e2fbc0bff1157cbdfbd9cebd + content/52: e991745d67395e34fe24acbec325163c + content/53: 5712e5497ca7e787d96c18eec0c70715 + content/54: 8265f9e2c583cdaa2428440263dd5456 + content/55: be210009a4f28628db2583119b604dee + content/56: 68926c22cd421a38f0fb4e51eb68dca5 + content/57: f29cfb9cfcc3e4eb4bd63c0c4aa78832 + content/58: c47dd793baa3187e133d27545832e474 + content/59: c378967adfff8419115144415d96f47c + content/60: 44383ae82f1d6e0e0bb70bfc4dc558d6 + content/61: c681ed9371c4285112b6cf0c75a14d90 + content/62: 7c872ba10b1a7bd9aa66f965b8aa35c0 + content/63: c6ae2bcbff69a19c7bf2a50de79a6d45 + content/64: cbfe1ade60934bcf4914255350760e4f + content/65: 42b378d3e7ee5b53893f4aed2df7371e + content/66: 3304a33dfb626c6e2267c062e8956a9d + content/67: 7d213c6776c3a2c9094cec87ff25b533 + content/68: 4abd5155d278bf5a8e313c464cc232c7 + content/69: 54d9518f5153dfc440daaeb4c30aa236 + content/70: a577d5715cc0369536eed19cb5a4e6ad + content/71: b2a4a0c279f47d58a2456f25a1e1c6f9 + content/72: 4f0ae0ea5cd3920a1f5a4a4cc42c3e10 + content/73: 25545e546719f2dce0e3865aef7a5f1f + content/74: b3253e17dc54f4092bffb91d55ac5afa + content/75: c13873edfa750ce6caa155ef2f3f1883 + content/76: 0bc07e36a42f7e25d5426b6a9deaac02 + content/77: 017c829dd54fde20fa9fac7712342236 + content/78: ceba97287cca68b1291142a38175d6d8 + content/79: 02072ea1e956490139dbe8bbb0bc3e16 + content/80: 44871834b9cb423a9978843c08623979 + content/81: 0b22ed8a7e64005c666505c48e09f715 + content/82: 494dcadaea5e62eddd599700511ecee5 + content/83: 8332b16a0bf7a4c862f5104e9ffeb98d + content/84: 90e2f984a874a8f954ddfd127ec8178a 0e322683b6d10e9fa8c9a17ff15a5fb1: meta/title: a912b3c7fb996fefccb182cf5c4a3fbc content/0: e1f8d4b13687e7d73b5b5fbb4cb6142d