PromleeBlog
sitemap
aboutMe

posting thumbnail
텔레그램 메신저 API 연동 - n8n 파이프라인 4편
Telegram API Integration - n8n Pipeline Part 4

📅

들어가기 전에 🔗

안녕하세요.
오늘은 3편에서 가공한 뉴스 데이터를 스마트폰 메신저로 전송하는 과정을 다룹니다.

데이터를 수집하고 정제하는 과정을 거쳤다면 이제 해당 정보를 사용자가 읽기 편한 형태로 전달할 차례입니다.
이번 포스팅에서는 개발자 친화적인 플랫폼인 Telegram을 활용하여 자동화 파이프라인의 종착지를 구성하는 방법을 설명합니다.
모든 설정은 웹 브라우저 기반으로 이루어지므로 Mac OS, Windows, Linux 사용자 모두 동일한 과정으로 실습할 수 있습니다.

Telegram 봇 생성 및 API 연동 🔗

Telegram은 봇 생성과 API 발급 과정이 직관적입니다.
BotFather라는 공식 관리 봇을 통해 새로운 봇을 생성하고 고유한 인증 키를 발급받을 수 있습니다.

BotFather를 통한 Token 발급 🔗

Telegram 앱의 검색창에서
BotFather
를 검색하여 공식 계정 대화방에 입장합니다.
대화창에 /newbot 명령어를 입력하면 봇의 이름과 사용자명(username)을 차례대로 설정할 수 있습니다.
텔레그램 봇 생성
텔레그램 봇 생성
설정이 완료되면 영문과 숫자가 혼합된 긴
API Token
을 발급해 줍니다.

이 API Token은 봇을 제어할 수 있는 비밀번호 역할을 하므로 외부에 노출되지 않도록 주의해야 합니다.

n8n Credentials 등록 🔗

n8n 워크플로우 화면에서
Telegram
노드를 추가하고 앞선 노드와 연결합니다.
이때 항목은
Send Message
로 선택합니다.
노드 설정 창에서 인증(Credentials) 항목의 드롭다운을 열고 새로운 인증 정보 만들기를 선택합니다.

앞서 발급받은 API Token을 붙여넣고 저장하면 n8n 시스템이 Telegram 서버와 통신할 수 있는 권한을 얻게 됩니다.
Credentials 생성
Credentials 생성
이후 메시지를 수신할 채팅방의 고유 식별자인 Chat ID를 입력하면 기본적인 연동이 마무리됩니다.
텔레그램에서 봇과 대화하는 채팅방을 열고 채널 관리에 들어간 후 채널 유형 -> 링크 항목에서 t.me/로 시작하는 URL을 확인할 수 있습니다.
URL의 마지막 부분이 Chat ID입니다. 예를 들어 t.me/your_channel_name이라면 Chat ID는 @your_channel_name이 됩니다.

메시지 가공 및 트래픽 제어 🔗

단순히 데이터만 전송하면 사용자가 정보를 읽기 불편합니다.
Markdown 문법을 사용하여 가독성을 높이고 서버 통신 간 발생할 수 있는 제한 사항을 고려해야 합니다.

Markdown 템플릿 작성 🔗

메시지 입력 칸에 표현식(Expression) 기능을 활성화합니다.
아래와 같이 Markdown 문법과 JSON 변수를 결합하여 메시지 템플릿을 작성합니다.
메시지 템플릿 표현식 예시
// 대괄호에 텍스트를 넣고 소괄호에 URL을 넣어 하이퍼링크를 생성합니다.
*오늘의 기술 동향 뉴스*
 
제목: [{{ $json.title }}]({{ $json.link }})
발행일: {{ $json.pubDate }}
이렇게 구성하면 긴 URL 주소가 텍스트 뒤에 숨겨져 모바일 환경에서도 가독성 높은 인터페이스를 제공할 수 있습니다.
템플릿을 사용한 텔레그램 메시지
템플릿을 사용한 텔레그램 메시지

Rate Limit과 Token Bucket 알고리즘 🔗

만약 1초 동안 수백 개의 메시지를 한 번에 메신저 서버로 전송하면 어떻게 될까요.
서버는 시스템 과부하를 막기 위해
Rate Limit
(호출 제한) 정책을 가동하여 요청을 차단합니다.

이는 네트워크 공학에서 사용하는
Token Bucket
(토큰 버킷) 알고리즘과 관련이 있습니다.
일정 시간마다 사용할 수 있는 토큰(요청 권한)이 바구니에 차오르고 요청을 보낼 때마다 토큰을 하나씩 소모하는 구조입니다.
토큰이 바닥나면 서버는 더 이상 요청을 받지 않고 에러를 반환합니다.

이러한 제한을 회피하기 위해 n8n의
Loop Over Items(Split In Batches)
노드와
Wait
노드를 활용할 수 있습니다.
전체 데이터를 작은 그룹으로 나누고 그룹 사이에 몇 초의 대기 시간을 부여하면 서버의 제재 없이 안전하게 모든 데이터를 전송할 수 있습니다.

결론 🔗

이번 포스팅에서는 Telegram 메신저의 API를 활용하여 파이프라인의 데이터를 외부로 전송하는 방법을 살펴보았습니다.
API 통신과 Webhook의 원리를 이해하고 Rate Limit과 같은 네트워크 환경의 제한 사항을 고려하여 시스템을 설계하는 것은 백엔드 및 자동화 개발의 필수 역량입니다.

다음 5편에서는 국내 환경에서 활용도가 높은 카카오톡(KakaoTalk) 메시지 API를 연동하는 과정을 다루겠습니다.

참고 🔗