결론부터
- 1사용자·채널은 ID + access_hash, 기본 그룹은 ID 만.
- 2access_hash 는 계정마다 달라 남과 나눠 쓸 수 없다.
- 3받은 응답마다 피어 저장소를 갱신하고, min 정보로 덮어쓰지 않는다.
피어 — 메시지를 주고받는 상대
텔레그램 API 에서 메시지를 보내거나 정보를 묻는 대상(사용자·그룹·채널)을 통틀어 피어(peer)라고 부릅니다. 봇 API 에서는 숫자 chat_id 하나면 됐지만(대화 ID 읽기), 사람 계정 API 에서는 사용자와 채널을 가리킬 때 숫자 ID 와 함께 access_hash 라는 값이 더 필요합니다.
| 피어 | 가리킬 때 필요한 것 |
|---|---|
| 사용자 | ID + access_hash |
| 채널 · 슈퍼그룹 | ID + access_hash |
| 기본 그룹 | ID 만 |
access_hash 는 왜 있나
숫자 ID 만으로 아무 사용자에게나 말을 걸 수 있다면, 번호를 하나씩 올려 가며 모든 사람에게 스팸을 보낼 수 있습니다. access_hash 는 '이 계정이 정당하게 이 상대를 본 적이 있다'는 증표입니다. 그래서 두 가지 성질이 있습니다.
- 계정(세션)마다 다르다 — 내 계정이 받은 access_hash 는 다른 계정에서 쓸 수 없습니다. 남에게 받은 ID·hash 목록으로는 메시지를 보낼 수 없습니다.
- API 가 돌려준 정보에서만 얻는다 — 받은 메시지, 대화 목록, 연락처, 사용자명 검색(contacts.resolveUsername) 등의 결과에 사용자·채널 정보가 실려 올 때 함께 옵니다.
피어 저장소를 둔다
공식 문서는 피어 정보(ID · access_hash · 이름 등)를 기기에 계속 저장하라고 권합니다. 응답에 사용자·채널이 실려 올 때마다 저장값을 갱신하고, 보낼 때는 저장소에서 꺼내 씁니다. 다시 켤 때마다 상대를 찾느라 요청을 낭비하지 않고, 속도 제한도 피합니다.
min — 덜 채워진 정보
큰 그룹 메시지에 실려 온 사용자 정보처럼, 일부만 채워진 정보에는 min 표시가 붙습니다. 이런 정보의 access_hash 는 그대로는 요청에 쓸 수 없습니다.
- 이미 저장한 완전한 정보가 있으면 min 정보로 덮어쓰지 않습니다.
- 꼭 그 상대를 가리켜야 하면 '이 메시지에서 본 사용자'라는 형태(inputPeerUserFromMessage · inputPeerChannelFromMessage)로 가리킬 수 있습니다.
TDLib 은 피어 저장소를 알아서 관리합니다(TDLib 이란). 그룹·채널 종류별 차이는 채널·슈퍼그룹·기본 그룹에 있습니다.
자주 묻는 질문
텔레그램 API 에서 사용자 ID 만으로 메시지를 보낼 수 있나요?
없습니다. 사용자와 채널은 ID 와 함께 그 계정이 받은 access_hash 가 필요합니다.
access_hash 는 어디서 얻나요?
메시지·대화 목록·연락처·사용자명 검색 같은 API 응답에 사용자·채널 정보가 실려 올 때 함께 옵니다.
다른 계정의 access_hash 를 써도 되나요?
안 됩니다. access_hash 는 계정(세션)마다 달라 다른 계정에서는 쓸 수 없습니다.
min 이 붙은 정보는 무엇인가요?
일부만 채워진 정보입니다. 그 access_hash 는 그대로 쓰지 못하고, 필요하면 메시지에서 본 사용자 형태로 가리킵니다.
참고한 공식 문서
한눈에 정리
- 1필요
사용자·채널 = ID + hash.
- 2성질
계정마다 다름.
- 3저장
피어 저장소 · min 주의.
최종 수정 2026-10-06