Главное Свежее Вакансии Образование
Выбор редакции:
0 19 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Создаем RSS Feed бота с помощью Leecero

Привет! Сегодня мы запустили личный кабинет и в честь этого я хочу написать полноценный мануал: как с нуля создать бота для отправки себе информации из RSS.

Шаг первый. Регистрация на www.leecero.com

Самый простой шаг. Идем на сайт и жмем на кнопку Register, после чего заполняем формочку и попадаем в ЛК. Здесь мы сразу можем создать бота, что мы немедленно делаем.

b_55c3437a12b00.jpg

Шаг второй. Создание бота в Telegram

Внутри нас встречает инструкция, как создать бота в телеграм. Последуем ей.

b_55c343db5b8d6.jpg

Идем в Telegram и пишем привет BotFather

b_55c344848894b.jpgТут мы узнаем что все простые названия, типа RssBot или RssFeedBot уже заняты. Неужели и тут появились киберсквоттеры? Ну тогда хотя бы в приветствии написали бы где и как купить бота. Еще можно с помощью Leecero эту покупку автоматизировать ;)

Впрочем, имя RssyBot свободно - его и возьмем.

Мы не будем добавлять боту морфологии, сделаем поддержку простых команд. Подумав немного, мы придумываем список необходимых команд:

  • start - Start Rssy Feed bot
  • list - Show current feeds
  • add - Add new feed
  • remove - Remove old feed, call with params like "/remove 1"
  • cancel - Cancel current operation
  • stop - Stop Rssy Feed bot

И сразу скармливаем их BotFather

b_55c3458abc225.jpg

Еще добавляем описание, картинку - все эти настройки легко сделать в интерактивном режиме. И конечно сохраняем токен - он нам понадобится для подключения бота к Leecero

Шаг третий. Подключаем бота к Leecero и пишем сценарий

Тут все тоже довольно просто. Leecero просит от нас три вещи: токен полученный от BotFather, Username владельца чата для отладки и сценарий, причем заглушку сценария он уже создал

b_55c3466c6c8c8.jpg

Поэтому мы вносим все данные и начинаем писать сценарий. Сначала его стоит спроектировать, чтобы понимать как он должен выглядеть. Для этого я люблю вот этот сервис. Итак, наши предпосылки таковы:

  1. Состояние start обязательно, выход из него по команде /start
  2. Необходимо состояние из которого будут вызываться все команды
  3. Для добавления rss ссылки нужно 2 состояния: для вызова add и для передачи ссылки
  4. Нужно поддерживать команду /cancel
  5. Нужно поддерживать команду /stop для отмены рассылки и /start для повторного запуска

Рисуем!

b_55c3484e59e40.jpg

Таким образом после /start бот уходит в состояние AwaitingCommand. Из этого состояния ему доступны команды list, remove, add, stop. По команде Add будет выполнен переход в состояние AddFeed а выходом из этого состояние будет отправленная ссылка.

b_55c348f98fec5.jpgСостояние /remove требует цифру (/remove НОМЕР_ФИДА) поэтому добавим ему морфологию типа "num".

Состояние AddFeed - * должно отправить ссылку в web-service для сохранения в БД, поэтому добавим ему морфологию типа "msg".

Напомню список модификаторов морфологии которые поддерживает Leecero

  • msg - сообщение целиком
  • num - цифра или номер. отправляется первая найденная в сообщение цифра.
  • dt - дата и время
  • address - адрес
  • fio - ФИО, необходимо чтобы в сообщение были все части ФИО, иначе система не распознает его целиком

Нажимаем Save и бот готов. Уже можно слать ему сообщения и он будет отвечать. Однако пока он ничего не делает. Следующий раздел будет содержать некоторое количество кода и может быть не интересен многим на этом ресурсе. Однако он очень важен для демонстрации всех возможностей Leecero

Шаг четвертый. Пишем back-end бота на ASP.NET

Писать back-end можно на чем угодно. Я выберу ASP.NET просто потому что я его лучше знаю. В качестве back-end нам понадобиться База Данных с одной таблицей, несколько webhook для обработки команд и сервис по опросу RSS фидов

База данных

