콘텐츠로 건너뛰기

이메일 템플릿 API

이메일 템플릿 API는 애플리케이션의 이메일 프리셋 뒤에 있는 재사용 가능한 이메일 템플릿을 관리합니다. 이는 Control Panel의 이메일 편집기에서 빌드하는 것과 동일한 템플릿입니다. 각 템플릿은 로케일별 제목, 발신자 정보 및 편집기 콘텐츠를 저장하며, 연결된 이메일 프리셋의 코드로 식별됩니다. 해당 코드를 사용하여 Notify (이메일 페이로드 email_template) 또는 Customer Journey의 이메일 보내기 지점을 통해 템플릿을 보낼 수 있습니다.

기본 URL

Anchor link to
https://rpc-api.svc-nue.pushwoosh.com

모든 엔드포인트는 HTTPS를 통해 제공됩니다. 요청 및 응답은 별도로 명시되지 않는 한 application/json을 사용합니다.

모든 요청에는 서버 API 토큰과 함께 Authorization 헤더를 포함해야 합니다:

Authorization: Api YOUR_API_TOKEN
  • 필드 이름 지정: 요청 본문 및 쿼리/경로 매개변수는 lowerCamelCase(예: previewSettings, searchByLabel, includeHtml)를 허용합니다. 서버는 두 가지 케이싱 모두를 언마샬링합니다. 응답은 항상 프로토 필드 이름을 사용하여 snake_case(per_page, email_template, sender_info, preview_settings 등)로 마샬링됩니다. 아래의 응답 예시와 객체 참조는 해당 케이싱을 사용합니다.
  • code: 모든 템플릿 응답은 내부 템플릿 ID가 아닌 연결된 이메일 프리셋의 코드를 전달합니다. 이 동일한 코드를 Get, Update, Delete 및 위의 메시징/Journey API에 전달하십시오.
  • 채워지지 않은 필드: 응답은 비어 있거나 값이 0인 경우에도 모든 필드를 포함합니다.

오류 응답

Anchor link to
HTTP 상태의미
400 Bad Request잘못된 인수 — 필수 필드가 누락되었거나 형식이 잘못되었거나, 전제 조건이 실패했습니다(예: Journey에서 아직 사용 중인 템플릿 삭제).
401 UnauthorizedAuthorization 헤더가 누락되었거나 유효하지 않습니다.
403 Forbidden애플리케이션 또는 프리셋이 호출자의 계정에 속하지 않습니다.
404 Not Found템플릿, 프리셋 또는 애플리케이션을 찾을 수 없습니다.
500 Internal Server Error예기치 않은 서버 측 오류입니다.

엔드포인트

Anchor link to
메서드경로설명
POST/api/email_templates새 이메일 템플릿 생성
GET/api/email_templates애플리케이션의 이메일 템플릿 목록 조회
GET/api/email_templates/{code}단일 이메일 템플릿 가져오기
PUT/api/email_templates/{code}이메일 템플릿 업데이트
DELETE/api/email_templates/{code}이메일 템플릿 삭제
POST/api/email_templates:clone이메일 템플릿을 애플리케이션으로 복제

애플리케이션에 새 이메일 템플릿(편집기 콘텐츠와 연결된 이메일 프리셋)을 생성하고 생성된 템플릿 코드를 반환합니다.

POST /api/email_templates

요청 본문

Anchor link to
매개변수유형필수설명
applicationstring템플릿을 생성할 Pushwoosh 애플리케이션 코드입니다.
namestring템플릿 이름, 1–255자입니다.
contentobject이메일 콘텐츠 객체입니다.
labelstring아니요자유 텍스트 레이블, 최대 255자입니다.
categoriesarray of strings아니요템플릿에 태그를 지정할 카테고리 이름입니다.
previewSettingsobject아니요임의의 편집기 미리보기 설정으로, 있는 그대로 저장되고 반환됩니다.
systemboolean아니요템플릿을 시스템 템플릿으로 표시합니다(예: 동기화된 블록 조각과 같은 내부 기능). 시스템 템플릿은 List에서 숨겨지지만(아래 참고 참조), 코드로 접근할 수 있습니다. 기본값은 false입니다.
요청 예시
Anchor link to
{
"application": "XXXXX-XXXXX",
"name": "Welcome email",
"label": "onboarding",
"categories": ["lifecycle"],
"content": {
"senderInfo": {
"from": { "email": "hello@acme.com", "name": "Acme" },
"replyTo": { "email": "support@acme.com", "name": "Acme Support" }
},
"subject": { "en": "Welcome to Acme!", "default": "Welcome to Acme!" },
"pushwoosh": {
"html": "<html><body>Welcome, {name|string|there}!</body></html>",
"localizationData": { "default": { "name": "there" } }
}
}
}

