Шлем заявки с сайтов на Ruby в Telegram-чаты

--

Письма идут долго — до 7 минут. СМСки стоят по 2–5 руб. за штуку. Подключать CRM — иногда перебор. Выход? Бот на руби, отправляющий заявки в телеграм-чат менеджерам.

Как настроить? Читайте в статье.

UPD 25/08/2017: Поправил код в примерах.

Создаем чат в телеграме

Для создания нужно выбрать хотя бы одного участника кроме вас. Можете выбрать любого из знакомых, создать чат и удалить знакомого. Далее:

  1. Конвертируем чат в супергруппу;
  2. Добавляем бота @get_id_bot;
  3. Пишем в чат /my_id ;
  4. Читаем сообщение от бота, находим в нем ID чата, сохраняем ID;
  5. Удаляем бота.

Создаем бота для отправки заявок

Создаем через @botfather. Как — описано здесь .

Один такой бот может обслуживать много чатов с разных проектов. Имя и аватар выберите по вкусу, у меня бот такой:

Добавляем бота в созданный чат

Давать боту права администратора не нужно. Никаких дополнительных прав — тоже.

Устанавливаем телеграм-клиент на сервер

Суть такая:

  • На сервере живет нативный телеграм-клиент;
  • В руби проекте — тонкий руби гем;
  • Командуем в руби проекте гему отправить сообщение — он дает команду телеграм-клиенту, а тот — отправляет сообщение в чат через бота.

Инструкция по установке: https://github.com/atipugin/telegram-bot-ruby

Копируем в проект ключи

TELEGRAM_BOT_TOKEN: '123123123123123123123'
TELEGRAM_CHAT_ID: '-123123123'

Копируем туда же, где у вас лежат все credentials. В ENV-переменные, например. Я использую figaro.

Где брать значения ключей:

  • TELEGRAM_BOT_TOKEN - токен бота с шага 2 (получаем через @botfather);
  • TELEGRAM_CHAT_ID - ID чата с шага 1.

Формируем нотификаторы в проекте

На самом деле вы уже можете отправлять сообщения командами на руби. Но чтобы делать удобной отправку заявок (с форматируемым текстом, DRY) — мы напишем пару классов. Пример учитывает, что у вас — Ruby on Rails, но не обязывает сидеть на нем. Если у вас не RoR — адаптируйте решение под ваш фреймворк.

Базовый класс. Обращается к телеграм-гему и просит отправить сообщение. Какое именно — за это отвечает метод render_message. Кладем файл в папку app/notifiers, и рельса подгружает его автоматически.

Пример нотификатора по заявкам с сайта (модель SiteRequest ). Наследуемся от TelegramNotifier. При создании передаем внутрь запись модели. В render_message — рендерим сообщение. В итоге в телеграм-чат придет подобное сообщение:

Заявка на сайте
masha_malasha@mail.ru

Знаете, чем дополнить статью?

Пишите в комментариях, или у нас в чате. И подписывайтесь на канал в телеграме, чтобы быть в курсе новых статей.

--

--

Виталий Емельянцев

Программист, дизайнер, предприниматель. Веду канал https://t.me/gambala_live