ep.1에서 텔레그램 봇으로 폰과 PC를 연결했다. 사진을 보내면 로컬에 저장되는 구조. 근데 실제로 쓰다 보니 불편한 점이 바로 나왔다.
사진 3장 보냈는데 1장만 분류된다
텔레그램에서 사진을 여러 장 선택해서 한번에 보내면, 캡션(해시태그)은 첫 번째 사진에만 붙는다. 나머지는 캡션 없이 온다. 봇 입장에서는 첫 장만 태그가 있으니 blog 폴더로 가고, 나머지 2장은 태그가 없으니 general로 빠지는 거다.
밖에서 밥집 사진 5장 찍어서 #밥로그 붙여서 보냈는데, 돌아와서 보면 1장만 blog에 있고 4장은 general에 흩어져 있다. 이러면 의미가 없다.
미디어 그룹이라는 개념
텔레그램은 여러 장을 한번에 보내면 내부적으로 media_group_id라는 값을 붙여준다. 같은 묶음이면 같은 ID를 공유한다. 이걸 이용하면 된다.
로직은 간단하다. 첫 번째 사진에서 캡션과 태그를 파싱하면, 그 media_group_id를 키로 태그를 캐싱해둔다. 같은 그룹의 나머지 사진이 들어오면 캡션이 없더라도 캐시에서 태그를 가져온다.
// 미디어 그룹 태그 캐시
const mediaGroupTags = new Map<string, { tag: string; memo: string }>();
function resolveTag(caption, mediaGroupId) {
const parsed = parseTag(caption);
if (mediaGroupId) {
if (caption) {
// 캡션 있는 첫 번째 사진 → 그룹 태그 저장
mediaGroupTags.set(mediaGroupId, parsed);
return parsed;
}
// 캡션 없는 나머지 → 같은 그룹 태그 사용
return mediaGroupTags.get(mediaGroupId) || parsed;
}
return parsed;
}
30초 후 자동 삭제해서 메모리 누수도 방지한다. 텔레그램이 같은 그룹의 메시지를 보내는 데 보통 1~2초면 충분하니까 30초면 넉넉하다.
블로그 안에서도 분류가 필요하다
사진이 전부 blog 폴더에 들어가는 건 해결했는데, 또 다른 문제가 생겼다. 밥집 사진이랑 나들이 사진이 전부 blog/ 한 폴더에 섞인다. 글 쓸 때 어떤 사진이 어떤 글용인지 찾기가 번거롭다.
그래서 서브 태그를 만들었다. 기존 #blog 대신 더 구체적인 태그를 쓰면 하위 폴더로 나뉜다.
| 태그 | 저장 경로 | 용도 |
#밥로그 |
blog/bablog/ |
맛집 사진 |
#오늘로그 |
blog/todaylog/ |
외출/나들이 |
#blog |
blog/ |
기타 블로그 |
구현은 태그 매핑 테이블 하나 추가한 거다. 핵심은 구체적인 태그를 먼저 매칭하는 순서다. #밥로그가 #blog보다 먼저 체크되어야 #밥로그가 blog로 빠지지 않는다.
const TAG_FOLDERS = {
'#밥로그': 'blog/bablog',
'#오늘로그': 'blog/todaylog',
'#blog': 'blog',
'#office': 'office',
'#app': 'app',
'#dev': 'dev',
};
실제 사용 흐름
이제 밖에서 밥집을 갔다고 치면 이렇게 된다.
1. 폰에서 사진 5장 선택 → 캡션에 #밥로그 → 전송
2. 봇이 5장 전부 같은 폴더에 저장
~/telegram/blog/bablog/2026-02-17/
├── 1708123456789.jpg
├── 1708123456790.jpg
├── 1708123456791.jpg
├── 1708123456792.jpg
└── 1708123456793.jpg
3. 집에 와서 블로그 글 쓸 때 — bablog 폴더만 열면 오늘 찍은 밥집 사진만 모여 있다. general이랑 섞이지 않으니 정리할 필요가 없다.
나들이 사진은 #오늘로그, 개발 관련 스크린샷은 #dev, 사무 문서는 #office. 폰에서 보낼 때 태그 한 단어만 붙이면 알아서 분류된다.
작은 개선이 쌓이면
ep.1에서 만든 건 “사진을 보내면 저장된다”는 기본 기능이었다. ep.2에서 한 건 그걸 실제로 쓸 만하게 다듬은 거다. 여러 장 전송 지원, 카테고리별 자동 분류. 둘 다 코드 몇십 줄이면 되는 작은 변경인데, 사용 경험은 확실히 달라진다.
근데 아직 이건 “폰 → PC” 단방향이다. 폰에서 사진을 보내는 것만 가능하고, PC에서 작업을 지시하는 건 안 된다. 다음 ep.3에서는 이 방향을 뒤집는다. 폰에서 “일해” 한마디를 보내면 AI가 알아서 분석하고, 계획 세우고, 실행까지 하는 시스템을 만든다.