เจ†เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ (เจญเจพเจ— 3): เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจนเจพเจ‡เจคเจพ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡

"เจ†เจฐ เจตเจฟเฉฑเจš เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ" เจฒเฉœเฉ€ เจฆเจพ เจ‡เจน เจคเฉ€เจœเจพ เจฒเฉ‡เจ– เจนเฉˆเฅค เจชเจฟเจ›เจฒเฉ‡ เจชเฉเจฐเจ•เจพเจธเจผเจจเจพเจ‚ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเจฟเฉฑเจ–เจฟเจ† เจ•เจฟ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‰เจฃเจพ เจนเฉˆ, เจ‡เจธ เจฐเจพเจนเฉ€เจ‚ เจธเฉฐเจฆเฉ‡เจธเจผ เจ•เจฟเจตเฉ‡เจ‚ เจญเฉ‡เจœเจฃเฉ‡ เจนเจจ, เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจ…เจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจซเจฟเจฒเจŸเจฐ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจเฅค เจ‡เจธ เจฒเจˆ, เจ‡เจธ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‹, เจฎเฉˆเจ‚ เจœเจผเฉ‹เจฐเจฆเจพเจฐ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจชเฉœเฉเจนเฉ‹ เจชเจฟเจ›เจฒเจพ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เฉฑเจฅเฉ‡ เจฎเฉˆเจ‚ เจนเฉเจฃ เจฌเฉ‹เจŸ เจฌเจฟเจฒเจกเจฟเฉฐเจ— เจฆเฉ€เจ†เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจฆเฉฑเจธเฉ€เจ†เจ‚ เจฎเฉ‚เจฒ เจ—เฉฑเจฒเจพเจ‚ 'เจคเฉ‡ เจงเจฟเจ†เจจ เจจเจนเฉ€เจ‚ เจฆเฉ‡เจตเจพเจ‚เจ—เจพเฅค

เจ‡เจธ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ•เฉ€เจฌเฉ‹เจฐเจก เจœเฉ‹เฉœ เจ•เฉ‡ เจ†เจชเจฃเฉ‡ เจฌเฉ‹เจŸ เจฆเฉ€ เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจœเฉ‹ เจฌเฉ‹เจŸ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจจเฉ‚เฉฐ เจ…เจจเฉเจญเจตเฉ€ เจ…เจคเฉ‡ เจตเจฐเจคเฉ‹เจ‚ เจตเจฟเฉฑเจš เจ†เจธเจพเจจ เจฌเจฃเจพ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจ†เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ (เจญเจพเจ— 3): เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจนเจพเจ‡เจคเจพ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡

เจฒเฉœเฉ€ เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจฒเฉ‡เจ– โ€œR เจตเจฟเฉฑเจš เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพโ€

  1. เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจตเจฟเฉฑเจš เจธเฉฐเจฆเฉ‡เจธเจผ เจญเฉ‡เจœเจฃ เจฒเจˆ เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚
  2. เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เจฎเจพเจ‚เจก เจธเจนเจพเจ‡เจคเจพ เจ…เจคเฉ‡ เจธเฉเจจเฉ‡เจนเจพ เจซเจฟเจฒเจŸเจฐ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹
  3. เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจฎเจฐเจฅเจจ เจ•เจฟเจตเฉ‡เจ‚ เจœเฉ‹เฉœเจจเจพ เจนเฉˆ

เจธเจฎเฉฑเจ—เจฐเฉ€

เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจกเฉ‡เจŸเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉ‡เจฐเฉ‡ เจตเจฟเฉฑเจš เจฆเจฟเจฒเจšเจธเจชเฉ€ เจนเฉ‹ เจธเจ•เจฆเฉ€ เจนเฉˆ เจคเจพเจฐ ะธ YouTube เจšเฉˆเจจเจฒเฅค เจœเจผเจฟเจ†เจฆเจพเจคเจฐ เจธเจฎเฉฑเจ—เจฐเฉ€ เจ†เจฐ เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจธเจฎเจฐเจชเจฟเจค เจนเฉˆเฅค

  1. เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจ•เจฟเจธ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจ•เฉ€เจฌเฉ‹เจฐเจกเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ?
  2. เจ•เฉ€เจฌเฉ‹เจฐเจก เจฆเจพ เจœเจตเจพเจฌ เจฆเจฟเจ“
  3. เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก
    3.1. เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจฌเฉ‹เจŸ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ
    3.2. เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจœเฉ‹ เจ‡เฉฑเจ• เจšเฉเจฃเฉ‡ เจนเฉ‹เจ เจธเจผเจนเจฟเจฐ เจฒเจˆ เจฎเฉŒเจœเฉ‚เจฆเจพ เจฎเฉŒเจธเจฎ เจฆเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจ•เจฐเจฆเจพ เจนเฉˆ
    3.3. เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจœเฉ‹ habr.com เจคเฉ‹เจ‚ เจจเจฟเจฐเจงเจพเจฐเจค เจนเฉฑเจฌ เจฆเฉ‡ เจฒเจฟเฉฐเจ•เจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจจเจตเฉ€เจจเจคเจฎ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ
  4. เจธเจฟเฉฑเจŸเจพ

เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจ•เจฟเจธ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจ•เฉ€เจฌเฉ‹เจฐเจกเจพเจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ?

เจ‡เจธ เจฒเจฟเจ–เจค เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ telegram.bot เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉ‹ เจ•เจฟเจธเจฎ เจฆเฉ‡ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ:

  • เจœเจตเจพเจฌ - เจฎเฉเฉฑเจ–, เจจเจฟเจฏเจฎเจค เจ•เฉ€เจฌเฉ‹เจฐเจก, เจœเฉ‹ เจธเฉเจจเฉ‡เจนเจพ เจŸเฉˆเจ•เจธเจŸ เจ‡เจจเจชเฉเจŸ เจชเฉˆเจจเจฒ เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจธเจฅเจฟเจค เจนเฉˆเฅค เจ…เจœเจฟเจนเจพ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจŸเฉˆเจ•เจธเจŸ เจธเฉเจจเฉ‡เจนเจพ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจŸเฉˆเจ•เจธเจŸ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจน เจฌเจŸเจจ 'เจคเฉ‡ เจฒเจฟเจ–เจฟเจ† เจŸเฉˆเจ•เจธเจŸ เจญเฉ‡เจœเจฆเจพ เจนเฉˆเฅค
  • เจ‡เจจเจฒเจพเจˆเจจ - เจ‡เฉฑเจ• เจ–เจพเจธ เจฌเฉ‹เจŸ เจธเฉเจจเฉ‡เจนเฉ‡ เจจเจพเจฒ เจธเฉฐเจฌเฉฐเจงเจฟเจค เจ•เฉ€เจฌเฉ‹เจฐเจกเฅค เจ‡เจน เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจŸเจจ เจฆเจฌเจพเจ เจœเจพเจฃ เจจเจพเจฒ เจธเจฌเฉฐเจงเจฟเจค เจฌเฉ‹เจŸ เจกเฉ‡เจŸเจพ เจญเฉ‡เจœเจฆเจพ เจนเฉˆ; เจ‡เจน เจกเฉ‡เจŸเจพ เจฌเจŸเจจ เจ‰เฉฑเจคเฉ‡ เจฒเจฟเจ–เฉ‡ เจŸเฉˆเจ•เจธเจŸ เจคเฉ‹เจ‚ เจตเฉฑเจ–เจฐเจพ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจ…เจคเฉ‡ เจ…เจœเจฟเจนเฉ‡ เจฌเจŸเจจเจพเจ‚ เจฐเจพเจนเฉ€เจ‚ เจ•เจพเจฐเจตเจพเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ CallbackQueryHandler.

เจฌเฉ‹เจŸ เจฒเจˆ เจ•เฉ€เจฌเฉ‹เจฐเจก เจ–เฉ‹เจฒเฉเจนเจฃ เจฒเจˆ, เจตเจฟเจงเฉ€ เจฐเจพเจนเฉ€เจ‚ เจธเฉเจจเฉ‡เจนเจพ เจญเฉ‡เจœเจฃ เจตเฉ‡เจฒเฉ‡ เจ‡เจน เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ sendMessage(), เจชเจนเจฟเจฒเจพเจ‚ เจฌเจฃเจพเจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจตเจœเฉ‹เจ‚ เจชเจพเจธ เจ•เจฐเฉ‹ reply_markup.

เจนเฉ‡เจ เจพเจ‚ เจ…เจธเฉ€เจ‚ เจ•เจˆ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡เฅค

เจ•เฉ€เจฌเฉ‹เจฐเจก เจฆเจพ เจœเจตเจพเจฌ เจฆเจฟเจ“

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉˆเจ‚ เจ‰เฉฑเจชเจฐ เจฒเจฟเจ–เจฟเจ† เจนเฉˆ, เจ‡เจน เจฎเฉเฉฑเจ– เจฌเฉ‹เจŸ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจ•เฉ€เจฌเฉ‹เจฐเจก เจนเฉˆ.

เจ…เจงเจฟเจ•เจพเจฐเจค เจฎเจฆเจฆ เจคเฉ‹เจ‚ เจœเจตเจพเจฌเฉ€ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ

bot <- Bot(token = "TOKEN")
chat_id <- "CHAT_ID"

# Create Custom Keyboard
text <- "Aren't those custom keyboards cool?"
RKM <- ReplyKeyboardMarkup(
  keyboard = list(
    list(KeyboardButton("Yes, they certainly are!")),
    list(KeyboardButton("I'm not quite sure")),
    list(KeyboardButton("No..."))
  ),
  resize_keyboard = FALSE,
  one_time_keyboard = TRUE
)

# Send Custom Keyboard
bot$sendMessage(chat_id, text, reply_markup = RKM)

