본문 바로가기
텔레그램 한글 가이드
채널·봇 STEP 87 / 98

텔레그램 API 페이지 나누기 — offset 과 hash

텔레그램 API 로 대화 기록을 묶음으로 받는 방법입니다. offset_id·add_offset·limit·max_id·min_id 의 뜻, 오래된 쪽·새로운 쪽·앞뒤를 받는 세 가지 모양, 바뀐 게 없으면 받지 않는 hash 와 NotModified 응답을 정리했습니다.

  • 난이도L4
  • 읽는 시간4분
  • 최종 검증

결론부터

  1. 1기록은 기준 메시지(offset_id)와 옮긴 칸(add_offset)으로 끊어 받는다.
  2. 2오래된 쪽은 add_offset 0, 새로운 쪽은 음수, 앞뒤는 절반만큼 음수.
  3. 3자주 묻는 목록은 hash 를 보내 바뀐 게 없으면 받지 않는다.
이 글의 목차
  1. 대화 기록은 '기준 메시지'로 끊어 받는다
  2. 자주 쓰는 세 가지 모양
  3. hash — 바뀐 게 없으면 받지 않기
  4. 자주 묻는 질문
  5. 한눈에 정리

대화 기록은 '기준 메시지'로 끊어 받는다

대화 기록(messages.getHistory 등)은 한 번에 다 받지 않고 묶음으로 받습니다. 쪽 번호 대신 기준이 되는 메시지 번호와 거기서 얼마나 떨어진 곳부터 받을지로 위치를 정합니다. 결과는 보통 최신 것부터(번호가 큰 것부터) 옵니다.

칸뜻
offset_id기준 메시지 번호
add_offset기준에서 몇 개 옮긴 곳부터 받을지 — 음수면 더 새로운 쪽으로
limit이번에 받을 개수
max_id · min_id이 번호보다 큰 것·작은 것은 빼고(경계 번호 자체도 뺀다)

자주 쓰는 세 가지 모양

하려는 것offset_idadd_offsetlimit
기준보다 오래된 20개기준 번호020
기준보다 새로운 20개기준 번호-2020
기준 앞뒤 20개기준 번호-1020

위로 스크롤하면 지금 화면 맨 위 메시지를 기준으로 오래된 쪽을, 아래로 내려가면 맨 아래 메시지를 기준으로 새로운 쪽을 받습니다. 검색 결과에서 메시지로 뛰어갈 때는 '앞뒤' 모양이 맞습니다.

hash — 바뀐 게 없으면 받지 않기

대화 목록·스티커 묶음·연락처처럼 자주 다시 묻는 목록에는 hash 칸이 있습니다. 내가 이미 가진 목록에서 계산한 값을 hash 로 보내면, 서버는 바뀐 게 없을 때 내용 대신 '바뀌지 않음'(이름이 NotModified 로 끝나는 응답)만 돌려줍니다. 웹의 ETag 와 같은 생각입니다.

  • hash 는 가진 결과의 번호들로 계산합니다. 계산식은 공식 문서에 정해져 있어 그대로 따릅니다(문자열 값은 MD5 앞부분을 64비트 수로 바꿔 넣는 식).
  • 처음 받을 때나 가진 게 없을 때는 0 을 보냅니다.
  • '바뀌지 않음'을 받으면 내가 저장한 목록을 그대로 씁니다. 매번 전체를 다시 받지 않으니 속도 제한(FLOOD_WAIT)도 덜 걸립니다(오류 읽기).

새로 들어오는 메시지는 기록 다시 받기가 아니라 업데이트로 받습니다 — 업데이트 처리.

자주 묻는 질문

텔레그램 API 에서 이전 메시지를 더 받으려면?

지금 가진 가장 오래된 메시지 번호를 offset_id 로, add_offset 0 으로 다시 요청합니다.

add_offset 은 무엇인가요?

기준 메시지에서 몇 개 옮긴 곳부터 받을지입니다. 음수면 더 새로운 쪽으로 옮깁니다.

hash 에는 무엇을 넣나요?

가진 목록의 번호들로 공식 문서의 식대로 계산한 값을 넣고, 처음이면 0 을 보냅니다.

NotModified 응답은 무슨 뜻인가요?

내가 가진 목록과 서버 목록이 같다는 뜻입니다. 저장한 목록을 그대로 씁니다.

참고한 공식 문서

요약

한눈에 정리

  1. 1위치

    offset_id · add_offset.

  2. 2모양

    오래된 · 새로운 · 앞뒤.

  3. 3hash

    안 바뀌면 NotModified.

이 글 공유하기

같은 문제를 겪는 친구에게 보내 주세요.

텔레그램
더보기

휴대폰으로 열기휴대폰 카메라로 비추면 이 글이 열려요.

최종 수정 2026-10-06

함께 보면 좋은 글

전체 보기 ›