> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Heures de silence : portails de canal à l'échelle de l'organisation vs. la fenêtre de secours de campagne

> Choisissez votre posture d'heures de silence : le portail de canal par organisation, la fenêtre de secours pour les envois drip/journey et l'interaction des deux réglages pour les envois 1:1 publics et le trafic de campagne.

# Heures de silence : portails de canal à l'échelle de l'organisation vs. la fenêtre de secours de campagne

Le portail d'heures de silence d'Orbit appartient au locataire : tout ce
qui figure sur cette page est un contrôle que **vous** configurez (ou
choisissez de laisser désactivé). La seule exception est la fenêtre
fédérale TCPA de voix pour les destinataires américains, traitée dans sa
propre section ci-dessous. L'activation des heures de silence est votre
décision — rien ici n'est exigé par CAN-SPAM ou le RGPD.

Cette page est le manuel d'exploitation de ce portail. Trois surfaces
composent votre posture :

1. **Le portail de canal à l'échelle de l'organisation** — des
   commutateurs par canal dans les paramètres de l'organisation
   (`settings → quiet_hours.<channel>.enabled`), écrits via
   `PUT /api/v1/settings/general` et reflétés dans les paramètres de
   l'organisation du tableau de bord (voir aussi
   [Posture de conformité](/compliance/posture-overview)).
2. **La fenêtre de secours de campagne** — une seule paire début/fin à
   l'échelle de l'organisation pour les envois drip et journey dont la
   ligne de campagne ne porte pas de fenêtre explicite. Dans le tableau
   de bord : **Paramètres → Limites de campagne → Heures de silence par
   défaut** ; via l'API :
   `GET`/`PUT /api/v1/campaigns/quiet-hours/settings`.
3. **Le point de terminaison de prévisualisation** —
   `GET /api/v1/compliance/quiet-hours/preview`, une vérification en
   lecture seule qui répond : « cet envoi vers ce destinataire
   passerait-il maintenant ? ». Exécutez-la avant chaque déploiement ;
   elle est traitée dans le manuel ci-dessous.

## Les deux fenêtres

| Réglage                                                                                   | Couvre                                                                                                                                     | Configuré où                                                                                                   |
| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------- |
| Portail de canal à l'échelle de l'organisation (`organizations → settings → quiet_hours`) | Chaque envoi sur chaque canal activé : tableau de bord, API, flux, diffusion de campagne                                                   | Le bloc `quiet_hours` dans les paramètres de l'organisation (voir ci-dessous)                                  |
| Fenêtre de secours de campagne                                                            | Uniquement les envois drip + journey, et uniquement quand la ligne de campagne n'a pas ses propres `quiet_hours_start` / `quiet_hours_end` | Paramètres → Limites de campagne → Heures de silence par défaut, ou `campaigns/quiet-hours/settings` via l'API |

Le secours de campagne est exactement ce que son nom dit — un secours,
pas un second portail. Ordre de résolution pour un envoi de campagne :
d'abord la fenêtre propre de la ligne de campagne, puis le secours de
l'organisation, puis le défaut de la plateforme 21:00 → 09:00 (les heures
de silence s'étendent de 21 h à 9 h, heure locale du destinataire).

Les deux réglages peuvent diverger. Un envoi diffusé par campagne évalue
la fenêtre du chemin de campagne comme une couche ; le portail de canal de
l'organisation — lorsque vous avez activé ce canal — est une couche
séparée évaluée au point d'envoi. Traitez le portail de l'organisation
comme la posture pour le trafic 1:1 et le secours de campagne comme le
régime par défaut pour le trafic en masse. Un envoi bloqué rapporte
`next_allowed_at` — planifiez autour de la fenêtre plutôt que de réessayer.

Les secours que vous pouvez fixer à l'une ou l'autre des couches ne
peuvent que **resserrer** l'enveloppe ; ils n'élargissent jamais un
portail de canal que vous avez activé.

## Portail par canal à l'échelle de l'organisation

Le portail de canal est opt-in par canal. Chaque entrée par canal prend en
charge :

