결론부터
- 1업데이트마다 순번(pts)과 칸 수 — 더해서 비교해 빈칸을 찾는다.
- 2빈칸이면 잠깐 기다렸다 getDifference(채널은 getChannelDifference).
- 3처음엔 getState, 다시 연결하면 먼저 getDifference.
업데이트는 순번이 붙어 온다
사람 계정 앱은 새 메시지·수정·삭제 같은 일을 서버가 밀어 주는 업데이트로 받습니다. 업데이트는 연결이 끊기거나 순서가 뒤바뀌어 빠질 수 있어서, 텔레그램은 업데이트마다 순번을 붙여 앱이 빈칸을 알아채게 합니다. 순번은 갈래가 나뉘어 있습니다.
| 순번 | 무엇의 순서 |
|---|---|
| pts | 개인 대화·기본 그룹의 메시지 일 — 계정 하나에 하나 |
| 채널별 pts | 채널·슈퍼그룹마다 따로 하나씩 |
| qts | 비밀 대화 같은 두 번째 갈래 |
| seq | 업데이트 꾸러미 자체의 순서 |
빈칸 알아채기
업데이트에는 '이번 일 뒤의 순번(pts)'과 '이번 일이 차지한 칸 수(pts_count)'가 함께 옵니다. 내가 저장한 순번에 칸 수를 더한 값과 비교합니다.
| 내 순번 + 칸 수 와 받은 순번 | 뜻 | 할 일 |
|---|---|---|
| 같다 | 정상 | 적용하고 내 순번을 받은 값으로 |
| 내 쪽이 크다 | 이미 받은 일 | 버린다 |
| 내 쪽이 작다 | 빈칸 — 사이에 놓친 일이 있다 | 아래 '메우기' |
빈칸 메우기
- 순서가 잠깐 뒤바뀌었을 수 있으니 0.5초쯤 기다리며 빠진 업데이트가 오는지 봅니다(공식 문서 권장).
- 그래도 비어 있으면 차이를 받아 옵니다 — 공통 갈래는
updates.getDifference, 채널은updates.getChannelDifference. - 차이가 많으면 여러 번에 나눠 오니, 응답의 새 상태로 다시 불러 끝까지 받습니다.
- 서버가
updatesTooLong을 보내면 '밀어 주기엔 너무 많다'는 뜻 — 바로 차이 받기로 넘어갑니다.
라이브러리를 쓰면
TDLib 은 이 모든 순번 관리와 빈칸 메우기를 대신 하고, 앱에는 정리된 결과만 줍니다(TDLib 이란). 직접 구현할 때만 위 규칙을 지키면 됩니다. 봇 API 의 update_id 는 이와 다른, 훨씬 단순한 번호입니다(봇 업데이트 받기).
자주 묻는 질문
텔레그램 API 에서 메시지가 빠져요.
업데이트 순번(pts)으로 빈칸을 찾아 updates.getDifference 로 메워야 합니다. 다시 연결할 때도 먼저 getDifference 를 부릅니다.
pts_count 는 무엇인가요?
이번 업데이트가 순번에서 차지한 칸 수입니다. 내 순번에 더해 받은 pts 와 비교합니다.
채널 업데이트는 따로 처리하나요?
네. 채널·슈퍼그룹은 각자 pts 가 있고 빈칸은 updates.getChannelDifference 로 메웁니다.
updatesTooLong 은 무엇인가요?
밀어 주기엔 쌓인 일이 너무 많다는 뜻입니다. 바로 getDifference 로 받아 옵니다.
참고한 공식 문서
한눈에 정리
- 1순번
pts · 채널 pts · qts · seq.
- 2빈칸
내 순번+칸 수 < 받은 순번.
- 3메우기
getDifference.
최종 수정 2026-10-06