В БД нам потребуется хранить какой пользователь какой фид для себя сохранил. Структура базы данных будет максимально простая: одна таблица со следующими полями

  1. ID Чата - чтобы знать куда отправлять
  2. Имя пользователя - просто для информации
  3. Ссылка на feed
  4. Активен ли пользователь - чтобы не присылать ничего тем пользователям, которые находятся в состоянии NoData

b_55c350b37de42.jpg

Это таблица не нормализована, что не очень хорошо, так что выполним приведение к нормальным формам. Пользователей и feeds можно разделить на две таблицы и связать их связью один-ко-много. Это ускорит как опрос feedov так и рассылку данных.

Созданные таблицы выглядят следующим образом:

Webhooks для обработки команд

Вспомним список команд

  • start - Start Rssy Feed bot
  • list - Show current feeds
  • add - Add new feed
  • remove - Remove old feed, call with params like "/remove 1"
  • cancel - Cancel current operation
  • stop - Stop Rssy Feed bot

Для каждой команды нам понадобится свой webhook который будет вызван.

Если в поле action какого-либо перехода (transition) находится верная url ссылка, например http://tjnewsbot.mybluemix.net/paper, то Leecero при выполнение этого перехода выполнит GET-запрос по указанному адресу. В ответ ожидается сообщение с кодом 200 и телом в виде JSON ответа - списка сообщений для отправки пользователю. В запрос будет переданы id чата и параметры указанные в атрибуте morphology.

Не буду утомлять вас кусками кода, скажу только что я потратил ровно один час на написание backend этого бота. Класс который реализует backend выглядит вот так

b_55c35b79b4e78.jpg

Названия методов будут превращены в url адреса действий, например Add будет превращен в ссылку вида www.domain.com/api/rssy/start?id=1 где id будет идентификатором чата. Теперь мы можем опубликовать backend и поправить сценарий. В нашем случае backend будет развернут на Azure, но вы можете использовать что угодно, в т.ч. собственные сервера.

В сценарии в атрибуты action мы записываем ссылки на наши webhook'и которые будут вызваны при переходе из одного состояния в другое по action

b_55c362a01823d.jpg

Бот готов и полностью функционирует. Давайте попробуем добавить пару rss фидов

b_55c371f665e5f.jpg

Успех! Однако, пока бот ничего не присылает. Для отправки сообщения нужен сервис.

Сервис мониторинга RSS feed'ов и рассылки

Сервис мониторинга будет простым консольным приложением подключенным к веб-сервису как AzureWebJob. Он будет раз в час опрашивать все feed пользователя, формировать ему пакет сообщений и отправлять все новое за последний час в чат. Конечно не самый лучший вариант для отслеживания 1000+ источников, но для слежкой за 1-2 сайтами в самый раз.

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

  1. API Token из личного кабинет. Находится в верхней части Dashboard
    1. b_55c36b4f7a7fd.jpg
  2. Bot Token бота. Находится в Details бота
    1. b_55c36bc8d6f04.jpg
  3. Chat Id чата. Эту информацию мы собирали при добавлении пользователем ссылки в базу

После чего необходимо выполнить POST запрос следующего вида

http://leecero.com/api/chat/{API_TOKEN}/{BOT_TOKEN}/{CHAT_ID}

С телом в виде нашего сообщения в JSON.

b_55c36e581df0a.jpg

Шаг последний. Добавляем бота в каталог и радуемся.

Бот готов. Он будет раз в час присылать последние новости из выбранных RSS каналов.

b_55c37201aa285.jpg

Чтобы о нем все узнали, давайте добавим его в каталог. Есть один очень неплохой: http://storebot.me/

Добавим же нашего бота туда.