| Champ          | Signification                                                                                                                                          |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `enabled`      | Si le portail s'applique à ce canal. Tous les canaux sont à `false` par défaut.                                                                        |
| `start_hour`   | Heure de début inclusive au format 24h (0–23), par exemple `8` pour 8 h heure locale du destinataire.                                                  |
| `end_hour`     | Heure de fin exclusive au format 24h (0–23), par exemple `21` pour 21 h heure locale du destinataire. `start_hour > end_hour` est une fenêtre de nuit. |
| `allowed_days` | Liste facultative des jours de la semaine autorisés, `0` = dimanche … `6` = samedi. Omettez pour autoriser tous les jours.                             |

Clés à l'échelle de l'organisation (s'appliquent à tous les canaux
ensemble) :

| Clé                             | Signification                                                                                                                                                                                           |
| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `default`                       | Une fenêtre partielle qui complète les champs qu'une entrée par canal n'a pas fixés.                                                                                                                    |
| `unknown_timezone_policy`       | `skip` (défaut), `enforce_utc` ou `deny` — voir la section fuseau horaire ci-dessous.                                                                                                                   |
| `consent_overrides_quiet_hours` | Quand `true` (défaut), un destinataire disposant d'un registre de consentement explicite franchit le portail — l'exception TCPA « prior express consent ». Ne fonctionne que sur les canaux non vocaux. |

### Posture par défaut par canal

Tant que vous n'activez pas un canal, rien n'est retenu. Quand vous
activez un canal sans préciser d'heures, les heures de la plateforme
entrent en vigueur :

| Canaux                                                         | Fenêtre par défaut (heure locale du destinataire) |
| -------------------------------------------------------------- | ------------------------------------------------- |
| `sms`, `mms`, `rcs`, `viber`, `telegram`, `voice`              | 08:00–21:00                                       |
| `whatsapp`, `instagram`, `messenger`, `apple_messages`, `line` | 09:00–21:00                                       |
| `email`, `fax`, `push`, `web_chat`                             | 08:00–21:00 lorsqu'activé                         |

L'ensemble complet des canaux acceptés par le portail : `sms`, `mms`,
`whatsapp`, `rcs`, `viber`, `telegram`, `voice`, `email`, `instagram`,
`messenger`, `line`, `apple_messages`, `fax`, `push`, `web_chat`.

### Deux exceptions qui maintiennent le trafic essentiel en circulation

* **Consentement exprès préalable** — avec
  `consent_overrides_quiet_hours` à `true` (défaut), un destinataire
  disposant d'un registre de consentement explicite franchit tout canal
  non vocal. La voix ne prend jamais cette exception.
* **Voie de trafic transactionnel** — les envois que l'appelant marque
  comme transactionnels (OTP, alertes, notifications de compte) sont
  exemptés du portail même sur un canal activé. La voix ne prend jamais
  cette exception non plus.

Mettez `consent_overrides_quiet_hours` à `false` uniquement si vous
voulez des envois arrêtés sans exceptions de consentement.

## Fenêtre de secours de campagne

Tout appelant authentifié la lit ; seul le propriétaire/administrateur
l'écrit.

Lisez la fenêtre de secours actuelle :

```bash theme={null}
curl https://api.orbit.devotel.io/api/v1/campaigns/quiet-hours/settings \
  -H "Authorization: Bearer $ORBIT_API_KEY"
```

```json theme={null}
{
  "enabled": false,
  "start_hour": null,
  "end_hour": null,
  "platform_default_start": 21,
  "platform_default_end": 9
}
```

`platform_default_start` / `platform_default_end` renvoient les heures que
les envois drip et journey utilisent tant que la substitution est
désactivée — héritez-les ou remplacez-les, à vous de choisir. Dans le
tableau de bord, ce formulaire se trouve sous **Paramètres → Limites de
campagne → Heures de silence par défaut**. Fixez votre propre fenêtre (les
deux heures sont requises quand `enabled` vaut true) :

```bash theme={null}
curl -X PUT https://api.orbit.devotel.io/api/v1/campaigns/quiet-hours/settings \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "enabled": true, "start_hour": 22, "end_hour": 7 }'
```

Revenez au défaut de la plateforme :

```bash theme={null}
curl -X PUT https://api.orbit.devotel.io/api/v1/campaigns/quiet-hours/settings \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "enabled": false }'
```

Les fenêtres de nuit (par exemple début `22`, fin `7`) sont acceptées aux
deux couches — une paire `start > end` traverse minuit.

## Résolution du fuseau horaire du destinataire