เจ‰เจชเจฐเฉ‹เจ•เจค เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ€ เจ…เจงเจฟเจ•เจพเจฐเจค เจฎเจฆเจฆ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจนเฉˆ telegram.bot. เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ, เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹ ReplyKeyboardMarkup(), เจœเฉ‹ เจฌเจฆเจฒเฉ‡ เจตเจฟเฉฑเจš เจซเฉฐเจ•เจธเจผเจจ เจฆเฉเจ†เจฐเจพ เจฌเจฃเจพเจ เจ—เจ เจฌเจŸเจจเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจธเฉ‚เจšเฉ€เจ†เจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆ KeyboardButton().

เจ…เฉฐเจฆเจฐ เจ•เจฟเจ‰เจ‚ ReplyKeyboardMarkup() เจ•เฉ€ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจจเจนเฉ€เจ‚, เจชเจฐ เจธเฉ‚เจšเฉ€เจ†เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจชเจพเจธ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ? เจคเฉฑเจฅ เจ‡เจน เจนเฉˆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจฎเฉเฉฑเจ– เจธเฉ‚เจšเฉ€ เจชเจพเจธ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจ…เจคเฉ‡ เจ‡เจธ เจตเจฟเฉฑเจš เจคเฉเจธเฉ€เจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉ‚เจšเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจฌเจŸเจจเจพเจ‚ เจฆเฉ€ เจนเจฐเฉ‡เจ• เจ•เจคเจพเจฐ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจ•เจคเจพเจฐ เจตเจฟเฉฑเจš เจ•เจˆ เจฌเจŸเจจ เจฒเจ—เจพ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจฆเจฒเฉ€เจฒ resize_keyboard เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจŸเจจเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจ•เฉ‚เจฒ เจ†เจ•เจพเจฐ เจ…เจคเฉ‡ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจ†เจช เจšเฉเจฃเจจ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ one_time_keyboard เจคเฉเจนเจพเจจเฉ‚เฉฐ เจนเจฐเฉ‡เจ• เจฌเจŸเจจ เจฆเจฌเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ•เฉ€เจฌเฉ‹เจฐเจก เจจเฉ‚เฉฐ เจฒเฉเจ•เจพเจ‰เจฃ เจฆเฉ€ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค

เจ†เจ“ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจฌเฉ‹เจŸ เจฒเจฟเจ–เฉ€เจ เจœเจฟเจธ เจตเจฟเฉฑเจš 3 เจฌเจŸเจจ เจนเฉ‹เจฃเจ—เฉ‡:

  • เจšเฉˆเจŸ เจ†เจˆเจกเฉ€ - เจฌเฉ‹เจŸ เจจเจพเจฒ เจ—เฉฑเจฒเจฌเจพเจค เจฆเฉ€ เจšเฉˆเจŸ เจ†เจˆเจกเฉ€ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเฉ‹
  • เจฎเฉ‡เจฐเจพ เจจเจพเจฎ - เจคเฉเจนเจพเจกเฉ‡ เจจเจพเจฎ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเฉ‹
  • เจฎเฉ‡เจฐเจพ เจฒเฉŒเจ—เจ‡เจจ - เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจตเจฟเฉฑเจš เจ†เจชเจฃเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเจพเจฎ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเฉ‹

เจ•เฉ‹เจก 1: เจœเจตเจพเจฌเฉ€ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฆเฉ‡ เจจเจพเจฒ เจธเจงเจพเจฐเจจ เจฌเฉ‹เจŸ

library(telegram.bot)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะบะปะฐััะฐ Updater
updater <- Updater('ะขะžะšะ•ะ ะ’ะะจะ•ะ“ะž ะ‘ะžะขะ')

# ัะพะทะดะฐั‘ะผ ะผะตั‚ะพะดั‹
## ะผะตั‚ะพะด ะดะปั ะทะฐะฟัƒัะบะฐ ะบะปะฐะฒะธะฐั‚ัƒั€ั‹
start <- function(bot, update) {

  # ัะพะทะดะฐั‘ะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(KeyboardButton("ะงะฐั‚ ID")),
      list(KeyboardButton("ะœะพั‘ ะธะผั")),
      list(KeyboardButton("ะœะพะน ะปะพะณะธะฝ"))
    ),
    resize_keyboard = FALSE,
    one_time_keyboard = TRUE
  )

  # ะพั‚ะฟั€ะฐะฒะปัะตะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  bot$sendMessage(update$message$chat_id,
                  text = 'ะ’ั‹ะฑะตั€ะธั‚ะต ะบะพะผะฐะฝะดัƒ', 
                  reply_markup = RKM)

}

## ะผะตั‚ะพะด ะฒะพะทะฒั€ะฐะทะฐัŽั‰ะธะน id ั‡ะฐั‚ะฐ
chat_id <- function(bot, update) {

  bot$sendMessage(update$message$chat_id, 
                  text = paste0("ะงะฐั‚ id ัั‚ะพะณะพ ะดะธะฐะปะพะณะฐ: ", update$message$chat_id),
                  parse_mode = "Markdown")

}

## ะผะตั‚ะพะด ะฒะพะทะฒั€ะฐั‰ะฐัŽั‰ะธะน ะธะผั
my_name <- function(bot, update) {

  bot$sendMessage(update$message$chat_id, 
                  text = paste0("ะ’ะฐั ะทะพะฒัƒั‚ ", update$message$from$first_name),
                  parse_mode = "Markdown")

}

## ะผะตั‚ะพะด ะฒะพะทะฒั€ะฐั‰ะฐัŽั‰ะธะน ะปะพะณะธะฝ
my_username <- function(bot, update) {

  bot$sendMessage(update$message$chat_id, 
                  text = paste0("ะ’ะฐัˆ ะปะพะณะธะฝ ", update$message$from$username),
                  parse_mode = "Markdown")

}

# ัะพะทะดะฐั‘ะผ ั„ะธะปัŒั‚ั€ั‹
## ัะพะพะฑั‰ะตะฝะธั ั ั‚ะตะบัั‚ะพะผ ะงะฐั‚ ID
MessageFilters$chat_id <- BaseFilter(function(message) {

  # ะฟั€ะพะฒะตั€ัะตะผ ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั
  message$text == "ะงะฐั‚ ID"

}
)

## ัะพะพะฑั‰ะตะฝะธั ั ั‚ะตะบัั‚ะพะผ ะœะพั‘ ะธะผั
MessageFilters$name <- BaseFilter(function(message) {

  # ะฟั€ะพะฒะตั€ัะตะผ ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั
  message$text == "ะœะพั‘ ะธะผั"

}
)

## ัะพะพะฑั‰ะตะฝะธั ั ั‚ะตะบัั‚ะพะผ ะœะพะน ะปะพะณะธะฝ
MessageFilters$username <- BaseFilter(function(message) {

  # ะฟั€ะพะฒะตั€ัะตะผ ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั
  message$text == "ะœะพะน ะปะพะณะธะฝ"
)

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ
h_start    <- CommandHandler('start', start)
h_chat_id  <- MessageHandler(chat_id, filters = MessageFilters$chat_id)
h_name     <- MessageHandler(my_name, filters = MessageFilters$name)
h_username <- MessageHandler(my_username, filters = MessageFilters$username)

# ะดะพะฑะฐะฒะปัะตะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ ะฒ ะดะธัะฟะตั‚ั‡ะตั€
updater <- updater + 
            h_start +
            h_chat_id +
            h_name +
            h_username

# ะทะฐะฟัƒัะบะฐะตะผ ะฑะพั‚ะฐ 
updater$start_polling()

'เจคเฉเจนเจพเจกเฉ‡ เจฌเฉ‹เจŸ เจŸเฉ‹เจ•เจจ' เจจเฉ‚เฉฐ เจ…เจธเจฒ เจŸเฉ‹เจ•เจจ เจจเจพเจฒ เจฌเจฆเจฒเจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‰เจชเจฐเฉ‹เจ•เจค เจ•เฉ‹เจก เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจšเจฒเจพเจ“, เจœเจฟเจธ เจฐเจพเจนเฉ€เจ‚ เจคเฉเจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจธเฉ€ เจฌเฉ‹เจŸเจซเฉˆเจฆเจฐ (เจฎเฉˆเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€ เจชเจนเจฟเจฒเจพ เจฒเฉ‡เจ–).

เจฒเจพเจ‚เจš เจ•เจฐเจจ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เจฎเจพเจ‚เจก เจฆเจฟเจ“ /start, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจฌเจฟเจฒเจ•เฉเจฒ เจ‰เจนเฉ€ เจนเฉˆ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจ•เฉ€เจฌเฉ‹เจฐเจก เจจเฉ‚เฉฐ เจฒเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจนเฉˆเฅค

เจ†เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ (เจญเจพเจ— 3): เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจนเจพเจ‡เจคเจพ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡

เจœเฉ‡เจ•เจฐ เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจคเฉเจนเจพเจกเฉ‡ เจฒเจˆ เจตเจฟเจงเฉ€เจ†เจ‚, เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจ…เจคเฉ‡ เจนเฉˆเจ‚เจกเจฒเจฐ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ‡ เจจเจพเจฒ เจฆเจฟเฉฑเจคเฉ‡ เจ•เฉ‹เจก เจ‰เจฆเจพเจนเจฐเจจ เจจเฉ‚เฉฐ เจชเจพเจฐเจธ เจ•เจฐเจจเจพ เจฎเฉเจธเจผเจ•เจฒ เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจชเจฟเจ›เจฒเฉ‡ เจ‡เฉฑเจ• 'เจคเฉ‡ เจตเจพเจชเจธ เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค เจฒเฉ‡เจ–, เจœเจฟเจธ เจตเจฟเฉฑเจš เจฎเฉˆเจ‚ เจ‡เจธ เจธเจญ เจฆเจพ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจตเจฐเจฃเจจ เจ•เฉ€เจคเจพ เจนเฉˆเฅค

เจ…เจธเฉ€เจ‚ 4 เจคเจฐเฉ€เจ•เฉ‡ เจฌเจฃเจพเจ:

  • เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ‹ - เจ•เฉ€เจฌเฉ‹เจฐเจก เจšเจฒเจพเจ“
  • chat_id โ€” เจšเฉˆเจŸ ID เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเฉ‹
  • my_name โ€” เจ†เจชเจฃเฉ‡ เจจเจพเจฎ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเฉ‹
  • my_username โ€” เจ†เจชเจฃเฉ‡ เจฒเจพเจ—เจ‡เจจ เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเฉ‹

เจ‡เจคเจฐเจพเจœเจผ เจ•เจฐเจจ เจฒเจˆ เจธเฉเจจเฉ‡เจนเจพ เจซเจฟเจฒเจŸเจฐ เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจŸเฉˆเจ•เจธเจŸ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ 3 เจธเฉเจจเฉ‡เจนเฉ‡ เจซเจฟเจฒเจŸเจฐ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡:

  • chat_id โ€” เจŸเฉˆเจ•เจธเจŸ เจฆเฉ‡ เจจเจพเจฒ เจธเฉเจจเฉ‡เจนเฉ‡ "ะงะฐั‚ ID"
  • เจจเจพเจฎ - เจŸเฉˆเจ•เจธเจŸ เจฆเฉ‡ เจจเจพเจฒ เจธเฉเจจเฉ‡เจนเฉ‡ "ะœะพั‘ ะธะผั"
  • เจฏเฉ‚เจœเจผเจฐเจจเจพเจฎ โ€” เจŸเฉˆเจ•เจธเจŸ เจฆเฉ‡ เจจเจพเจฒ เจธเฉเจจเฉ‡เจนเฉ‡ "ะœะพะน ะปะพะณะธะฝ"

เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ 4 เจนเฉˆเจ‚เจกเจฒเจฐ เจฌเจฃเจพเจ เจนเจจ เจœเฉ‹, เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจ…เจคเฉ‡ เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡, เจจเจฟเจฐเจงเจพเจฐเจค เจคเจฐเฉ€เจ•เจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃเจ—เฉ‡เฅค

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ
h_start    <- CommandHandler('start', start)
h_chat_id  <- MessageHandler(chat_id, filters = MessageFilters$chat_id)
h_name     <- MessageHandler(my_name, filters = MessageFilters$name)
h_username <- MessageHandler(my_username, filters = MessageFilters$username)

เจ•เฉ€เจฌเฉ‹เจฐเจก เจ–เฉเจฆ เจตเจฟเจงเฉ€ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ start() เจŸเฉ€เจฎ เจฆเฉเจ†เจฐเจพ ReplyKeyboardMarkup().

RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(KeyboardButton("ะงะฐั‚ ID")),
      list(KeyboardButton("ะœะพั‘ ะธะผั")),
      list(KeyboardButton("ะœะพะน ะปะพะณะธะฝ"))
    ),
    resize_keyboard = FALSE,
    one_time_keyboard = TRUE
)

เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจธเจพเจฐเฉ‡ เจฌเจŸเจจ เจ‡เฉฑเจ• เจฆเฉ‚เจœเฉ‡ เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจฐเฉฑเจ–เฉ‡ เจนเจจ, เจชเจฐ เจ…เจธเฉ€เจ‚ เจฌเจŸเจจ เจธเฉ‚เจšเฉ€เจ†เจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจตเจฟเฉฑเจš เจฌเจฆเจฒเจพเจ… เจ•เจฐเจ•เฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เจคเจพเจฐ เจตเจฟเฉฑเจš เจตเจฟเจตเจธเจฅเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‡เฉฑเจ• เจ•เจคเจพเจฐ เจฌเจŸเจจเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจจเฉ‡เจธเจŸเจก เจธเฉ‚เจšเฉ€ เจฆเฉเจ†เจฐเจพ เจฌเจฃเจพเจˆ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, เจซเจฟเจฐ เจธเจพเจกเฉ‡ เจฌเจŸเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เจคเจพเจฐ เจตเจฟเฉฑเจš เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เฉ‹เจก เจฆเฉ‡ เจ•เฉเจ เจนเจฟเฉฑเจธเฉ‡ เจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฒเจฟเจ–เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ:

RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(
          KeyboardButton("ะงะฐั‚ ID"),
          KeyboardButton("ะœะพั‘ ะธะผั"),
          KeyboardButton("ะœะพะน ะปะพะณะธะฝ")
     )
    ),
    resize_keyboard = FALSE,
    one_time_keyboard = TRUE
)

เจ†เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ (เจญเจพเจ— 3): เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจนเจพเจ‡เจคเจพ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡

เจ•เฉ€เจฌเฉ‹เจฐเจก เจตเจฟเจงเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจšเฉˆเจŸ เจตเจฟเฉฑเจš เจญเฉ‡เจœเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ sendMessage(), เจฆเจฒเฉ€เจฒ เจตเจฟเฉฑเจš reply_markup.

  bot$sendMessage(update$message$chat_id,
                  text = 'ะ’ั‹ะฑะตั€ะธั‚ะต ะบะพะผะฐะฝะดัƒ', 
                  reply_markup = RKM)

เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉˆเจ‚ เจ‰เฉฑเจชเจฐ เจฒเจฟเจ–เจฟเจ† เจนเฉˆ, เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจ‡เฉฑเจ• เจ–เจพเจธ เจธเฉฐเจฆเฉ‡เจธเจผ เจจเจพเจฒ เจœเฉเฉœเจฟเจ† เจนเฉ‹เจ‡เจ† เจนเฉˆเฅค เจฎเฉเฉฑเจ– เจ•เฉ€เจฌเฉ‹เจฐเจก เจจเจพเจฒเฉ‹เจ‚ เจ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจ•เฉเจ เจนเฉ‹เจฐ เจฎเฉเจธเจผเจ•เจฒ เจนเฉˆเฅค

เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจจ เจฒเจˆ เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจขเฉฐเจ— เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจ เจ•เจฒเจฟเฉฑเจ• เจฆเจพ เจœเจตเจพเจฌ เจฆเฉ‡เจฃ เจฒเจˆ, เจคเฉเจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจตเจฟเจงเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจตเฉ€ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ answerCallbackQuery(), เจœเฉ‹ เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจ เจฆเจฌเจพเจ‰เจฃ เจตเจพเจฒเฉ‡ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจจเฉ‹เจŸเฉ€เจซเจฟเจ•เฉ‡เจธเจผเจจ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจ เจคเฉ‹เจ‚ เจญเฉ‡เจœเจฟเจ† เจ—เจฟเจ† เจกเฉ‡เจŸเจพ เจŸเฉˆเจ•เจธเจŸ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจ‡เจธเจจเฉ‚เฉฐ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจนเฉˆเจ‚เจกเจฒเจฐ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ CallbackQueryHandler().

เจ‡เฉฑเจ• เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เฉ‹เจก เจœเฉ‹ เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ€ เจ…เจงเจฟเจ•เจพเจฐเจค เจฎเจฆเจฆ เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ telegram.bot.

เจ…เจงเจฟเจ•เจพเจฐเจค เจฎเจฆเจฆ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เฉ‹เจก

# Initialize bot
bot <- Bot(token = "TOKEN")
chat_id <- "CHAT_ID"

# Create Inline Keyboard
text <- "Could you type their phone number, please?"
IKM <- InlineKeyboardMarkup(
  inline_keyboard = list(
    list(
      InlineKeyboardButton(1),
      InlineKeyboardButton(2),
      InlineKeyboardButton(3)
    ),
    list(
      InlineKeyboardButton(4),
      InlineKeyboardButton(5),
      InlineKeyboardButton(6)
    ),
    list(
      InlineKeyboardButton(7),
      InlineKeyboardButton(8),
      InlineKeyboardButton(9)
    ),
    list(
      InlineKeyboardButton("*"),
      InlineKeyboardButton(0),
      InlineKeyboardButton("#")
    )
  )
)

# Send Inline Keyboard
bot$sendMessage(chat_id, text, reply_markup = IKM)

เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฑเจ• เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ InlineKeyboardMarkup(), เจฐเจฟเจชเจฒเจพเจˆ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฆเฉ‡ เจธเจฎเจพเจจ เจธเจฟเจงเจพเจ‚เจค 'เจคเฉ‡เฅค IN InlineKeyboardMarkup() เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจธเฉ‚เจšเฉ€เจ†เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจชเจพเจธ เจ•เจฐเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ, เจนเจฐเฉ‡เจ• เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจฌเจŸเจจ เจซเฉฐเจ•เจธเจผเจจ เจฆเฉเจ†เจฐเจพ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆ InlineKeyboardButton().

เจ‡เฉฑเจ• เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจ เจœเจพเจ‚ เจคเจพเจ‚ เจ‡เฉฑเจ• เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจ•เฉเจ เจกเฉ‡เจŸเจพ เจญเฉ‡เจœ เจธเจ•เจฆเจพ เจนเฉˆ callback_data, เจœเจพเจ‚ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ HTML เจชเฉฐเจจเฉ‡ เจจเฉ‚เฉฐ เจ–เฉ‹เจฒเฉเจนเฉ‹ url.

เจจเจคเฉ€เจœเจพ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจนเฉ‹เจตเฉ‡เจ—เฉ€ เจœเจฟเจธ เจตเจฟเฉฑเจš เจนเจฐเฉ‡เจ• เจคเฉฑเจค เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจตเฉ€ เจนเฉˆ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เจคเจพเจฐ เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจ…เฉฑเจ—เฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจเจพเจ‚ เจตเจพเจฒเฉ‡ เจฌเฉ‹เจŸเจธ เจฆเฉ€เจ†เจ‚ เจ•เจˆ เจ‰เจฆเจพเจนเจฐเจฃเจพเจ‚ เจฆเฉ‡เจ–เจพเจ‚เจ—เฉ‡เฅค

เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจฌเฉ‹เจŸ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ

เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ เจ•เฉ‹เจตเจฟเจก -19 เจฒเจˆ เจเจ•เจธเจชเฉเจฐเฉˆเจธ เจŸเฉˆเจธเจŸเจฟเฉฐเจ— เจฒเจˆ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฒเจฟเจ–เจพเจ‚เจ—เฉ‡เฅค เจนเฉเจ•เจฎ เจฆเฉเจ†เจฐเจพ /test, เจ‡เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฆเฉ‹ เจฌเจŸเจจเจพเจ‚ เจตเจพเจฒเจพ เจ•เฉ€เจฌเฉ‹เจฐเจก เจญเฉ‡เจœเฉ‡เจ—เจพ, เจฆเจฌเจพเจ เจ—เจ เจฌเจŸเจจ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจ‡เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจคเฉเจนเจพเจกเฉ‡ เจŸเฉˆเจธเจŸ เจฆเฉ‡ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจญเฉ‡เจœเฉ‡เจ—เจพเฅค

เจ•เฉ‹เจก 2: เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจตเจพเจฒเจพ เจธเจญ เจคเฉ‹เจ‚ เจธเจฐเจฒ เจฌเฉ‹เจŸ

library(telegram.bot)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะบะปะฐััะฐ Updater
updater <- Updater('ะขะžะšะ•ะ ะ’ะะจะ•ะ“ะž ะ‘ะžะขะ')

# ะผะตั‚ะพะด ะดะปั ะพั‚ะฟั€ะฐะฒะบะธ InLine ะบะปะฐะฒะธะฐั‚ัƒั€ั‹
test <- function(bot, update) {

  # ัะพะทะดะฐั‘ะผ InLine ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  IKM <- InlineKeyboardMarkup(
    inline_keyboard = list(
      list(
        InlineKeyboardButton("ะ”ะฐ", callback_data = 'yes'),
        InlineKeyboardButton("ะะตั‚", callback_data = 'no')
      )
    )
  )

  # ะžั‚ะฟั€ะฐะฒะปัะตะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ ะฒ ั‡ะฐั‚
  bot$sendMessage(update$message$chat_id, 
                  text = "ะ’ั‹ ะฑะพะปะตั‚ะต ะบะพั€ะพะฝะฐะฒะธั€ัƒัะพะผ?", 
                  reply_markup = IKM)
}

# ะผะตั‚ะพะด ะดะปั ะพะฑั€ะฐะฑะพั‚ะบะธ ะฝะฐะถะฐั‚ะธั ะบะฝะพะฟะบะธ
answer_cb <- function(bot, update) {

  # ะฟะพะปัƒั‡ะตะฝะฝั‹ะต ะดะฐะฝะฝั‹ะต ั ะบะฝะพะฟะบะธ
  data <- update$callback_query$data

  # ะฟะพะปัƒั‡ะฐะตะผ ะธะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั, ะฝะฐะถะฐะฒัˆะตะณะพ ะบะฝะพะฟะบัƒ
  uname <- update$effective_user()$first_name

  # ะพะฑั€ะฐะฑะพั‚ะบะฐ ั€ะตะทัƒะปัŒั‚ะฐั‚ะฐ
  if ( data == 'no' ) {

    msg <- paste0(uname, ", ะฟะพะทะดั€ะฐะฒะปััŽ, ะฒะฐัˆ ั‚ะตัั‚ ะฝะฐ covid-19 ะพั‚ั€ะธั†ะฐั‚ะตะปัŒะฝั‹ะน.")

  } else {

    msg <- paste0(uname, ", ะบ ัะพะถะฐะปะตะฝะธ ะฒะฐัˆ ั‚ะตัั‚ ะฝะฐ covid-19 ะฟะพะปะพะถะธั‚ะตะปัŒะฝั‹ะน.")

  }

  # ะžั‚ะฟั€ะฐะฒะบะฐ ัะพะพะฑั‰ะตะฝะธั
  bot$sendMessage(chat_id = update$from_chat_id(),
                  text = msg)

  # ัะพะพะฑั‰ะฐะตะผ ะฑะพั‚ัƒ, ั‡ั‚ะพ ะทะฐะฟั€ะพั ั ะบะฝะพะฟะบะธ ะฟั€ะธะฝัั‚
  bot$answerCallbackQuery(callback_query_id = update$callback_query$id) 
}

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ
inline_h      <- CommandHandler('test', test)
query_handler <- CallbackQueryHandler(answer_cb)

# ะดะพะฑะฐะฒะปัะตะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ ะฒ ะดะธัะฟะตั‚ั‡ะตั€
updater <- updater + inline_h + query_handler

# ะทะฐะฟัƒัะบะฐะตะผ ะฑะพั‚ะฐ
updater$start_polling()

'เจคเฉเจนเจพเจกเฉ‡ เจฌเฉ‹เจŸ เจŸเฉ‹เจ•เจจ' เจจเฉ‚เฉฐ เจ…เจธเจฒ เจŸเฉ‹เจ•เจจ เจจเจพเจฒ เจฌเจฆเจฒเจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‰เจชเจฐเฉ‹เจ•เจค เจ•เฉ‹เจก เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจšเจฒเจพเจ“, เจœเจฟเจธ เจฐเจพเจนเฉ€เจ‚ เจคเฉเจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจธเฉ€ เจฌเฉ‹เจŸเจซเฉˆเจฆเจฐ (เจฎเฉˆเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€ เจชเจนเจฟเจฒเจพ เจฒเฉ‡เจ–).

เจจเจคเฉ€เจœเจพ:
เจ†เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ (เจญเจพเจ— 3): เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจนเจพเจ‡เจคเจพ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡

เจ…เจธเฉ€เจ‚ เจฆเฉ‹ เจคเจฐเฉ€เจ•เฉ‡ เจฌเจฃเจพเจ:

  • เจŸเฉˆเจธเจŸ - เจšเฉˆเจŸ เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฃ เจฒเจˆ
  • เจœเจตเจพเจฌ_เจธเฉ€เจฌเฉ€ - เจ•เฉ€เจฌเฉ‹เจฐเจก เจคเฉ‹เจ‚ เจญเฉ‡เจœเฉ‡ เจ—เจ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆเฅค

เจกเฉ‡เจŸเจพ เจœเฉ‹ เจนเจฐเฉ‡เจ• เจฌเจŸเจจ เจคเฉ‹เจ‚ เจญเฉ‡เจœเจฟเจ† เจœเจพเจตเฉ‡เจ—เจพ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ callback_data, เจ‡เฉฑเจ• เจฌเจŸเจจ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡. เจคเฉเจธเฉ€เจ‚ เจ•เฉฐเจธเจŸเจฐเฉฑเจ•เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฌเจŸเจจ เจคเฉ‹เจ‚ เจญเฉ‡เจœเจฟเจ† เจกเฉ‡เจŸเจพ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ update$callback_query$data, เจตเจฟเจงเฉ€ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจœเจตเจพเจฌ_เจธเฉ€เจฌเฉ€.

เจฌเฉ‹เจŸ เจฒเจˆ เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก 'เจคเฉ‡ เจชเฉเจฐเจคเฉ€เจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ, เจตเจฟเจงเฉ€ เจœเจตเจพเจฌ_เจธเฉ€เจฌเฉ€ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจนเฉˆเจ‚เจกเจฒเจฐ เจฆเฉเจ†เจฐเจพ เจธเฉฐเจธเจพเจงเจฟเจค: CallbackQueryHandler(answer_cb). เจœเฉ‹ เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจ เจจเฉ‚เฉฐ เจฆเจฌเจพเจ‰เจฃ 'เจคเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค เจนเฉˆเจ‚เจกเจฒเจฐ CallbackQueryHandler เจฆเฉ‹ เจฆเจฒเฉ€เจฒเจพเจ‚ เจฒเฉˆเจ‚เจฆเจพ เจนเฉˆ:

  • callback - เจตเจฟเจงเฉ€ เจœเจฟเจธเจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ
  • pattern โ€” เจ‡เฉฑเจ• เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฌเจŸเจจ เจจเจพเจฒ เจฌเฉฐเจจเฉเจนเฉ‡ เจนเฉ‹เจ เจกเฉ‡เจŸเจพ เจฆเฉเจ†เจฐเจพ เจซเจฟเจฒเจŸเจฐ เจ•เจฐเฉ‹ callback_data.

เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ, เจฆเจฒเฉ€เจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ pattern เจ…เจธเฉ€เจ‚ เจนเจฐเฉ‡เจ• เจฌเจŸเจจ เจจเฉ‚เฉฐ เจฆเจฌเจพเจ‰เจฃ เจฒเจˆ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเฉ€ เจตเจฟเจงเฉ€ เจฒเจฟเจ– เจธเจ•เจฆเฉ‡ เจนเจพเจ‚:

เจ•เฉ‹เจก 3: เจนเจฐเฉ‡เจ• เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจ เจฒเจˆ เจตเฉฑเจ–เจฐเฉ‡ เจคเจฐเฉ€เจ•เฉ‡

library(telegram.bot)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะบะปะฐััะฐ Updater
updater <- Updater('ะขะžะšะ•ะ ะ’ะะจะ•ะ“ะž ะ‘ะžะขะ')

# ะผะตั‚ะพะด ะดะปั ะพั‚ะฟั€ะฐะฒะบะธ InLine ะบะปะฐะฒะธะฐั‚ัƒั€ั‹
test <- function(bot, update) {  

  # ัะพะทะดะฐั‘ะผ InLine ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  IKM <- InlineKeyboardMarkup(
    inline_keyboard = list(
      list(
        InlineKeyboardButton("ะ”ะฐ", callback_data = 'yes'),
        InlineKeyboardButton("ะะตั‚", callback_data = 'no')
      )
    )
  )

  # ะžั‚ะฟั€ะฐะฒะปัะตะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ ะฒ ั‡ะฐั‚
  bot$sendMessage(update$message$chat_id, 
                  text = "ะ’ั‹ ะฑะพะปะตั‚ะต ะบะพั€ะพะฝะฐะฒะธั€ัƒัะพะผ?", 
                  reply_markup = IKM)
}

