Envoyer avec un modèle
Le corps stocké fournit le message ; la requête fournit l'enveloppe et les valeurs.
Exécute le véritable appel sur votre espace de travail, avec votre propre clé.
POST /templates/{id}/send
Le corps stocké fournit le message ; la requête fournit l'enveloppe et les valeurs.
Exemple
Nécessite templates:write ET emails:send. Honore Idempotency-Key exactement comme POST /emails.
curl -X POST "$OE/templates/order-shipped/send" -H "$AUTH" \ -H "Content-Type: application/json" -H "Idempotency-Key: order:AC-4192:shipped" \ -d '{ "from": "Acme Dispatch <[email protected]>", "to": ["[email protected]"], "version": 5, "props": { "orderId": "AC-4192", "customer": "Ada" } }'{ "object": "email", "id": "msg_c5f21cc6…", "status": "queued", "from": "[email protected]", "subject": "Order AC-4192 is on its way", "template": { "id": "order-shipped", "version": 5 }}Les deux portées, et aucune n'est redondante : templates:write parce que l'appelant atteint un corps stocké, emails:send parce que du courrier quitte l'espace de travail. Une clé autorisée à envoyer ses propres corps ne peut toujours pas envoyer le modèle de quelqu'un d'autre.
Figez version dans tout ce qui est automatisé. Omise, vous résolvez ce qui est publié à cet instant, ce que vous voulez quand le texte appartient à quelqu'un d'autre et non ce que vous voulez le matin où il le réécrit.
subject remplace celui du modèle pour ce seul message, et cancellableForSeconds, tracking et tags se comportent exactement comme sur un envoi ordinaire.
POST /emails accepte un champ template qui fait la même chose, pour un appelant qui construit déjà ses messages là-bas. Cet endpoint existe pour qu'atteindre un corps stocké n'oblige pas à fournir la forme d'un message que vous ne composez pas.
Quand un envoi est refusé
Les props sont un contrat et non une suggestion, et chaque échec ci-dessous survient avant tout envoi. L'alternative, un message qui part avec un blanc là où figurait le numéro de commande, n'est signalée par rien et ne peut pas être rappelée.
| Code | Statut | Ce qui s'est passé |
|---|---|---|
| `resource_not_found` | 404 | Aucun modèle sur cette connexion avec cet id ou ce slug. |
| `template_not_published` | 422 | Il existe et n'a jamais été publié, ou la version que vous avez nommée est encore un brouillon. |
| `template_version_not_found` | 422 | Vous avez figé une version que ce modèle n'a jamais eue. |
| `missing_template_prop` | 422 | Une prop déclarée required était absente, null ou vide. |
| `unknown_template_prop` | 422 | Vous avez passé une clé que la version ne déclare pas. Le message nomme celles qu'elle déclare. |
| `unknown_template_slot` | 422 | Idem, pour un slot. |
| `invalid_template_prop` | 422 | Une valeur qui n'est ni string, ni number, ni boolean. Un object ou un array ne peut pas être substitué dans du HTML. |
param vaut ici template.props.<key> : un client peut donc désigner le champ qu'il a mal renseigné sans analyser le message.