{ "email_template": { ... } }를 반환합니다. 생성된 이메일 템플릿 객체이지만, content포함하지 않습니다(이 엔드포인트는 이를 다시 반환하지 않습니다). 콘텐츠를 다시 읽어야 하는 경우 반환된 codeGet을 호출하십시오.

애플리케이션의 이메일 템플릿 목록을 메타데이터만(콘텐츠 없음) 페이징, 정렬, 이름, 레이블 또는 카테고리별 필터링과 함께 조회합니다.

GET /api/email_templates

쿼리 매개변수

Anchor link to
매개변수유형필수설명
applicationstring템플릿 목록을 조회할 애플리케이션 코드입니다.
orderBystring아니요NAME(기본값), CREATED 또는 UPDATED입니다.
orderDirectionstring아니요ASC(기본값) 또는 DESC입니다.
pageinteger아니요0부터 시작하는 페이지 인덱스입니다.
perPageinteger아니요페이지 크기입니다. 생략하거나 0일 경우 기본값은 100입니다. 이 엔드포인트는 명시적인 최대값을 강제하지 않습니다.
searchByNamestring아니요템플릿의 이름 또는 코드에 대한 부분 문자열 일치(like %value%)입니다. 둘 중 하나만 일치해도 충분합니다.
searchByLabelstring아니요레이블에 대한 부분 문자열 일치(like %label%) 또는 strictSearchByLabeltrue일 때 정확한 일치입니다.
strictSearchByLabelboolean아니요searchByLabel에 대해 부분 문자열 대신 정확한 일치를 사용합니다.
searchByCategoryarray of strings아니요여러 카테고리 중 하나로 필터링하려면 매개변수를 반복합니다(예: ?searchByCategory=lifecycle&searchByCategory=promo).
필드유형설명
email_templatesarray of objects현재 페이지의 이메일 템플릿 객체입니다. 모든 항목에서 contentnull입니다.
pageinteger반환된 페이지 인덱스입니다.
per_pageinteger이 응답에 사용된 페이지 크기입니다.
totalinteger모든 페이지에 걸쳐 필터와 일치하는 총 템플릿 수입니다.
응답 예시
Anchor link to
{
"email_templates": [
{ "code": "AAAAA-BBBBB", "name": "Welcome email", "label": "onboarding", "categories": ["lifecycle"] }
],
"page": 0,
"per_page": 100,
"total": 1
}

가져오기

Anchor link to

코드로 단일 이메일 템플릿을 반환하며, 발신자 정보, 로케일별 제목 및 전체 편집기 콘텐츠를 포함합니다.

GET /api/email_templates/{code}

경로 매개변수

Anchor link to
매개변수유형설명
codestring템플릿의 코드(연결된 이메일 프리셋 코드)입니다.

쿼리 매개변수

Anchor link to
매개변수유형필수설명
includeHtmlboolean아니요편집기 콘텐츠와 함께 렌더링된 html을 반환할지 여부입니다. 기본값은 true입니다. 이를 건너뛰려면 false로 설정하십시오. 일반적으로 페이로드의 절반 이상을 차지하며, 편집기 콘텐츠만으로도 템플릿을 설명할 수 있습니다.

전체 이메일 템플릿 객체{ "email_template": { ... } }를 반환합니다.

업데이트

Anchor link to

코드로 기존 이메일 템플릿을 업데이트하며, 제공된 필드를 덮어씁니다.

PUT /api/email_templates/{code}

경로 매개변수

Anchor link to
매개변수유형설명
codestring업데이트할 템플릿의 코드입니다.

요청 본문

Anchor link to
매개변수유형필수설명
namestring아니요새 이름, 1–255자입니다. 현재 이름을 유지하려면 생략하십시오.
contentobject아니요저장된 콘텐츠를 완전히 대체하는 새 이메일 콘텐츠 객체입니다. 콘텐츠를 변경하지 않으려면 생략하십시오.
labelstring아니요새 레이블입니다. 항상 덮어쓰여집니다. 지우려면 생략하거나 ""를 보내십시오.
categoriesarray of strings아니요새로운 전체 카테고리 이름 집합입니다. 카테고리를 변경하지 않으려면 생략하고, 지우려면 []를 보내십시오.
previewSettingsobject아니요새 미리보기 설정입니다. 변경하지 않으려면 생략하십시오.
요청 예시
Anchor link to
{
"name": "Welcome email v2",
"label": "onboarding",
"content": {
"senderInfo": { "from": { "email": "hello@acme.com", "name": "Acme" } },
"subject": { "default": "Welcome to Acme — updated!" },
"pushwoosh": {
"html": "<html>...</html>",
"localizationData": {}
}
}
}

{ "email_template": { ... } }를 반환합니다. 업데이트된 이메일 템플릿 객체이며, 이 역시 content포함하지 않습니다. 콘텐츠를 다시 읽어야 하는 경우 Get을 호출하십시오.

코드로 이메일 템플릿과 연결된 프리셋을 삭제하고 저장된 콘텐츠를 제거합니다.

