2026 : OpenClaw sur Mac Mini loué — Postmark Inbound, webhook, batch nocturne, fenêtre silencieuse et backoff
Les développeurs indépendants qui pilotent des scripts par e-mail gagnent un bus fiable en couplant Postmark Inbound, un webhook TLS et OpenClaw sur un Mac Mini loué : routage MX, jetons de chemin, files disque, retry maîtrisés côté fournisseur et backoff côté alertes.
Un nœud longue durée change la donne : pas de mise en veille laptop, pas de limite de durée « serverless » sur le traitement MIME, journaux locaux et relances Postmark absorbées sans saturer votre téléphone. La valeur opérationnelle est la continuité 7×24 — même charge, même disque NVMe, même endpoint HTTPS pendant les campagnes ou les astreintes.
Pour des chaînes voisines (GitHub, cron), croisez ce guide avec repository_dispatch et fenêtre silencieuse, la matrice cron, webhooks et backoff, et la matrice planification files 7×24. La page d’achat public reste accessible sans créer de compte au préalable.
Pourquoi le mauvais hôte casse l’automatisation pilotée par e-mail
- Pas d’auth. Une URL devinable accepte du bruit ; imposez TLS + secret de chemin (ou en-tête) avant de parser le JSON.
- HTTP lent. Hors 2xx ou timeouts, Postmark retry : vous voyez des doublons si la dédup
MessageIDmanque. - Pas de fusion. Chaque erreur de parse poussée telle quelle vers Slack ou SMS use la confiance des humains.
Où exécuter le consommateur Inbound
| Besoin | Mac Mini loué | Fonction éphémère |
|---|---|---|
| Drain 7×24 | launchd reprend après minuit et reboot | Froid démarrage, quotas CPU |
| Grosses pièces jointes | Scratch NVMe et CPU prévisibles | Plafonds charge utile et facturation egress |
| Piste d’audit | Append-only local + rotation | Rétention courte chez le fournisseur |
Routage Inbound et authentification
Dans Postmark, activez le flux Inbound, publiez les MX ou enregistrements de réécriture indiqués, puis renseignez l’URL du webhook sous la forme https://hôte/inbound/<secret-long>, derrière Caddy ou nginx en terminaison TLS. Refusez avec 401 si le segment secret ne correspond pas, avant toute désérialisation JSON : vous évitez le travail inutile et les journaux bruités.
Stockez l’empreinte MessageID dans SQLite ou LMDB avec une fenêtre de rétention (par ex. quarante-huit heures) supérieure aux fenêtres de retry Postmark. Séparez les locataires par secret de chemin et par label launchd afin que deux arbres OpenClaw (OPENCLAW_HOME distincts) ne lisent jamais la même file par erreur.
Modèle de script passerelle
La passerelle ne doit rien faire de lourd : vérifier le jeton, insérer l’idempotence, écrire queue/*.json, répondre 200. Le drain lourd et OpenClaw vivent dans un service séparé déclenché par launchd.
// Gestionnaire minimal (pseudo-code style Node)
app.post('/inbound/:token', (req, res) => {
if (req.params.token !== process.env.INBOUND_TOKEN) return res.sendStatus(401);
const id = req.body.MessageID;
if (!dedupe.insertIfNew(id)) return res.sendStatus(200); // retry Postmark
fs.writeFileSync(`queue/in-${Date.now()}.json`, JSON.stringify(req.body), { flag: 'wx' });
return res.sendStatus(200);
});
En production, utilisez le corps brut signé si votre stack l’exige, et des écritures atomiques (fichier temporaire puis rename) avant la réponse HTTP.
Fenêtre nocturne et fusion des erreurs
Programmez le drain avec launchd et StartCalendarInterval entre 01h et 05h (fuseau du Mac Mini loué), sauf si l’objet du message contient un jeton d’override documenté. Regroupez les erreurs non fatales par clé locataire + segment et n’envoyez qu’un digest par fenêtre vers le canal choisi.
Lorsqu’un webhook de notification échoue (429, 5xx, timeout), appliquez un backoff exponentiel avec jitter (par ex. plafond soixante secondes, cinq tentatives max). Ajoutez une marge de quinze minutes après la fin prévue du batch pour une queue silencieuse : les uploads tardifs ne rouvrent pas la fenêtre d’alerte.
| Levier | Point de départ | Note ops |
|---|---|---|
| Clé de fusion | Locataire + pipeline + étape | Faites tourner la clé si vous sharder sur plusieurs disques |
| Queue silencieuse | +15 min après la fin prévue | Limite le vacillement quand les écritures traînent |
| Budget sortant | 2–4 s de base, doublement jusqu’à 60 s max | Jitter systématique avant astreinte humaine |
Étapes reproductibles (HowTo)
- Terminez les tests DNS jusqu’à voir l’état Reçu sur un message test dans le flux Inbound.
- Exposez TLS sur le Mini ; avec
curl, vérifiez 401 sans le bon segment de chemin. - Déployez la passerelle avec dédup
MessageID; rejouez deux fois le même JSON, la seconde réponse doit être 200 sans nouvelle entrée de file. - Branchez OpenClaw sur le drain de
queue/*.json(ex. extraction TextBody),launchctl bootstrapsur la plist nocturne, contrôlezlog showpendant la première fenêtre. - Activez digest + backoff sur les sorties, archivez les journaux chaque nuit sur le nœud longue durée.
Repères chiffrés utiles : rétention dédup quarante-huit heures, cinq tentatives d’envoi digest maximum, plafond backoff soixante secondes, queue silencieuse quinze minutes, budget handler webhook deux secondes avant déport disque.
FAQ : idées reçues sur le DNS et SPF
- Copier mon enregistrement SPF marketing sur le sous-domaine inbound améliore-t-il la délivrabilité vers Postmark ?
- SPF décrit quels serveurs peuvent envoyer du courrier pour votre domaine dans des contextes d’enveloppe précis. La réception Inbound suit les MX et la configuration Postmark ; dupliquer SPF sans analyse casse souvent l’envoi sortant légitime tout en n’apportant rien au webhook HTTPS.
- Le DKIM du message remplace-t-il un secret partagé sur l’endpoint ?
- DKIM atteste le MIME côté expéditeur ; votre passerelle doit tout de même prouver que le POST provient du canal attendu (secret, signature documentée, mTLS si applicable).
- Pourquoi vois-je des rafales de MessageID identiques après un déploiement ?
- Vider la base de dédup ou raccourcir le TTL sous la fenêtre de retry du fournisseur garantit des doublons. Incluez le magasin d’idempotence dans la politique de sauvegarde comme le répertoire
queue/. - OpenClaw doit-il parser le MIME dans la même réponse HTTP que Postmark ?
- Non : séparez ingestion (200 rapide) et traitement OpenClaw (batch). C’est ce découplage qui rend le Mac Mini loué pertinent pour les pièces jointes et les reprises après incident.
Synthèse. Postmark Inbound devient un webhook civilisé lorsqu’un Mac Mini loué porte TLS, secrets, files, fenêtre nocturne et backoff. Le nœud longue durée sépare les démos portable des pipelines sérieux. Pour passer en production matérielle : parcourez les tarifs, ouvrez la page achat sans compte, validez SSH via le centre d’aide, puis revenez au blog pour la prochaine intégration OpenClaw.
Gardez Postmark Inbound branché sur un nœud RunMini
Des locations Apple Silicon 7×24 pour votre passerelle, vos files et vos digest. Accueil, forfaits, achat public, aide, blog.
Parcours sans connexion préalable : achat, puis blog pour la suite des guides OpenClaw.