๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋…ธ๋ ฅ์„ ์ด๊ธฐ๋Š” ์žฌ๋Šฅ์€ ์—†๊ณ 
๋…ธ๋ ฅ์„ ์™ธ๋ฉดํ•˜๋Š” ๊ฒฐ๊ณผ๋„ ์—†๋‹ค.
- ์ด์ฐฝํ˜ธ 9๋‹จ

OPEN SOURCE/TELEGRAM

๋‚˜๋งŒ์˜ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡(TELEGRAM BOT) ๋งŒ๋“ค๊ธฐ - 2. ์›น ์ƒ์—์„œ ๋ฉ”์„ธ์ง€ ๋ณด๋‚ด๊ธฐ

  Junesker   2020. 3. 13.
๋ฐ˜์‘ํ˜•

ํ…”๋ ˆ๊ทธ๋žจ BotFather ๋ด‡์„ ํ†ตํ•ด ๋งŒ๋“  @StudyJ001Bot์„ ํ†ตํ•ด ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” API๋ฅผ ๊ฐ€์ง€๊ณ  ์›น ํ™˜๊ฒฝ์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์นœ์ ˆํ•˜๊ฒŒ ํ•ด๋‹น API๊ธฐ๋Šฅ๋ณ„ URL, Parameter, method ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ๊ณ  ์žˆ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API๋ฅผ ์ด์šฉํ•ด ์›น ํ™˜๊ฒฝ์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋ ค๊ณ  ํ• ๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด ์žˆ๋Š”๋ฐ ๋ณด๋‚ผ ์ฑ„ํŒ… ์•„์ด๋””(chat_id)์™€ ๋ณธ๋ฌธ(text)๋‚ด์šฉ์ด ํ•„์š”ํ•˜๋‹ค. ์›น ํ™˜๊ฒฝ์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ์•Œ์•„์•ผํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์•Œ์•„๋ณด์ž.

 

 

 

 

 

ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API

Bot API๋Š” Telegram ์šฉ ๋ด‡ ๊ตฌ์ถ•์— ๊ด€์‹ฌ์ด์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด ๋งŒ๋“  HTTP ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.
๋ด‡์„ ๋งŒ๋“ค๊ณ  ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋ณด๋ ค๋ฉด ๋ด‡ ๋ฐ ๋ด‡ ์†Œ๊ฐœ FAQ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค .

 

ํ…”๋ ˆ๊ทธ๋žจ BotFather ๋ด‡์„ ํ†ตํ•ด ๋งŒ๋“  ๋‚˜๋งŒ์˜ ๋ด‡ ํ† ํฐ๊ณผ API์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๋ณ„ URL์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡์—๋Š” ๊ณ ์œ ํ•œ ์ธ์ฆ ํ† ํฐ์ด ์ œ๊ณต๋˜๊ณ , 123456:ABC-DEF1234ghj-zyx52WUid23oii11๊ณผ ๊ฐ™์€ ๊ฐ’์˜ ํ˜•ํƒœ๋ฅผ ๋„๊ณ  ์žˆ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ํ† ํฐ์„ ์–ป๊ณ  ์ƒˆ๋กœ์šด ํ† ํฐ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ ๋งํฌ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฟผ๋ฆฌ๋Š” HTTPS๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋˜์–ด์•ผํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ œ๊ณต๋œ๋‹ค. ์˜ˆ๋กœ "https://api.telegram.org/bot/METHOD_NAME"์™€ ๊ฐ™๋‹ค. GET,POST๋ฐฉ์‹์˜ HTTP๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•˜๊ณ  Bot API์š”์ฒญ์—์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ URL์ฟผ๋ฆฌ ๋ฌธ์ž์—ด, application / x-www-form-urlencoded, application / json(ํŒŒ์ผ ์—…๋กœ๋“œ ์ œ์™ธ), multipart / form-data(ํŒŒ์ผ ์—…๋กœ๋“œ์— ์‚ฌ์šฉ) ์ด 4๊ฐ€์ง€๋ฅผ ์ง€์›ํ•œ๋‹ค.

 

