n8n 오디오 텍스트 변환: HTTP Request 노드로 전사하기

n8n에서 오디오를 텍스트로 전사하세요. HTTP Request 노드로 녹음 파일의 공개 URL을 보내고, Job이 끝날 때까지 Wait 노드를 반복한 뒤 텍스트를 매핑합니다.

읽는 시간 6분Sume
전체 글

n8n에서 오디오를 텍스트로 전사하려면 HTTP Request 노드에서 녹음 파일의 공개 HTTPS URL을 음성 인식(STT) API로 보내고, 전사 Job이 끝날 때까지 기다린 뒤, 전사문을 다음 노드에 매핑하세요. Sume STT 1.0에서는 audio_url을 담아 POST https://api.sume.com/v1/stt-1.0/transcribe를 보내고, Job이 끝날 때까지 Wait 노드와 상태 확인을 반복하며, 결과의 text, words, segments를 워크플로의 나머지 단계에 넘깁니다.

Sume에는 n8n 노드가 없으므로, n8n 자체 노드에서 HTTPS로 직접 호출합니다. Sume 관련 사실은 Sume API 레퍼런스의 STT 1.0 스키마와 Job과 결과 (영문)에서 가져왔습니다. Sume API 레퍼런스는 API 레퍼런스 문서의 바탕이 되는 OpenAPI 문서입니다. n8n 동작은 n8n 노드 문서에서 가져왔으며, 모두 2026-09-27에 확인했습니다. 웹훅으로 Wait 노드를 재개하는 Sume 영상 실행은 n8n AI 영상 워크플로를 참고하세요.

오디오 파일은 어디에 있어야 하나요?

Sume가 가져올 수 있는 공개 HTTPS URL에 있어야 합니다. 필수 필드는 audio_url 하나뿐이고 요청 스키마에는 파일 바이트를 담을 필드가 없으므로, 트리거가 받은 음성 메시지처럼 n8n 안에 있는 바이너리 데이터는 본문으로 보낼 수 없습니다. 공개 HTTPS 주소가 생기는 곳에 파일을 저장한 뒤 그 주소를 넘기세요. 현재 코드에서는 포트를 명시했거나 자격 증명이 들어간 URL, localhost나 사설 네트워크 주소는 거부됩니다.

HTTP Request 노드는 어떻게 설정하나요?

HTTP Request 노드 하나로 Job을 제출합니다.

  • Method는 POST, URL은 https://api.sume.com/v1/stt-1.0/transcribe입니다.
  • Authentication: Sume API 키를 담은 generic Bearer auth 자격 증명을 쓰세요. n8n은 Bearer auth를 Name이 Authorization, Value가 Bearer <token>인 header auth로 설명합니다. 자격 증명은 하나만 보내세요. 한 요청에 Authorization: Bearer와 x-api-key가 함께 실리면 Sume가 401로 응답합니다.
  • Send Headers: 파일 자체의 id로 만든 Idempotency-Key를 넣으세요. 같은 키와 본문으로 노드를 다시 실행하면 두 번째 Job을 과금하는 대신 원래 Job이 반환됩니다.
  • Send Body: JSON, Using JSON으로 설정하고 아래 본문을 넣으세요. n8n의 Import cURL 옵션은 모든 값을 문자열로 가져오지만 Using JSON은 숫자를 숫자로 유지합니다. duration_seconds를 추가한다면 이 차이가 중요합니다. 이 값은 1에서 600 사이의 정수이며, 생략하면 Sume가 1분 기준으로 예약합니다.
{
  "audio_url": "{{ $json.audio_url }}",
  "segmentation": { "mode": "sentence" }
}

워크플로는 전사문을 어떻게 기다리나요?

제출 요청은 텍스트가 생기기 전에 Job의 status_url과 result_url을 담아 바로 응답합니다. Job이 끝날 때까지 루프를 도세요. n8n에서는 노드의 출력을 앞선 노드에 다시 연결하면 루프가 되고, If 노드로 그 루프를 멈춥니다. 확인 횟수는 노드의 실행 횟수를 영부터 세는 n8n 값인 {{ $runIndex }}로 제한하세요. 방법은 n8n Google Sheets AI 아바타 영상에 나와 있습니다.

n8n Wait 노드, If 노드, 루프 문서와 Sume Job과 결과 (영문) 기준, 2026-09-27 확인.
노드설정이유
Wait 노드After Time Interval, 몇 초확인 사이에 Job이 진행될 시간을 줌. 65초 미만이면 n8n은 실행을 데이터베이스로 옮기지 않고 계속 실행 중인 상태로 둠.
HTTP Request 노드GET {{ $json.data.status_url }}, 같은 자격 증명제출 응답과 모든 상태 응답에 data.status_url이 담김.
If 노드Boolean: {{ $json.data.terminal }}이 trueJob이 완료, 실패, 취소 중 하나로 끝나면 terminal이 true가 됨. false 출력을 Wait 노드에 다시 연결.
HTTP Request 노드GET {{ $json.data.result_url }}, 같은 자격 증명Job이 완료되면 data.result 아래에 전사문을 반환.

다음 노드에서 전사문은 어떻게 쓰나요?

마지막 HTTP Request 노드는 결과를 data.result 아래에 출력합니다. 그 필드는 표현식(expression)으로 매핑하세요.

  • {{ $json.data.result.text }}: 전사문 전체입니다.
  • {{ $json.data.result.words }}: word, start, end가 담긴 모든 토큰이며, 시간은 오디오 시작부터의 초 단위입니다. 항목에는 word나 spacing 같은 type이 붙을 수 있습니다.
  • {{ $json.data.result.segments }}: 문장 분할을 켠 경우 문장마다 항목이 하나씩 있으며, 각 항목에 index, text, start, end, duration_seconds가 담깁니다.
  • {{ $json.data.result.language_code }}: 감지되었거나 요청한 언어입니다(있는 경우).
  • 녹음이 여러 개라면 파일마다 항목을 하나씩 보내세요. n8n 노드는 보통 항목마다 한 번씩 실행되므로, 제출 노드는 녹음마다 Job을 하나씩 시작합니다. 여러 파일을 한꺼번에 처리하는 방법은 일괄 전사 API에서 다룹니다.

Job이 실패하거나 녹음이 길면 어떻게 하나요?

STT 1.0 요금은 오디오 분당 $0.01이며, 기본적으로 5.5% 에이전트 수수료가 더해집니다. 워크플로가 두 번 과금되거나 멈추지 않도록 다음 규칙을 지키세요.

  • 실패하거나 취소된 Job에는 결과가 없습니다. /result는 409 job_not_completed로 응답합니다. HTTP Request 노드는 기본적으로 2xx 응답에만 성공을 반환하므로, 이 409 때문에 결과 노드가 실패합니다. 그 앞에서 data.sume_status로 분기하고, 이유는 GET /v1/jobs/{id}에서 읽으세요.
  • 확인 요청이 타임아웃됐다고 다시 제출하지 마세요. Job은 계속 실행되고 여전히 과금되며, 같은 본문에 같은 Idempotency-Key를 쓰면 원래 Job이 반환됩니다.
  • 요청 하나로 최대 10분 분량의 오디오를 처리합니다. 더 긴 녹음은 먼저 나누세요. 긴 오디오 파일 전사하기를 참고하세요.
  • 화자 라벨은 없습니다. diarize는 서버 쪽에서 고정되어 있으며 현재 코드에서는 꺼진 채 실행됩니다.

출처

관련 글

연동 카테고리의 다른 글

연동 글 전체 보기

작성자 Sume