Le portail travaille en *heure locale du destinataire*. La résolution du
fuseau horaire suit cette chaîne :

1. Une indication explicite `recipientTimezone` de l'appelant, lorsqu'elle
   est fournie.
2. Indicatif de zone des États-Unis → fuseau horaire IANA, pour les
   numéros +1.
3. Code pays E.164 → un fuseau horaire IANA représentatif (Europe, Asie,
   Amériques et marchés opérateurs courants).
4. Pour les destinataires e-mail, le fuseau horaire par défaut de
   l'organisation.
5. Quand rien de tout cela ne se résout — la `unknown_timezone_policy` de
   l'organisation (également configurable dans le tableau de bord sous
   **Paramètres → Voix**) :

| Politique                                                                   | Comportement                                                                          |
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `skip` (défaut pour tout canal sauf voix vers des destinataires américains) | Autoriser — fail-open pour les destinataires hors juridiction américaine.             |
| `deny` (défaut uniquement pour voix vers des destinataires américains)      | Bloquer. Renvoie `422 QUIET_HOURS_TIMEZONE_UNKNOWN` (voix : `TCPA_TIMEZONE_UNKNOWN`). |
| `enforce_utc`                                                               | Évaluer par rapport à UTC — une fenêtre déterministe indépendamment du destinataire.  |

Si le destinataire se résout bien en un fuseau horaire, un blocage normal
de canal activé renvoie `422 QUIET_HOURS_BLOCKED` (voix :
`TCPA_DIALING_WINDOW_BLOCKED`) avec la fenêtre et `next_allowed_at` dans
le détail de l'erreur.

## Exception fédérale TCPA de voix

La voix de campagne et de composeur vers des **destinataires américains**
est bloquée de façon stricte en dehors de la fenêtre fédérale 8 h – 21 h
heure locale du destinataire — aucun portail d'organisation, fenêtre de
secours ou drapeau de consentement ne la desserre, et un destinataire
américain dont le fuseau horaire ne peut pas être résolu est bloqué en
fail-closed. C'est le seul réglage que la plateforme possède ; il
s'applique uniquement à la voix de campagne et de composeur, pas aux
appels 1:1 ad hoc ni à aucun canal de messagerie.

