
매달 돌아오는 법인카드 영수증 처리, 사진 찍어서 시트에 옮기느라 번거로우셨나요? 오늘은 노코드 자동화 툴인 n8n과 Gemini AI를 결합해, 텔레그램으로 사진만 보내면 자동으로 구글 시트에 기록되는 스마트한 업무 자동화 시스템 구축 과정을 소개합니다.
1. 프로젝트 개요
이번 워크플로우의 핵심은 **”수동 입력 제로”**입니다.
- 도구: n8n, Telegram, Gemini AI, Google Sheets, Cloudflare Tunnel
- 환경: 로컬 k3s 클러스터 기반 호스팅
- 흐름: 텔레그램 메시지 수신 → 이미지 다운로드 → Gemini AI 분석(OCR 및 데이터 구조화) → 구글 시트 적재
2. 단계별 구축 과정
Step 1: 텔레그램 봇 설정 및 n8n 트리거 연결
가장 먼저 사용자의 입력을 받을 텔레그램 봇을 생성합니다. @BotFather를 통해 *****_n8n_bot을 만들고 발급받은 API 토큰을 n8n에 연결합니다.

보안을 위해 Filter 노드를 추가하여 본인의 텔레그램 ID(862*******)에서 온 메시지만 처리하도록 설정하는 것이 중요합니다.

그리고 이미지 파일이 있는경우 다음단계로 갈 수 있도록 Switch 노드를 이용해 주었습니다. (IF 노드를 사용하고자 했으나, n8n 버그인지 .toLowerCase() 문제로 변경하였음)

Step 2: Gemini AI를 이용한 영수증 분석
추출된 이미지는 Gemini AI 노드로 전달됩니다. 여기서 다음과 같은 정보를 추출하도록 프롬프트를 구성합니다.
- 추출 항목: 일자, 가맹점명, 총 금액, 사업자번호
Gemini는 단순 OCR을 넘어 “비고란에 사업자 번호를 넣어줘”와 같은 복잡한 요청도 정확하게 처리하여 데이터를 JSON 형식으로 변환해 줍니다.
모델은 gemini-2.5-flash 를 사용하였습니다.

gemini 답변결과에서 json 부분만 추출하도록 code 노드를 활용하였습니다.

Step 3: 구글 시트(Google Sheets) 자동 기록
분석된 데이터를 미리 준비한 시트에 한 줄씩 추가(Append)합니다.
- 문서 ID:
14uYIk6*************************** - 시트 이름:
2026_2월_O** 법인카드사용내역서
각 열(Column)에 맞게 {{ $json.issue_date }}, {{ $json.store_name }} 등의 데이터를 매핑하면 작업이 완료됩니다.
1. Document (Spreadsheet ID)
이것은 파일의 고유 식별값입니다. 브라우저 주소창에서 찾을 수 있습니다.
- 찾는 법: 시트 브라우저 주소창의 https://docs.google.com/spreadsheets/d/ 와 /edit 사이에 있는 길고 복잡한 문자열입니다.
- 입력 방법: n8n 노드 설정에서 Resource를 Spreadsheet로 선택하고, Document 항목에서 **’By ID’**를 선택한 뒤 위 문자열을 붙여넣으세요.
2. Sheet (Sheet Name)
이것은 파일 하단에 있는 ‘탭(Tab)’ 이름입니다. 한 파일 안에 여러 개의 시트가 있을 수 있기 때문에 정확히 지정해야 합니다.
- 찾는 법: 구글 시트 화면 왼쪽 하단에 보이는 탭 이름을 그대로 쓰시면 됩니다. 공백이나 특수문자까지 정확히 일치해야 합니다.
- 입력 방법: Sheet Name 항목에서 **’By Name’**을 선택하고 탭 이름을 입력하세요.

3. 안정적인 운영을 위한 인프라 팁
이번 시스템은 로컬 k3s 환경에서 동작하며, 외부 웹훅 수신을 위해 Cloudflare Tunnel을 활용했습니다.
- 환경 변수:
WEBHOOK_URL을 위 도메인 주소로 설정하여 텔레그램과의 안정적인 통신을 보장합니다. - 네트워크: 로컬 IP(
***.***.**.***)를 노출하지 않고도 안전하게 외부 API와 연동할 수 있는 구조입니다.
4. 워크플로우 결과 확인
Telgram 봇에 영수증 사진을 전송합니다.
(샘플 영수증)

영수증 사진분석이 완료된 이후 즉시 구글 시트에 자동으로 기록 됩니다.

5. 마치며
n8n과 AI를 결합하면 반복적인 경비 처리 업무를 획기적으로 줄일 수 있습니다.
궁금한 점이나 설정 과정에서 막히는 부분이 있다면 댓글로 남겨주세요!