# ะผะตั‚ะพะด ะดะปั ะพะฑั€ะฐะฑะพั‚ะบะธ ะฝะฐะถะฐั‚ะธั ะบะฝะพะฟะบะธ ะ”ะฐ
answer_cb_yes <- function(bot, update) {

  # ะฟะพะปัƒั‡ะฐะตะผ ะธะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั, ะฝะฐะถะฐะฒัˆะตะณะพ ะบะฝะพะฟะบัƒ
  uname <- update$effective_user()$first_name

  # ะพะฑั€ะฐะฑะพั‚ะบะฐ ั€ะตะทัƒะปัŒั‚ะฐั‚ะฐ
  msg <- paste0(uname, ", ะบ ัะพะถะฐะปะตะฝะธ ะฒะฐัˆ ั‚ะตะบัั‚ ะฝะฐ covid-19 ะฟะพะปะพะถะธั‚ะตะปัŒะฝั‹ะน.")

  # ะžั‚ะฟั€ะฐะฒะบะฐ ัะพะพะฑั‰ะตะฝะธั
  bot$sendMessage(chat_id = update$from_chat_id(),
                  text = msg)

  # ัะพะพะฑั‰ะฐะตะผ ะฑะพั‚ัƒ, ั‡ั‚ะพ ะทะฐะฟั€ะพั ั ะบะฝะพะฟะบะธ ะฟั€ะธะฝัั‚
  bot$answerCallbackQuery(callback_query_id = update$callback_query$id) 
}

# ะผะตั‚ะพะด ะดะปั ะพะฑั€ะฐะฑะพั‚ะบะธ ะฝะฐะถะฐั‚ะธั ะบะฝะพะฟะบะธ ะะตั‚
answer_cb_no <- function(bot, update) {

  # ะฟะพะปัƒั‡ะฐะตะผ ะธะผั ะฟะพะปัŒะทะพะฒะฐั‚ะตะปั, ะฝะฐะถะฐะฒัˆะตะณะพ ะบะฝะพะฟะบัƒ
  uname <- update$effective_user()$first_name

  msg <- paste0(uname, ", ะฟะพะทะดั€ะฐะฒะปััŽ, ะฒะฐัˆ ั‚ะตะบัั‚ ะฝะฐ covid-19 ะพั‚ั€ะธั†ะฐั‚ะตะปัŒะฝั‹ะน.")

  # ะžั‚ะฟั€ะฐะฒะบะฐ ัะพะพะฑั‰ะตะฝะธั
  bot$sendMessage(chat_id = update$from_chat_id(),
                  text = msg)

  # ัะพะพะฑั‰ะฐะตะผ ะฑะพั‚ัƒ, ั‡ั‚ะพ ะทะฐะฟั€ะพั ั ะบะฝะพะฟะบะธ ะฟั€ะธะฝัั‚
  bot$answerCallbackQuery(callback_query_id = update$callback_query$id) 
}

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ
inline_h          <- CommandHandler('test', test)
query_handler_yes <- CallbackQueryHandler(answer_cb_yes, pattern = 'yes')
query_handler_no  <- CallbackQueryHandler(answer_cb_no, pattern = 'no')

# ะดะพะฑะฐะฒะปัะตะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ ะฒ ะดะธัะฟะตั‚ั‡ะตั€
updater <- updater + 
            inline_h + 
            query_handler_yes +
            query_handler_no

# ะทะฐะฟัƒัะบะฐะตะผ ะฑะพั‚ะฐ
updater$start_polling()

'เจคเฉเจนเจพเจกเฉ‡ เจฌเฉ‹เจŸ เจŸเฉ‹เจ•เจจ' เจจเฉ‚เฉฐ เจ…เจธเจฒ เจŸเฉ‹เจ•เจจ เจจเจพเจฒ เจฌเจฆเจฒเจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‰เจชเจฐเฉ‹เจ•เจค เจ•เฉ‹เจก เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจšเจฒเจพเจ“, เจœเจฟเจธ เจฐเจพเจนเฉ€เจ‚ เจคเฉเจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจธเฉ€ เจฌเฉ‹เจŸเจซเฉˆเจฆเจฐ (เจฎเฉˆเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€ เจชเจนเจฟเจฒเจพ เจฒเฉ‡เจ–).

เจนเฉเจฃ เจ…เจธเฉ€เจ‚ 2 เจตเฉฑเจ–เจฐเฉ‡ เจขเฉฐเจ— เจฒเจฟเจ–เฉ‡ เจนเจจ เจฏเจพเจจเฉ€. เจ‡เฉฑเจ• เจขเฉฐเจ—, เจนเจฐเฉ‡เจ• เจฌเจŸเจจ เจฆเจฌเจพเจ‰เจฃ เจฒเจˆ, เจ…เจคเฉ‡ เจ†เจฐเจ—เฉ‚เจฎเฉˆเจ‚เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ pattern, เจ†เจชเจฃเฉ‡ เจนเฉˆเจ‚เจกเจฒเจฐ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡:

query_handler_yes <- CallbackQueryHandler(answer_cb_yes, pattern = 'yes')
query_handler_no  <- CallbackQueryHandler(answer_cb_no, pattern = 'no')

เจตเจฟเจงเฉ€ เจ•เฉ‹เจก เจ–เจคเจฎ เจนเฉเฉฐเจฆเจพ เจนเฉˆ เจœเจตเจพเจฌ_เจธเฉ€เจฌเฉ€ เจŸเฉ€เจฎ เจฆเฉเจ†เจฐเจพ bot$answerCallbackQuery(callback_query_id = update$callback_query$id), เจœเฉ‹ เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจฆเฉฑเจธเจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจชเฉเจฐเจพเจชเจค เจนเฉ‹ เจ—เจฟเจ† เจนเฉˆเฅค

เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจœเฉ‹ เจ‡เฉฑเจ• เจšเฉเจฃเฉ‡ เจนเฉ‹เจ เจธเจผเจนเจฟเจฐ เจฒเจˆ เจฎเฉŒเจœเฉ‚เจฆเจพ เจฎเฉŒเจธเจฎ เจฆเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจ•เจฐเจฆเจพ เจนเฉˆ

เจ†เจ‰ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ€เจ เจœเฉ‹ เจฎเฉŒเจธเจฎ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจ‡เจธ เจฆเฉ‡ เจ•เฉฐเจฎ เจฆเจพ เจคเจฐเจ• เจนเฉ‡เจ  เจฒเจฟเจ–เฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค เจŸเฉ€เจฎ เจตเฉฑเจฒเฉ‹เจ‚ เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš /start เจคเฉเจธเฉ€เจ‚ เจฎเฉเฉฑเจ– เจ•เฉ€เจฌเฉ‹เจฐเจก เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจœเจฟเจธ เจตเจฟเฉฑเจš เจธเจฟเจฐเจซเจผ เจ‡เฉฑเจ• "เจฎเฉŒเจธเจฎ" เจฌเจŸเจจ เจนเฉˆเฅค เจ‡เจธ เจฌเจŸเจจ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเจจ เจจเจพเจฒ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเจผเจนเจฟเจฐ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฒเจˆ เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจฎเจฟเจฒเฉ‡เจ—เจพ เจœเจฟเจธ เจฒเจˆ เจคเฉเจธเฉ€เจ‚ เจฎเฉŒเจœเฉ‚เจฆเจพ เจฎเฉŒเจธเจฎ เจฆเจพ เจชเจคเจพ เจฒเจ—เจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹เฅค เจธเจผเจนเจฟเจฐเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจฎเฉŒเจธเจฎ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹เฅค

เจ‡เจธ เจ•เฉ‹เจก เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ•เจˆ เจตเจพเจงเฉ‚ เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡:

  • httr โ€” HTTP เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉˆเจ•เฉ‡เจœ, เจœเจฟเจธ เจฆเฉ‡ เจ†เจงเจพเจฐ 'เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ API เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจฎเฉเจซเจค API เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡ openweathermap.org.
  • stringr - เจŸเฉˆเจ•เจธเจŸ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉˆเจ•เฉ‡เจœ, เจธเจพเจกเฉ‡ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจšเฉเจฃเฉ‡ เจนเฉ‹เจ เจธเจผเจนเจฟเจฐ เจตเจฟเฉฑเจš เจฎเฉŒเจธเจฎ เจฌเจพเจฐเฉ‡ เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจตเจฐเจคเจพเจ‚เจ—เฉ‡เฅค

เจ•เฉ‹เจก 4: เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจœเฉ‹ เจšเฉเจฃเฉ‡ เจ—เจ เจธเจผเจนเจฟเจฐ เจฒเจˆ เจฎเฉŒเจœเฉ‚เจฆเจพ เจฎเฉŒเจธเจฎ เจฆเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจ•เจฐเจฆเจพ เจนเฉˆ

library(telegram.bot)
library(httr)
library(stringr)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะบะปะฐััะฐ Updater
updater <- Updater('ะขะžะšะ•ะ ะ’ะะจะ•ะ“ะž ะ‘ะžะขะ')

# ัะพะทะดะฐั‘ะผ ะผะตั‚ะพะดั‹
## ะผะตั‚ะพะด ะดะปั ะทะฐะฟัƒัะบะฐ ะพัะฝะพะฒะฝะพะน ะบะปะฐะฒะธะฐั‚ัƒั€ั‹
start <- function(bot, update) {

  # ัะพะทะดะฐั‘ะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(
        KeyboardButton("ะŸะพะณะพะดะฐ")
      )
    ),
    resize_keyboard = TRUE,
    one_time_keyboard = TRUE
  )

  # ะพั‚ะฟั€ะฐะฒะปัะตะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  bot$sendMessage(update$message$chat_id,
                  text = 'ะ’ั‹ะฑะตั€ะธั‚ะต ะบะพะผะฐะฝะดัƒ', 
                  reply_markup = RKM)

}

