Shabllonet, rregullat dhe webhook-et
Çdo komandë `templates`, `rules` dhe `webhooks`: trupa të ruajtur që i dërgoni sipas slug-ut, rregulla që rendisin postën që mbërrin, dhe ngjarje të nënshkruara për serverin tuaj.
Tri hapësira emrash
Këto tri hapësira emrash e lënë një kuti postare të punojë pa e vëzhguar askush. templates ruan trupa që i dërgoni shumë herë, rules rendit postën ndërsa mbërrin, dhe webhooks i tregon serverit tuaj çfarë ndodhi. Çdo komandë është një metodë e SDK-së me emrin e saj në kebab-case, ndaj webhooks.rotateSecret është openemail webhooks rotate-secret, dhe lexon argumentet dhe flamujt si çdo komandë tjetër burimi.
| Hapësira e emrave | Gjithashtu | Leximet kërkojnë | Ndryshimet kërkojnë |
|---|---|---|---|
| templates | template | templates:read | templates:write, dhe gjithashtu emails:send për send |
| rules | rule | rules:read, përfshirë test | rules:write |
| webhooks | webhook | webhooks:read | webhooks:write, përfshirë test dhe replay-delivery |
Kjo faqe liston çdo komandë dhe atë që ia vlen të dihet para se ta përdorni në skript. Për çdo argument dhe flamur, me llojin e tij, fushëveprimet që i duhen, endpoint-in dhe çfarë kthen, ekzekutoni openemail <namespace> <verb> --help. Shtoni --json për të marrë të njëjtën faqe si JSON.
openemail templates --helpopenemail rules create --helpopenemail webhooks replay-delivery --help --jsonShabllonet
Trupa të ruajtur një herë dhe të dërguar shumë herë, me versione, pamje paraprake dhe prop-e të tipizuara. Çdo komandë që merr <id-or-slug> pranon id-në tpl_ ose slug-un. Slug-u nuk ndryshon kurrë kur shablloni riemërtohet, ndaj fiksojeni slug-un në skripte.
| Komanda | Çfarë bën |
|---|---|
| openemail templates list | Listoni shabllonet, të përditësuarit më së fundi të parët. --status mban ato draft, aktive ose të arkivuara, --search përputh emrat, slug-et dhe subjektet, dhe --sort zgjedh rendin |
| openemail templates get <id-or-slug> | Lexoni një shabllon me versionin e tij head të plotë, përfshirë trupin |
| openemail templates create --name <value> | Krijoni një shabllon dhe versionin e tij të parë. Mbetet draft përveç nëse jepni --publish, dhe --starter e mbush nga një dizajn fillestar |
| openemail templates update <id-or-slug> | Redaktoni emrin, slug-un, përshkrimin ose statusin, ose trupin draft. Dërgimet mbajnë versionin e publikuar derisa të publikoni |
| openemail templates duplicate <id-or-slug> | Kopjoni versionin head në një shabllon të ri, që nis si draft |
| openemail templates replace-content <id-or-slug> | Zëvendësoni trupin me atë të një dizajni fillestar (--starter) ose të një shablloni tjetër (--from-template-id). Kërkon konfirmim |
| openemail templates delete <id-or-slug> | Fshini një shabllon dhe çdo version të tij. Kërkon konfirmim |
| openemail templates list-versions <id-or-slug> | Listoni versionet, më të rejat të parat, pa trupat e tyre |
| openemail templates get-version <id-or-slug> <version> | Lexoni një version me trupin e tij, pa prekur draftin |
| openemail templates publish <id-or-slug> | Publikoni draftin që dërgimet të zgjidhen te ai. Publikimi i një head-i që është tashmë live nuk ndryshon asgjë |
| openemail templates restore-version <id-or-slug> <version> | Riktheni trupin e një versioni më të vjetër si draft. Kërkon konfirmim |
| openemail templates delete-version <id-or-slug> <version> | Fshini një version. Versioni live, head-i dhe versioni i vetëm refuzohen. Kërkon konfirmim |
| openemail templates list-starters | Listoni dizajnet fillestare të integruara |
| openemail templates get-starter <slug> | Lexoni një dizajn fillestar të plotë, me pemën e blloqeve dhe një pamje paraprake të renderuar |
| openemail templates list-fonts | Listoni fontet web që mund të ngarkojë një shabllon |
| openemail templates render | Renderoni një trup që nuk është i ruajtur askund, nga --html ose --document |
| openemail templates preview <id-or-slug> | Renderoni një shabllon të ruajtur me --props dhe --slots, përfshirë draftet, pa e dërguar |
| openemail templates get-analytics <id-or-slug> | Dërgimet, hapjet dhe klikimet në një dritare kohore, sipas ditës, sipas burimit dhe sipas versionit |
| openemail templates list-sends <id-or-slug> | Mesazhet individuale që dërgoi shablloni, më të rejat të parat, faqe pas faqeje |
| openemail templates send <id-or-slug> --from <value> --to <a,b> | Dërgoni një email të renderuar nga versioni i publikuar, ose nga ai që fikson --template-version |
Një shabllon ka një version head, që është draft për sa kohë ka redaktime të papublikuara, dhe një version të publikuar, që është ai që përdor një dërgim pa --template-version. create pa --publish, një redaktim trupi me update, replace-content dhe restore-version të gjitha shkruajnë draftin, ndaj marrësit nuk shohin asgjë të re deri te publish.
- Një shabllon i arkivuar refuzon të dërgojë me
template_archived.publishe bën sërish aktiv. - Një hapësirë pune mban të shumtën 200 shabllone, përfshirë ato të arkivuara, ndaj fshirja është e vetmja mënyrë për të bërë vend.
deleterefuzohet metemplate_in_usepër sa kohë një transmetim i planifikuar ose në radhë e emërton ende shabllonin.
Rregullat
Kushte dhe veprime që vlerësohen mbi postën që mbërrin, në rendin që tregon rules list. Një rregull vepron vetëm mbi postën që mbërrin ndërsa ai është i aktivizuar. Asnjë komandë nuk e zbaton një rregull mbi postën që është tashmë në kutinë postare, dhe rules test është mënyra si shihni çfarë do të kapte. Id-të e rregullave nisin me rul_.
| Komanda | Çfarë bën |
|---|---|
| openemail rules list | Listoni rregullat në rendin në të cilin ekzekutohen. --enabled ose --no-enabled mban një lloj |
| openemail rules get <id> | Lexoni një rregull, me matchCount dhe lastMatchedAt |
| openemail rules create --name <value> --conditions <json|@file|-> --actions <json|@file|-> | Krijoni një rregull në fund të rendit. Është i aktivizuar përveç nëse jepni --no-enabled |
| openemail rules update <id> | Ndryshoni një rregull. --conditions dhe --actions zëvendësojnë gjithë listën, dhe --position zhvendos vetëm këtë rregull |
| openemail rules delete <id> | Fshini një rregull. Ajo që ka bërë tashmë mbetet te list-runs. Kërkon konfirmim |
| openemail rules reorder <rule-ids...> | Caktoni njëherësh rendin e çdo rregulli, duke emërtuar çdo rregull saktësisht një herë |
| openemail rules test <id> | Bëni një ekzekutim provë të një rregulli mbi postën që është tashmë në kutinë postare. Nuk ndryshon asgjë, dhe funksionon edhe me një rregull të çaktivizuar |
| openemail rules list-runs | Çfarë u bënë realisht rregullat postës që mbërriti, më të rejat të parat. --rule-id dhe --thread-id e ngushtojnë |
--conditions është një listë objektesh { field, op, value }, të bashkuara me --match all ose --match any, ku value është gjithmonë varg dhe negate: true e përmbys një kusht. --actions është një listë objektesh { type, value }, të zbatuara me radhë. Një rregull merr nga 1 deri në 20 kushte dhe nga 1 deri në 10 veprime, dhe një kuti postare mban të shumtën 100 rregulla.
- Fushat e kushteve:
from,from_domain,envelope_from,to,cc,bcc,recipient,reply_to,delivered_to,subject,body,header,list_id,attachment_name,attachment_type,has_attachment,attachment_size,message_size,spam,hourdheweekday. - Operatorët:
matches,contains,equals,starts_with,ends_with,gtdhelt.gtdheltfunksionojnë vetëm me fushat numerike, dhehas_attachmentespampranojnë vetëmequalsmetrueosefalse. - Llojet e veprimeve:
label,remove_label,archive,mark_read,star,spam,trash,forward,reply,block_senderdhereject.labeldheremove_labelmarrin një id etikete siUSER_RECEIPTS,forwardmerr një adresë dhereplymerr një id ose slug shablloni. from_domainpërputhet edhe me nëndomenet, dhehoureweekdaylexohen në UTC, me0për të dielën.- Një rregull me një veprim
rejectduhet të testojë edheenvelope_from, përndryshe refuzohet mereject_needs_envelope.
Webhook-et
Endpoint-e në serverin tuaj që marrin ngjarje të nënshkruara të kutisë postare, me sekretet e tyre të nënshkrimit, regjistrin e dorëzimeve dhe një regjistër auditimi për çdo ndryshim. Id-të e endpoint-eve nisin me whe_ dhe id-të e dorëzimeve me whd_.
| Komanda | Çfarë bën |
|---|---|
| openemail webhooks list | Listoni endpoint-et në hapësirën e punës, më të rejat të parat, me gjendjen e tyre |
| openemail webhooks get <id> | Lexoni një endpoint. Sekreti i nënshkrimit nuk është kurrë pjesë e një leximi |
| openemail webhooks create --url <value> | Regjistroni një endpoint HTTPS. Shtyp sekretin e nënshkrimit, e vetmja herë që e shihni atë sekret |
| openemail webhooks update <id> | Ndryshoni URL-në, ngjarjet, listat e lejimit ose nëse është i aktivizuar. Çdo listë zëvendëson atë të ruajtur |
| openemail webhooks delete <id> | Fshini një endpoint dhe regjistrin e tij të dorëzimeve. Kërkon konfirmim |
| openemail webhooks rotate-secret <id> | Lëshoni një sekret të ri nënshkrimi. I vjetri pushon së punuari menjëherë. Kërkon konfirmim |
| openemail webhooks test <id> | Dërgoni një ngjarje sintetike të nënshkruar email.sent dhe raportoni si shkoi dorëzimi |
| openemail webhooks list-deliveries <id> | Përpjekjet e dorëzimit të një endpoint-i, më të rejat të parat. --status, --since dhe --until e ngushtojnë |
| openemail webhooks get-delivery <id> <delivery-id> | Një përpjekje e plotë: trupi i dërguar, përgjigjja e serverit tuaj, çdo provë e ngjarjes, dhe nëse një ridërgim do të pranohej |
| openemail webhooks replay-delivery <id> <delivery-id> | Dërgojeni sërish tani te endpoint-i një ngjarje të ruajtur |
| openemail webhooks list-workspace-deliveries | Përpjekjet e dorëzimit në të gjitha endpoint-et, ose në ato që emërton --endpoint-ids |
| openemail webhooks list-activity <id> | Regjistri i auditimit i një endpoint-i: kush e krijoi, e ndryshoi, e testoi, e ridërgoi ose e hoqi |
| openemail webhooks list-workspace-activity | Regjistri i auditimit i çdo endpoint-i, përfshirë ato të hequra |
Lëreni jashtë --event-types dhe një endpoint merr grupin e parazgjedhur, ngjarjet email.* përveç email.replied. email.replied, ngjarjet domain.* dhe ngjarjet suppression.* e arrijnë vetëm kur i emërtoni. --address-allowlist dhe --domain-allowlist e ngushtojnë një endpoint në disa adresa ose domene, ashtu siç ngushtojnë një çelës API.
- Një hapësirë pune mban 10 endpoint-e, përveç nëse mbështetja ia ka rritur kufirin.
- Një endpoint që dështon 100 dorëzime radhazi fiket nga serveri, dhe
webhooks update <id> --enablede rikthen. - Me një hyrje me shfletues, vetëm pronari i hapësirës së punës mund të lexojë një dorëzim me
get-delivery. Kushdo tjetër merrowner_onlydhe kodin e daljes4.
Kontrolloni një shabllon, pastaj publikojeni
templates preview renderon saktësisht atë që do të prodhonte një dërgim me të njëjtat vlera, përfshirë draftet, dhe kërkon vetëm templates:read, ndaj edhe një çelës vetëm për lexim mund ta ekzekutojë. Një prop të detyrueshëm që mungon e raporton si paralajmërim aty ku send do ta refuzonte, ndaj dështojeni build-in për çdo paralajmërim. publish është i sigurt në çdo deploy, sepse publikimi i një head-i që është tashmë live nuk ndryshon asgjë.
draft=$(openemail templates get order-shipped --json | jq .latestVersion)openemail templates preview order-shipped --template-version "$draft" \ --props '{"orderId":"AC-4192","customer":"Ada"}' --json | jq -e '.warnings == []'openemail templates publish order-shippedDërgoni nga një shabllon
Fiksoni versionin, që një rishkrim i publikuar nesër të mos ndryshojë atë që dërgon ky kod, dhe jepni një çelës idempotence të marrë nga ajo që shkaktoi dërgimin, që një riprovim pas një përgjigjeje të humbur të riluajë mesazhin e parë në vend që të dërgojë një të dytë. --dry-run shtyp metodën, URL-në, header-at me kredencialin tuaj të fshehur dhe trupin, nuk dërgon asgjë dhe del me kodin 0. Ekzekutojeni sërish pa --dry-run për të dërguar.
openemail templates send order-shipped \ --from 'Acme <[email protected]>' \ --to [email protected] \ --template-version 5 \ --props '{"orderId":"AC-4192","customer":"Ada"}' \ --idempotency-key order-shipped:AC-4192 \ --dry-runTestoni një rregull para se të ekzekutohet
Krijojeni rregullin të fikur, bëni një ekzekutim provë mbi postën e fundit, dhe ndizeni sapo të kapë atë që donit. Me një hyrje me shfletues, rules create dhe rules update kërkojnë një kod verifikimi, të cilin një skript nuk mund ta shkruajë, ndaj ekzekutoni fillimisht openemail verify. Për 60 minutat e ardhshme ai profil i ekzekuton pa pyetur.
[ { "field": "from_domain", "op": "equals", "value": "stripe.com" }, { "field": "has_attachment", "op": "equals", "value": "true" }][ { "type": "label", "value": "USER_RECEIPTS" }, { "type": "archive" }]openemail verifyrule=$(openemail rules create --name 'Stripe receipts' \ --conditions @conditions.json --actions @actions.json --no-enabled --json | jq -r .id)openemail rules test "$rule" --days 30 --limit 100openemail rules update "$rule" --enabledLexoni paralajmërimet e rules test para përputhjeve të tij. field_unevaluable do të thotë se një kusht lexon diçka që posta e ruajtur nuk e mbart më, ndaj testi nuk mund ta gjykonte, dhe forward_unverified do të thotë se një objektiv përcjelljeje nuk pritet këtu. wouldApply liston atë që deklaron rregulli: një përcjellje te një adresë që nuk ka konfirmuar dështon përsëri kur mbërrin posta e vërtetë.
Vendoseni një rregull të parin, dhe shihni pse u zhvendos një mesazh
rules reorder merr çdo rregull të kutisë postare saktësisht një herë. Një rregull i lënë jashtë ose i emërtuar dy herë refuzohet dhe asgjë nuk zhvendoset. rules list kthen id-të në rendin në të cilin ekzekutohen, ndaj vendoseni atë që doni të parin përpara të tjerëve.
first=rul_4f1c9a2b7d3e8f6a0b5c1d2eopenemail rules reorder "$first" $(openemail rules list --all --ndjson \ | jq -r --arg first "$first" 'select(.id != $first) | .id')openemail rules list-runs --thread-id CAHk7pQ2x9LmZ4 --json | jq '.items[] | {ruleName, actions, failures}'list-runs është regjistri i asaj që ndodhi realisht. Çdo rresht është një rregull që përputhet me një mesazh, me veprimet që patën efekt dhe, te failures, ato që kutia postare i refuzoi, si një përgjigje te një dërgues që ka marrë tashmë përgjigje atë ditë. Çdo rresht mban emrin që kishte rregulli në atë kohë, ndaj --rule-id funksionon edhe për një rregull që e keni fshirë që atëherë.
Regjistroni një webhook dhe provoni që funksionon
webhooks create e tregon sekretin e nënshkrimit një herë, dhe asnjë komandë e mëvonshme nuk e tregon sërish. Me --json ai ndodhet në JSON-in në stdout, ndërsa kujtesa për ta ruajtur shkon në stderr, ndaj dalja mbetet e analizueshme. webhooks test dërgon një ngjarje sintetike të nënshkruar email.sent pavarësisht se në çfarë është abonuar endpoint-i, dhe nuk dërgohet asnjë postë.
openemail verifyopenemail webhooks create --url https://hooks.acme.com/openemail \ --event-types email.received,email.bounced,email.complained \ --description 'Support desk sync' --json > endpoint.jsonjq -r .secret endpoint.jsonopenemail webhooks test "$(jq -r .id endpoint.json)" --json | jq .deliveryrm endpoint.jsonVendoseni sekretin në depon tuaj të sekreteve para se të fshini skedarin. test del me kodin 0 edhe kur serveri juaj dështon, ndaj lexoni delivery.status: delivered për një përgjigje 2xx dhe failed për çdo gjë tjetër, përfshirë një ridrejtim, meqë ridrejtimet nuk ndiqen kurrë. Një responseCode me vlerë null do të thotë se nuk mbërriti fare përgjigje.
Gjeni dorëzimet e dështuara dhe dërgojeni sërish njërin
Pas një ndërprerjeje në anën tuaj, listoni çfarë dështoi në të gjitha endpoint-et, kontrolloni që një ridërgim do të pranohej, dhe dërgojeni sërish ngjarjen. Një ridërgim mbart të njëjtën id ngjarjeje, ndaj një marrës që hedh id-të që i ka trajtuar tashmë e trajton si ngjarjen që e njeh.
openemail webhooks list-workspace-deliveries --status failed --since 2026-09-26T00:00:00Z --all --ndjson \ | jq -r '[.endpointId, .id, .eventType, (.responseCode // "no answer")] | @tsv'openemail webhooks get-delivery whe_3f9c2a7b1e4d8f60a5c7b92d whd_8c1e4a7f2b9d3e6a0c5f1b28 --json | jq .replayRefusalopenemail webhooks replay-delivery whe_3f9c2a7b1e4d8f60a5c7b92d whd_8c1e4a7f2b9d3e6a0c5f1b28--sincedhe--untilmarrin një çast ISO 8601.- Një rresht i dështuar,
nextAttemptAti të cilit mban një kohë, ka ende një riprovim automatik që po vjen. replayRefusalështënullkur një ridërgim do të nisej, dhe përndryshe emërton pse do të refuzohej, siwebhook_disabledndërsa endpoint-i është i fikur.- Ridërgimet bëhen një ngjarje në një kohë. Asnjë komandë nuk i dërgon sërish të gjitha dorëzimet e dështuara.
Kodet e verifikimit
Me një hyrje me shfletues, katër nga këto komanda kërkojnë një kod verifikimi para se të ndryshojnë ndonjë gjë, si aplikacioni web: rules create, rules update, webhooks create dhe webhooks update. Një çelësi API nuk i kërkohet kurrë. Çdo komandë tjetër në këtë faqe ekzekutohet pa kod, përfshirë fshirjet dhe webhooks rotate-secret.
- Në terminal, CLI ju dërgon me email një kod gjashtëshifror, ose kërkon një nga aplikacioni juaj i autentikimit kur hyrja me dy hapa është aktive, pastaj e ekzekuton komandën një herë.
- Pa mbikëqyrje, me
--jsonose--no-input, në CI ose pa terminal, askush nuk mund ta shkruajë kodin, ndaj komanda ndalet me kodin e daljes4dhe nuk ndryshon asgjë. Ekzekutoni fillimishtopenemail verify, dhe profili nuk ka nevojë për kod për 60 minuta. --yeskonfirmon një fshirje, por nuk e kapërcen kurrë një kod.
Konfirmimet dhe ekzekutimet provë
Shtatë komanda këtu heqin ose mbishkruajnë diçka, ndaj kërkojnë fillimisht konfirmim: templates delete, templates delete-version, templates replace-content, templates restore-version, rules delete, webhooks delete dhe webhooks rotate-secret. Pa mbikëqyrje, secila ndalet me kodin e daljes 2 përveç nëse jepni --yes.
$ openemail webhooks delete whe_3f9c2a7b1e4d8f60a5c7b92d --no-input✗ Refusing to run unattended. Pass --yes to confirm.$ openemail webhooks delete whe_3f9c2a7b1e4d8f60a5c7b92d --yes--dry-run shtyp kërkesën e parë që do të ndryshonte diçka dhe del me kodin 0, pa e dërguar dhe pa ju kërkuar konfirmim. Me --json shtyp një dokument të vetëm { dryRun, request }. rules test, templates render dhe templates preview nuk ndryshojnë asgjë, por janë kërkesa POST, ndaj një ekzekutim provë i shtyp në vend që t'i ekzekutojë.
Ndarja në faqe
templates list,templates list-versions,rules list,rules list-runsdhe çdo komandëwebhooks list…lexojnë një faqe në një kohë, 25 rreshta përveç nëse--limitkërkon deri në 100. Një terminal tregon--cursorqë duhet dhënë për faqen tjetër.--alllexon çdo faqe,--max <n>ndalet pas aq rreshtave, dhe--ndjsonshtyp një objekt JSON për rresht. Me--json, një listë shtyp një dokument të vetëm{ items, hasMore, nextCursor }, përfshirë me--all.- Ktheni një kursor me të njëjtët filtra dhe renditje me të cilët erdhi. Çdo gjë tjetër refuzohet si
invalid_cursor, me kodin e daljes7. templates list-sendsi ndan faqet sipas numrit në vend të kësaj, me--pagedhe--page-size, raportontotal, dhe nuk ka--all. Numrat e faqeve zhvendosen ndërsa posta po niset, ndaj ngushtoni dritaren kohore me--daysose--minutesnë vend që të shkoni thellë nëpër faqe.templates list-startersdhetemplates list-fontskthejnë gjithë katalogun njëherësh, dherules reorderkthen çdo rregull si një listë të thjeshtë në rendin e tij të ri.- Një kuti postare mban të shumtën 100 rregulla, ndaj
rules list --limit 100kthen gjithmonë çdo rregull në një faqe.
Flamuj që ia vlen t'i shikoni dy herë
--template-versionështë fusha e trupitversion, e riemërtuar sepse--versionshtyp versionin e CLI-së. Argumenti<version>iget-version,restore-versiondhedelete-versionështë një numër versioni, jo një idtplv_.--conditions,--actions,--document,--slots,--propsdhe flamujt e tjerë JSON marrin JSON në rresht, nga një skedar me@path, ose nga stdin me-.--datamerr gjithë trupin në të njëjtën mënyrë, dhe çdo flamur që jepni gjithashtu e mbishkruan çelësin e vet.--htmlmerr vetë markup-in, jo një skedar, ndaj--html @page.htmldërgon tekstin@page.html. Jepni--html "$(cat page.html)", ose vendosenihtmlnë skedarin që i jepni--data.rules update --conditionsdhe--actionszëvendësojnë gjithë listën, po ashtu edhewebhooks update --event-types,--address-allowlistdhe--domain-allowlist. Lexoni vlerën aktuale, ndryshojeni dhe dërgojeni të gjithën.- Një
--event-typesbosh është gabim përdorimi. Për ta kthyer një endpoint te grupi i parazgjedhur, dërgoni--data '{"eventTypes":[]}', dhe për të ndalur dorëzimet e tij, jepni--no-enabled. --expected-versiontetemplates update,replace-contentdherestore-versionmerr versionin head që lexuat. Kur dikush tjetër e ka lëvizur head-in që atëherë, komanda ndalet me kodin e daljes6dheversion_conflict, dhe nuk shkruan asgjë.rules update <id> --no-enablede fik një rregull dhe ia mban vendin në rend, që është mënyra për ta ndalur përkohësisht një rregull pa e fshirë.