

Closed-Won 딜에서 고객 온보딩 데크 자동화하기 (2026)
고객 온보딩 데크를 자동화하려면, HubSpot, Salesforce, Pipedrive에서 딜이 Closed Won 상태가 될 때 웹훅을 발동시키고, n8n Set 노드로 딜 필드를 프롬프트에 매핑한 뒤 2Slides의 POST /api/v1/slides/generate 엔드포인트를 호출해 고정된 테마 하나로 편집 가능한 PPTX를 받으세요. 두 번째 예약된 워크플로우는 사용 지표로 90일 리뷰 데크를 만듭니다. 8페이지 킥오프 데크는 80 크레딧(약 $0.20)이며, 딜 종료 후 약 30초 만에 CSM의 Slack으로 전달됩니다. 고객 성공 운영과 RevOps 엔지니어를 위해 제작되었습니다.
핵심 요약
- 하나의 Closed-Won 웹훅과 n8n의 두 HTTP Request 노드로 CRM 딜 필드를 8페이지 편집 가능한 온보딩 데크로 변환, 비용은 80 크레딧(약 $0.20).
- Fast PPT
generate엔드포인트는 네이티브 PPTX를 반환해 CSM이 킥오프 콜 전에 30/60/90일 계획을 편집 가능. - 킥오프 후 85일째 예약된 워크플로우가 채택 지표를 창고에서 조회해 10페이지 90일 리뷰 데크를 100 크레딧에 생성.
- 모든 고객에 대해 하나의
themeId를 사용해 브랜드 일관성 유지; 브랜드 슬라이드를referenceImageUrl로 넣으면 이미지 디자인 버전이 10페이지당 1,010 크레딧. - API는 키당 분당 6회 요청 허용, 분기말 마감 폭주 시 10초 간격 큐 필요.
대상 사용자
고객 성공 운영 또는 RevOps를 담당하며, 새 고객 로고마다 동일한 45분 작업(딜 노트 복사 → 킥오프 템플릿에 붙여넣기 → 목표 재작성 → 90일 계획 초안 작성 → 첫 비즈니스 리뷰 전 사용량 수치로 반복)을 수행하는 분. 이 레시피는 복사-붙여넣기 단계를 제거하면서도 최종 PPTX는 CSM이 직접 제어할 수 있도록 합니다.
고객별로 절대 변하지 않는 단일 PDF 온보딩 데크를 사용한다면 이 레시피는 건너뛰세요; 공유 링크가 어떤 고객 성공 프레젠테이션 생성기보다 저렴합니다.
워크플로우 개요
| 단계 | 도구 | 수행 내용 | 2Slides 엔드포인트 / 크레딧 |
|---|---|---|---|
| 1 | CRM (HubSpot, Salesforce, Pipedrive) | 딜 단계가 Closed Won으로 변경되면 딜 ID와 함께 웹훅 발동 | 없음 |
| 2 | n8n Webhook + HTTP Request + Set | 딜, 연락처, 노트 조회 후 프롬프트로 매핑 | 없음 |
| 3 | n8n HTTP Request | 고정된 themeId와 mode: "async"로 프롬프트 제출 | POST /api/v1/slides/generate, 페이지당 10 크레딧 |
| 4 | n8n Wait + HTTP Request | 10초마다 status가 success 또는 failed가 될 때까지 폴링 | GET /api/v1/jobs/{jobId}, 무료 |
| 5 | n8n Slack 또는 이메일 노드 | CSM에게 downloadUrl 전송; CRM에 URL 기록 | 없음 |
| 6 | n8n Schedule Trigger + 창고 쿼리 (85일째) | 채택 지표 조회, 90일 리뷰 프롬프트 생성 | POST /api/v1/slides/generate, 페이지당 10 크레딧 |
| 7 | 선택적 프리미엄 경로 | 브랜드 슬라이드를 referenceImageUrl로 넣어 이미지 디자인 리뷰 데크 생성 | POST /api/v1/slides/create-like-this, 페이지당 10 + 100 크레딧 |
1단계: API 키 발급 및 인증 확인
2slides.com/api에서 API Keys 탭에서 키를 생성하세요. 모든 계정은 가입 시 500 무료 크레딧(킥오프 데크 6개 분량)을 받으며, 구독 없이도 키가 작동합니다. n8n에서는 Header Auth 자격증명으로, 스케줄러에서는 SLIDES_API_KEY 환경변수로 저장하세요. 노드 본문이나 브라우저 스크립트에 키를 직접 붙여넣지 마세요.