์‘๋‹ต์—๋Š” ํ•ญ์ƒ ๋ถ€์šธ ํ•„๋“œ "ok"๊ฐ€ ์žˆ๊ณ  ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๊ณผ ์„ค๋ช…์ด ํฌํ•จ๋œ ์„ ํƒ์  ๋ฌธ์ž์—ด ํ•„๋“œ JSON๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋œ๋‹ค. "ok"๊ฐ€ true์ธ ๊ฒฝ์šฐ ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์œผ๋ฉฐ, "result"ํ•„๋“œ์—์„œ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ์‹คํŒจํ•œ ์š”์ฒญ์˜ ๊ฒฝ์šฐ "ok"๋Š” false์™€ ๊ฐ™์œผ๋ฉฐ ์˜ค๋ฅ˜๋Š” "์„ค๋ช…"๋ž€์— ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค. ์ •์ˆ˜ "error_code"ํ•„๋“œ๋„ ๋ฐ˜ํ™˜๋˜์ง€๋งŒ ์ถ”ํ›„ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์•Œ๊ณ ๋งŒ ์žˆ์ž. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋Š” ๋Œ€์†Œ ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ์ฟผ๋ฆฌ๋Š” UTF-8์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค.

 

 

 

ํ…”๋ ˆ๊ทธ๋žจ์—์„œ ์ฑ„ํŒ… ์•„์ด๋””(chat_id)๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API๋‚ด Update๊ฐ์ฒด์™€ URL๋กœ ์‚ฌ์šฉํ•˜๋Š” getUpdates ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์›น ํ™˜๊ฒฝ์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— getUpdates๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ  getUpdates๋ฅผ ์š”์ฒญํ•˜๊ฒŒ๋˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๋นˆ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐ๊ณผ๋กœ ๋ฐ›๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ํ…”๋ ˆ๊ทธ๋žจ BotFather ๋ด‡์œผ๋กœ ๋งŒ๋“  ๋‚˜๋งŒ์˜ ๋ด‡์—๊ฒŒ ์•„๋ฌด๋Ÿฐ ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•˜์—ฌ ๋ด‡์˜ ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œํ‚จ๋‹ค.

 

 

 

 

 

์—…๋ฐ์ดํŠธ ๋ฐ›๊ธฐ

๋ด‡์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” ์ƒํ˜ธ ๋ฐฐํƒ€์  ์ธ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ ๋Š” getUpdates ๋ฉ”์†Œ๋“œ์™€ ๋‹ค๋ฅธ ํ•œํŽธ ์œผ๋กœ๋Š” Webhook ์ž…๋‹ˆ๋‹ค. ์ˆ˜์‹  ์—…๋ฐ์ดํŠธ๋Š” ๋ด‡์ด ์–ด๋Š ์ชฝ์ด๋“  ์ˆ˜์‹  ํ•  ๋•Œ๊นŒ์ง€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€๋งŒ 24 ์‹œ๊ฐ„์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์–ด๋–ค ์˜ต์…˜์„ ์„ ํƒํ•˜๋“  ๊ฒฐ๊ณผ์ ์œผ๋กœ JSON ์ง๋ ฌํ™” ๋œ Update ๊ฐ์ฒด๊ฐ€ ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค.

 

 

 

getUpdates


getUpdates method


getUpdate ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๊ทธ์—๋”ฐ๋ฅธ ์„ค๋ช…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. getUpdate ๋ฉ”์†Œ๋“œ๋ฅผ ์ง์ ‘ ์š”์ฒญํ•ด๋ณด์ž. ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณธ๋‹ค.

์›น ์ƒ์—์„œ ์š”์ฒญ URL์€ "https://api.telegram.org/bot[๋‚ด๊ฐ€ ๋งŒ๋“  ๋ด‡์˜ api token]/getUpdates"์™€ ๊ฐ™๋‹ค.

 

getUpdates ์š”์ฒญ

getUpdates๋ฅผ ์š”์ฒญํ–ˆ๋‹ค. "ok"๋ผ๋Š” ํ‚ค์˜ ๊ฐ’์ด true๋กœ ์š”์ฒญ์€ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ "result"ํ‚ค์˜ ๊ฐ’์ด ์—†๋Š”๊ฒƒ์œผ๋กœ ๋‚˜์˜จ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•œ ๋‚ด์šฉ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— result์˜ ๊ฐ’์ด ํ˜„์žฌ๋Š” ์—†๋‹ค. result์˜ ๊ฐ’์„ ๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ ๋‚˜๋งŒ์˜ ๋ด‡์œผ๋กœ ๋งŒ๋“ค์—ˆ๋˜ @StudyJ001Bot๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค. 

 

StudyJ001Bot๊ณผ ์ƒํ˜ธ์ž‘์šฉ

ํ…”๋ ˆ๊ทธ๋žจ ๋ฉ”์‹ ์ ธ์—์„œ @StudyJ001Bot์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ๊ฒ€์ƒ‰๊ฒฐ๊ณผ๋กœ ๋‚˜์˜ค๋Š” StudyJ001Bot์„ "์‹œ์ž‘(Start)"์„ ๋ˆŒ๋Ÿฌ ๋ด‡์—๊ฒŒ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๊ฒ ๋‹ค๊ณ  ์•Œ๋ฆฐ๋‹ค. ์ด๋•Œ, ๋ด‡์˜ Update๊ฐ์ฒด์— ์ƒˆ๋กœ์šด ๋ฌด์–ธ๊ฐ€๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. "/start"๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๊ฐ–๊ณ  ๋ˆ„๊ฐ€ ์–ธ์ œ ๋ณด๋ƒˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด ๋˜ํ•œ Update๊ฐ์ฒด์— ๋‹ด๊ฒจ์žˆ๋‹ค. ๋‚˜๋งŒ์˜ ๋ด‡์ธ @StudyJ001Bot๊ณผ ์ƒํ˜ธ์ž‘์šฉ์„ ํ–ˆ์œผ๋‹ˆ ๋‹ค์‹œ ํ•œ๋ฒˆ getUpdates๋ฅผ ์š”์ฒญํ•ด๋ณธ๋‹ค.

 

getUpdates ์žฌ์š”์ฒญ

์ฒ˜์Œ๊ณผ ๋‹ฌ๋ฆฌ "result"ํ‚ค์˜ ๊ฐ’์œผ๋กœ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋งŽ์ด ๋“ค์–ด์˜จ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. "update_id", "message", "chat", "date", "text", "entities" ๋“ฑ ๋งŽ์€ ์ •๋ณด๊ฐ€ ์ƒ๊ฒผ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ์ค‘์—์„œ ์šฐ๋ฆฌ๋Š” "chat"ํ‚ค ์•ˆ์— ๋“ค์–ด ์žˆ๋Š” "id"ํ‚ค์˜ ๊ฐ’์ด ํ•„์š”ํ•˜๋‹ค. "chat"์•ˆ์— "id"์˜ ๊ฐ’์ด๋ฏ€๋กœ ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡์„ ์ด์šฉํ•ด ์›น ํ™˜๊ฒฝ์—์„œ URL๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ํ•„์š”ํ•œ ํŒŒ๋ผ๋ฉ”ํ„ฐ ์ฑ„ํŒ… ์•„์ด๋””(chat_id)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค. "id"์˜ ๊ฐ’์€ ์ •์ˆ˜๋กœ 123456789์™€ ๊ฐ™์€ ๊ฐ’์ด ๋“ค์–ด์žˆ๋‹ค. ๊ทธ id๋Š” ํ…”๋ ˆ๊ทธ๋žจ์˜ ๊ฐ€์ž…ํ•œ ๋‚ด ๊ณ„์ •์˜ "id"๊ฐ’์ด๊ธฐ๋„ ํ•˜๋‹ค.

 

 

 

 

 

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•

ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API์˜ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  GET,POST๋ฐฉ์‹์˜ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค. ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API ์š”์ฒญ์—์„œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌ ํ•˜๋ ค๋ฉด URL ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ๋˜๋Š” application/json ๋˜๋Š” application/x-www-form-urlencoded ๋˜๋Š” mulipart/form-data๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ์— ์„ฑ๊ณตํ•œ ๊ฒฐ๊ณผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•œ JSON ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

 

 

 

sendMessage


sendMessage method


์—ฌ๊ธฐ๊นŒ์ง€ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋ฌ๋‹ค. getUpdates ๋ฉ”์†Œ๋“œ๋กœ ์š”์ฒญํ•ด์„œ ์–ป์€ chat id์™€ sendMessage ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์›น ํ™˜๊ฒฝ์œผ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค. https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendMessage ์™€ ๊ฐ™์ด ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค.

 

์ „์†ก URL : https://api.telegram.org/bot1122204878:AAEqAgWH1DrRjpVjhaHiCM-y6jn3TXBpLZM/sendMessage?chat_id=123456789&text=Hello World!  

 

์œ„์™€ ๊ฐ™์€ url์„ ์š”์ฒญํ•˜๊ฒŒ๋˜๋ฉด ํ•ด๋‹น chat_id๋ฅผ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž์—๊ฒŒ StudyJ001Bot์ด "Hello World!"๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

sendMessage URL
HelloWorld!

 

message result

ํ…”๋ ˆ๊ทธ๋žจ ๋ด‡ API์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” sendMessage URL ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์›น ํ™˜๊ฒฝ์—์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ต์…˜ ๊ฐ’์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ์‚ฌ์šฉํ•ด์„œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ๋” ๋‹ค์–‘ํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ์›น ํ™˜๊ฒฝ์—์„œ๋„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€