n8n AI 영상 워크플로: Sume 웹훅으로 Wait 노드 재개하기
n8n HTTP Request 노드에서 Sume Format 실행을 시작하고 Wait 노드의 재개 URL을 webhook_url로 넘긴 뒤, 끝난 실행을 API 키로 읽으세요.

n8n에서 Sume로 AI 영상 워크플로를 돌리려면, HTTP Request 노드에서 communication.webhook_url을 {{ $execution.resumeUrl }}로 설정해 Format 실행을 시작하고, On Webhook Call로 재개되는 Wait 노드에서 워크플로 실행을 일시 중지하세요. Format 실행이 완료되거나 실패하면 Sume가 그 URL로 서명된 POST를 한 번 보내고, 워크플로가 이어지며, 다음 노드가 API 키로 실행을 읽습니다.
Sume에는 n8n 노드가 없으므로, n8n 자체 노드에서 HTTPS로 직접 호출합니다. Sume 관련 사실은 Format 호출하기 (영문)와 Run 웹훅 (영문)에서, n8n 동작은 2026-09-27에 확인한 n8n 노드 문서에서 가져왔습니다. 웹훅 계약 자체는 Sume Format 실행 수명주기에서 다룹니다.
워크플로에는 어떤 노드가 필요한가요?
워크플로 실행 하나에 노드 다섯 개가 필요합니다. n8n은 재개 URL을 런타임에 생성하고 부분 실행(partial execution)을 하면 이 URL이 바뀌므로, URL을 Sume로 보내는 노드는 Wait 노드와 같은 워크플로 실행 안에서 돌아가야 합니다.
- 트리거: 작업을 시작하는 것이면 무엇이든 됩니다.
- HTTP Request: 재개 URL을
communication.webhook_url로 담아 실행을POST합니다. - Wait: On Webhook Call로 재개합니다.
- HTTP Request: 첫 호출의
data.id를 써서 API 키로GET /v1/format-runs/{run_id}를 보냅니다. - If:
data.status로 분기합니다.completed면primary_output_url을 게시하는 단계로 넘어가고, 그 밖의 값은 오류 처리 경로로 보냅니다.
HTTP Request 노드에서 실행을 어떻게 시작하나요?
Method를 POST로 설정하세요. 카탈로그 Format은 formats:write가 있는 키라면 어떤 키로든 https://api.sume.com/v1/formats/sume/{slug}/runs에서 호출할 수 있으며, 이 예시는 sume-product-commercial을 호출합니다. 키는 generic credential에 저장하세요. n8n의 Bearer auth는 Name이 Authorization, Value가 Bearer <token>인 header auth입니다. 자격 증명은 하나만 보내세요. 한 요청에 Authorization: Bearer와 x-api-key가 함께 실리면 Sume가 401 unauthorized로 응답하기 때문입니다.
만드는 대상에서 유도한 Idempotency-Key 헤더를 추가하세요. 예를 들면 주문 ID에 버전을 붙인 값입니다. 같은 키로 같은 본문을 보내면 원래 실행과 함께 200이 돌아오고, 두 번째 청구는 없습니다. 현재 코드에서는 키를 확인할 때 비교하는 본문에 웹훅 URL도 포함되고 재개 URL은 워크플로 실행마다 다르므로, 새 워크플로 실행에서 같은 키를 보내면 409 idempotency_conflict가 돌아오고 아무것도 실행되지 않습니다. 같은 항목을 다시 만들고 싶다면 버전을 올리세요. JSON 본문은 다음과 같습니다.
{
"instruction": "Make a vertical product commercial from the attached photo.",
"attachments": [
{ "type": "input_image", "image_url": "https://example.com/product.jpg" }
],
"generation_spend_cap_usd": 20,
"communication": { "webhook_url": "{{ $execution.resumeUrl }}" }
}Wait 노드는 어떻게 설정해야 하나요?
아래 설정을 쓰세요. n8n은 일시 중지된 워크플로 실행의 데이터를 데이터베이스로 옮겨 두었다가, 재개 조건이 충족되면 다시 불러옵니다.
| 설정 | 값 | 이유 |
|---|---|---|
| Resume | On Webhook Call(웹훅 호출 시) | Sume는 실행이 완료되거나 실패할 때 POST를 한 번 보냅니다. |
| HTTP Method | POST | 영수증은 POST로 도착합니다. |
| Authentication | None | Sume 웹훅은 URL만 받고 URL 안의 자격 증명은 거부하므로, Basic, Header, JWT 인증으로는 확인할 것이 없습니다. |
| Respond | Immediately | 2xx라면 무엇이든 전달로 인정되며, 시도마다 10초가 주어집니다. |
| Limit Wait Time | On, After Time Interval, 90분 넘게 | created_at으로부터 90분이 지나도 진행 중인 실행은 failed로 강제 종료됩니다. |
| Webhook Suffix | 비워 둠 | 생성되는 재개 URL에는 suffix가 포함되지 않으므로, suffix를 설정하면 직접 덧붙여야 합니다. |
워크플로는 자신을 재개한 POST를 믿어도 되나요?
그것만으로는 믿을 수 없습니다. Authentication을 None으로 두고 IP(s) Whitelist 옵션을 비워 두면, n8n은 재개 URL을 가진 호출자라면 누구의 요청이든 워크플로 실행을 재개합니다. Sume는 전달마다 서명을 붙이지만(서명이 동작하는 방식), 이 워크플로는 n8n에서 서명을 확인하는 데 기대지 않습니다. 확인은 Wait 노드 다음의 읽기가 맡습니다.
- 실행 ID는 워크플로를 재개한 본문이 아니라 첫 HTTP Request 노드의
data.id에서 가져오세요. - 같은 자격 증명으로
GET /v1/format-runs/{run_id}를 읽으세요. 웹훅에 담겼던 것과 같은 영수증이 돌아오므로, 게시하는 영상 URL은 항상 여러분의 키로 읽은 Sume API에서 나옵니다. - 이 읽기는 1 MiB를 넘는 영수증도 처리합니다. 웹훅은 그런 영수증을
payload: null로 전달합니다.
웹훅이 끝내 오지 않으면 어떻게 되나요?
취소되거나 건너뛴 실행은 웹훅을 보내지 않으며, 전달이 10번의 시도에 모두 실패할 수도 있습니다. Limit Wait Time을 켜 두면 n8n은 그래도 워크플로 실행을 재개하고, Wait 노드 다음의 읽기가 모든 경우를 처리합니다. data.status로 분기하고, queued나 processing은 아직 끝나지 않은 것으로 처리하세요. 여러분의 타임아웃은 실행을 취소하지 않습니다. 실행은 계속 진행되며 계속 과금되므로 실행 ID를 보관하세요.
Sume의 테스트 보내기(Send test)를 실제 재개 URL로 보내지 마세요. 테스트 보내기는 실행 영수증이 아니라 더미 webhook.test 본문을 POST합니다.
셀프 호스팅 n8n에서도 동작하나요?
네, 재개 URL이 공개 주소라면 동작합니다. n8n은 N8N_PROTOCOL, N8N_HOST, N8N_PORT로 웹훅 URL을 만들고 내부적으로 5678 포트에서 실행됩니다. 리버스 프록시 뒤에서는 N8N_WEBHOOK_URL을 공개 주소로 설정하세요. Sume는 localhost, 사설 네트워크, HTTPS가 아닌 웹훅 URL을 400 invalid_request로 거부하며, 현재 코드는 :5678처럼 기본 포트가 아닌 포트를 쓰는 URL도 거부합니다. URL은 전달 시점에 다시 검사되며, 3xx는 실패한 시도로 셉니다.
출처
관련 글
연동 카테고리의 다른 글
- n8n MCP Client Tool과 Sume: 설정과 SSE 주의점
n8n은 MCP Client Tool 필드를 SSE Endpoint라 부르지만 Sume는 streamable HTTP를 문서화합니다. 설정하고 연결을 테스트한 뒤 유료 호출은 승인받게 하세요.
- OpenAI Agents SDK MCP 서버: Sume와 5초 타임아웃
API 키로 OpenAI Agents SDK를 Sume 호스팅 MCP 서버에 연결하고, 기본 5초인 클라이언트 타임아웃을 jobs_wait의 55초보다 길게 늘리세요.
- OpenAI Responses API MCP 도구로 Sume 호출
Sume 호스팅 MCP 서버를 Responses API에 mcp 도구로 추가하고, Sume API 키는 headers로 보내고, 유료 도구 호출은 실행 전에 승인하세요.
- PHP 웹훅 서명 검증: 순수 PHP와 Laravel
PHP에서 Sume 웹훅 검증하기: timestamp.raw_body에 hash_hmac sha256을 적용하고, sume-v1 항목을 나눠 각각 hash_equals로 비교하세요.
작성자 Sume