다음 명령어로 키를 확인하세요:
curl https://2slides.com/api/v1/echo \
-H "Authorization: Bearer $SLIDES_API_KEY"200 응답이 오면 인증 성공, 401은 키 끝에 공백이 포함된 경우가 많습니다.
2단계: 온보딩 테마 하나 선택해 고정하기
템플릿 라이브러리를 한 번 검색해 깔끔한 커버, 타임라인 레이아웃, 연락처 레이아웃이 있는 테마를 골라 themeId를 하드코딩하세요. 검색은 무료이며 1,500개 이상의 템플릿에서 themeId와 메타데이터를 반환합니다.
curl "https://2slides.com/api/v1/themes/search?query=customer%20onboarding%20timeline&limit=5" \
-H "Authorization: Bearer $SLIDES_API_KEY"
하나의 themeId로 온보딩 프레젠테이션 자동화를 브랜드 일관성 있게 유지하기
브랜드 일관성은 단 하나의 결정에서 나옵니다: 모든 킥오프 데크와 90일 리뷰 데크가 동일한 themeId를 사용합니다. 고객은 1일 차와 90일 차에 같은 색상과 레이아웃을 보며, CSM은 스타일을 다시 지정할 필요가 없습니다. 디자인팀에서 승인된 템플릿이 있다면 브랜드 일관성 템플릿 채우기 가이드를 참고해 라이브러리에 등록하고 themeId가 자체 디자인을 가리키도록 하세요.
프리미엄 옵션: 브랜드 슬라이드로 create-like-this 사용하기
전략적 계정에는 Fast PPT 호출 대신 POST /api/v1/slides/create-like-this를 사용하고 승인된 브랜드 슬라이드의 공개 URL을 referenceImageUrl로 전달하세요. 파이프라인이 해당 이미지에서 전체 디자인 시스템을 유도해 PDF와 페이지별 이미지로 된 이미지 디자인 슬라이드를 반환합니다. 출력물은 편집 가능한 PPTX가 아니므로 CSM이 편집하는 대신 발표용 데크로 사용하세요. 비용은 10 크레딧 + 페이지당 100 크레딧, 총 2,000 크레딧 수준입니다.
3단계: CRM 필드를 프롬프트 템플릿으로 변환하기
Fast PPT 경로는 CSM이 Fast PPT에서 수동으로 사용하는 방식과 같습니다: 내용을 붙여넣고 테마를 선택하면 PPTX를 받는 것. API는 이 붙여넣기를 자동화합니다. 한 번만 잘 작성된 템플릿을 만드는 것이 중요합니다.

n8n Set 노드에서 CRM 속성을 범용 이름으로 매핑해 어떤 CRM에도 작동하도록 하세요: company, csmName, plan, seats, startDate, dealNotes (발견 노트 또는 "고객 목표" 필드), contacts (직함, 스폰서 및 관리자 표시). 그런 다음 다음과 같은 템플릿으로 userInput을 만드세요 (n8n 표현식 문법):
Create a customer onboarding kickoff deck for {{ $json.company }}, a new customer of Northstar Analytics.
CSM: {{ $json.csmName }}. Plan: {{ $json.plan }}, {{ $json.seats }} seats, contract start {{ $json.startDate }}.
Goals from the sales notes: {{ $json.dealNotes }}
Key contacts: {{ $json.contacts }}
Build exactly 8 slides:
1. Welcome cover with the customer name, kickoff date and CSM name
2. What you purchased: plan, seats, modules, contract dates
3. Your three goals, rewritten as measurable outcomes
4. Days 1-30: SSO, data import, admin training
5. Days 31-60: team rollout, first dashboards, adoption target
6. Days 61-90: review prep, success criteria check
7. Your team: CSM, solutions engineer, support channel, executive sponsors on both sides
8. Next steps with owners and dates before the kickoff call
Use only facts from the notes above. Where a detail is missing, insert a bracketed
placeholder such as [CSM to confirm] so it is easy to find in PowerPoint.대괄호 안의 플레이스홀더 지시문이 중요합니다: 출력물이 편집 가능한 PPTX이므로 CSM이 [를 검색해 2분 만에 모든 빈칸을 채울 수 있어, 8페이지를 다시 검토하며 허구의 내용을 찾는 수고를 덜어줍니다.
다음은 현실적인 값으로 기본 동기식 모드에서 완성된 데크를 한 번에 반환하는 호출 예입니다:
curl -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"themeId": "YOUR_ONBOARDING_THEME_ID",
"responseLanguage": "English",
"mode": "sync",
"userInput": "Create a customer onboarding kickoff deck for Acme Logistics, a new customer of Northstar Analytics. CSM: Priya Shah. Plan: Business, 120 seats, contract start 2026-10-01. Goals from the sales notes: replace weekly Excel fleet reports with live dashboards; cut month-end reporting from 5 days to 1; give 40 regional managers self-serve access. Key contacts: Dana Ortiz (VP Operations, executive sponsor), Luis Ferreira (BI lead, admin). Build exactly 8 slides: 1 welcome cover with customer name, kickoff date and CSM; 2 what you purchased; 3 the three goals as measurable outcomes; 4 days 1-30 (SSO, data import, admin training); 5 days 31-60 (regional manager rollout, first 5 dashboards); 6 days 61-90 (review prep, success criteria check); 7 your team and support channels; 8 next steps with owners and dates. Where a detail is missing, insert a bracketed placeholder for the CSM to fill in."
}'응답은 { "success": true, "data": { "jobId": "...", "status": "success", "downloadUrl": "https://..." } } 형태입니다. 8페이지는 80 크레딧입니다. 다운로드 링크에 장기 의존하지 말고 파일을 자체 저장소에 복사하세요.
4단계: n8n에서 Closed-Won 웹훅으로 고객 온보딩 데크 자동화
각 CRM별 Closed Won 웹훅 발동 방식:
- HubSpot: 비공개 앱에서
deal.propertyChange이벤트를dealstage필드로 구독, n8n에서closedwon필터링. 페이로드는 ID만 포함하므로 이후 레코드 조회 필요 (HubSpot 웹훅 문서). - Pipedrive: "updated deal" 이벤트 구독 후
status = won필터링. - Salesforce:
StageName = Closed Won인 Opportunity에 레코드 트리거 플로우를 만들고 HTTP 콜아웃으로 n8n 웹훅 URL 호출.
n8n 워크플로우 노드별 설명:
- Webhook trigger (POST): CRM 페이로드 수신.
- IF: 단계가 Closed Won이고
onboarding_deck_url이 비어 있을 때만 진행, 웹훅 재시도로 중복 생성 방지. - HTTP Request (GET, CRM API): 딜, 연락처, 노트 조회.
- Set node: 3단계 필드 매핑 및
userInput조립. - HTTP Request (POST generate):
https://2slides.com/api/v1/slides/generate호출, Header Auth 자격증명과 JSON 본문{ themeId, userInput, responseLanguage: "English", mode: "async" }포함. 비동기 호출은 1초 이내에data.jobId반환, n8n 실행이 긴 연결을 유지하지 않음. - Wait node: 10초 대기.
- HTTP Request (GET jobs):
https://2slides.com/api/v1/jobs/{{ $json.data.jobId }}호출. - IF:
success면 계속 진행;pending또는processing이면 Wait로 루프;failed면 운영 채널에 Slack 알림 전송. - Slack node (또는 Gmail/Outlook): 고객명,
downloadUrl, 킥오프 날짜, 딜 링크를 CSM에게 메시지 전송. - HTTP Request (PATCH, CRM API):
downloadUrl을onboarding_deck_url필드에 기록해 다음 실행 시 중복 생성 방지.
분기말에 20건 딜이 한 시간 내에 종료된다면, 제출 전 10초 Wait를 둔 배치 루프를 추가하세요; generate는 키당 분당 6회, jobs 엔드포인트는 분당 10회 요청 허용. n8n과 2Slides 워크스루에서 자격증명 설정과 폴링을 자세히 다루며, HubSpot 영업 데크 자동화 게시물도 같은 패턴을 보여줍니다.
공정성을 위해: Gamma API (developers.gamma.app)도 유사한 n8n + HubSpot 온보딩 데크 레시피를 문서화했습니다. Gamma API 키는 Pro 플랜이 필요하지만 2Slides 키는 모든 계정에서 작동합니다; 2Slides는 본 제품이므로 비교 시 참고하세요. n8n HTTP Request 노드 문서는 두 레시피 모두에 적용됩니다.
5단계: 85일째 QBR 데크 자동화 예약하기
킥오프 데크는 텍스트 기반, 리뷰 데크는 숫자 기반이므로 트리거가 웹훅에서 스케줄로 바뀝니다. n8n의 일일 Schedule Trigger(또는 크론 작업)가 kickoff_date가 85일 전인 고객을 선택해 창고나 분석 API에서 사용 지표를 조회하고 10페이지 리뷰 데크를 생성합니다. 5일 여유를 두어 CSM이 수치를 검증하고 플레이스홀더를 수정한 뒤 90일 콜에 임할 수 있습니다.
숫자는 8~12개로 제한하세요; 그 이상이면 데크가 대시보드 내보내기처럼 보입니다. QBR 데크 가이드에서 90일 이후 분기별 리뷰 슬라이드별 개요를 확인하세요.
아래 Node.js 예시는 제출, 폴링, 다운로드 루프 전체를 보여주며 분기별 QBR 데크 자동화 API 작업에 재사용할 수 있는 코드입니다:
// review-deck.mjs (Node 20+, no dependencies)
// Run daily from a scheduler: SLIDES_API_KEY=... ONBOARDING_THEME_ID=... node review-deck.mjs
const BASE = "https://2slides.com";
const HEADERS = {
Authorization: `Bearer ${process.env.SLIDES_API_KEY}`,
"Content-Type": "application/json",
};
const THEME_ID = process.env.ONBOARDING_THEME_ID; // same theme as the kickoff deck
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
function buildPrompt(c) {
return `Create a 90-day customer review deck for ${c.company}, a customer of Northstar Analytics.
Audience: ${c.sponsor} (executive sponsor) and ${c.admin} (admin). Presenter: ${c.csmName}.
Kickoff goals: ${c.goals.join("; ")}.
Usage for days 1-85: ${c.weeklyActiveUsers} weekly active users of ${c.seats} seats (${c.adoptionPct}% adoption),
${c.dashboards} dashboards published, ${c.reportsAutomated} recurring reports automated,
${c.ticketsOpened} support tickets opened (${c.ticketsOpen} still open), active in ${c.weeksActive} of 12 weeks.
Build exactly 10 slides: 1 cover; 2 executive summary in three sentences; 3 goals vs outcomes table;
4 adoption trend; 5 feature adoption; 6 business impact using the numbers above; 7 open issues and owners;
8 roadmap items that match their goals; 9 plan for days 91-180; 10 next steps with owners and dates.
Use only the numbers given. Where a number is missing, write [CSM to confirm].`;
}
async function generateDeck(customer) {
const submit = await fetch(`${BASE}/api/v1/slides/generate`, {
method: "POST",
headers: HEADERS,
body: JSON.stringify({
themeId: THEME_ID,
userInput: buildPrompt(customer),
responseLanguage: customer.language ?? "English", // a language name such as "Spanish", not a code
mode: "async",
}),
});
const submitted = await submit.json();
if (!submitted.success) throw new Error(submitted.error);
const jobId = submitted.data.jobId;
// Poll every 10 s. The jobs endpoint is free and allows 10 requests per minute.
for (;;) {
await sleep(10_000);
const res = await fetch(`${BASE}/api/v1/jobs/${jobId}`, { headers: HEADERS });
const { data } = await res.json();
if (data.status === "success") return data.downloadUrl;
if (data.status === "failed") throw new Error(`Job ${jobId} failed`);
}
}
async function main() {
// Your warehouse query: customers where kickoff_date = today minus 85 days
const customers = await loadCustomersDueForReview();
for (const c of customers) {
const url = await generateDeck(c);
const file = await fetch(url);
await saveToStorage(`${c.company}-90-day-review.pptx`, Buffer.from(await file.arrayBuffer()));
await notifyCsm(c.csmName, c.company, url); // Slack or email, your implementation
await sleep(10_000); // keeps generate calls under 6 per minute
}
}
main().catch((err) => { console.error(err); process.exit(1); });10페이지 리뷰 데크는 100 크레딧, 약 $0.25입니다. 루프는 일부러 한 고객씩 처리하며 10초 간격으로 호출해 30명의 고객이 같은 날 85일째가 되어도 속도 제한을 넘지 않습니다.
좋은 90일 리뷰 데크란?
리뷰 프롬프트를 최종 확정하기 전에, 강력한 지표 기반 데크가 어떻게 구성되는지 참고하세요. 아래 두 슬라이드는 2Slides 갤러리에서 Grab 투자자 업데이트용으로 만든 참고용 데크이며, 이 워크플로우의 API 출력물이 아닙니다.