Les destinataires non américains jouent selon le portail ordinaire : la
politique `skip` fail-open s'applique aux destinataires hors juridiction
américaine, et votre propre portail du canal de voix (s'il est activé)
s'ajoute par-dessus. Vous pouvez toujours resserrer au-delà de la fenêtre
fédérale — par exemple un portail de voix de 09:00–20:00 heure locale du
destinataire — mais jamais l'élargir.

La voix 1:1 ad hoc depuis le tableau de bord en dehors de la fenêtre
fédérale compose avec un journal de notification, sauf si vous avez activé
le canal `voice` sur le portail de l'organisation, ce qui en fait une
retenue stricte (`422 TCPA_DIALING_WINDOW_BLOCKED`).

## Le consentement prime sur les heures de silence

Avec `consent_overrides_quiet_hours: true` (défaut), un destinataire pour
lequel vous détenez un consentement explicite franchit le portail sur les
canaux **non vocaux** — l'exception TCPA « prior express consent ». Un
destinataire autorisé reste joignable pendant vos heures fermées ; un
contact sans registre de consentement est retenu jusqu'à l'ouverture de la
fenêtre.

Mettez-le à `false` quand le consentement ne doit jamais desserrer votre
fenêtre. Le portail ignore entièrement le drapeau sur le canal `voice` —
la voix dépend de la fenêtre fédérale et des superpositions étatiques, pas
de l'exception de consentement.

## Superpositions étatiques mini-TCPA

Certains États américains superposent une fenêtre d'appel plus stricte ou
une interdiction de jour de la semaine aux heures fédérales (l'interdiction
du dimanche en Floride, les fenêtres de l'Oklahoma/Mississippi et autres).
Les superpositions se composent selon **le plus restrictif gagne** : un
envoi doit franchir la fenêtre fédérale *et* chaque superposition étatique
applicable ; la superposition peut resserrer mais jamais élargir. Les
blocages de voix se retracent avec ces motifs d'échec :

* `outside_state_window` — une superposition étatique a resserré la fenêtre
  et cette heure est tombée en dehors.
* `state_blocked_day` — la superposition interdit entièrement de composer
  ce jour de la semaine.

Le tableau complet État par État et quels États du destinataire se
résolvent dans chaque superposition se trouve dans
[Fenêtres d'appel par État américain](/compliance/state-calling-windows).

## Manuel d'exploitation

**Liste de contrôle de déploiement.** Avant d'activer un canal ou de
pousser une liste large :

1. Prévisualisez un échantillon de destinataires avec
   `GET /api/v1/compliance/quiet-hours/preview?phone=<E.164>&channel=<channel>`,
   en ajoutant `timezone_override=<IANA>` uniquement quand votre CRM
   fournit une meilleure indication que celle que le numéro résout.
2. Confirmez le bloc du portail de l'organisation :
   `GET /api/v1/settings/general` et lisez l'arborescence `quiet_hours`
   avant le `PUT` — les écritures fusionnent au niveau supérieur, mais la
   clé `quiet_hours` elle-même est remplacée en gros (voir la section
   écriture ci-dessous).
3. Pour les déploiements en masse, surveillez
   `GET /api/v1/settings/compliance-health` — ses avertissements classent
   le pire contrevenant (expéditeur le plus retenu, groupes d'erreurs)
   pour que vous corrigiez d'abord la voie la plus bruyante.

**Les retenues sont par destinataire, pas par locataire.** Un contact
retenu à 21:05 heure locale du destinataire bloque uniquement les envois
de ce contact ; le reste de votre lot continue d'être admis en parallèle.
Un envoi 1:1 retenu lève `422 QUIET_HOURS_BLOCKED` avec `next_allowed_at`
dans le détail de l'erreur — planifiez à ce timestamp plutôt que de
réessayer dans une boucle. Un envoi retenu ne consomme jamais de quota ni
de réservation de créneau, de sorte que les réessais se readmettent
proprement une fois la fenêtre ouverte.

**Les écritures mettent jusqu'à environ une minute pour atteindre chaque
point d'envoi** — les paramètres de l'organisation sont mis en cache
brièvement sur le chemin d'envoi. Les lectures sont immédiates ; vérifiez
la posture fusionnée avec un `GET` avant de déployer.

## Exemples déroulés

### Déploiement en masse à 21:05 — comportement de la file de retenue

Vous poussez une liste de 1 000 destinataires via l'API au moment où une
fraction de votre liste se situe en dehors de votre portail d'organisation
08:00–21:00 heure locale du destinataire. Chaque destinataire se résout
indépendamment contre votre portail `sms` activé :

* Les destinataires dans la fenêtre sont admis immédiatement.
* Les destinataires retenus reçoivent un `422` avec `next_allowed_at` ;
  votre worker les gare et poursuit le lot. Le lot lui-même n'est pas en
  pause — les retenues sont par destinataire.
* Quand la fenêtre de chaque destinataire se rouvre, re-soumettez la ligne
  garée ; aucun créneau n'a été brûlé pendant la retenue.

Vérifiez un destinataire particulier sans brûler la tentative :

```bash theme={null}
curl "https://api.orbit.devotel.io/api/v1/compliance/quiet-hours/preview?phone=%2B14155551234&channel=sms" \
  -H "Authorization: Bearer $ORBIT_API_KEY"
```

```json theme={null}
{
  "allowed_now": false,
  "local_hour": 21,
  "local_timezone": "America/New_York",
  "window_start_local": "08:00",
  "window_end_local": "21:00",
  "next_allowed_at": "2026-08-26T12:00:00Z",
  "reason": "outside_window",
  "channel": "sms"
}
```

`next_allowed_at` est un timestamp ISO protégé contre le passage à l'heure
d'été — transmettez-le tel quel à votre planificateur.

### Destinataire de voix américain à fuseau horaire non résolu — fail-closed

Une composition de voix de campagne vers `+15551234567` dont l'indicatif de
zone ne résout aucun fuseau horaire heurte la posture fail-closed de la
garde fédérale : la composition est rejetée avec
`422 TCPA_TIMEZONE_UNKNOWN` avant tout calcul de fenêtre. Corrigez les
données — fixez le fuseau horaire du contact sur l'enregistrement ou
passez `recipientTimezone` — puis remettez en file.

La même entrée non résolue sur le canal `sms` avec
`unknown_timezone_policy: "deny"` se termine en
`422 QUIET_HOURS_TIMEZONE_UNKNOWN` ; avec la politique `skip` par défaut,
elle passe en fail-open. La politique `deny` n'est le défaut que pour la
voix vers destinataires américains, conformément à l'exception fédérale
ci-dessus.

### Substitution de consentement dans la fenêtre

Deux contacts, portail `sms` activé, 22:30 heure locale du destinataire
(en dehors de votre fenêtre) :

```text theme={null}
contact a — registre de consentement au dossier → autorisé (motif : consent_override)
contact b — aucun registre de consentement     → retenu (422 QUIET_HOURS_BLOCKED)
```

Avec `consent_overrides_quiet_hours: false`, les deux se retiennent
jusqu'à 08:00 heure locale du destinataire. Sur `voice`, le drapeau ne
s'applique pas du tout — chaque tentative de voix est portée par le calcul
de fenêtre seul.

## Activez un canal via l'API de paramètres de l'organisation

Il n'existe pas de point de terminaison d'écriture d'heures de silence
dédié pour le portail de canal ; il réside dans le magasin de paramètres
de l'organisation, et chaque point d'envoi le lit. Mettez-le à jour via
`PUT /api/v1/settings/general` (propriétaire/administrateur) :

```bash theme={null}
curl -X PUT https://api.orbit.devotel.io/api/v1/settings/general \
  -H "Authorization: Bearer $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "settings": {
      "quiet_hours": {
        "sms": { "enabled": true },
        "whatsapp": { "enabled": true, "start_hour": 9, "end_hour": 21 },
        "unknown_timezone_policy": "skip",
        "consent_overrides_quiet_hours": true
      }
    }
  }'
```

Lisez la posture actuelle avec `GET /api/v1/settings/general` et observez
le bloc `quiet_hours` dans les `settings` renvoyés.

<Warning>
  Fusion-puis-vérification. `PUT /settings/general` fusionne les paramètres
  au niveau supérieur, donc une écriture qui ne contient *que*
  `quiet_hours` laisse vos autres paramètres intacts — mais une écriture à
  la racine de laquelle vous placez un objet `quiet_hours` complet
  REMPLACE cette clé. Si vous voulez conserver les entrées existantes (par
  exemple une fenêtre `default` ou les clés feuille stockées du secours de
  campagne), lisez d'abord le bloc actuel et fusionnez avant d'écrire.
</Warning>

Les écritures mettent jusqu'à environ une minute pour atteindre chaque
point d'envoi — les paramètres de l'organisation sont mis en cache
brièvement sur le chemin d'envoi.

## Choisissez une posture

1. **Laisser tout désactivé (défaut)** si vous opérez hors des
   juridictions à heures de silence, ou si vous gérez les limites ailleurs.
   Une réserve : la voix de campagne et de composeur américaine reste
   bloquée de façon stricte — cela ne peut pas être désactivé.
2. **Opérateur marketing américain** — activez `sms` (et la voix si vous
   composez en ad hoc) sur le portail de l'organisation ; les heures de la
   plateforme 08:00–21:00 heure locale du destinataire s'appliquent
   immédiatement. L'exception de consentement maintient les destinataires
   autorisés joignables.
3. **Opérateur UE/APAC avec campagnes drip** — fixez le secours de
   campagne à votre fenêtre locale (par exemple 22:00 → 07:00) dans
   Paramètres → Limites de campagne pour que tout drip et journey sans
   fenêtre propre envoie dans votre régime. Ajoutez le portail de
   l'organisation par canal si vous voulez aussi retenir le trafic 1:1.

## Voir aussi

* [Portails d'envoi](/compliance/send-gates) — le point de terminaison de
  prévisualisation et la pile complète de portails (DNC, RND, arrêt
  d'urgence).
* [Fenêtres d'appel par État américain](/compliance/state-calling-windows)
  — quels États portent une superposition mini-TCPA plus stricte et
  comment le blocage se retrace jusqu'à une loi.
* [Référence API → Conformité](/api-reference/endpoints/compliance) —
  schémas complets de requête/réponse.
* [Tests A/B de campagne](/guides/campaign-ab-testing) — comment la
  sélection de gagnant et les expériences de retenue passent par ce portail
  et les [limites de fréquence](/guides/frequency-caps) par contact.