## ะœะตั‚ะพะด ะฒั‹ะทะพะฒะฐ Inine ะบะปะฐะฒะธะฐั‚ัƒั€ั‹
weather <- function(bot, update) {

  IKM <- InlineKeyboardMarkup(
    inline_keyboard = list(
      list(
        InlineKeyboardButton(text = 'ะœะพัะบะฒะฐ', callback_data = 'New York,us'),
        InlineKeyboardButton(text = 'ะกะฐะฝะบั‚-ะŸะตั‚ะตั€ะฑัƒั€ะณ', callback_data = 'Saint Petersburg'),
        InlineKeyboardButton(text = 'ะัŒัŽ-ะ™ะพั€ะบ', callback_data = 'New York')
      ),
      list(
        InlineKeyboardButton(text = 'ะ•ะบะฐั‚ะตั€ะธะฝะฑัƒั€ะณ', callback_data = 'Yekaterinburg,ru'),
        InlineKeyboardButton(text = 'ะ‘ะตั€ะปะธะฝ', callback_data = 'Berlin,de'),
        InlineKeyboardButton(text = 'ะŸะฐั€ะธะถ', callback_data = 'Paris,fr')
      ),
      list(
        InlineKeyboardButton(text = 'ะ ะธะผ', callback_data = 'Rome,it'),
        InlineKeyboardButton(text = 'ะžะดะตััะฐ', callback_data = 'Odessa,ua'),
        InlineKeyboardButton(text = 'ะšะธะตะฒ', callback_data = 'Kyiv,fr')
      ),
      list(
        InlineKeyboardButton(text = 'ะขะพะบะธะพ', callback_data = 'Tokyo'),
        InlineKeyboardButton(text = 'ะะผัั‚ะตั€ะดะฐะผ', callback_data = 'Amsterdam,nl'),
        InlineKeyboardButton(text = 'ะ’ะฐัˆะธะฝะณั‚ะพะฝ', callback_data = 'Washington,us')
      )
    )
  )

  # Send Inline Keyboard
  bot$sendMessage(chat_id = update$message$chat_id, 
                  text = "ะ’ั‹ะฑะตั€ะธั‚ะต ะณะพั€ะพะด", 
                  reply_markup = IKM)
}

# ะผะตั‚ะพะด ะดะปั ัะพะพะฑั‰ะตะฝะธั ะฟะพะณะพะดั‹
answer_cb <- function(bot, update) {

  # ะฟะพะปัƒั‡ะฐะตะผ ะธะท ัะพะพะฑั‰ะตะฝะธั ะณะพั€ะพะด
  city <- update$callback_query$data

  # ะพั‚ะฟั€ะฐะฒะปัะตะผ ะทะฐะฟั€ะพั
  ans <- GET('https://api.openweathermap.org/data/2.5/weather', 
             query = list(q     = city,
                          lang  = 'ru',
                          units = 'metric',
                          appid = '4776568ccea136ffe4cda9f1969af340')) 

  # ะฟะฐั€ัะธะผ ะพั‚ะฒะตั‚
  result <- content(ans)

  # ั„ะพั€ะผะธั€ัƒะตะผ ัะพะพะฑั‰ะตะฝะธะต
  msg <- str_glue("{result$name} ะฟะพะณะพะดะฐ:n",
                  "ะขะตะบัƒั‰ะฐั ั‚ะตะผะฟะตั€ะฐั‚ัƒั€ะฐ: {result$main$temp}n",
                  "ะกะบะพั€ะพัั‚ัŒ ะฒะตั‚ั€ะฐ: {result$wind$speed}n",
                  "ะžะฟะธัะฐะฝะธะต: {result$weather[[1]]$description}")

  # ะพั‚ะฟั€ะฐะฒะปัะตะผ ะธะฝั„ะพั€ะผะฐั†ะธัŽ ะพ ะฟะพะณะพะดะต
  bot$sendMessage(chat_id = update$from_chat_id(),
                  text    = msg)

  bot$answerCallbackQuery(callback_query_id = update$callback_query$id) 
}

# ัะพะทะดะฐั‘ะผ ั„ะธะปัŒั‚ั€ั‹
## ัะพะพะฑั‰ะตะฝะธั ั ั‚ะตะบัั‚ะพะผ ะŸะพะณะพะดะฐ
MessageFilters$weather <- BaseFilter(function(message) {

  # ะฟั€ะพะฒะตั€ัะตะผ ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั
  message$text == "ะŸะพะณะพะดะฐ"

}
)

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ
h_start         <- CommandHandler('start', start)
h_weather       <- MessageHandler(weather, filters = MessageFilters$weather)
h_query_handler <- CallbackQueryHandler(answer_cb)

# ะดะพะฑะฐะฒะปัะตะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ ะฒ ะดะธัะฟะตั‚ั‡ะตั€
updater <- updater + 
              h_start +
              h_weather +
              h_query_handler

# ะทะฐะฟัƒัะบะฐะตะผ ะฑะพั‚ะฐ
updater$start_polling()

'เจคเฉเจนเจพเจกเฉ‡ เจฌเฉ‹เจŸ เจŸเฉ‹เจ•เจจ' เจจเฉ‚เฉฐ เจ…เจธเจฒ เจŸเฉ‹เจ•เจจ เจจเจพเจฒ เจฌเจฆเจฒเจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‰เจชเจฐเฉ‹เจ•เจค เจ•เฉ‹เจก เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจšเจฒเจพเจ“, เจœเจฟเจธ เจฐเจพเจนเฉ€เจ‚ เจคเฉเจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจธเฉ€ เจฌเฉ‹เจŸเจซเฉˆเจฆเจฐ (เจฎเฉˆเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€ เจชเจนเจฟเจฒเจพ เจฒเฉ‡เจ–).

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจธเจพเจกเจพ เจฌเฉ‹เจŸ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจ•เฉฐเจฎ เจ•เจฐเฉ‡เจ—เจพ:
เจ†เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ (เจญเจพเจ— 3): เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจนเจพเจ‡เจคเจพ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡

เจฏเฉ‹เจœเจจเจพเจฌเฉฑเจง เจคเฉŒเจฐ 'เจคเฉ‡, เจ‡เจธ เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฐเจธเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:
เจ†เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ (เจญเจพเจ— 3): เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจนเจพเจ‡เจคเจพ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡

เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจฎเฉŒเจธเจฎ เจฌเฉ‹เจŸ เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจ‰เจชเจฒเจฌเจง 3 เจคเจฐเฉ€เจ•เฉ‡ เจฌเจฃเจพเจ เจนเจจ:

  • เจธเจผเฉเจฐเฉ‚ - เจฎเฉเฉฑเจ– เจฌเฉ‹เจŸ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฒเจพเจ‚เจš เจ•เจฐเฉ‹
  • เจฎเฉŒเจธเจฎ โ€” เจ‡เฉฑเจ• เจธเจผเจนเจฟเจฐ เจšเฉเจฃเจจ เจฒเจˆ เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจฒเจพเจ‚เจš เจ•เจฐเฉ‹
  • เจœเจตเจพเจฌ_เจธเฉ€เจฌเฉ€ - เจฎเฉเฉฑเจ– เจคเจฐเฉ€เจ•เจพ เจœเฉ‹ เจ•เจฟเจธเฉ‡ เจฆเจฟเฉฑเจคเฉ‡ เจธเจผเจนเจฟเจฐ เจฒเจˆ API เจคเฉ‹เจ‚ เจฎเฉŒเจธเจฎ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจšเฉˆเจŸ เจตเจฟเฉฑเจš เจญเฉ‡เจœเจฆเจพ เจนเฉˆเฅค

.เฉฐเจ— เจธเจผเฉเจฐเฉ‚ เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ /start, เจœเฉ‹ เจนเฉˆเจ‚เจกเจฒเจฐ เจฆเฉเจ†เจฐเจพ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ CommandHandler('start', start).

เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ เจฎเฉŒเจธเจฎ เจ…เจธเฉ€เจ‚ เจ‰เจธเฉ‡ เจจเจพเจฎ เจฆเจพ เจ‡เฉฑเจ• เจซเจฟเจฒเจŸเจฐ เจฌเจฃเจพเจ‡เจ† เจนเฉˆ:

# ัะพะทะดะฐั‘ะผ ั„ะธะปัŒั‚ั€ั‹
## ัะพะพะฑั‰ะตะฝะธั ั ั‚ะตะบัั‚ะพะผ ะŸะพะณะพะดะฐ
MessageFilters$weather <- BaseFilter(function(message) {

  # ะฟั€ะพะฒะตั€ัะตะผ ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั
  message$text == "ะŸะพะณะพะดะฐ"

}
)

เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เจธ เจตเจฟเจงเฉ€ เจจเฉ‚เฉฐ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจธเฉฐเจฆเฉ‡เจธเจผ เจนเฉˆเจ‚เจกเจฒเจฐ เจจเจพเจฒ เจ•เจพเจฒ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚: MessageHandler(weather, filters = MessageFilters$weather).

เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš, เจธเจพเจกเจพ เจฎเฉเฉฑเจ– เจคเจฐเฉ€เจ•เจพ เจœเจตเจพเจฌ_เจธเฉ€เจฌเฉ€ เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจ เจฆเจฌเจพเจ‰เจฃ 'เจคเฉ‡ เจชเฉเจฐเจคเฉ€เจ•เจฟเจฐเจฟเจ† เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจนเฉˆเจ‚เจกเจฒเจฐ เจฆเฉเจ†เจฐเจพ เจฒเจพเจ—เฉ‚ เจ•เฉ€เจคเจพ เจœเจพเจ‚เจฆเจพ เจนเฉˆ: CallbackQueryHandler(answer_cb).

เจ‡เฉฑเจ• เจขเฉฐเจ— เจฆเฉ‡ เจ…เฉฐเจฆเจฐ เจœเจตเจพเจฌ_เจธเฉ€เจฌเฉ€, เจ…เจธเฉ€เจ‚ เจ•เฉ€เจฌเฉ‹เจฐเจก เจคเฉ‹เจ‚ เจญเฉ‡เจœเฉ‡ เจ—เจ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจชเฉœเฉเจนเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฆเฉ‡ เจนเจพเจ‚ city: city <- update$callback_query$data. เจซเจฟเจฐ เจ…เจธเฉ€เจ‚ API เจคเฉ‹เจ‚ เจฎเฉŒเจธเจฎ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ‡เฉฑเจ• เจธเฉเจจเฉ‡เจนเจพ เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจญเฉ‡เจœเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจตเจฟเจงเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ answerCallbackQuery เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจธเฉ‚เจšเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจ เจฆเฉ‡ เจ•เจฒเจฟเจ• เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เฉ€เจคเฉ€ เจนเฉˆเฅค

เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจœเฉ‹ เจจเจฟเจธเจผเจšเจฟเจค เจนเฉฑเจฌ เจฆเฉ‡ เจฒเจฟเฉฐเจ•เจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจจเจตเฉ€เจจเจคเจฎ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ www.habr.com.

เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจฆเจฟเจ–เจพเจ‰เจฃ เจฒเจˆ เจ‡เจน เจฌเฉ‹เจŸ เจชเฉ‡เจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจ‡เจจเจฒเจพเจˆเจจ เจฌเจŸเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจจเจพ เจนเฉˆ เจœเฉ‹ เจตเฉˆเฉฑเจฌ เจชเฉฐเจจเจฟเจ†เจ‚ 'เจคเฉ‡ เจฒเฉˆ เจœเจพเจ‚เจฆเฉ‡ เจนเจจเฅค

เจ‡เจธ เจฌเฉ‹เจŸ เจฆเจพ เจคเจฐเจ• เจชเจฟเจ›เจฒเฉ‡ เจ‡เฉฑเจ• เจตเจฐเจ—เจพ เจนเฉˆ; เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจจเจพเจฒ เจฎเฉเฉฑเจ– เจ•เฉ€เจฌเฉ‹เจฐเจก เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ /start. เจ…เฉฑเจ—เฉ‡, เจฌเฉ‹เจŸ เจธเจพเจจเฉ‚เฉฐ เจšเฉเจฃเจจ เจฒเจˆ 6 เจนเฉฑเจฌเจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ, เจ…เจธเฉ€เจ‚ เจ‰เจธ เจนเฉฑเจฌ เจจเฉ‚เฉฐ เจšเฉเจฃเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจฆเจฟเจฒเจšเจธเจชเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจšเฉเจฃเฉ‡ เจนเฉ‹เจ เจนเฉฑเจฌ เจคเฉ‹เจ‚ 5 เจธเจญ เจคเฉ‹เจ‚ เจคเจพเจœเจผเจพ เจชเฉเจฐเจ•เจพเจธเจผเจจ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจธเจฎเจเจฆเฉ‡ เจนเฉ‹, เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจธเจพเจจเฉ‚เฉฐ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡ habR, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจนเจพเจฌเจฐเจพ เจคเฉ‹เจ‚ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจฌเฉ‡เจจเจคเฉ€ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ 'เจคเฉ‡ เจ•เฉเจ เจ…เฉฐเจ•เฉœเฉ‡ เจ†เจฐ.

เจชเฉˆเจ•เฉ‡เจœ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹ habR เจธเจฟเจฐเจซ github เจคเฉ‹เจ‚ เจธเฉฐเจญเจต เจนเฉˆ, เจœเจฟเจธ เจฒเจˆ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจพเจงเฉ‚ เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ€ เจฒเฉ‹เฉœ เจชเจตเฉ‡เจ—เฉ€ devtools. เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจ เจฒเจˆ, เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจ•เฉ‹เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹เฅค

install.packages('devtools')
devtools::install_github('selesnow/habR')

เจนเฉเจฃ เจ‰เฉฑเจชเจฐ เจฆเฉฑเจธเฉ‡ เจฌเฉ‹เจŸ เจจเฉ‚เฉฐ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจตเฉ‡เจ–เฉ€เจ:

เจ•เฉ‹เจก 5: เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจœเฉ‹ เจšเฉเจฃเฉ‡ เจ—เจ เจนเฉฑเจฌ 'เจคเฉ‡ เจธเจญ เจคเฉ‹เจ‚ เจคเจพเจœเจผเจพ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ

library(telegram.bot)
library(habR)

# ัะพะทะดะฐั‘ะผ ัะบะทะตะผะฟะปัั€ ะบะปะฐััะฐ Updater
updater <- Updater('ะขะžะšะ•ะ ะ’ะะจะ•ะ“ะž ะ‘ะžะขะ')

# ัะพะทะดะฐั‘ะผ ะผะตั‚ะพะดั‹
## ะผะตั‚ะพะด ะดะปั ะทะฐะฟัƒัะบะฐ ะพัะฝะพะฒะฝะพะน ะบะปะฐะฒะธะฐั‚ัƒั€ั‹
start <- function(bot, update) {

  # ัะพะทะดะฐั‘ะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  RKM <- ReplyKeyboardMarkup(
    keyboard = list(
      list(
        KeyboardButton("ะกะฟะธัะพะบ ัั‚ะฐั‚ะตะน")
      )
    ),
    resize_keyboard = TRUE,
    one_time_keyboard = TRUE
  )

  # ะพั‚ะฟั€ะฐะฒะปัะตะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  bot$sendMessage(update$message$chat_id,
                  text = 'ะ’ั‹ะฑะตั€ะธั‚ะต ะบะพะผะฐะฝะดัƒ', 
                  reply_markup = RKM)

}

## ะœะตั‚ะพะด ะฒั‹ะทะพะฒะฐ Inine ะบะปะฐะฒะธะฐั‚ัƒั€ั‹
habs <- function(bot, update) {

  IKM <- InlineKeyboardMarkup(
    inline_keyboard = list(
      list(
        InlineKeyboardButton(text = 'R', callback_data = 'R'),
        InlineKeyboardButton(text = 'Data Mining', callback_data = 'data_mining'),
        InlineKeyboardButton(text = 'Data Engineering', callback_data = 'data_engineering')
      ),
      list(
        InlineKeyboardButton(text = 'Big Data', callback_data = 'bigdata'),
        InlineKeyboardButton(text = 'Python', callback_data = 'python'),
        InlineKeyboardButton(text = 'ะ’ะธะทัƒะฐะปะธะทะฐั†ะธั ะดะฐะฝะฝั‹ั…', callback_data = 'data_visualization')
      )
    )
  )

  # Send Inline Keyboard
  bot$sendMessage(chat_id = update$message$chat_id, 
                  text = "ะ’ั‹ะฑะตั€ะธั‚ะต ะฅะฐะฑ", 
                  reply_markup = IKM)
}

# ะผะตั‚ะพะด ะดะปั ัะพะพะฑั‰ะตะฝะธั ะฟะพะณะพะดั‹
answer_cb <- function(bot, update) {

  # ะฟะพะปัƒั‡ะฐะตะผ ะธะท ัะพะพะฑั‰ะตะฝะธั ะณะพั€ะพะด
  hub <- update$callback_query$data

  # ัะพะพะฑั‰ะตะฝะธะต ะพ ั‚ะพะผ, ั‡ั‚ะพ ะดะฐะฝะฝั‹ะต ะฟะพ ะบะฝะพะฟะบะต ะฟะพะปัƒั‡ะตะฝั‹
  bot$answerCallbackQuery(callback_query_id = update$callback_query$id, 
                          text = 'ะŸะพะดะพะถะดะธั‚ะต ะฝะตัะบะพะปัŒะบะพ ะผะธะฝัƒั‚, ะทะฐะฟั€ะพั ะพะฑั€ะฐะฑะฐั‚ั‹ะฒะฐะตั‚ัั') 

  # ัะพะพะฑั‰ะตะฝะธะต ะพ ั‚ะพะผ, ั‡ั‚ะพ ะฝะฐะดะพ ะฟะพะดะพะถะดะฐั‚ัŒ ะฟะพะบะฐ ะฑะพั‚ ะฟะพะปัƒั‡ะธั‚ ะดะฐะฝะฝั‹ะต
  mid <- bot$sendMessage(chat_id = update$from_chat_id(),
                         text    = "ะŸะพะดะพะถะดะธั‚ะต ะฝะตัะบะพะปัŒะบะพ ะผะธะฝัƒั‚ ะฟะพะบะฐ, ั ัะพะฑะตั€ัƒ ะดะฐะฝะฝั‹ะต ะฟะพ ะฒั‹ะฑั€ะฐะฝะฝะพะผัƒ ะฅะฐะฑัƒ")

  # ะฟะฐั€ัะธะผ ะฅะฐะฑั€
  posts <- head(habr_hub_posts(hub, 1), 5)

  # ัƒะดะฐะปัะตะผ ัะพะพะฑั‰ะตะฝะธะต ะพ ั‚ะพะผ, ั‡ั‚ะพ ะฝะฐะดะพ ะฟะพะดะพะถะดะฐั‚ัŒ
  bot$deleteMessage(update$from_chat_id(), mid$message_id) 

  # ั„ะพั€ะผะธั€ัƒะตะผ ัะฟะธัะพะบ ะบะฝะพะฟะพะบ
  keys <- lapply(1:5, function(x) list(InlineKeyboardButton(posts$title[x], url = posts$link[x])))

  # ั„ะพั€ะผะธั€ัƒะตะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  IKM <- InlineKeyboardMarkup(
    inline_keyboard =  keys 
    )

  # ะพั‚ะฟั€ะฐะฒะปัะตะผ ะธะฝั„ะพั€ะผะฐั†ะธัŽ ะพ ะฟะพะณะพะดะต
  bot$sendMessage(chat_id = update$from_chat_id(),
                  text    = paste0("5 ะฝะฐะธะฑะพะปะตะต ัะฒะตะถะธั… ัั‚ะฐั‚ะตะน ะธะท ะฅะฐะฑะฐ ", hub),
                  reply_markup = IKM)

}

