Знакомство с jabber ботами / Хабр
Длительное время я использовал джаббер только в роли меседжера, однако несколько недель назад мне попался адрес джаббер бота, который был словарем, что представилось мне крайне удобным в использовании. В скором времени мой ростер пополнился десятком удобных ботов, и в поиске новых я, в том числе, исследовал хабр, но не нашел ничего. Я решил заполнить эту нишу и создать сводный список ботов, известных мне, которые, по-моему мнению, могут заинтересовать.
Начну с исторически первого бота и раздела ботов, относящихся к нему: со словарей и переводчиков.
Первым ботом, JID (jabber id), который я случайно нашел был
Суть простая – высылаете ему слово или фразу на английском языке, и он пытается ее перевести на русский язык, но результат не всегда бывает удачным. Например:
[00:34:18] Dark Dimius this is an example of the translation made by the bot er@translate.
jrudevels.org
[00:34:19] English-Russian это - пример перевода, сделанного личинкой [email protected]
На jrudevels.org размещено много различных словарей-переводчиков, и многие «знакомы» с русским языком, что не может не радовать.
Однако, если мне нужен именно словарь, то я предпочитаю боты, о которых можно узнать у «главного» [email protected]
[00:37:55] Dark Dimius !help
[00:37:56] [email protected] !list - dictionaries list
!stat - show statistics
!help - this help
syntax: dictionary word
[00:38:39] Dark Dimius !list
[00:38:40] [email protected] 1000pbio: 1000+ biography
aviation: Russian abbreviations for aviation
beslov: Большой Энциклопедический Словарь
biology:
brok_and_efr: Энциклопедический словарь Брокгауза и Ефрона
compbe: English-Belarusian Computer Dictionary
deutsch:
en-ru-bars:
engcom: The Open English-Russian Computer Dictionary
ethnographic: Этнографический словарь
findict: Словарь финансовых терминов
geology_enru: English-Russian Geological
idioms: Русско-английский словарь идиом
korolew_enru: Англо-русский словарь Королева
korolew_ruen: Русско-английский словарь Королева
mech: Mechanical
mueller7: Mueller English-Russian Dictionary
ozhegov: Толковый словарь Ожегова
religion: История религии
sc-abbr: Computer Science Abbreviations
sinyagin_abbrev:
sinyagin_alexeymavrin:
sinyagin_business:
sinyagin_computer:
sinyagin_general_er:
sinyagin_general_re:
sinyagin_unsorted:
slovnyk_be-en:
slovnyk_be-pl:slovnyk_be-ru:
slovnyk_be-uk:
slovnyk_en-be:
slovnyk_en-pl:
slovnyk_en-ru:
slovnyk_en-uk:
slovnyk_pl-be:
slovnyk_pl-en:
slovnyk_pl-ru:
slovnyk_pl-uk:
slovnyk_ru-be:
slovnyk_ru-en:
slovnyk_ru-pl:
slovnyk_ru-uk:
slovnyk_uk-be:
slovnyk_uk-en:
slovnyk_uk-pl:
slovnyk_uk-ru:
smiley:
sokrat_enru:
sokrat_ruen:
swedish:
teo: Теософский словарь
ushakov: Толковый словарь Ушакова
zhelezyaki_abbr: USSR abbreviations for chips
zhelezyaki_analogs: Analogs for USSR chipsКак видите, список действительно внушительный. Но это только словари, не переводчики.Переводят только слова. Например:
[18:10:04] Dark Dimius словарь
[18:10:05] [email protected]
словарь
dictionaryсловарь
dictionary;
vocabulary, glossary;
lexiconсловарь
dictionary
glossary
lexicon
thesaurus
vocabulary
word-book
wordbook
Также стоит отметить переводчики семейства @bot.talk.google.com, «гугловские». Но это семейство предлагает только два переводчика знакомых с русским языком: русско-английский и англо-русский.
Теперь поговорим об информационных ботах.
gism.portal-on.ru – удобный транспорт, пересылающий пользователю погоду с gismeteo.ru. Например, [email protected] — погода в Москве. Здесь находится хорошее описание.
На любое сообщение отвечает погодой
jabrss@cmeerw.
[00:58:56] Dark Dimius subscribe habrahabr.ru/rss
[00:58:59] JabRSS You have been subscribed to habrahabr.ru/rss
После этого мне сразу пришли новости, которые не выкладываю, так как их очень много. Бот сделан очень хорошо, при добавлении его в контакт лист сам присылает собственное описание. Список команд с описанием можно найти здесь.
Следующим, простым в выполнении, ботом является бот выполнения whois запросов — [email protected]. Отсылаете ему адрес – получаете ответ.
Далее бот, который мне очень понравился – удобная программа теле передач: [email protected]. По этому адресу можно найти хороший руководство к нему.
Теперь перечислю полезные бот-сервисы:
[email protected] — Сократитель ссылок.
Просто добавляем его в ростер бота и отсылаем ему длинную ссылку.
presence.jabberfr.org — Сервис отображения статуса.
Заходим в обзоре сервисов на него, регистрируемся. После этого заходим на сайт presence.jabberfr.org. Вводим свой JID, выбираем тип отображения.
Полученную ссылку можно добавить в свою подпись на форумах и сервисах.
Теперь все смогут увидеть ваш статус. Пример: мой статус
disk.jabbim.cz – джаббер-сервис для хранения файлов до 100 Мб. Здесь вы найдете описание. Джаббер-сервис состоит из трех ботов: первый предоставляет публичный доступ к файлам (с веб ссылкой), второй – личное хранение, третий – фотоальбом сразу выкладывающий картинки на сайт.
И последний, самый «вкусный», бот [email protected]
Это бот,
виджет постинга в blogger из джаббера.
блогилка в твиттер и jaiku одновременно. В них отдельно также есть постилки(Twitter,Jaiku)
постилка в ЖЖ
постилка в WordPress.
набор сетевых утилит… ping, traceroute и т.д.
А также еще более 20 виджетов.
Выше описаны те боты, которые меня наиболее заинтересовали. Буду рад узнать от сообщества о других ботах, которые я не встречал.
Хорошо бы опубликовать в тематическом блоге, но это первый пост на хабре — кармы недостаточно. Большое спасибо!
Update 1 Сокращалка ссылок( [email protected]
) похоже перестала работать, во всяком случае у меня.Update 2 Найдена достойная замена
Транспорт-бот Jabber конференций для Telegram / Хабр
Доброго времени суток.
В один прекрасный день, после значительного перерыва, судьба вновь столкнула меня с jabber-конференциями. Правда, среди знакомых jabber уже никто не использует, 2007 год канул в лету, а основным средством общения стал Telegram. Поддержка XMPP на мобильных устройствах оставляла желать лучшего — клиенты на Android хороши каждый в чём-то одном, с iOS и WP всё мягко скажем, не очень. И особенности протокола тоже сказываются на автономности. Поэтому возникла мысль: а не сделать ли бота, которой будет транслировать сообщения из конференций в чат Telegram?
В качестве инструментов использовались:
- Python 3.5
- aiohttp для API Telegram
- slixmpp для xmpp
- gunicorn как wsgi сервер
- nginx как фронтенд и прокси для gunicorn
- VS Code в качестве IDE
Основные возможности и зависимости
Из готовых реализаций удалось найти только jabbergram, но он позволяет работать только с одним юзером. Ещё есть реализация на Go, с которым опыта работы не было, так что этот вариант не рассматривался и о функционале не могу ничего сказать.
Выбор библиотек обусловлен, в основном, желанием поработать с asyncio.
Изначально разрабатывалась версия с tet-a-tet диалогом для одного пользователя, которая позднее была расширена использованием XMPP Components для групповых чатов, с отдельным xmpp-юзером для каждого участника.
Бот настроен так, что добавить его в чат с иным пользователем невозможно, поэтому как универсальную реализацию рассматривать нельзя.
Почему так сделано? API ботов весьма ограничивает количество входящих/исходящих запросов за короткое время, и при достаточно интенсивном обмене сообщениями будут возникать ошибки.
Что есть в целом:
- Отправка/приём текстовых сообщений в общем диалоге
- Двусторонее редактирование сообщений (XEP-0308)
- Приватные сообщения
- Ответ по нику собеседника
- Файлы, аудио, изображения (загружаются через сторонний сервис)
- Стикеры (заменяются на emoji)
- Автостатус при неактивности с последнего сообщения
- Смена ника в конференции
Тем не менее, есть различия между двумя версиями:
- «Подсветка» сообщений с ником пользователя не работает в групповых чатах, так как в телеграме невозможно это сделать индивидуально
- Бот делает групповой чат в телеграмм бесшовным, т.
При разработке удобно использовать виртуальные окружения, так что можно создать одно:
$ python3.5 -m venv venv $ . venv/bin/activate
Для использования нужно установить из pip aiohttp, slixmpp и ujson. При желании можно добавить gunicorn. С окружением или без, все пакеты есть в PyPI:
$ pip3 install aiohttp slixmpp ujson
В конце поста есть ссылки на bitbucket репозитории с исходниками.
История telegram
Прежде стоит отметить, что готовые фреймворки для API Telegram не использовались по ряду причин:
- На момент начала работы asyncio поддерживал только aiotg. Сейчас, кажется, все популярные
- Вебхуки часто реализованы как добавка к лонг пуллу и в любом случае приходится использовать библиотеку для обработки входящих соединений
- В целом, многие возможности библиотек были просто не нужны
- Ну или просто NIH
Так что была сделана простенькая обёртка над основными объектами и методами bots api, запросы отправляются с помощью requests, json парсится ujson, потому что быстрее.
Настройка бота осуществляется посредством скрипта-конфига:
config.py
VERSION = "0.1" TG_WH_URL = "https://yourdomain.tld/path/123456" TG_TOKEN = "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11" TG_CHAT_ID = 12345678 XMPP_JID = "[email protected]" XMPP_PASS = "yourpassword" XMPP_MUC = "[email protected]" XMPP_NICK = "nickname" DB_FILENAME = "bot.db" LOG_FILENAME = "bot.log" ISIDA_NICK = "IsidaBot" # для фильтрации сообщений с заголовками ссылок от xmpp бота UPLOADER_URL = "example.com/upload" # загрузчик файлов # для групповых чатов нет XMPP_JID/XMPP_PASS/XMPP_NICK и используются дополнительно иные параметры: # TG_INVITE_URL = "https://telegram.me/joinchat/ABCDefGHblahblah" # ссылка на групповой чат # COMPONENT_JID = "tg.xmpp.domain.tld" # COMPONENT_PASS = "password" # XMPP_HOST = "xmpp.domain.tld" # XMPP_PORT = 5347
Представление объектов выглядит примерно так:
mapping.py
class User(object): def __str__(self): return '<User id={} first_name="{}" last_name="{}" username={}>'. format(self.id, self.first_name, self.last_name, self.username) def __init__(self, obj): self.id = obj.get('id') self.first_name = obj.get('first_name') self.last_name = obj.get('last_name') self.username = obj.get('username')
Класс бота для выполнения запросов:
bind.py
class Bot(object): def _post(self, method, payload=None): r = requests.post(self.__apiUrl + method, payload).text return ujson.loads(r) ... def getMe(self): r = self._post('getMe') return User(r.get('result')) if r.get('ok') else None ... @property def token(self): return self.__token ... def __init__(self, token): self.__token = token ...
Все запросы обрабатываются с помощью вебхуков, которые приходят на адрес TG_WH_URL.
RequestHandler.handle() — coroutine для обработки запросов aiohttp.
handler. py
from aiohttp import web import asyncio import tgworker as tg # модуль для работы с bots api import mucbot as mb # модуль с процедурами xmpp import tinyorm as orm # небольшая обёртка над sqlite3 class RequestHandler(object): ... async def handle(self, request): r = await request.text() try: ... update = tg.Update(ujson.loads(r)) log.debug("TG Update object: {}".format(ujson.loads(r))) ... except: log.error("Unexpected error: {}".format(sys.exc_info())) ... raise finally: return web.Response(status=200) def __init__(self, db: orm.TableMapper, mucBot: mb.MUCBot, tgBot: tg.Bot, tgChatId, loop): self.__db = db self.__tg = tgBot self.__mb = mucBot self.__chat_id = tgChatId self.__loop = loop ... ... loop = asyncio.get_event_loop() whHandler = RequestHandler(db, mucBot, tgBot, TG_CHAT_ID, loop) app = web. Application(loop=loop) app.router.add_route('POST', '/', whHandler.handle) ...
В процессе обработки текстовые сообщения отправляются в конференцию. Либо как приватное сообщение, если это ответ на приватное сообщение или при ответе добавлена команда /pm.
Файлы перед отправкой загружаются на сторонний сервер и в конференцию отправляется ссылка на файл. Скорее всего, для общего использования такой подход не подойдёт и придётся сделать загрузку на Imgur или другой сервис, который предоставляет API. Сейчас же файлы просто отправляются на сервер jTalk. С позволения разработчика, конечно. Но, так как это всё-таки для личного пользования, то адрес вынесен в конфиг.
Стикеры просто заменяются на их emoji-представление.
Опус о xmpp
В своё время для python было две весьма популярных библиотеки — SleekXMPP и xmpppy. Вторая уже устарела и не поддерживается, а асинхронность SleekXMPP реализована потоками. Из библиотек, которые поддерживают работу с asyncio есть aioxmpp и slixmpp.
Aioxmpp пока весьма сырая и у неё нет исчерпывающей документации. Тем не менее, первая версия бота использовала aioxmpp, но потом переписана для slixmpp.
Slixmpp — это SleekXMPP на asyncio, интерфейс там такой же, соответственно, большинство плагинов будут работать. Она используется в консольном jabber-клиенте Poezio.
К тому же, у slixmpp замечательная поддержка, которая помогла решить некоторые проблемы с библиотекой.
Однопользовательская версия использует slixmpp.ClientXMPP в качестве базового класса, когда как многопользовательская — slixmpp.ComponentXMPP
Обработчик событий XMPP выглядит примерно вот так:
mucbot.py
import slixmpp as sx class MUCBot(sx.ClientXMPP): # class MUCBot(sx.ComponentXMPP): # версия для групповых чатов ... # # Event handlers # def _sessionStart(self, event): self.get_roster() self.send_presence(ptype='available') self.plugin['xep_0045']. joinMUC(self.__mucjid, self.__nick, wait=True) # для групповых чатов необходимо подключить всех пользователей ... # # Message handler # def _message(self, msg: sx.Message): log.debug("Got message: {}".format(str(msg).replace('\n', ' '))) ... # # Presence handler # def _presence(self, presence: sx.Presence): log.debug("Got Presence {}".format(str(presence).replace('\n', ' '))) ... # # Initialization # def __init__(self, db, tgBot, tgChatId, jid, password, mucjid, nick): super().__init__(jid, password) self.__jid = sx.JID(jid) self.__mucjid = sx.JID(mucjid) self.__nick = nick self.__tg = tgBot self.__db = db self.__chat_id = tgChatId ... # настройка плагинов поддержки разных XEP self.register_plugin('xep_XXXX') # Service Discovery ... # подписка на события xmlstream self.add_event_handler("session_start", self. _sessionStart) self.add_event_handler("message", self._message) self.add_event_handler("muc::{}::presence".format(mucjid), self._presence) ...
Очевидно, обязательным будет подключить XEP-0045 для MUC, еще полезным будет XEP-0199 для пингов и XEP-0092, чтобы показывать всем какие мы классные свою версию.
Сообщения из xmpp просто отправляются в чат с пользователя (или групповой чат) с TG_CHAT_ID из конфига.
Настройка XMPP-сервера для работы с компонентами
Интересная особенность — это использование компонентов xmpp для динамического создания пользователей. При этом не надо создавать отдельный объект для каждого пользователя и хранить данные для авторизации. Минус в том, что не получится использовать свой основной аккаунт.
Из соображений лёгкости и простоты выбран Prosody в качестве xmpp-сервера.
Описывать конфигурацию не буду, единственное отличие от шаблонна — включение компонента (COMPONENT_JID из конфига бота):
Component "tg. xmpp.domain.tld" component_secret = "password"
конфигурация Prosody
В общем-то, это вся настройка xmpp. Остаётся только перезапустить prosody.
Сказ о gunicorn и nginx
Если так совпало, что у вас по счастливой случайности наружу смотрит nginx, стоит добавить директиву в секцию server.
nginx.cfg
location /path/to/123456 { error_log /path/to/www/logs/bot_error.log; access_log /path/to/www/logs/bot_access.log; alias /path/to/www/bot/public; proxy_pass http://unix:/path/to/www/bot/bot.sock:/; }
Настройку HTTPS описывать, думаю, не стоит, но сертификаты получались через letsencrypt.
Конфигурацию для примера брал из этого комментария. Полный конфиг можно посмотреть здесь, параметры для шифрования подбирались в Mozilla SSL Generator
Вся эта конструкция из… палок работает на VPS с Debian 8.5, так что для systemd написан сервис, который запускает gunicorn:
bot. service
[Service] [Install][Unit]
After=network.target
PIDFile=/path/to/www/bot/bot.pid
User=service
Group=www-data
WorkingDirectory=/path/to/www/bot
ExecStart=/path/to/venv/bin/gunicorn --pid bot.pid --workers 1 --bind unix:bot.sock -m 007 bot:app --worker-class aiohttp.worker.GunicornWebWorker
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
WantedBy=multi-user.target
Конечно, не помешает выполнить systemctl daemon-reload и systemctl enable bot.
Ссылки на исходники
- Однопользовательская версия
Версия для групповых чатов
P.S. На премию красивейший код года не претендую. Хотелось, конечно, сделать хорошо, но получилось как всегда.
P.P.S. Разработка версии для групповых чатов заброшена, ввиду отсутствия желания, времени и ряда проблем с API Telegram.
jabber-bot · Темы GitHub · GitHub
{{ сообщение }}
Здесь 17 публичных репозиториев соответствует этой теме…
эригоны / Людольф
Звезда 38Вбауэр / Джабберджей
Звезда 36айхаос / пугало
Звезда 24горизонт / большая польза
Звезда 24tb0hdan / торпеда
Звезда 24штрих / discord-xmpp-транспорт-бот
Звезда 16шьямджос / Fire_Bot
Звезда 6генофайр / крючок2xmpp
Звезда 5дотдум / комиксбот
Звезда 4мне / встречабот
Звезда 3омбре8 / джаббербот
Звезда 1ник-денри / ДжабберДо
Звезда 2шизик / джагод
Звезда 2тлояу / джаббербот
Звезда 1OSSG / Заббот
Звезда 1штрих / кузнец-робот
Звезда 0Эдгармедрано / Хавьер-java-код
Звезда 0Улучшить эту страницу
Добавьте описание, изображение и ссылки на джаббер-бот страницу темы, чтобы разработчикам было легче узнать о ней.
Курировать эту тему
Добавьте эту тему в свой репозиторий
Чтобы связать ваш репозиторий с джаббер-бот тему, перейдите на целевую страницу репозитория и выберите “управление темами”.
Учить больше
Нижний колонтитул
© 2023 GitHub, Inc.
Бот Cisco Jabber | AirSlate
- Дом org/ListItem”> Боты
- Сотрудничество и продуктивность
- Дом
- Боты org/ListItem”> Сотрудничество и продуктивность
Решено: Уважаемые пользователи, Наш клиент хочет сохранить переписку пользователей Jabber во внешней базе данных, оракуле или SQL. Автоматизация джаббера Cisco.
Попробуйте автоматизацию, это бесплатно!
Решено: Уважаемые пользователи, Наш клиент хочет сохранить переписку пользователей Jabber во внешней базе данных, оракуле или SQL. Автоматизация джаббера Cisco.
Попробуйте автоматизацию, это бесплатно!
Обратите внимание: Cisco Jabber Bot пока недоступен.
Эта интеграция все еще находится в разработке и будет добавлена как можно скорее. Свяжитесь с нами для получения дополнительных обновлений статуса.
Между тем, вы можете автоматизировать свои потоки, используя более 100 ботов без кода, доступных в настоящее время в airSlate.
AirSlate — это альтернативная платформа, которая объединяет людей и процессы их компаний с помощью инструментов RPA и DPA.
AirSlate — это альтернативная платформа, которая объединяет людей и процессы их компаний с помощью инструментов RPA и DPA. Его эффективные роботы-автоматизаторы, такие как Cisco Jabber Bot, вовлекают команды и делают их более совместными и более эффективными в своей работе. Попробуй сам.
Что делает бот Cisco Jabber
Используйте бота автоматизации, чтобы обеспечить надежную функциональность, которую легко настроить, использовать и расширять по всем каналам для автоматизации процессов документооборота. Он автоматизирует повторяющиеся задачи, которые ранее выполнялись сотрудниками, и, как следствие, снижает вероятность ошибок, связанных с человеческим фактором. Расширьте свои рабочие процессы с помощью новейших технологий DPA.
Когда использовать Cisco Jabber Bot
Используйте Bot для автоматизации рабочих процессов, даже самых сложных. С airSlate, мощной платформой автоматизации рабочих процессов, избавьтесь от утомительных задач, освободив сотрудников, чтобы они могли сосредоточиться на более важной работе. Инструменты автоматизации бизнес-процессов — отличный способ показать вашей команде, что ваша компания движется в правильном направлении.
Запустите свои автоматизированные рабочие процессы за считанные минуты с помощью Cisco Jabber Bot. Кодирование не требуется.
Шаг 1
Установка и настройка бота
Выберите бота Cisco Jabber из библиотеки ботов автоматизации и интеграции. Попробуйте выполнить поиск по имени или просмотрите категории ботов. Добавьте Cisco Jabber Bot в свой рабочий процесс и начните его настройку без написания кода или API.
Шаг 2
Добавить простую логику «если это, то то»
Добавьте условия, определяющие, как и когда будет работать Cisco Jabber Bot. Условия могут основываться на данных, датах, именах и ролях пользователей. После включения бота запустите поток и наблюдайте за работой бота Cisco Jabber.
Установите Cisco Jabber Bot, чтобы автоматизировать рабочий процесс
AirSlate предлагает вам все необходимое для повышения эффективности сложных методов в единой интегрированной среде, основанной на надежных автоматизированных ботах. Благодаря впечатляющим технологиям роботизированной автоматизации процессов (RPA) вы можете очень легко автоматизировать большую часть своего бизнеса, используя уникальную автоматизацию Cisco Jabber Bot.Cisco без кода.
Управляйте автоматизированным рабочим процессом всего за пару кликов:
- 1. Создайте профиль airSlate или войдите в систему. Автоматизация Cisco jabber.
- 2. Разработайте поток либо с самого начала, либо выберите его из списка потоков.
- 3. Нажмите значок Боты, чтобы найти Cisco Jabber Bot. Джаббер-бот.
- 4. Прочтите об этом, прежде чем нажимать «Установить бота».
- 5. Узнайте, что делать в случае сбоя бота (перейти к пересмотру или заблокировать пересмотр). Джаббер-бот.
- 6. Нажмите Применить настройку, чтобы выполнить настройку.
Настройте Cisco Jabber Bot и воспользуйтесь улучшенным документооборотом с меньшим количеством ошибок, более быстрыми бизнес-процессами, улучшенным соответствием, дополнительным временем и общим улучшением работы клиентов и сотрудников. Автоматизация Cisco jabber.
Другие боты, часто используемые с Cisco Jabber Bot
Показать больше
Как настроить и внедрить Cisco Jabber Bot в рабочий процесс
Автоматизация без кода представляет собой новый метод управления бизнес-процедурами. Теперь любая компания, независимо от размера и отрасли, может избавиться от повторяющихся и административных действий. Минимизируйте расходы, сэкономьте свое время и повысьте эффективность. Избавьтесь от суеверия, что вам нужны большие деньги или многолетний опыт программирования для автоматизации процессов. С airSlate все гораздо проще. Единая основа позволяет вам реализовать любой рабочий процесс, в то время как боты доминируют в обязанностях гида. Воспользуйтесь преимуществами мгновенного запуска процессов без помощи человека и будьте уверены, что документы и файлы данных все чаще направляются с участием решений и конечных пользователей 24 часа в сутки, 7 дней в неделю.
Посмотрите, как просто использовать Cisco Jabber Bot и применить его на практике прямо сейчас:
- Войдите в свои учетные записи. Однако, если у вас нет сингла, зарегистрируйте его.
- Начните настраивать свое Движение или создайте совершенно новое.
- Откройте раздел Боты и выберите Cisco Jabber Bot из раскрывающегося контрольного списка.