R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಬರೆಯುವುದು (ಭಾಗ 3): ಬೋಟ್‌ಗೆ ಕೀಬೋರ್ಡ್ ಬೆಂಬಲವನ್ನು ಹೇಗೆ ಸೇರಿಸುವುದು

"R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬಾಟ್ ಅನ್ನು ಬರೆಯುವುದು" ಸರಣಿಯಲ್ಲಿ ಇದು ಮೂರನೇ ಲೇಖನವಾಗಿದೆ. ಹಿಂದಿನ ಪ್ರಕಟಣೆಗಳಲ್ಲಿ, ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಅನ್ನು ಹೇಗೆ ರಚಿಸುವುದು, ಅದರ ಮೂಲಕ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸುವುದು, ಕಮಾಂಡ್‌ಗಳು ಮತ್ತು ಸಂದೇಶ ಫಿಲ್ಟರ್‌ಗಳನ್ನು ಬೋಟ್‌ಗೆ ಸೇರಿಸುವುದು ಹೇಗೆ ಎಂದು ನಾವು ಕಲಿತಿದ್ದೇವೆ. ಆದ್ದರಿಂದ, ನೀವು ಈ ಲೇಖನವನ್ನು ಓದುವುದನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ನೀವು ಓದಲು ನಾನು ಹೆಚ್ಚು ಶಿಫಾರಸು ಮಾಡುತ್ತೇವೆ ಹಿಂದಿನ, ಏಕೆಂದರೆ ಇಲ್ಲಿ ನಾನು ಇನ್ನು ಮುಂದೆ ಬೋಟ್ ಕಟ್ಟಡದ ಹಿಂದೆ ವಿವರಿಸಿದ ಮೂಲಭೂತ ಅಂಶಗಳ ಮೇಲೆ ವಾಸಿಸುವುದಿಲ್ಲ.

ಈ ಲೇಖನದಲ್ಲಿ, ನಾವು ಕೀಬೋರ್ಡ್ ಅನ್ನು ಸೇರಿಸುವ ಮೂಲಕ ನಮ್ಮ ಬೋಟ್‌ನ ಉಪಯುಕ್ತತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತೇವೆ, ಇದು ಬೋಟ್ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಅರ್ಥಗರ್ಭಿತ ಮತ್ತು ಬಳಸಲು ಸುಲಭಗೊಳಿಸುತ್ತದೆ.

R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಬರೆಯುವುದು (ಭಾಗ 3): ಬೋಟ್‌ಗೆ ಕೀಬೋರ್ಡ್ ಬೆಂಬಲವನ್ನು ಹೇಗೆ ಸೇರಿಸುವುದು

"R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬಾಟ್ ಅನ್ನು ಬರೆಯುವುದು" ಸರಣಿಯ ಎಲ್ಲಾ ಲೇಖನಗಳು

  1. ನಾವು ಬೋಟ್ ಅನ್ನು ರಚಿಸುತ್ತೇವೆ ಮತ್ತು ಟೆಲಿಗ್ರಾಮ್ನಲ್ಲಿ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಅದನ್ನು ಬಳಸುತ್ತೇವೆ
  2. ಬೋಟ್‌ಗೆ ಕಮಾಂಡ್ ಬೆಂಬಲ ಮತ್ತು ಸಂದೇಶ ಫಿಲ್ಟರ್‌ಗಳನ್ನು ಸೇರಿಸಿ
  3. ಬೋಟ್‌ಗೆ ಕೀಬೋರ್ಡ್ ಬೆಂಬಲವನ್ನು ಹೇಗೆ ಸೇರಿಸುವುದು

ಪರಿವಿಡಿ

ನೀವು ಡೇಟಾ ವಿಶ್ಲೇಷಣೆಯಲ್ಲಿ ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ನೀವು ನನ್ನ ಬಗ್ಗೆ ಆಸಕ್ತಿ ಹೊಂದಿರಬಹುದು ಟೆಲಿಗ್ರಾಮ್ и YouTube ವಾಹಿನಿಗಳು. ಹೆಚ್ಚಿನ ವಿಷಯವನ್ನು R ಭಾಷೆಗೆ ಮೀಸಲಿಡಲಾಗಿದೆ.

  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, ಏಕೆಂದರೆ ಕೀಬೋರ್ಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ನಾವು ನಿಖರವಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಿದ್ದೇವೆ.

R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಬರೆಯುವುದು (ಭಾಗ 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
)

R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಬರೆಯುವುದು (ಭಾಗ 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()

ಈ ಮೂಲಕ ಬೋಟ್ ರಚಿಸುವಾಗ ನೀವು ಸ್ವೀಕರಿಸಿದ ನಿಜವಾದ ಟೋಕನ್‌ನೊಂದಿಗೆ 'ನಿಮ್ಮ ಬಾಟ್ ಟೋಕನ್' ಅನ್ನು ಬದಲಿಸಿದ ನಂತರ ಮೇಲಿನ ಕೋಡ್ ಉದಾಹರಣೆಯನ್ನು ರನ್ ಮಾಡಿ ಬೋಟ್ಫೆದರ್ (ನಾನು ಬೋಟ್ ಅನ್ನು ರಚಿಸುವ ಬಗ್ಗೆ ಮಾತನಾಡಿದ್ದೇನೆ ಮೊದಲ ಲೇಖನ).

ಫಲಿತಾಂಶ:
R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಬರೆಯುವುದು (ಭಾಗ 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()

ಈ ಮೂಲಕ ಬೋಟ್ ರಚಿಸುವಾಗ ನೀವು ಸ್ವೀಕರಿಸಿದ ನಿಜವಾದ ಟೋಕನ್‌ನೊಂದಿಗೆ 'ನಿಮ್ಮ ಬಾಟ್ ಟೋಕನ್' ಅನ್ನು ಬದಲಿಸಿದ ನಂತರ ಮೇಲಿನ ಕೋಡ್ ಉದಾಹರಣೆಯನ್ನು ರನ್ ಮಾಡಿ ಬೋಟ್ಫೆದರ್ (ನಾನು ಬೋಟ್ ಅನ್ನು ರಚಿಸುವ ಬಗ್ಗೆ ಮಾತನಾಡಿದ್ದೇನೆ ಮೊದಲ ಲೇಖನ).

ಪರಿಣಾಮವಾಗಿ, ನಮ್ಮ ಬೋಟ್ ಈ ರೀತಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ:
R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಬರೆಯುವುದು (ಭಾಗ 3): ಬೋಟ್‌ಗೆ ಕೀಬೋರ್ಡ್ ಬೆಂಬಲವನ್ನು ಹೇಗೆ ಸೇರಿಸುವುದು

ಕ್ರಮಬದ್ಧವಾಗಿ, ಈ ಬೋಟ್ ಅನ್ನು ಈ ರೀತಿ ಚಿತ್ರಿಸಬಹುದು:
R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಬರೆಯುವುದು (ಭಾಗ 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, ಇದು ನಿಮಗೆ ಹಬ್ರಾದಿಂದ ಲೇಖನಗಳನ್ನು ವಿನಂತಿಸಲು ಮತ್ತು R ನಲ್ಲಿ ಅವುಗಳ ಕುರಿತು ಕೆಲವು ಅಂಕಿಅಂಶಗಳನ್ನು ವಿನಂತಿಸಲು ಅನುಮತಿಸುತ್ತದೆ.

ಪ್ಯಾಕೇಜ್ ಅನ್ನು ಸ್ಥಾಪಿಸಿ habR ಗಿಥಬ್‌ನಿಂದ ಮಾತ್ರ ಸಾಧ್ಯ, ಇದಕ್ಕಾಗಿ ನಿಮಗೆ ಹೆಚ್ಚುವರಿ ಪ್ಯಾಕೇಜ್ ಅಗತ್ಯವಿದೆ 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()

ಈ ಮೂಲಕ ಬೋಟ್ ರಚಿಸುವಾಗ ನೀವು ಸ್ವೀಕರಿಸಿದ ನಿಜವಾದ ಟೋಕನ್‌ನೊಂದಿಗೆ 'ನಿಮ್ಮ ಬಾಟ್ ಟೋಕನ್' ಅನ್ನು ಬದಲಿಸಿದ ನಂತರ ಮೇಲಿನ ಕೋಡ್ ಉದಾಹರಣೆಯನ್ನು ರನ್ ಮಾಡಿ ಬೋಟ್ಫೆದರ್ (ನಾನು ಬೋಟ್ ಅನ್ನು ರಚಿಸುವ ಬಗ್ಗೆ ಮಾತನಾಡಿದ್ದೇನೆ ಮೊದಲ ಲೇಖನ).

ಪರಿಣಾಮವಾಗಿ, ನಾವು ಈ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯುತ್ತೇವೆ:
R ನಲ್ಲಿ ಟೆಲಿಗ್ರಾಮ್ ಬೋಟ್ ಬರೆಯುವುದು (ಭಾಗ 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

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