b_55c37809df95a.jpgА пока он ждет аппрува, приглашаю всех желающих попробовать бота telegram.me/RssyBot и обсудить что ему не хватает в комментариях.

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
LanguageBoost
Онлайн сервис для изучающих иностранный язык
Tihiro 17917
Все это выглядит очень муторно и непривлекательно (для непосвященных). Пользоваться кучей сервисов, писать код и делать разные другие телодвижения чтобы только получить то, что уже существует много лет (rss), неее.
Вот сделайте сервис, чтобы все то же самое можно было сделать в 2-3 клика в одном месте, вот тогда поговорим :)))
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
У меня кстати RSS используется, но чуть подругому. У меня через RSS можно создавать юзер-френдли каналы, где пользователи просто тыкают подписаться и получают пуши отфильтрованные по ключевым словам.
Тоже вполне неплохо. Вообще RSS в чистом виде - ад. Я не представляю себе как вообще можно с этим ботом работать, если там будет больше 2-3 активных лент - это же телефон будет каждый час вибрировать по каждой ерунде.
Ответить
LanguageBoost
Онлайн сервис для изучающих иностранный язык
Tihiro 17917
Так надо сделать так, чтобы этот бот был действительно ботом, то бишь роботом, а не просто тупой программой, которая по таймеру присылает ленту. Надо чтобы бот на основе предпочтений (или чего другого) отбирал только те сообщения, которые наверняка будут интересными. Вот тут есть где развернуться любителям ИИ!
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
На основе телеграма это не сделать нормально) тут надо оценивать частоту открытий и можно уже генерировать интересы человека.
Вообще меня пугает это загаженность инстаграма ботами, уже щас будут делать сайты в виде ботов, магазины в виде ботов и т.д. это уже черезчур.
Ответить
ChatFirst
Автоматизируйте поддержку сотрудников с ChatFirst
Павел Осадчук
для этого надо быть гуглом или эпплом, собирать историю посещений, запросов, метоположений пользователя, анализировать все это и подготавливать для пользователя ленту.
Это делает Google Now кстати.
Ответить
ChatFirst
Автоматизируйте поддержку сотрудников с ChatFirst
Павел Осадчук
Да вообще похоже RSS вымирает. Я не нашел RSS у нескольких крупнейших сайтов которые я постоянно читаю. Видимо авторы считают что Твиттера достаточно.
А бот конечно бесполезен (хотя я добавил пару хабов хабра), но цель статьи была не сделать бота, а продемонстрировать возможности технологий.
Ответить
ChatFirst
Автоматизируйте поддержку сотрудников с ChatFirst
Павел Осадчук
Телеграма может быть? :)
Я вообще считаю наоборот. Процитирую себя:
> Я не знаю, может быть я over-excited? Мне кажется боты Telegram это реально The Next Big Thing. Вот например в e-commerce: это же способ вернуть прямые продажи. Как раньше, торговец у ларька продавал каждому покупателю лично - так теперь он может продавать каждому пользователю лично. Facebook Messenger for Business понимает это. Или оповещения: свое приложение дорого, email не эффективно. А напрямую в чат - удобно для пользователя и дешево. А если верить Дурову, что WhatsApp таскает у Telegram идеи с лагом где-то в год, то боты на WhatsApp последуют. И это будет бомба.
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
"Или оповещения: свое приложение дорого, email не эффективно. А напрямую в чат - удобно для пользователя и дешево. "

Вот именно это и делает мой сервис, только он дает пользователю выбор - гадить в телеграм и забивать его чатами и т.д. Либо поставить специальное приложение и там все это настраивать от множества источников.

То что сейчас творится с телеграмом похоже на аську, ну то есть это просто костыли внедрения чего то в чат. Вот даже уведомления в телеграме тот еще костыль. Нельзя настроить их важность, т.к. у тебя будет звинеть по каждой ерундре. Я недавно сделал систему приоритетов - важное звенит, неважное не отвлекает. Сразу по клику на пуш - переход на сайт,
В телеграме же тебе приходит пуш, ты кликаешь, попадаешь в чат, там надо прокрутить до нужного сообщения и кликнуть на ссылку. ОЧЕНЬ неудобно.