DELETE /api/email_templates/{code}

경로 매개변수

Anchor link to
매개변수유형설명
codestring삭제할 템플릿의 코드입니다.

성공 시 빈 객체: {}.

이메일 템플릿(콘텐츠와 프리셋)을 대상 애플리케이션으로 복제하며, 선택적으로 새 이름으로 복제할 수 있습니다.

POST /api/email_templates:clone

요청 본문

Anchor link to
매개변수유형필수설명
emailPresetCodestring복제할 템플릿의 code(Create, Get, List 또는 Update에서 반환됨)입니다. 연결된 이메일 프리셋의 코드이므로 여기서는 emailPresetCode로 명명되었습니다. 규칙을 참조하십시오.
applicationstring대상 애플리케이션 코드입니다. 동일한 애플리케이션이거나 동일한 계정이 소유한 다른 애플리케이션일 수 있습니다.
namestring아니요복제본의 이름, 1–255자입니다. 기본값은 원본 템플릿의 이름입니다.
요청 예시
Anchor link to
{
"emailPresetCode": "AAAAA-BBBBB",
"application": "YYYYY-YYYYY",
"name": "Welcome email (copy)"
}
필드유형설명
email_preset_codestring새 템플릿의 code입니다. Get/Update/Deletecode라고 부르는 것과 동일한 식별자입니다.

객체 참조

Anchor link to

아래 필드 이름은 Get, List, Update, Create가 실제로 반환하는 것과 일치합니다. 즉, snake_case 프로토 필드 이름입니다(규칙 참조). 이 동일한 구조를 요청 본문(Create, Update)으로 다시 보낼 때, 위의 요청 예시에서 사용된 lowerCamelCase 형식도 작동합니다. 서버는 입력 시 두 가지 케이싱 모두를 허용합니다.

이메일 템플릿 객체

Anchor link to
필드유형설명
codestring연결된 이메일 프리셋의 코드입니다. API의 다른 모든 곳에서 이 템플릿을 식별합니다.
namestring템플릿 이름입니다.
labelstring자유 텍스트 레이블입니다.
categoriesarray of strings카테고리 이름입니다.
contentobject이메일 콘텐츠 객체입니다. Get에 의해서만 채워지며, Create, List, Update 응답에서는 null입니다.
preview_settingsobject임의의 편집기 미리보기 설정입니다.
createdstring (RFC 3339)생성 타임스탬프입니다.
updatedstring (RFC 3339)마지막 업데이트 타임스탬프입니다.

이메일 콘텐츠 객체

Anchor link to
필드유형설명
sender_infoobject발신자 정보 객체fromreply_to 주소입니다.
subjectobject (map)로케일별 제목, 예: { "en": "Subject", "default": "Subject" }.
unlayer / pushwoosh / smartcardsobject편집기 콘텐츠입니다. 이 중 정확히 하나만 설정해야 합니다. 이는 어떤 편집기가 템플릿을 생성했는지(그리고 렌더링할 것인지) 선택합니다. 아래 편집기 종류를 참조하십시오.

편집기 종류

Anchor link to
종류필드필수 하위 필드설명
unlayerhtml, localization_data, editor_configeditor_config, localization_data드래그 앤 드롭 블록 편집기(Unlayer)입니다. editor_config는 Unlayer 디자인 JSON입니다.
pushwooshhtml, localization_datalocalization_dataPushwoosh 자체의 HTML 기반 편집기입니다. 프로그래밍 방식/API 작성 템플릿에 권장됩니다.
smartcardshtml, localization_data, contentcontent, localization_dataSmart Cards 블록 편집기입니다. content는 해당 편집기별 JSON입니다.

모든 종류에서 html은 렌더링된 출력입니다. localization_data는 해당 편집기 자체의 로케일별 콘텐츠입니다. 로케일 코드(en, es, default, …)로 키가 지정된 객체이며, 각 값은 해당 로케일의 편집기 필드 사본입니다. 내부 구조는 편집기별로 다르며 이 API에는 불투명합니다. API는 이를 있는 그대로 저장하고 반환합니다. Create/Update 시 모든 종류에 대해 필수입니다(지역화할 내용이 없으면 {}를 보내십시오).

html 또는 localization_data 값 내의 텍스트에는 동적 콘텐츠 태그(예: {name|string|there})가 포함될 수 있습니다. 이러한 태그는 이메일이 실제로 전송될 때 수신자의 장치 태그에 대해 확인됩니다. 이 API는 이를 확인하지 않으며, 입력한 텍스트를 그대로 저장하고 반환합니다.

발신자 정보 객체

Anchor link to
필드유형설명
fromobject{ "email": string, "name": string } — 발신자 주소입니다.
reply_toobject{ "email": string, "name": string } — 회신 주소입니다.

email 하위 필드는 비어 있지 않을 경우 유효한 이메일 주소여야 합니다.