본문으로 건너뛰기

텔레그램 알림

텔레그램 봇으로 메시지를 보낸다. 4096자를 넘는 글은 나누거나 자르고, 한도(retry_after)는 기다려 다시 보내며, 차단·없는 대화방은 「받는 쪽이 영구히 없다」로 따로 알린다

npm install @duolabs-deux/unit-telegram

직접 넣어 보기

채팅 id
본문
13자 / 4,096

환경변수

이름설명
TELEGRAM_BOT_TOKEN필수BotFather 가 준 토큰. 토큰이 곧 봇이라 저장소에 넣지 않는다
TELEGRAM_CHAT_ID선택운영자 알림을 받을 채팅 id(개인은 양수, 그룹·채널은 음수). 받는 쪽이 하나일 때만

어댑터

id종류설명
bot-api실제텔레그램 Bot API sendMessage. 재시도 0회, 429 만 retry_after 만큼 기다려 한 번 더
fake가짜토큰 없이 결정적으로 답한다. 채팅 id 끝자리(403·404·429·500·408·777)로 실패를 재현한다

실패와 소비 앱이 할 일

종류언제할 일
invalid-input채팅 id 형식이 틀리거나 본문이 비었을 때, 4096자를 넘는데 overflow 가 reject 일 때(밖으로 나가지 않는다)보내는 쪽 코드를 고친다
invalid-input받는 쪽이 영구히 없을 때(봇 차단·계정 없음·내보내짐·없는 대화방). recipientGone() 이 이유를 준다그 채팅으로의 발송을 멈추고 구독을 지운다. 다시 보내도 같다
auth토큰이 없거나 틀렸을 때운영자에게 알린다. 알림 실패로 본 기능을 실패시키지 않는다
quota발송 한도에 걸렸고 retry_after 가 기다릴 수 있는 시간보다 길 때retryAfterMs 뒤에 다시 보내거나 큐로 미룬다
timeout텔레그램이 5초 안에 답하지 않을 때. 이미 갔을 수 있어 다시 보내지 않는다중복을 감수할 수 있으면 다시 보낸다
upstream-down텔레그램 서버 오류(5xx). 다시 보내지 않는다timeout 과 같다
unexpected응답 형식이 명세와 다를 때명세가 바뀌었는지 확인한다

한도

  • 본문 1~4096자(엔티티를 푼 뒤). 이 유닛은 푸는 전 글자를 세므로 서식을 쓰면 실제보다 일찍 나눈다
  • 한 대화방에 초당 1통 남짓, 그룹에는 분당 20통 안쪽을 권한다(텔레그램 FAQ). 넘으면 429 와 retry_after
  • 봇은 먼저 말을 걸 수 없다. 받는 사람이 봇에게 한 번 말을 걸어야 한다

명세