То есть для уведомлений оно конечно применимо, но тот еще костыль. И это еще хорошо, что я пилю один сервис, для всех уведомлений. Я просто представляю себе ужас - 20 чатов, каждый уведомляет о своих новостях, нет никаких фильтров, нет приоритетов. Как итог телеграм будет неприменим для общения. Один же чатик - нормально. Как мне кажется, нужно в телеграме сделать кнопку - убрать диалоги с ботами.
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
Обычные пользователи не понимают что такое RSS. Да и он легко заменяется пушами если что то важное, или соц сетями если просто нужна лента.
Ответить
LanguageBoost
Онлайн сервис для изучающих иностранный язык
Tihiro 17917
А обычные пользователи понимают, что такое боты и зачем они вообще нужны?
Я вот понимаю, что такое боты, но мое представление почему-то далеко от того, что я вижу, и в использовании их как в приведенном примере выше смысла вообще не вижу.
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
Кстати да, обычным пользователям боты это тоже какое то задротство.
PS ага телеграм с инстаграмом путаю, заговорился.
Ответить
ChatFirst
Автоматизируйте поддержку сотрудников с ChatFirst
Павел Осадчук
боты
1) банятся как простые пользователи и навсегда замолкают
2) добавляются только пользователем - никак нельзя инициировать сообщение со стороны бота первым.

а так да согласен, это пока сыровато.
хотя например тот же бот новостного сайта meduza достаточно продвинут
Ответить
ChatFirst
Автоматизируйте поддержку сотрудников с ChatFirst
Павел Осадчук
конечно понимают. возьмите например http://telegram.me/imagesearchbot от Яндекса - что там не понять
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
Да не в том суть. Пользователи будут добавлять сами ботов все больше и больше. Все перерастет в то, что ухудшится юзерфрендли телеграма из за этого. Бота сделать просто, для них сделали много всего. Ничего вводить не нужно. Нажал кнопочки и все работает.
Как итог: будет по 20 ботов у юзеров, общаться будет сложнее - люди будут использовать скорее другие системы для общения, а телеграм станет просто браузером ботов.
Ответить
ChatFirst
Автоматизируйте поддержку сотрудников с ChatFirst
Павел Осадчук
я вижу немного другое развитие ситуации: боты становятся полноценным приложением, как приложение в телефоне.
но ставятся и удаляются намного быстрее.
Вам же не мешает 20 приложений на телефоне? вот и не будет мешать 20 ботов. Все будут настраиваться как положено, их текущее состояние скорее эксперимент. Боты которые мешают - будут удаляться.
Ну в общем все как с приложениями, только проще для всех - разработчиков и пользователей.
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
Мне как раз мешают 20 приложений. Я делаю свой сервис как раз чтобы через одно приложение получать уведомление от 20 сервисов, а использовать эти сервисы через браузер.
У меня нет приложений к примеру по сериалам - но я получаю увдеолмение о выходе серий в хром и качаю их с компа.
У меня нет приложений для tjournal,ЦП ,спарка или хабра - но я получаю от них уведомления по ключевым словам и использую все это через браузер. Универсальное средство уже есть - и это браузер. Я сам использую не более 5 приложений. Ютуб почта браузер вк и своё приложение для уведомлений. Все :)
Ответить
LanguageBoost
Онлайн сервис для изучающих иностранный язык
Tihiro 17917
Объясните тогда, зачем мне какой-то бот, который ищет картинки или показывает мне погоду, когда я в два клика могу то же самое в браузере получить?
Ответить
Магазин Таобао
Cайт (движок) с товарами Taobao на русском языке
Магазин Таобао
Боты скорее для тех, кто в мобильном сидит больше, чем в компе.
Я в последнее время тоже думаю, что эта тема будет развиваться. В сегодняшнем состоянии оно еще не привлекательно, но вспомните сайты в 90-х годах - они тоже были не очень привлекательны и непонятны, но со временем все встало на свои места.
Я точно уверен, что для сервисов, которые не могут создать полноценное приложение - это будет выходом 100%. И у меня есть мнение, что люди привыкают к одному интерфейсу и к новому сложно привыкнуть, поэтому в том же любимом телеграме или вотсапе включить бота будет для них оптимальным выходом. Я думаю боты не заменят полноценное приложение, но возьмут свою аудиторию и она будет расти со временем и захватит свой сегмент. Через 2-3 года будет более ясная картинка по этому вопросу...
Ответить
Igor Mazevich
Есть хороший бот для RSS @RssListenerBot
Выручает
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.