결론부터
- 1레이어는 API 판 번호 — 내가 쓰는 판을 밝혀 두면 옛 앱도 안 깨진다.
- 2첫 요청은 invokeWithLayer 안에 initConnection, 그 안에 실제 요청.
- 3기기 이름은 정직하게 — 사용자 기기 목록에 그대로 보인다.
레이어 — API 의 판 번호
텔레그램 API 는 새 기능이 생길 때마다 메서드와 자료 모양(스키마)이 바뀝니다. 바뀐 묶음마다 차례로 번호를 붙인 것이 레이어(layer)입니다. 내 앱이 '나는 몇 번 레이어로 말한다'고 밝혀 두면, 서버는 그 판의 모양으로 답해 주어 옛 앱도 깨지지 않습니다. 레이어 번호를 읽는 법은 TL 스키마·레이어 읽는 법에 있습니다.
연결 직후 첫 요청을 감싸는 두 겹
연결한 뒤 처음 보내는 요청은 아래처럼 감쌉니다. 바깥에서 레이어를 밝히고, 그 안에서 내 앱 정보를 알린 다음, 맨 안쪽에 실제 요청을 넣습니다.
invokeWithLayer(layer = 내 앱이 쓰는 레이어,
initConnection(앱 정보…,
help.getConfig())) ← 실제로 하려던 요청
| initConnection 에 넣는 것 | 뜻 |
|---|---|
| api_id | my.telegram.org 에서 받은 내 앱 번호(발급) |
| device_model · system_version | 기기 이름·운영체제 판 — 사용자의 '기기' 목록에 보인다 |
| app_version | 내 앱 판 |
| system_lang_code · lang_pack · lang_code | 기기 언어와 앱이 쓸 번역 묶음·언어 |
앱을 다시 켤 때마다, 그리고 이 값들이 바뀌었을 때 다시 보냅니다. 기기 이름을 정직하게 넣어야 사용자가 기기 목록에서 내 앱 세션을 알아보고 필요하면 끊을 수 있습니다.
감싸는 메서드들
| 감싸기 | 쓰는 때 |
|---|---|
| invokeAfterMsg(s) | 앞 요청이 처리된 뒤에 이 요청을 처리하게 — 답을 기다리지 않고 순서만 보장 |
| invokeWithoutUpdates | 이 연결로는 업데이트를 받지 않게 — 파일 전용 연결 등 |
| invokeWithTakeout | 사용자 데이터 내보내기 세션 안에서 요청 |
순서 보장 요청이 오래 막히면 다시 보내라는 오류가 오고, 앞 요청이 실패하면 그 사실을 알리는 오류가 옵니다 — 오류 이름대로 처리합니다(오류 읽기).
TDLib 을 쓰면 레이어와 initConnection 은 라이브러리가 알아서 보냅니다 — 앱 정보만 설정 값으로 넘기면 됩니다(TDLib 이란).
자주 묻는 질문
텔레그램 API 레이어는 무엇인가요?
새 기능이 생길 때마다 바뀐 API 묶음에 차례로 붙인 판 번호입니다. 내 앱이 쓰는 레이어를 밝히면 서버가 그 모양으로 답합니다.
initConnection 은 언제 보내나요?
연결 뒤 첫 요청을 감싸서 보내고, 앱을 다시 켜거나 앱 정보가 바뀌었을 때 다시 보냅니다.
initConnection 의 기기 이름은 어디에 보이나요?
사용자의 텔레그램 기기(활성 세션) 목록에 보입니다.
TDLib 을 쓰면 직접 보내야 하나요?
아닙니다. TDLib 이 레이어와 initConnection 을 알아서 보내고, 앱 정보만 설정으로 넘깁니다.
참고한 공식 문서
한눈에 정리
- 1레이어
API 판 번호.
- 2첫 요청
invokeWithLayer + initConnection.
- 3감싸기
순서 · 업데이트 끄기.
최종 수정 2026-10-06