세 가지 교훈:
- 슬라이드당 한 숫자씩, 12개가 한 표에 몰려있지 않게.
- 각 지표를 고객 킥오프 목표와 연결해 리뷰가 열린 루프를 닫도록.
- 미해결 이슈는 담당자와 함께 별도 슬라이드로.
템플릿 테마 대신 이 시각 언어를 재사용하려면 create-like-this에 이 슬라이드 URL 중 하나를 referenceImageUrl로 전달하세요.
비용 안내
Fast PPT는 페이지당 10 크레딧입니다. 크레딧은 $5 패키지(2,000 크레딧)에서 개당 $0.0025, $80 패키지(40,000 크레딧)에서는 $0.002입니다. 고객당 8페이지 킥오프 데크와 10페이지 리뷰 데크를 가정합니다.
| 규모 | 월별 데크 수 | 월별 크레딧 | 대략 비용 |
|---|---|---|---|
| 신규 고객 20명 | 킥오프 20 + 리뷰 20 = 40 | 20 x 80 + 20 x 100 = 3,600 | $9 (두 개 $5 팩으로 4,000 크레딧 충당) |
| 신규 고객 500명 | 킥오프 500 + 리뷰 500 = 1,000 | 500 x 80 + 500 x 100 = 90,000 | $180 정도 ($80 팩 기준) |
| 프리미엄: 이미지 디자인 리뷰 데크 20개 (2K, 10페이지) | 20 | 20 x (10 + 1,000) = 20,200 | 약 $43 ($42.50 팩은 20,000 크레딧) |
20고객 규모에서 API 비용은 고객당 두 데크 합쳐 $0.45이며, 수동 작업 시 월 30시간 CSM 인건비와 비교됩니다.
이 사용 사례에 Fast PPT와 이미지 디자인 슬라이드 중 무엇을 쓸까?
| 질문 | Fast PPT generate (편집 가능한 PPTX) | create-pdf-slides / create-like-this (이미지 디자인) |
|---|---|---|
| CSM이 콜 전에 편집하나요? | 예, 킥오프 데크 기본값 | 아니요, 출력은 PDF 및 페이지 이미지 |
| 10페이지 비용 | 100 크레딧, 약 $0.25 | 2K 기준 1,010 크레딧, 약 $2.53 |
| 브랜드 제어 | 하나의 themeId 또는 자체 업로드 템플릿 | 하나의 referenceImageUrl에서 유도된 디자인 시스템 |
| 내레이션 또는 MP4 영상 리뷰 가능? | 지원 안 함 | generate-narration (페이지당 210 크레딧) + download-slides-pages-voices |
경험 법칙: 킥오프 데크는 항상 편집이 필요해 Fast PPT 사용. 90일 리뷰는 기본 Fast PPT, 최상위 계정이나 내레이션 영상용으로만 create-like-this 예약.
흔한 실수
- 분기말 폭주로 속도 제한 초과.
generate는 키당 분당 6회 요청 허용. 웹훅마다 실행하지 말고 10초 Wait로 직렬 처리. - API 키를 잘못된 위치에 둠. 키는 n8n 자격증명이나 서버 환경변수에 보관. 브라우저 위젯이나 클라이언트 CRM 카드에서 호출 금지.
- Fast PPT 데크에 내레이션 시도.
generate-narration은create-pdf-slides와create-like-this작업만 지원. 내레이션 영상은 처음부터create-like-this로 생성. - 언어 코드를 이름 대신 사용.
responseLanguage는"Spanish","Japanese"같은 언어 이름을 받음,es,ja같은 코드는 안 됨. Set 노드에서 CRM 로케일 필드를 언어 이름으로 매핑. - 전체 딜 타임라인을 프롬프트에 덤프. 20페이지 분량 콜 노트는 데크를 혼란스럽게 만듦. Code 노드에서 3개 목표와 5개 사실로 요약하거나 전용 "고객 목표" CRM 속성 사용 권장.
- 웹훅 재시도로 중복 데크 생성. CRM은 타임아웃 시 재전송.
downloadUrl을 딜에 기록하고 생성 전 확인.
자주 묻는 질문
n8n 없이도 고객 온보딩 데크를 자동화할 수 있나요?
네. 워크플로우는 HTTP 호출 두 번과 폴링 한 번으로 구성되어 Zapier, Make, Salesforce Flow의 HTTP 콜아웃, 5단계의 60줄 Node.js 스크립트 모두 가능합니다. n8n은 Wait와 IF 노드로 폴링 루프를 시각화해 편리하지만, 엔드포인트와 페이지당 10 크레딧 비용은 어떤 오케스트레이터를 써도 동일합니다.
딜 종료 후 킥오프 데크 생성까지 얼마나 걸리나요?
Fast PPT 데크는 보통 30초 내외에 완료됩니다. 비동기 흐름에서 제출 호출은 1초 이내에 jobId를 반환하고, 10초 후 첫 폴링은 보통 processing 상태, 두세 번째 폴링에서 success와 downloadUrl을 받습니다. CSM은 단계 변경 후 1분 이내에 Slack 메시지를 받는 경우가 많습니다.
CSM이 생성된 온보딩 데크를 편집할 수 있나요?
네. generate 엔드포인트는 디자인된 템플릿에서 만든 네이티브 PPTX를 반환해 PowerPoint, Keynote, Google Slides에서 텍스트, 순서, 레이아웃 편집이 가능합니다. 3단계 프롬프트는 CRM에 없는 세부사항에 [CSM to confirm] 플레이스홀더를 넣어, 편집을 빠른 찾기-채우기로 만듭니다.
90일 리뷰 데크는 어떤 데이터를 포함해야 하나요?
8~12개의 숫자를 전달하세요: 좌석 대비 주간 활성 사용자 수, 채택 기능, 자동화된 워크플로우/보고서, 열린 지원 티켓과 미해결 티켓 수, 12주 중 활동 주 수, 각 킥오프 목표의 진행 상황. 85일째에 조회해 CSM이 5일간 검증 후 콜에 임할 수 있도록 하며, 원래 목표도 포함해 리뷰가 열린 루프를 닫도록 합니다.
이 고객 성공 프레젠테이션 생성기는 비영어권 고객도 지원하나요?
네. responseLanguage를 "Spanish", "Portuguese", "Japanese" 같은 언어 이름으로 설정하면 데크 내용이 해당 언어로 작성되고 테마는 동일하게 유지됩니다. 2Slides는 20개 이상의 출력 언어를 지원합니다. Set 노드에서 CRM 로케일 필드를 언어 이름으로 매핑해 각 고객이 작업 언어로 된 데크를 자동 수신하도록 하세요.
다음 단계
- 2slides.com/api에서 API 키를 발급받으세요. 500 무료 크레딧으로 킥오프 데크 6개를 만들 수 있어, 구매 전 다음 몇 건의 Closed-Won 딜 온보딩 데크 자동화를 시작할 수 있습니다.
- 팀별 AI 프레젠테이션 API 활용 사례 허브에서 다른 팀들이 같은 엔드포인트를 어떻게 쓰는지 확인하세요.
- QBR 데크 가이드로 2분기 이후 파이프라인을 확장하고, 브랜드 일관성 템플릿 채우기 가이드로
themeId를 승인된 자체 디자인으로 지정하세요.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free