В предыдущей статье я рассказывал об Авакари — системе обратного поиска в потоке сообщений. С тех пор прошло некоторое время на обкатку системы и добавление новых функций. Наконец, дошла очередь до интеграции с телеграмом, что позволяет легко использовать Авакари обычным людям для своих нужд.

Что такое Awakari

Важнейшая вещь в Авакари — это подписка (subscription). С помощью подписки пользователь задает критерии поиска среди сообщений. Но вместо повтора поиска для новых сообщений, в Авакари новые сообщения инициируют поиск подходящих подписок. После чего система доставляет сообщение по всем подходящим подпискам. Такой подход позволяет избежать polling и доставлять сообщения пользователям немедленно.

Для этого используется так называемый Reverse Search Index в дополнение к привычной Publish/Subscribe функциональности.

Источники данных

Допустим, Авакари умеет эффективно фильтровать информацию. Но откуда в Авакари поступают новые сообщения? В теории можно использовать всё, что угодно, СМИ, мессенджеры, социальные сети, сообщения от всевозможных умных устройств. Прямо сейчас уже доступно два способа — ленты новостей в формате RSS/Atom и публичные каналы в телеграм.

RSS

На данный момент в систему поступают обновления из 43-х популярных лент новостей. Здесь есть наука, новости, собственно сам Хабр (куда же без него), финансы, обзоры фильмов, обновления популярных Youtube‑каналов на разных языках и многое другое.

Список легко пополняется и предложения по новым источникам охотно принимаются. Так что если вы знаете интересную RSS/Atom ленту, то присылайте автору статьи. Либо можно сразу предложить Pull Request вот сюда (тут же находится актуальный полный список текущих используемых на входе лент новостей).

Публичные Telegram каналы

Интеграция с телеграм для Авакари является очевидной. Поэтому система также получает сообщения из некоторых популярных и публичных телеграм каналов. По аналогии с лентами новостей, здесь также есть наука, вакансии по всему миру, новости, различные товары, анонсы фильмов, криптовалюты, арабский, корейский, хинди... Всего 38 каналов на момент написания статьи. Также приветствуются предложения к добавлению. Актуальный список находится здесь.

Telegram бот

Телеграм‑бот @AwakariBot является основным интерфейсом пользователя. Он позволяет управлять своими подписками, публиковать собственные сообщения в систему и самое важное, читать сообщения по подпискам. Доступные функции делятся на две категории:

  1. Приватный чат с ботом — управление подписками и публикация сообщений.

  2. Группа с ботом — выбор подписки (или нескольких) для чтения сообщений в данной группе.

Чтобы начать работу с ботом, начните с приватного чата и просто нажмите кнопку «START».

Приватный чат

Выглядит следующим образом:

Основные функции доступны в виде кнопок внизу.

Кнопка «Subscriptions» — для получения статистики использования подписок. Также присылает список всех подписок пользователя. Каждая подписка в списке также представляет из себя кнопку, нажатие которой выводит детальную информацию о выбранной подписке и предлагает кнопки действий:

Кнопка «+ Basic» под «Subscriptions» позволяет быстро создать простейшую подписку с текстовым условием для сообщений. При нажатии бот предлагает ввести имя новой подписки и список ключевых слов (все разделяется пробелами, поэтому имя новой подписки не должно содержать пробелов, как и ключевые слова). Пример:

Подписка из этого примера будет получать все сообщения, в которых встречается хотя бы одно из слов «news», «новости» или «uutiset». Для английского языка также будет срабатывать в разных падежах, числах и т. п. (стемминг). Для других языков стемминг пока недоступен, но в будущем также возможно.

Кнопка «+ Custom» под «Subscriptions» может быть полезна для создания сложных подписок с группировкой условий и отношениями между ними (And/Or/Xor). Также в этом режиме доступны численные условия. Более подробно об этом здесь.

По аналогии с подписками, под кнопкой «Messages Publishing» есть такие кнопки как «▸ Basic» и «▸ Custom». Это кнопки для отправки простого сообщения и сообщения с произвольными атрибутами, соответственно. В режиме отправки простого сообщения также можно отправить изображение/фото, аудио/музыку, видео или документ:

Группа с ботом

Хорошо, я создал подписку чтобы получать то, что мне интересно, что же дальше?

Дальше нужно создать группу и пригласить в неё AwakariBot. Можно назвать её как‑нибудь вроде «Awakari Inbox» (например для всех подписок сразу) или дать имя, соотвествующее какой‑то одной подписке. Бот предложит выбрать подписку из списка для чтения. Можно выбрать несколько. Когда в систему поступит сообщение, которое совпадет с данной подпиской, бот пришлет его в эту группу:

Другой пример полученного сообщения — из RSS‑источника. Такие сообщения содержат дополнительнные атрибуты, которые спрятаны под спойлер под «Extra Attributes»:

Планы на будущее

Всё это сейчас уже активно используется для персональных нужд. Также доступно для всех остальных в рамках разумного и в режиме демо. Если это окажется полезным кому‑то ещё, то можно будет перевести все это в режим реального использования aka production.

Распознавание речи

Наиболее очевидное расширение — это распознование речи. Пользователь отправляет голосовое сообщение через бота, бот используя Speech API превращает это в текст (транскрипт) и сообщение становится легко доступным для сопоставления с текстовыми условиями.

