RECIPE 067
재고 부족 자동 감지 → 발주 요청 생성
- ▸Google Sheets 재고 데이터를 주기적으로 스캔
- ▸임계값 이하 품목 자동 감지 및 발주 목록 생성
- ▸발주 요청 이메일을 공급업체에 자동 발송
✅사전 준비
- □Google Sheets 재고 관리 시트 생성 (컬럼: 품목코드, 품목명, 현재고, 최소재고, 발주단위, 공급업체이메일)
- □Gmail 발송 계정 OAuth2 설정
- □발주 이메일 템플릿 작성
- □Cron 주기 설정 (매일 오전 8시 권장)
재고 부족 필터링
// Google Sheets에서 읽은 후 Code 노드
const items = $input.all();
return items.filter(item => {
const current = parseInt(item.json['현재고']);
const minimum = parseInt(item.json['최소재고']);
return current <= minimum;
}).map(item => ({
json: {
...item.json,
orderQty: parseInt(item.json['발주단위']),
urgency: parseInt(item.json['현재고']) === 0 ? '긴급' : '일반'
}
}));발주 요청 이메일 본문
제목: [발주 요청] {{ $now.toFormat('yyyy-MM-dd') }} {{ $json.urgency }}
안녕하세요,
아래 품목의 재고가 부족하여 발주를 요청드립니다.
품목코드: {{ $json['품목코드'] }}
품목명: {{ $json['품목명'] }}
현재고: {{ $json['현재고'] }}개
발주수량: {{ $json.orderQty }}개
빠른 처리 부탁드립니다.
감사합니다.💡 TIP공급업체가 여러 곳인 경우, Sheets에 '공급업체이메일' 컬럼을 추가하고 `GroupBy` 노드로 업체별로 묶어 한 번에 발송하면 더 효율적입니다.
⚡
워크플로우 JSON
아래 JSON을 복사해 n8n에 바로 임포트하세요
📥 n8n 임포트 방법
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
n8n 화면 우측 상단 메뉴 (⋮) → Import from JSON → 아래 JSON 전체 복사 후 붙여넣기 → Import 클릭
{
"recipeId": "recipe067",
"title": "급여 이체 전 잔액 자동 확인 알림",
"chapter": 6,
"category": "재무 & 정산 자동화",
"difficulty": "⭐⭐",
"estimatedTime": "40분",
"usedApps": [
"오픈뱅킹 API",
"Google Sheets",
"Slack"
],
"description": "급여일 2일 전 오픈뱅킹 API로 법인 계좌 잔액을 자동 조회해, 이번 달 급여 총액과 비교합니다. 잔액이 부족하면 대표와 경리팀에 즉시 긴급 Slack 알림을 발송해 급여 이체 실수를 사전에 방지합니다.",
"nodes": [
{
"id": "node1",
"type": "n8n-nodes-base.scheduleTrigger",
"name": "급여일 2일 전 실행",
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 9 23 * *"
}
]
}
}
},
{
"id": "node2",
"type": "n8n-nodes-base.httpRequest",
"name": "오픈뱅킹 계좌 잔액 조회",
"parameters": {
"method": "GET",
"url": "https://openapi.openbanking.or.kr/v2.0/account/balance/fin_num",
"headers": {
"Authorization": "Bearer {{$env.OPENBANKING_ACCESS_TOKEN}}",
"Content-Type": "application/json"
},
"queryParameters": {
"bank_tran_id": "={{$env.BANK_TRAN_ID}}",
"fintech_use_num": "={{$env.FINTECH_USE_NUM}}"
}
}
},
{
"id": "node3",
"type": "n8n-nodes-base.googleSheets",
"name": "이번 달 급여 총액 조회",
"parameters": {
"operation": "getAll",
"spreadsheetId": "={{$env.PAYROLL_SHEET_ID}}",
"sheetName": "급여현황",
"filters": {
"conditions": [
{
"column": "연월",
"condition": "equals",
"value": "={{$now.format('YYYY-MM')}}"
}
]
}
}
},
{
"id": "node4",
"type": "n8n-nodes-base.if",
"name": "잔액 부족 여부 확인",
"parameters": {
"conditions": {
"number": [
{
"value1": "={{$node['오픈뱅킹 계좌 잔액 조회'].json['balance_amt']}}",
"operation": "smaller",
"value2": "={{$node['이번 달 급여 총액 조회'].json[0]['급여총액']}}"
}
]
}
}
},
{
"id": "node5",
"type": "n8n-nodes-base.slack",
"name": "잔액 부족 긴급 알림",
"parameters": {
"channel": "={{$env.FINANCE_SLACK_CHANNEL}}",
"text": "🚨 급여 이체 잔액 부족 경고!\n\n현재 법인 계좌 잔액: ₩{{$node['오픈뱅킹 계좌 잔액 조회'].json['balance_amt'].toLocaleString()}}\n이번 달 급여 총액: ₩{{$node['이번 달 급여 총액 조회'].json[0]['급여총액'].toLocaleString()}}\n\n⚠️ 급여일까지 잔액 확보가 필요합니다!"
}
}
],
"envVariables": {
"OPENBANKING_ACCESS_TOKEN": "오픈뱅킹 API Access Token",
"BANK_TRAN_ID": "오픈뱅킹 거래 고유 번호",
"FINTECH_USE_NUM": "핀테크 이용 번호",
"PAYROLL_SHEET_ID": "Google Sheets 급여 현황 시트 ID",
"FINANCE_SLACK_CHANNEL": "경리·대표 Slack 채널 ID"
},
"tips": [
"오픈뱅킹 API 발급 및 계좌 연동 방법은 부록 B를 참고하세요.",
"급여일이 매월 25일이라면 cron 표현식을 '0 9 23 * *'으로 설정하면 23일 오전 9시에 실행됩니다.",
"잔액이 충분한 경우에도 Slack에 '급여 이체 잔액 확인 완료' 메시지를 보내면 안심할 수 있어요."
],
"qrUrl": "www.koreaaitimes.com/books/n8n-vol2/recipe067"
}