Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telegram → Notion Todo Router

Telegram 메시지를 자연어로 입력하면 GLM이 분석해서 Notion 데이터베이스에 할 일을 추가/조회/완료 처리하는 n8n 워크플로우.

사용법

텔레그램 봇에 메시지를 보내면 됩니다. 슬래시(/) 유무 상관없이 동작합니다.

회의 준비                    → [미분류] 할 일 추가
5월20일~22일 대전 출장         → [미분류] + 날짜 범위(20~22일) 추가
급해! 보고서 제출              → [미분류] + 우선순위 높음
회사 프로젝트 마감             → [회사] 할 일 추가
보여줘                        → 전체 할 일 조회
/보여줘                       → 전체 할 일 조회 (슬래시 OK)
회사 뭐있어                   → 회사 카테고리만 조회
회의 완료                     → '회의' 검색 후 Done 처리

지원 기능

기능 트리거 예시 설명
추가 (add) 일반 텍스트 Notion에 새 할 일 생성
조회 (list) 보여줘, 뭐있어, 리스트, /보여줘 미완료 할 일 목록 출력
완료 (done) 완료, 했어, 끝났어 Notion 상태를 Done으로 변경

자동 추출

  • 카테고리: 회사 / 집 / 개인 / 학교 / 미분류
  • 날짜: 단일 날짜, 기간(부터까지), 상대 날짜(내일, 다음주 등)
  • 우선순위: 높음(급해, 빨리, 중요) / 보통 / 낮음(나중에, 여유)

바로가기 명령어

명령어 동작
보여줘, 전체, 리스트 전체 할 일 조회
오늘, 오늘할일 오늘 마감 할 일만 조회
회사, 회사할일 회사 카테고리 조회
, 집할일 집 카테고리 조회
개인, 개인할일 개인 카테고리 조회
학교, 학교할일 학교 카테고리 조회

다중 사용자 지원

하나의 텔레그램 봇을 여러 사용자가 공유할 수 있습니다. 각 사용자는 자신의 Notion DB에 연결됩니다.

사용자 관리

# 사용자 등록
python3 manage-users.py add <chat_id> <이름> <notion_api_key> <notion_database_id>

# 예시
python3 manage-users.py add 123456789 홍길동 ntn_xxxabc123 358da5cb-782f-80f5-xxxx

# 사용자 목록
python3 manage-users.py list

# 사용자 삭제
python3 manage-users.py remove <chat_id>

미승인 사용자 플로우

  1. 새 사용자가 봇에 메시지 전송
  2. 사용자에게 "승인 대기 중" 안내 메시지 전송
  3. 관리자에게 새 사용자 요청 알림 (chat_id 포함)
  4. 관리자가 manage-users.py add로 승인
  5. 이후 정상 사용 가능

아키텍처

10초마다 → 준비 → TG폴링 → 오프셋저장 → TG컨펌
                            ↓
                       필터+분리 (모든 사용자)
                            ↓
                    사용자조회 (HTTP → user-api.py)
                            ↓
                       사용자병합
                            ↓
                       사용자분기
                      /           \
                 approved         unknown
                    /                \
              명령어처리          미승인알림 → 관리자알림
                    ↓
              명령어분기 (skipGLM?)
              /              \
           명령어        GLM분류
              ↓              ↓
           결과파싱 ←────────┘
              ↓
           액션라우팅
          /    |    \
       add   list   done
       /       |       \
  Notion추가  Notion조회  Notion검색
      ↓         ↓         ↓
 TG추가확인  리스트포맷   완료추출
                ↓         ↓
            TG리스트   Notion상태변경
                          ↓
                     TG완료확인

노드 설명 (26개)

