템플릿으로 발송
저장된 본문이 메시지를 제공하고, 요청이 봉투와 값을 제공합니다.
본인 키로 워크스페이스에 실제 호출을 실행합니다.
POST /templates/{id}/send
저장된 본문이 메시지를 제공하고, 요청이 봉투와 값을 제공합니다.
예시
templates:write와 emails:send가 모두 필요합니다. Idempotency-Key를 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 }}두 스코프 모두 필요하며 어느 쪽도 군더더기가 아닙니다. 호출자가 저장된 본문에 접근하므로 templates:write가, 메일이 워크스페이스를 떠나므로 emails:send가 필요합니다. 자기 본문을 보낼 수 있는 키라도 남의 템플릿은 보낼 수 없습니다.
자동화된 곳에서는 version을 고정하세요. 생략하면 그 시점에 게시되어 있는 것을 해석하는데, 문구의 주인이 다른 사람일 때는 그것이 원하는 동작이지만 그들이 문구를 고쳐 쓴 날 아침에는 아닙니다.
subject는 이 메시지에 한해 템플릿 자체의 제목을 덮어쓰고, cancellableForSeconds, tracking, tags는 일반 발송에서와 똑같이 동작합니다.
이미 POST /emails에서 메시지를 구성하는 호출자를 위해, 그쪽에도 같은 일을 하는 template 필드가 있습니다. 이 엔드포인트는 저장된 본문을 쓰려고 작성하지도 않는 메시지의 형태를 채워 넣지 않아도 되도록 존재합니다.
발송이 거부되는 경우
props는 권고가 아니라 계약이며, 아래의 모든 실패는 무언가 발송되기 전에 일어납니다. 그 대안, 즉 주문 번호가 있어야 할 자리가 비어 있는 메시지가 나가는 상황은 어디에도 보고되지 않고 회수할 수도 없습니다.
| 코드 | 상태 | 무슨 일이 일어났는가 |
|---|---|---|
| `resource_not_found` | 404 | 해당 id나 slug를 가진 템플릿이 이 connection에 없습니다. |
| `template_not_published` | 422 | 존재하지만 한 번도 게시된 적이 없거나, 지정한 버전이 아직 초안입니다. |
| `template_version_not_found` | 422 | 이 템플릿에 존재한 적 없는 version을 고정했습니다. |
| `missing_template_prop` | 422 | required로 선언된 prop이 없거나 null이거나 비어 있습니다. |
| `unknown_template_prop` | 422 | 해당 버전이 선언하지 않은 키를 전달했습니다. 오류 메시지가 선언된 키들을 알려 줍니다. |
| `unknown_template_slot` | 422 | 슬롯에 대해서도 동일합니다. |
| `invalid_template_prop` | 422 | string, number, boolean이 아닌 값입니다. object나 array는 HTML에 치환할 수 없습니다. |
이 오류들의 param은 template.props.<key>이므로, 클라이언트는 메시지를 파싱하지 않고도 잘못된 필드를 짚어 줄 수 있습니다.