# ัะพะทะดะฐั‘ะผ ั„ะธะปัŒั‚ั€ั‹
## ัะพะพะฑั‰ะตะฝะธั ั ั‚ะตะบัั‚ะพะผ ะŸะพะณะพะดะฐ
MessageFilters$hubs <- BaseFilter(function(message) {

  # ะฟั€ะพะฒะตั€ัะตะผ ั‚ะตะบัั‚ ัะพะพะฑั‰ะตะฝะธั
  message$text == "ะกะฟะธัะพะบ ัั‚ะฐั‚ะตะน"

}
)

# ัะพะทะดะฐั‘ะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ
h_start         <- CommandHandler('start', start)
h_hubs          <- MessageHandler(habs, filters = MessageFilters$hubs)
h_query_handler <- CallbackQueryHandler(answer_cb)

# ะดะพะฑะฐะฒะปัะตะผ ะพะฑั€ะฐะฑะพั‚ั‡ะธะบะธ ะฒ ะดะธัะฟะตั‚ั‡ะตั€
updater <- updater + 
  h_start +
  h_hubs  +
  h_query_handler

# ะทะฐะฟัƒัะบะฐะตะผ ะฑะพั‚ะฐ
updater$start_polling()

'เจคเฉเจนเจพเจกเฉ‡ เจฌเฉ‹เจŸ เจŸเฉ‹เจ•เจจ' เจจเฉ‚เฉฐ เจ…เจธเจฒ เจŸเฉ‹เจ•เจจ เจจเจพเจฒ เจฌเจฆเจฒเจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจ‰เจชเจฐเฉ‹เจ•เจค เจ•เฉ‹เจก เจฆเฉ€ เจ‰เจฆเจพเจนเจฐเจจ เจšเจฒเจพเจ“, เจœเจฟเจธ เจฐเจพเจนเฉ€เจ‚ เจคเฉเจธเฉ€เจ‚ เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจตเฉ‡เจฒเฉ‡ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพ เจธเฉ€ เจฌเฉ‹เจŸเจซเฉˆเจฆเจฐ (เจฎเฉˆเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจฌเจฃเจพเจ‰เจฃ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เฉ€เจคเฉ€ เจชเจนเจฟเจฒเจพ เจฒเฉ‡เจ–).

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจธเจพเจจเฉ‚เฉฐ เจ‡เจน เจจเจคเฉ€เจœเจพ เจฎเจฟเจฒเฉ‡เจ—เจพ:
เจ†เจฐ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจŸเฉˆเจฒเฉ€เจ—เฉเจฐเจพเจฎ เจฌเฉ‹เจŸ เจฒเจฟเจ–เจฃเจพ (เจญเจพเจ— 3): เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจตเจฟเฉฑเจš เจ•เฉ€เจฌเฉ‹เจฐเจก เจธเจนเจพเจ‡เจคเจพ เจ•เจฟเจตเฉ‡เจ‚ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡

เจ…เจธเฉ€เจ‚ เจตเจฟเจงเฉ€ เจตเจฟเฉฑเจš เจšเฉ‹เจฃ เจฒเจˆ เจ‰เจชเจฒเจฌเจง เจนเฉฑเจฌเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจนเจพเจฐเจกเจ•เฉ‹เจก เจ•เฉ€เจคเจพ เจนเฉˆ habs:

## ะœะตั‚ะพะด ะฒั‹ะทะพะฒะฐ Inine ะบะปะฐะฒะธะฐั‚ัƒั€ั‹
habs <- function(bot, update) {

  IKM <- InlineKeyboardMarkup(
    inline_keyboard = list(
      list(
        InlineKeyboardButton(text = 'R', callback_data = 'r'),
        InlineKeyboardButton(text = 'Data Mining', callback_data = 'data_mining'),
        InlineKeyboardButton(text = 'Data Engineering', callback_data = 'data_engineering')
      ),
      list(
        InlineKeyboardButton(text = 'Big Data', callback_data = 'bigdata'),
        InlineKeyboardButton(text = 'Python', callback_data = 'python'),
        InlineKeyboardButton(text = 'ะ’ะธะทัƒะฐะปะธะทะฐั†ะธั ะดะฐะฝะฝั‹ั…', callback_data = 'data_visualization')
      )
    )
  )

  # Send Inline Keyboard
  bot$sendMessage(chat_id = update$message$chat_id, 
                  text = "ะ’ั‹ะฑะตั€ะธั‚ะต ะฅะฐะฑ", 
                  reply_markup = IKM)
}

เจธเจพเจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจก เจฆเฉ‡ เจจเจพเจฒ เจจเจฟเจฐเจงเจพเจฐเจค เจนเฉฑเจฌ เจคเฉ‹เจ‚ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฎเจฟเจฒเจฆเฉ€ เจนเฉˆ habr_hub_posts(), เจชเฉˆเจ•เฉ‡เจœ เจคเฉ‹เจ‚ habR. เจ‰เจธเฉ‡ เจธเจฎเฉ‡เจ‚, เจ…เจธเฉ€เจ‚ เจฆเฉฑเจธเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจธเจพเจจเฉ‚เฉฐ เจชเฉ‚เจฐเฉ‡ เจธเจฎเฉ‡เจ‚ เจฒเจˆ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ, เจชเจฐ เจธเจฟเจฐเจซเจผ เจชเจนเจฟเจฒเฉ‡ เจชเฉฐเจจเฉ‡ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจœเจฟเจธ 'เจคเฉ‡ 20 เจฒเฉ‡เจ– เจธเจฅเจฟเจค เจนเจจเฅค เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจจเจคเฉ€เจœเฉ‡ เจธเจพเจฐเจฃเฉ€ เจคเฉ‹เจ‚ head() เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซเจผ เจšเฉ‹เจŸเฉ€ เจฆเฉ‡ 5 เจจเฉ‚เฉฐ เจ›เฉฑเจกเจฆเฉ‡ เจนเจพเจ‚, เจœเฉ‹ เจ•เจฟ เจธเจญ เจคเฉ‹เจ‚ เจคเจพเจœเจผเจพ เจฒเฉ‡เจ– เจนเจจเฅค

  # ะฟะฐั€ัะธะผ ะฅะฐะฑั€
  posts <- head(habr_hub_posts(hub, 1), 5)

เจคเจฐเจ• เจชเจฟเจ›เจฒเฉ‡ เจฌเฉ‹เจŸ เจฆเฉ‡ เจธเจฎเจพเจจ เจนเฉˆ, เจชเจฐ เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจซเฉฐเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ เจ†เจฐเจŸเฉ€เจ•เจฒ เจฆเฉ€ เจ‡เฉฑเจ• เจธเฉ‚เจšเฉ€ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจ‡เจจเจฒเจพเจˆเจจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ lapply().

  # ั„ะพั€ะผะธั€ัƒะตะผ ัะฟะธัะพะบ ะบะฝะพะฟะพะบ
  keys <- lapply(1:5, function(x) list(InlineKeyboardButton(posts$title[x], url = posts$link[x])))

  # ั„ะพั€ะผะธั€ัƒะตะผ ะบะปะฐะฒะธะฐั‚ัƒั€ัƒ
  IKM <- InlineKeyboardMarkup(
    inline_keyboard =  keys 
    )

เจ…เจธเฉ€เจ‚ เจฒเฉ‡เจ– เจฆเจพ เจธเจฟเจฐเจฒเฉ‡เจ– เจฌเจŸเจจ เจŸเฉˆเจ•เจธเจŸ เจตเจฟเฉฑเจš เจชเจพ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ posts$title[x], เจ…เจคเฉ‡ เจฆเจฒเฉ€เจฒ เจตเจฟเฉฑเจš url เจฒเฉ‡เจ– เจฆเจพ เจฒเจฟเฉฐเจ•: url = posts$link[x].

เจ…เฉฑเจ—เฉ‡, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจซเจฟเจฒเจŸเจฐ, เจนเฉˆเจ‚เจกเจฒเจฐ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ†เจชเจฃเจพ เจฌเฉ‹เจŸ เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

เจธเจฟเฉฑเจŸเจพ

เจนเฉเจฃ เจœเฉ‹ เจฌเฉ‹เจŸ เจคเฉเจธเฉ€เจ‚ เจฒเจฟเจ–เจฆเฉ‡ เจนเฉ‹, เจ‰เจน เจตเจฐเจคเจฃ เจฒเจˆ เจฌเจนเฉเจค เจœเจผเจฟเจ†เจฆเจพ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉ‹เจฃเจ—เฉ‡, เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจ•เจพเจฐเจจ เจ•เจฟ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฆเจฐเจœ เจ•เจฐเจจ เจฆเฉ€ เจฌเจœเจพเจ เจ•เฉ€เจฌเฉ‹เจฐเจก เจคเฉ‹เจ‚ เจจเจฟเจฏเฉฐเจคเจฐเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ, เจœเจฆเฉ‹เจ‚ เจ‡เฉฑเจ• เจธเจฎเจพเจฐเจŸเจซเจผเฉ‹เจจ เจฐเจพเจนเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจจเจพเจฒ เจ—เฉฑเจฒเจฌเจพเจค เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ•เฉ€เจฌเฉ‹เจฐเจก เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจ•เจพเจซเจผเฉ€ เจธเจฐเจฒ เจฌเจฃเจพ เจฆเฉ‡เจตเฉ‡เจ—เจพเฅค

เจ…เจ—เจฒเฉ‡ เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ‡เจน เจชเจคเจพ เจฒเจ—เจพเจตเจพเจ‚เจ—เฉ‡ เจ•เจฟ เจ‡เฉฑเจ• เจฌเฉ‹เจŸ เจจเจพเจฒ เจ‡เฉฑเจ• เจฒเจพเจœเจผเฉ€เจ•เจฒ เจกเจพเจ‡เจฒเจพเจ— เจ•เจฟเจตเฉ‡เจ‚ เจฌเจฃเจพเจ‡เจ† เจœเจพเจตเฉ‡ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจ•เฉฐเจฎ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