노드 타입 역할
10초마다 ScheduleTrigger 10초 간격 폴링
환경변수 Set tgToken 로드 (공통)
준비 Code offset 기반 getUpdates URL 생성
TG폴링 HttpRequest Telegram getUpdates 호출
오프셋저장 Code update_id offset 저장 + 중복 제거 확인용 getUpdates 호출
TG컨펌 HttpRequest offset 확인용 요청 (중복 메시지 방지)
필터+분리 Code 텍스트 메시지 필터링 + 줄바꿈 분리
사용자조회 HttpRequest user-api.py로 사용자 정보 조회 (per-user credentials)
사용자병합 Code 원본 메시지 + 사용자 정보 병합
사용자분기 Switch approved / unknown 분기
명령어처리 Code 바로가기 명령어 감지 + skipGLM 처리
명령어분기 IF 명령어 여부에 따라 GLM 분류 스킵
GLM분류 HttpRequest GLM-4.5-Air로 자연어 분석
결과파싱 Code GLM 응답 파싱 + fallback 날짜 파서 + Notion body 생성
액션라우팅 Switch add/list/done 분기
Notion추가 HttpRequest Notion pages 생성
TG추가확인 HttpRequest 추가 완료 텔레그램 메시지
Notion조회 HttpRequest Notion database query
리스트포맷 Code 조회 결과 포맷팅
TG리스트 HttpRequest 목록 텔레그램 메시지
Notion검색 HttpRequest 완료할 항목 검색
완료추출 Code 검색 결과에서 pageId 추출
Notion상태변경 HttpRequest Notion page 상태 → Done
TG완료확인 HttpRequest 완료 처리 텔레그램 메시지
미승인알림 HttpRequest 미승인 사용자에게 안내 메시지
관리자알림 HttpRequest 관리자에게 새 사용자 요청 알림

볼드체 = v3 다중 사용자 지원에서 추가된 노드

배포

cd /root/todo-router
python3 deploy.py                  # 배포
sudo systemctl restart n8n         # n8n 재시작

deploy.py는 n8n SQLite의 workflow_entityworkflow_history 모두 업데이트합니다. n8n은 활성 워크플로우 실행 시 workflow_history 테이블을 읽습니다.

파일 구성

todo-router/
├── telegram-notion-router-v2.json   # 워크플로우 (26개 노드)
├── deploy.py                        # n8n SQLite 배포 스크립트
├── manage-users.py                  # 사용자 관리 CLI
├── user-api.py                      # 사용자 조회 API (port 9999)
├── users.db                         # SQLite 사용자 DB
├── .env                             # 공통 환경변수
├── README.md
└── .gitignore

서비스

서비스 Port 설명
n8n 5678 워크플로우 엔진
user-api 9999 사용자 조회 API (SQLite)
sudo systemctl restart n8n          # 워크플로우 재시작
sudo systemctl restart user-api     # 사용자 API 재시작

외부 의존

  • n8n (systemd, port 5678)
  • user-api.py (systemd, port 9999) - 사용자 DB 조회
  • Telegram Bot API - Long Polling 방식
  • GLM-4.5-Air (api.z.ai) - 자연어 분류
  • Notion API - 데이터베이스 CRUD (per-user credentials)

Notion 데이터베이스 스키마

속성 타입 설명
이름 Title 할 일 제목
카테고리 Rich Text 회사/집/개인/학교
날짜 Date 단일 날짜 또는 기간
우선순위 Select 높음/보통/낮음
상태 Status Done 여부

버전 히스토리

v3 - 다중 사용자 지원

  • SQLite 기반 사용자 DB (users.db)
  • 사용자별 Notion API 키 / DB ID 관리
  • 미승인 사용자 자동 감지 + 관리자 알림
  • 관리자 CLI (manage-users.py)
  • 사용자 조회 API (user-api.py, port 9999)
  • 슬래시 명령어 지원 (/보여줘, /회사 등)
  • .env에서 Notion credentials 제거 → 사용자 DB로 이관

v2

  • Telegram Webhook → Long Polling 전환 (10초 폴링)
  • offset 기반 중복 메시지 방지
  • GLM 프롬프트 고도화 (날짜 범위, 카테고리, 우선순위 추출)
  • 한국어 날짜 fallback 파서 추가
  • 할 일 완료(done) 기능 추가
  • 줄바꿈으로 여러 할 일 동시 입력 지원

v1

  • 초기 버전 (Webhook 기반, 단일 사용자)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages