Как прикрепить Telegram-бота к Ruby on Rails?

Есть сайт на RoR. Есть файл telegram.rb со следующим кодом:
require 'telegram/bot'
token = 'тут-токен-бота'
Telegram::Bot::Client.run(token) do |bot|
  bot.listen do |message|
    case message.text
    when '/start'
      bot.api.sendMessage(chat_id: message.chat.id, text: "Hello, #{message.from.first_name}")
    end
  end
end


При запуске кода из консоли (ruby telegram.rb) бот работает, отвечает и тд. Хотелось бы что бы бот работал при запуске сайта - например при добавлении нового объекта модели оповещал в телеграме пользователей ну и т.д.

Не очень понимаю как правильно это все сделать - создать контроллер? И как его завязать с остальным?

Извиняюсь если вопрос глупый, в RoR совсем новичок.
  • Вопрос задан
  • 5127 просмотров
Решения вопроса 2
Jeiwan
@Jeiwan
Нужно написать сервис (app/services) для работы с ботом, сделать коллбэк у модели (например, after_create), при срабатывании коллбэка вызывать сервис и отправлять сообщение. Можно обойтись без сервиса и вызывать АПИ бота прямо в модели, но это говнокод.
А лучше использовать sidekiq и сделать воркер, чтобы сообщение в чат отправлялось в фоновом процессе и не блокировало запрос.
Ещё тут могут быть разные подводные камни, не знаю, как реализован бот, но судя по Telegram::Bot::Client.run, он блокирует поток. Поэтому надо использовать именно sidekiq и отдельный воркер.

P.S. Если будет время, постараюсь сделать приложение-пример. Самому интересно стало...

Upd
Запилил: https://github.com/Jeiwan/rails_telegram_bot Инструкция в README, используется sidekiq, сделана только отправка сообщений. Получение сообщений сделать будет труднее, т. к. там запускается бесконечный цикл.
Ответ написан
@printercu
https://github.com/telegram-bot-rb/telegram-bot еще есть, можно настроить хуки и принимать обновления в рельсовом приложении.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Biggless
Заюзайте foreman.

gem 'foreman'
в Gemfile

В корне проекта создаете Procfile с содержимым:

web: bundle exec rails s
bot: ruby telegram.rb


Запуск
foreman start
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы