Flux & Séquences
But & portée
Ce document décrit les chemins majeurs end-to-end de SalamBot à travers des
séquences Mermaid. Il couvre les flux critiques pour les canaux Facebook,
WhatsApp et Webchat, avec leurs contrôles, erreurs et SLO. Les détails d'API
sont documentés dans API/reference.md.
Acteurs & conventions
Acteurs principaux
- Channel : Ingestion des messages (Facebook, WhatsApp, Webchat, Email)
- API Gateway : Point d'entrée, authentification, rate limiting
- Orchestrateur : Coordination des flux, routage intelligent
- NLU : Analyse d'intention et entités
- Recherche (RAG) : Récupération de contexte pertinent
- LLM Router : Génération de réponses via modèles
- Ticketing : Gestion des escalades
- Incident : Détection et alertes
- Admin : Politiques et configurations
- Observabilité : Métriques et traces
- Stores : PostgreSQL, Qdrant, MinIO
Envelope I/O standard
{
"schema_version": "1.0",
"tenant": "acme",
"channel": "facebook",
"message_id": "msg_123",
"correlation_id": "corr_abc",
"timestamp": "2025-08-14T10:00:00Z",
"locale": "fr-MA",
"data": { "NOTE": "payload spécifique" }
}
Traces
Propagation du correlation_id bout-à-bout pour traçabilité complète.
sequenceDiagram
autonumber
participant FB as Facebook
participant GW as API Gateway
participant SI as Social
participant ORC as Orchestrateur
participant NLU as NLU
participant RAG as RAG
participant LLM as LLM Router
participant TK as Ticketing
FB->>GW: Webhook comment
GW->>SI: normalize
SI-->>ORC: message
ORC->>NLU: Analyze intent
NLU->>ORC: Intent + confidence
alt confidence >= seuil
ORC->>RAG: Retrieve context
RAG-->>ORC: Context data
ORC->>LLM: Generate response
LLM->>ORC: Response text
ORC->>FB: Send DM
else confidence < seuil
ORC->>TK: Create ticket
TK->>ORC: Ticket created
ORC->>FB: Escalation DM
end
Points de contrôle
- Validation signature Facebook webhook
- Vérification HMAC/sha256 + tolérance horloge ±5 min (webhook)
- Limite taille texte (4000 chars)
- Isolation tenant stricte
- Vérification rate limits
Événements émis
| event |
émis par |
| social.ingested |
Social Ingestion |
| nlu.analyzed |
NLU |
| rag.retrieved |
RAG |
| router.generated |
LLM Router |
| ticket.created |
Ticketing |
SLO par flux
| métrique |
cible |
| p95 end-to-end |
≤ 2500 ms |
| auto-résolution |
≥ 60% |
Erreurs/Timeouts clés
- 400 invalid_input : Payload malformé
- 401 unauthorized : absence ou invalidité d'auth côté gateway
- 403 permission_denied : signature invalide / interdit
- 429 rate_limited : Dépassement quotas
- 504 timeout : RAG/LLM indisponible
Flux #2 — WhatsApp → Incident/Broadcast (détection et alerte)
sequenceDiagram
autonumber
participant WA as WhatsApp
participant GW as API Gateway
participant ORC as Orchestrateur
participant NLU as NLU
participant INC as Incident
participant NOT as Notification
WA->>GW: Message client
GW->>ORC: Route message
ORC->>NLU: Analyze urgency
NLU->>ORC: Intent + urgency
alt urgency = high
ORC->>INC: Trigger incident
INC->>NOT: Send alerts
NOT->>INC: Delivery ack
INC->>ORC: Incident opened
end
Points de contrôle
- Seuils d'alerte configurables
- Prévention spam incidents : max 1 / 5 min / tenant
- Prévention spam broadcasts : max 1 / 5 min / tenant
- Validation urgence NLU
Événements émis
| event |
émis par |
| nlu.analyzed |
NLU |
| incident.opened |
Incident |
| broadcast.sent |
Incident |
SLO par flux
| métrique |
cible |
| MTTA |
≤ 5 min |
| livraison broadcast |
≥ 98% |
Erreurs/Timeouts clés
- 400 invalid_input (payload invalide)
- 403 permission_denied (règles/politiques)
- 429 rate_limited
- 504 timeout
Flux #3 — Webchat → Réponse contrainte par politiques (Admin)
sequenceDiagram
autonumber
participant WC as Webchat
participant GW as API Gateway
participant ORC as Orchestrateur
participant ADM as Admin
participant RAG as RAG
participant LLM as LLM Router
WC->>GW: User message
GW->>ORC: Route message
ORC->>ADM: Get policies
ADM->>ORC: Active rules
opt context needed
ORC->>RAG: Retrieve docs
RAG->>ORC: Context data
end
ORC->>LLM: Generate (+ policies)
LLM->>ORC: Filtered response
ORC->>WC: Stream response
Points de contrôle
- Respect langue sortie (fr-MA)
- Tokens max selon policy
max_tokens (Admin)
- Filtrage contenu sensible
- Validation politiques tenant
Événements émis
| event |
émis par |
| admin.policy_updated |
Admin |
| router.generated |
LLM Router |
SLO par flux
| métrique |
cible |
| p95 réponse |
≤ 1500 ms |
| taux filtrage |
≤ 5% |
Erreurs/Timeouts clés
- 400 invalid_input
- 429 rate_limited
- 500 internal_error
Idempotency & replays
- Idempotency-Key au niveau API Gateway
- Réexécution safe sur NLU/RAG/Router si même (tenant, channel, message_id)
- Cache réponses 24h pour rejeu exact
Sécurité & PII par flux
- PII masking au bord (ingestion)
- Validation Orchestrateur avant traitement
- Rétention 30–90 jours configurable par tenant
- Chiffrement en transit et au repos
Observabilité — traces & logs
Corrélation
Unique via correlation_id propagé dans tous les services.
Champs de log clés
tenant, channel, message_id, correlation_id
latency_ms, status_code, error_type
nlu_confidence, rag_docs_count, llm_tokens
Attributs de trace OTel
service.name, trace_id, span_id
Références