n8n Google Sheets로 행마다 Sume AI 아바타 영상 만들기
n8n Google Sheets 노드로 행을 읽고, 행마다 Sume 말하는 아바타 Job을 하나씩 제출한 뒤, 상한이 있는 루프로 폴링해 영상 URL을 시트에 기록하세요.
n8n에서 Google Sheets 행마다 AI 아바타 영상을 하나씩 만들려면, Google Sheets 노드로 행을 읽고 HTTP Request 노드에서 각 행의 avatar_handle과 script를 POST /v1/avatar-1.0/talking-video로 보내세요. 돌려받은 Job ID를 그 행에 다시 쓰고, 고정된 상한이 있는 루프에서 GET /v1/jobs/{id}/status를 폴링한 뒤, 완성된 영상 URL을 시트에 기록하세요.
Sume에는 n8n 노드가 없으므로, 각 행은 HTTPS로 직접 보내는 Job 요청입니다. 요청 본문 자체는 말하는 아바타 영상 API에서 다룹니다. Sume 관련 사실은 아바타 영상 생성, Job과 결과 (영문), Generation admission에서, n8n 동작은 2026-09-27에 확인한 n8n 문서에서 가져왔습니다.
시트는 어떻게 구성해야 하나요?
헤더 행 아래에 영상 하나당 행 하나를 두세요. n8n은 첫 행을 헤더로 취급하며, 모든 행을 읽을 때 첫 행은 건너뜁니다.
| 열 | 담는 값 | 규칙 |
|---|---|---|
row_id | 직접 정한 안정적인 ID | Idempotency-Key에 들어갑니다. |
avatar_handle | 준비된 아바타 | script 요청은 이 값을 최상위에 지정합니다. |
script | 아바타가 말할 내용 | Sume가 추정한 길이가 4-60초여야 합니다. 더 긴 스크립트는 여러 행으로 나누세요. |
status | ready, submitted, done, failed, check_later 중 하나 | 직접 관리하는 표시 값입니다. Get Row(s)가 이 값으로 필터링합니다. |
job_id | 제출 후 기록 | 워크플로를 다시 시작해도 재제출하지 않고 폴링을 이어 갈 수 있게 합니다. |
video_url | 마지막에 기록 | 결과에 담긴 media.sume.com URL입니다. |
행마다 Job을 하나씩 어떻게 제출하나요?
Get Row(s)에서 status가 ready인 행으로 필터를 걸고, When Filter Has Multiple Matches를 Return All Matches로 설정하세요. 기본값에서는 n8n이 조건에 맞는 첫 행만 반환합니다. n8n 노드는 항목마다 한 번씩 실행되므로, 다음 HTTP Request 노드는 Bearer auth 자격 증명으로 인증해 행마다 POST를 한 번씩 보냅니다. 아래 요청이 한 행에 대해 보내는 내용입니다.
Idempotency-Key는 시트, 행 ID, 버전으로 만드세요. 같은 키를 재사용한 재시도는 두 번째 Job을 과금하는 대신 원래 Job을 돌려받습니다.mode는 생략해도 됩니다. 기본값인async는 폴링 URL과 함께 즉시 응답합니다.product_image같은 미디어 열에는 가져올 수 있는 공개 HTTPS URL이 들어 있어야 합니다.- 다음으로 Update Row가
job_id와submitted를 그 행에 기록합니다. Sume는 Job ID를 저장하고, 로컬 프로세스가 타임아웃됐다는 이유로 유료 요청을 다시 제출하지 말라고 안내합니다.
curl -X POST https://api.sume.com/v1/avatar-1.0/talking-video \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: promo-sheet-row-42-v1" \
-d '{
"avatar_handle": "acme_host",
"script": "Meet the Acme travel mug. It fits every cup holder.",
"aspect_ratio": "9:16"
}'한 번에 몇 행까지 보낼 수 있나요?
Sume는 유료 Job을 큐 우선(queue-first) 방식으로 접수합니다. 워크스페이스는 정해진 수의 Job을 동시에 실행하고 그보다 많은 Job은 queued로 보관하며, 두 한도를 모두 넘는 제출은 429 queue_full로 실패합니다. 요금제별 기본값은 영상 Job 동시성과 큐에 있고, 실제 적용 중인 값은 대시보드의 동시 실행(Concurrency) 탭과 제출 응답마다 담기는 generation_limits에서 확인할 수 있습니다.
- 배치 크기는 Sume가 정의하는 새 진행 작업 예산에 맞추세요.
concurrency_limit에서 실행 중인 Job과 대기 중인 Job을 뺀 값이며,queue_capacity_remaining을 넘지 않아야 합니다. - 그 크기를 HTTP Request 노드의 Batching 옵션에 설정하세요. Items per Batch에 크기를 넣고, 밀리초 단위의 Batch Interval도 함께 정합니다. 이 간격은 배치 사이의 고정 대기일 뿐 Job이 끝나기를 기다리는 것이 아닙니다.
- Never Error와 Include Response Headers and Status를 켜고, If 노드가
2xx응답만 Update Row로 넘기게 하세요. 그러면429를 받은 행은 워크플로를 멈추지 않고ready로 남습니다. 나중에 같은Idempotency-Key로 재시도하세요. - 읽기와 쓰기는 분당 예산이 따로 있고 읽기는 쓰기 숫자의 마흔 배를 받으므로, 폴링 때문에 제출이 429를 받는 일은 없습니다.
무한 루프 없이 어떻게 폴링하나요?
n8n에서는 노드의 출력을 앞선 노드에 다시 연결하면 루프가 되고, If 노드로 그 루프를 멈춥니다. Update Row 다음에는 이렇게 구성하세요.
- Wait: After Time Interval로, 예를 들어 30초를 기다립니다. 마지막 상태 응답에
next_poll_after_seconds가 있으면 그 값을 따르세요. - HTTP Request:
GET https://api.sume.com/v1/jobs/{job_id}/status를 보냅니다. - If 노드에서
terminal이 true면 루프를 빠져나갑니다. 아니면 두 번째 If 노드가 현재 노드의 실행 횟수를 영부터 세는 n8n 값인{{ $runIndex }}를 확인하고, 그 값이 정한 상한보다 작을 때만 Wait로 돌아갑니다. 30초 간격으로 40번 확인하면 20분이며, Sume는 이 정도를 영상에 적당한 클라이언트 쪽 마감 시간으로 봅니다. - 상한에 도달하면
check_later를 기록하세요. 여러분의 타임아웃은 Job을 취소하지 않습니다. Job은 계속 실행되며 여전히 과금되고, 저장해 둔job_id로 다시 이어 갈 수 있습니다.
Job이 끝나면 무엇을 기록하나요?
상태에 result_ready: true가 보이면 GET /v1/jobs/{id}/result가 결과를 반환합니다. 완료된 아바타 영상 결과에는 공개 media.sume.com 영상 산출물이 포함될 수 있습니다. 그 URL을 video_url에 쓰고, 기존 행만 업데이트하는 Update Row로 done을 설정하세요.
/result는 완료되지 않은 모든 Job에 409 job_not_completed로 응답하므로, 실패하거나 취소된 Job은 GET /v1/jobs/{id}에서 오류를 읽어 그 행에 failed로 기록하세요.
출처
- 아바타 영상 생성
- Job과 결과 (영문)
- Generation admission
- 인증
- n8n 문서: Google Sheets 노드 (2026-09-27 확인)
- n8n 문서: Google Sheets 시트 작업 (2026-09-27 확인)
- n8n 문서: HTTP Request 자격 증명 (2026-09-27 확인)
- n8n 문서: HTTP Request 노드 (2026-09-27 확인)
- n8n 문서: Wait 노드 (2026-09-27 확인)
- n8n 문서: If 노드 (2026-09-27 확인)
- n8n 문서: 루프 (2026-09-27 확인)
- n8n 문서: n8n 메타데이터 (2026-09-27 확인)
관련 글
연동 카테고리의 다른 글
- 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