Также можно пропускать сообщения с изображениями или видео через классификатор, чтобы те пользователи, которые хотят получать именно фото рыжих котиков могли всегда получать их.

Курсы валют и криптовалют

Мониторинг курсов (крипто)валют и уведомление на основе произвольных условий вроде «доллар больше 100» также можеть быть интересным определенным категориям пользователей.

Пока что это всё на сегодня. В случае возникновения любых вопросов вы можете использовать команду бота /support или задать вопрос в community‑группе в телеграме.

Комментарии (14)


  1. AleksandrRd
    15.10.2023 10:21

    Вы за меня и телеграмм каналы читать будете ? :))
    А было бы неплохо.

    Отчасти идея перекликается с описанным в https://habr.com/ru/articles/738716/


    1. akurilov Автор
      15.10.2023 10:21

      Именно так. Вам даже не надо знать о каналах и прочих лентах. Авакари коллекционирует и читает все за вас, присылая лишь то, что соответствует вашим интересам


      1. AleksandrRd
        15.10.2023 10:21

        При всей явной необходимости такой обработки, не хотелось бы отдавать формирование собственного информационного пузыря в чужие руки.
        Так что движок с такой обработкой, который каждый запускает сам и сам настраивает и допиливает. Плюс клиент с другим интерфейсом.
        ИМХО бот и всё с ним связанное только усложняет.


        1. akurilov Автор
          15.10.2023 10:21

          Возможность запуска авакари у себя дома уже предусмотрена:

          https://github.com/awakari/core

          Вам понадобится кластер, нп minikube и доступ к подпискам в облаке (сертификат).


        1. sim2q
          15.10.2023 10:21

          хотя бы для начала отфильтровать пустые сообщения со смайликами... ничего не имею против них под постом или новостью, но не как отдельная тема особенно если канал не замьючен


          1. akurilov Автор
            15.10.2023 10:21

            Смайлики в телеграме - юникод, т.е. текст, поэтому - почему бы и нет


      1. Arkasha
        15.10.2023 10:21

        А в каком смысле "коллекционирует и читает"? Фильтрует и показывает всё, что прошло фильтры? Если так, то есть ведь tt-rss, где можно в т.ч. телеграм читать (и всё остальное, для чего есть rss-transport). (Не)инверсные фильтры на регулярках по заголовку/содержимому/автору/тегам/url с возможностью выбора действия (удалить/mark as read/и т.д.), возможность публиковать понравившееся. Плюс разворачивается проще, без kubernetes и докера, есть нормальные клиенты (имхо gui функционал телеграм-ботов оставляет желать лучшего)


        1. akurilov Автор
          15.10.2023 10:21

          Во-первых, идея в том, чтобы не обрушивать весь поток исходной информации на клиентское устройство.

          Во-вторых, обратный поиск позволяет выполнять его ровно 1 раз для каждого входящего сообщения для определения всех заинтересованных.


  1. Shokoladkasoreshkami
    15.10.2023 10:21

    Пример с "новости" не очень удачный. Там поиск по заголовкам или именно в теле сообщений? Потому что для тупых домозояев создают заголовки на тему "Роскомнадзец заблокировал всем доступ к конституции". И многие мимикрируют под интересы масс и выезжают на хайпе. Есть фильтр некий? Например: новости, но не про Пугачеву.


    1. akurilov Автор
      15.10.2023 10:21

      Да, конечно, любое условие может быть "Не" (отрицание). Пример:


  1. Rampages
    15.10.2023 10:21

    Вспомнил как в том же kvIRC была реализована система Notice и можно было указать ключевые слова, по которым будет считаться что был Notice (типо @ mentions для вас).

    Например можно было туда запихать ник Vanya, и его синонимы Vanek, Ванек, Ваня, Вано и прочее и по всем ним получать уведомления об упоминании, даже без @


  1. Kenya-West
    15.10.2023 10:21

    Если честно, я так и не понял цели это бота. Чекать по упоминаниям захардкоженные кем-то другим каналы?

    Вот у меня такая задача стоит: у меня есть список публичных и доступных по приватной ссылке каналов (в основном публичных). Нужно отслеживать их посты и отсылать grep'нутые по ключевым словам ссылки на посты (или сами посты) через своего бота в личку или в группу. Желательно как можно ближе к реалтайму. Полгода пассивно искал - результатов не нашел. Самому писать времени нет.

    Не подскажете, ваш бот такую задачу решает?


    1. akurilov Автор
      15.10.2023 10:21

      Конкретно бот доступен только для облачного авакари. Его назначение - интерфейс пользователя. Так как в своей основе авакари - это бакэнд сервис с gRPC API.

      Если требуется запускать авакари on premise и анализировать собственные источники данных, то нужно использовать https://github.com/awakari/core

      Сервисы для доставки сообщений из внешних источников в авакари являются open source:

      https://github.com/awakari/producer-telegram

      https://github.com/awakari/producer-rss

      Поэтому вы можете запустить их с собственной конфигурацией каналов. Или сделать форк. Или на основе их сделать свой, например producer-facebook.


      1. Kenya-West
        15.10.2023 10:21

        Спасибо большое. Оказалось, теперь буду въезжать потихоньку в тему.