Бот для сообщений вк: Интеграция | Чат-боты | Боты для сообществ

Содержание

10 чат-ботов «ВКонтакте», с которых можно брать пример

Кажется, скоро мы все снова будем сидеть во «ВКонтакте»! В конце марта рост трафика на сервисы компании VK составил 24% в среднем по России. Инвестиции в соцсеть тоже увеличиваются.

Очень интересно будет посмотреть на реальную статистику к концу 2022! В апреле 2021 VK сообщал, что ежемесячно «ВКонтакте» пользуется 73 млн человек. В этом году это количество наверняка вырастет.

А значит, интерес к российской социальной сети будет расти и у брендов. Совсем скоро сюда придут компании, которых здесь ещё не было и вернутся те, кто подзабросил эту площадку. Ожидаем увеличения количества групп и пабликов, новых рекламных объявлений в ленте, нативных интеграций у ВК-блогеров — и, главное, новых чат-ботов.

В этой статье рассказываем о том, как вообще устроены чат-боты, и приводим образцовые примеры.

  1. ВКонтакте
  2. Авиасейлс
  3. СДЭК
  4. Pony Express
  5. Boxberry
  6. Пятёрочка
  7. Skillbox
  8. СберКот
  9. Kotex
  10. Burger King

Что такое чат-боты и зачем они нужны

Мы уже рассказывали о чат-ботах подробно, но давайте кратко повторим основную информацию.

Чат-бот — один из инструментов мессенджер- и директ-маркетинга (прямой коммуникации с клиентами). Программы, которые «ведут общение» с пользователями автоматически по заранее спланированному сценарию. А ещё они работают 24/7.

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

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

Но давайте поговорим про то, какие боты есть во «ВКонтакте» прямо сейчас — и что вообще может предложить компаниям эта соцсеть.

Чат-боты и «ВКонтакте»

Чат-боты «ВКонтакте» используются Сообществами уже очень давно. Почитайте, как рассказывает о них сама платформа — в том числе и о том, как чат-боты могут помогать бизнесу: принимать заказы, давать советы, отвечать на вопросы.

Если вы хотите развивать свой бренд во «ВКонтакте», пора делать чат-бот! Если вы не знаете, с чего начать разработку — начните её с этой подробной инструкции. Или сразу отправляйтесь в технические дебри: подробная инструкция по разработке и настройке тоже есть в документации «ВКонтакте».

После нужно будет выбрать конструктор бота, который и поможет его сделать. Например, Robochat.io, который обещает создать лучшего бота. Или BotTap, который отлично подойдёт почти любому малому бизнесу. Или ChatLeads, который на английском, но вдруг для вас это не минус, а плюс. Вариантов множество — как и чат-ботов «ВКонтакте».

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

Примеры классных и полезных чат-ботов

1. ВКонтакте: помогает в работе с сервисом

Одно только существование бота «ВКонтакте для бизнеса» — отличное подтверждение, что чат-боты в соцсети используются активно. Нужен он, чтобы помочь клиентам лучше разобраться в сервисе. Например, бот даёт ссылки на статьи с подробными разъяснениями и ответами на самые популярные вопросы.

2. Авиасейлс: даёт полезную информацию

Сервис по поиску дешёвых авиабилетов Авиасейлс, который несколько лет назад захватил рекламные слоты, кажется, всех YouTube-блогеров, тоже предлагает классный чат-бот во «ВКонтакте».

Он подробно рассказывает о своих возможностях (а их много!) и отвечает на вопросы так, что больше ничья помощь вообще не понадобится. Из переписки можно узнать даже самую актуальную информацию.

3. СДЭК: сообщает о статусе заказа

Чат-бот от службы доставки СДЭК выполняет простое, но важное действие — сообщает, когда долгожданная посылка готова к выдаче. При этом клиенту ничего дополнительно делать не нужно: если авторизация в соцсети завязана на номере телефона, то транзакционное сообщение придёт автоматически.

Если одного этого сообщения мало, по слову «заказ» можно узнать подробности. СДЭК даёт оперативную информацию об условиях доставки, предлагает несколько кнопок на выбор.

4. Pony Express: помогает сразу по четырём направлениям

А вот чат-бот другой службы доставки, Pony Express, сразу предлагает пользователю выбор, с чем он может помочь. После вашего сообщения бот сделает несколько уточнений, которые помогут решить ваш вопрос. И для удобства приведёт примеры ответов.

5. Boxberry: помогает с доставкой

Boxberry — ещё одна служба доставки, которая использует чат-бота «ВКонтакте». Популярный инструмент для этого бизнеса! Здесь всё снова просто, но зато доступно и удобно. Пишешь «Привет!», а тебе предлагают помощь во всём, от отправки посылки до её получения. И ещё не забывают предложить мобильное приложение.

6. Пятёрочка: приглашает участвовать в акциях

Чат-бот промоакции «Вкусные приветы» от популярного супермаркета-у-дома помогает клиентам принять в ней участие. Чтобы не увеличивать и без того большое сообщение — правила акции вызываются по кнопке. Интересно, у пользователей есть возможность задать вопросы как по акции, так и отдельно «Пятёрочке». Очень удобно!

7. Skillbox: предлагает меню

Чат-бот образовательной платформы Skillbox сразу сообщает, что будет обрабатывать персональные данные клиента. Если клиент не против, то может получить помощь по множеству направлений сразу — найти ответ на вопрос, связаться со специалистом, выбрать и оплатить курс.

8. СберКот: развивает и развлекает клиента

Бот от Сбера СберКот делится полезными фактами о деньгах и таким образом учит клиентов финансовой грамотности. И тем самым — повышает клиентскую лояльность. Ну а если кому-то вдруг станет скучно, всегда можно отвлечься на забавные стикеры — это тоже приятно.

9. Kotex: дарит подарки и решает проблемы

Ещё один чат-бот «ВКонтакте» с похожей механикой есть у бренда прокладок Kotex. Тоже с полезной информацией, со стикерами и с котом — вернее, конечно, кошкой! — в качестве собеседника. Анфиса обещает помогать с кэшбэком, дарить подарки и отвечать на вопросы.

10. Burger King: отвечает на жалобы

А вот пример, наверное, самого простого чат-бота — пусть и тоже полезного. Во «ВКонтакте» Burger King, как ни странно, не предлагает клиентам новинок и купонов, а только разбирается с жалобами, передаёт их в службу поддержки. Мы потестили — написали, что жалоб нет, а нам в ответ просто пожелали хорошего дня. Что ж, боту ещё есть куда расти — может, мы хотели сделать заказ?

Что впереди?

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

И это наверняка приведёт к новым продажам, ведь открываемость сообщений в мессенджерах — 80%. В 4 раза выше, чем в email! Поэтому никаких сомнений в перспективности данного канала связи компании и клиента нет.

Подписывайтесь на ежемесячный дайджест Mailfit

Раз в месяц присылаем новости диджитала, последние кейсы, рассказываем про работу, собираем интересный и полезный контент в одном письме.

Подписывайтесь на ежемесячный дайджест Mailfit Раз в месяц присылаем новости диджитала, последние кейсы, рассказываем про работу, собираем интересный и полезный контент в одном письме. Ваша электронная почта Подписаться Нажимая на кнопку, соглашаюсь с политикой обработки персональных данных

Обсудить проект

Заполните бриф, и мы изучим ваши задачи и предложим нужную услугу.

Введите ваше имя

Телефон или мессенджер

Ваша электронная почта

Сайт вашей компании

Нажимая на кнопку, соглашаюсь с политикой обработки персональных данных

ОТЛИЧНО!
Мы уже изучаем задачу и скоро свяжемся с вами.

Автоматическая рассылка сообщений вконтакте — Бесплатная программа бот для накрутки ВКонтакте, Инстаграм и Одноклассников.

“БроБот” – что нужно знать для начала?

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

Для таких случаев мы предлагаем удобный способ информирования большого круга читателей в социальных сетях – программу «БроБот». На нашем сайте Вы можете найти полную информацию о тонкостях пользования автоматическим приложением «БроБот» по общению в социальных сетях.

Что делает «БроБот»?

Работу над постоянным улучшением данного приложения мы ведем уже с 2009 года и за это время добились немалых успехов в освоении просторов Рунета. Приложение «БроБот» очень легко скачать и быстро установить на свое устройство. Интерфейс максимально оптимизирован, чтобы Вам не пришлось тратить время на то, чтобы привыкать ко всем его тонкостям, а сразу начать работу над желаемыми результатами.

«БроБот» позволяет автоматически управлять аккаунтами в различных соцсетях типа Одноклассники, ВКонтакте, Мамба или LovePlanet. Наше приложение бесплатно и доступно для каждого. Для более продвинутых пользователей предлагается пакет услуг, необходимых для профессионального продвижения необходимого контента в сети. Для этого на нашем сайте можно найти удобные тарифы, подобранные под разные потребности.

Личное общение и продвижение своего аккаунта в социальной сети потребует минимум усилий и времени

при помощи нашего «БроБота». Важно настроить свой аккаунт, установить фильтры на желаемую группу лиц и далее можно установить следующее:

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

Программу можно настроить под Ваши требования и при этом все данные по входу в аккаунты будут доступны только на Вашем устройстве, что обеспечит защиту всех данных. На нашем сайте можно бесплатно скачать «БроБот» и протестировать его полный функционал.

Бробот дает широкие возможности в автоматической рассылке сообщений в Вк

В плане переписки Бробот может порадовать большим количеством возможностей. Количество аккаунтов, которые можно использовать для переписки при помощи этой программы не ограничено. С помощью удобного и понятного интерфейса Бробота каждый пользователь получает возможность выполнять переписку одновременно с большим количеством анкет, причём делать это можно не вручную, а автоматически, т. к. в Бробот встроено автоматический чат-бот.
Что касается чат-бота, кроме автоматической рассылки сообщений в вк, он может поддерживать диалог с пользователем. А это очень важное преимущество Бробота. Автоматическая переписка с пользователями, поддержание разветвленных диалогов с пользователями и доведение их до целевого действия(покупки, перехода на сайт и тд.) и многое другое!

“БроБот” для бизнеса

Более подробно остановимся на использовании «БроБота» в коммерческих целях.

Ведь для любого мелкого и среднего предпринимателя сложно выйти на рекламу с широкой аудиторией: различные баннеры, видео- и аудиосообщения требуют приличных вложений и не всегда выгодны. «БроБот» поможет выйти лично именно к той категории людей, на которых направлен Ваш Бизнес – без лишних затрат времени и средств на ненужных людей и неэффективную рекламу.

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

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

Удобная цена, несколько часов на настройку основных параметров работы выбранных аккаунтов и периодический мониторинг – вот формула социального маркетинга от «БроБота», которая уже не потребует большого штата специалистов маркетингу.

Важно выбрать в начале правильную стратегию продвижения товара:

  • определить основные целевые аудитории для Вашего товара/услуги;
  • подобрать уникальный и яркий контент для автоматического постинга;
  • разработать автоматические сообщения Вконтакте;
  • и правильно задать технические настройки для «БроБота».

Технические тонкости на первый взгляд всегда кажутся усложненными. Но если перед работой поставить перед собой конкретную цель (достичь определенного уровня продаж, заработать определенную сумму денег и т.д.), то можно далее составить пошаговый план действий и постепенно разбирать каждый технический вопрос по настройке «БроБота». Таким образом, можно разбить сложную картину по установке программы на отдельные этапы, и на каждом из них искать поддержку на нашем сайте.

Мы постоянно обновляем тематические статьи об использовании «БроБота». Особенно полезны истории успеха, которые Вы можете использовать как практические руководства при настройке программы под поставленные цели. Таким образом, такой большой материал с видео-уроками и пошаговыми инструкциями всегда поможет Вам решить вопросы в ходе использования нашего «БроБота». Желаем Вам успеха!

Как написать простого бота для ВК и Телеграм

Мы уже упоминали, как мы предоставляем бесплатные VPS для студентов, чтобы они учились программировать. Один из наших подопечных Павел сделал простеньких телеграм и ВК ботов для FAQ. Они очень просте, тем не менее, начинающему программисту не помешают комментарии опытных ребят — поэтому публикуем его рассказ — Павел будет рад, если в комментариях ему дадут советы.


Я — студент Новосибирского Государственного Технического Университета, не так давно мы с парочкой моих друзей реализовали площадку для продвижения проектов во всех возможных областях научной деятельности. Мы помогаем «сводить» заинтересованных преподавателей и студентов всех ВУЗов Сибири, чтобы проектная научная деятельность развивалась по территории Сибири и РФ.

Студенты и преподаватели часто обращались ко мне с вопросами и я решил автоматизировать этот процесс, написав ботов для ВК и Телеграм.

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

Я использовать Python версии 3.6  просто потому, что он самый простой для меня. Кодил в PyCharm Community Edition. Весь код опубликован на GitHub. Удачи!

1. Предварительные приготовления для телеграм-бота


1.1 Получение токена от Bot Father в телеграмме

Первым делом, нам нужно «зарегистрировать» нашего бота в Telegram.

Для этого, в поисковике телеги ищем BotFather

далее, делаем всё также, как показано на скриншотах:

После нажимаем на команду /newbot или же прописываем вручную.

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

1.2 Переходим в любой редактор кода и создаем файл config.py

Перед созданием данного файла, нам нужно выбрать директорию, в котором будет реализован весь функционал бота. Если вы используете PyCharm Community/Professional Edition, то предлагаю просто создать новый проект, и писать там весь функционал бота.

Если Вы используете любой другой редактор, такой как Sublime Text 3, например, то Вам самостоятельно придётся создать директорию, создать виртуальное окружение, и работать из консоли со всеми предварительными тестами. Во избежание трудностей, предлагаю скачать продукт PyCharm Community Edition от компании JetBrains, с помощью данного продукта можно обойти действия, описанные в предыдущем абзаце, так как данный продукт сделает их самостоятельно, от Вас потребуется только указать путь до интерпритатора Python в конфигурациях PyCharm, с помощью которого и будет работать Ваш бот.

В данном файле (config.py) будет храниться только токен, который нам дал BotFather, поэтому пишем:

token = "Здесь хранится Ваш токен".

1.3 Cоздаём главный файл — bot.py

Делаем cледующие импорты и для соответствующих библиотек, в консоли прописываем закоментированные строчки:

import config
import telebot # pip install telebot
from telebot import types # pip install pyTelegramBotAPI

Далее, нам необходимо использовать наш токен:

bot = telebot.TeleBot(config.token)

Этим действиям мы устанавливаем то, что мы будем накручивать функционал именно для того бота, для которого нам и дал токен BotFather.

2. Разворачиваем функционал

Начнём с того, что для того, чтобы пользователю запустить бота, нам необходимо прописать команды для старта они могут быть разными, например, /start или /go и вообще любыми, какими Вы сочтёте нужными.

Для обработки команд нам потребуется message_handler, с помощью которого и будет реализован весь функционал обработки команд для старта и завершения, если Вы сочтёте нужным добавить завершение. Как только придёт команда

/go или /start, message_handler с соответствующими командами сравнит, совпадают ли строки и если совпадают, то обработает соответствующей функцией.

Каждая функция, как и в примере сейчас, должна принимать один параметр — сообщение от пользователя, которое будет обработано соответствующей функции «в обёртке» декоратора. А также, каждая функция (или связка функций) должна возвращать соответсвующее сообщение от бота.

Итак:

@bot.message_handler(commands=['go', 'start'])  # Обработка команды для старта
def welcome(message):
    sti = open(path+'stiker.tgs', 'rb')
    bot.send_sticker(message.chat.id, sti)
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item3 = types.KeyboardButton("Приложения")
    item2 = types.
KeyboardButton("Мероприятия")     item1 = types.KeyboardButton('О нас')     markup.add(item1, item2, item3)     bot.send_message(message.chat.id,                      "Добро пожаловать, {0.first_name}!\\n\\nЯ - <b>{1.first_name}</b>, бот команды Projector в НГТУ, "                      "создан для того, "                      "чтобы помочь Вам влиться в нашу команду,"                      "просто узнать что-то о нас или же просто пообщаться и весело провести время.\\n\\n"                      "<i>Have a nice time</i>".format(                          message.from_user, bot.get_me()),                      parse_mode='html', reply_markup=markup)

В этой функции реализовано сразу два действия: отправка приветственного сообщения и создание встроенной клавиатуры — ReplyKeyboardMarkup, которая будет открыта, пока мы не завершим выполнения бота соответсвующей командой. Об этом будет сказано ниже.

Итак, пройдёмся по строчкам:

В строках 20-21: открывается стикер по тому пути к директории, в которой я его сохранил, после чего отправляется.

Строки 22-28: создаем встроенную клавиатуру, добавляя туда три элемента.

Строки 30-37: описано создание и отправка приветственного сообщения

Как вы можете заметить, метод send_message в строке 30, позволяет использовать HTML, для форматирования текста.

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

# RUN
if __name__ == "__main__":
    try:
        bot.polling(none_stop=True)
    except ConnectionError as e:
        print('Ошибка соединения: ', e)
    except Exception as r:
        print("Непридвиденная ошибка: ", r)
    finally:
        print("Здесь всё закончилось")

Сделаем первый запуск! Для этого, в PyCharm-е нажмём зеленую кнопку старт в правом верхнем углу или же, можно запустить из консоли командой: python bot.py

Результат первого запуска:

2.1 Обработка нажатия на кнопки и создание inline keyboard

Так любое сообщение — это текст, то мы будем обрабатывать именно текстовые сообщения.

Сделаем следующее и аналогично разберём по строчкам:

@bot.message_handler(content_types=["text"])
def go_send_messages(message):
    if message.chat.type == 'private':
        if message.text == 'Приложения':
            keyboard = types.InlineKeyboardMarkup(row_width=1)
            itemboo = types.InlineKeyboardButton(text="Тыщ на кнопку и ты уже в Google", url="<https://www.google.ru>")
            itemboo1 = types.InlineKeyboardButton('Рандомное число', callback_data='good2')
            itemboo2 = types.InlineKeyboardButton("Калькулятор", callback_data='bad2')
            itemboo3 = types.InlineKeyboardButton("Хочу узнать погоду в моем городе/стране", callback_data='good3')
            itemboo4 = types.InlineKeyboardButton("Как твои дела?", callback_data='bad4')
            keyboard.add(itemboo, itemboo1, itemboo2, itemboo3, itemboo4)
            bot.send_message(message.chat.id,
                             "{0.first_name}, окей, смотри, что у нас есть тут:\\n". format(message.from_user),
                             reply_markup=keyboard)
        elif message.text == "Мероприятия":
            one_markup = types.InlineKeyboardMarkup(row_width=1)
            ite1 = types.InlineKeyboardButton("Ближайшие мероприятия", callback_data="one")
            ite2 = types.InlineKeyboardButton("Проведенные мероприятия", callback_data="two")
            ite3 = types.InlineKeyboardButton("Волонтерство на мероприятие", callback_data="three")
            ite4 = types.InlineKeyboardButton("Действующие проекты в НГТУ", callback_data="fourth")
            ite5 = types.InlineKeyboardButton("Мероприятия Межвузовского центра", callback_data="five")
            one_markup.add(ite1, ite2, ite3, ite4, ite5)
            bot.send_message(message.chat.id, "{0.first_name}, у нас <u>ежемесячно</u> проводится множество "
                                              "мероприятий,\\nмы постарались разбить их на следующие составляющие:".format(
                message. from_user), parse_mode="html", reply_markup=one_markup)

Строка 339 — обработчик любых текстовых сообщений

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

Строки 344 — 351 — создаём инлайновую клавиатуру InlineKeyboardMarkup и помещаем в эту клавиатуру 5 элементов, которые также можно будет обработать по установленной callback_data. Элементы данной клавиатуры будут расположены друг под другом, так как в строке 344, мы установили row_width = 1, что обозначает самую широкую грань одной кнопки, поэтому они и будут расположены друг под другом.

Строки 353-355 — отправляют текст, вместе с нашей Inline Keyboard.

В условиях ниже представлены аналогичные представления обработки сообщений.

Итак, сделаем запуск:

2.2 Обработка InlineKeyboardButton

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

@bot.callback_query_handler(func=lambda call: call.data in ['one', 'two', 'three', 'fourth', 'five'])  # Мероприятия
def callback_inline_one(call):
    try:
        if call.message:
            if call.data == 'one':  # Ближайшие мероприятия
                bot.send_message(call.message.chat.id,
                                 "Итак,<b>ближайшие мероприятия</b>:\\n\\n"  # Здесь будут ссылки ещё
                                 "Форум «Байкал»\\n"
                                 "Конкурс «Цифровой ветер»\\n"
                                 "PRONETI", parse_mode="html")
            elif call.data == 'two':  # Проведённые мероприятия
                bot.send_message(call.message.chat.id, "Вот список <b>проведённых мероприятий</b>:\\n\\n"
                                                       "МНТК\\n"
                                                       "Семинары по проектной деятельности\\n"
                                                       "Встреча с представителями предприятий", parse_mode="html")
            elif call. data == 'three':

Итак, разберём по строчно:

Строка 269 — объявляем обработчик, который будет обрабатывать каждую из нажатых кнопок с использованием лямбда-функции

Строки 273-278 — В данном блоке if, мы просто обрабатываем сообщение и отправляем сообщение пользователю.

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

и т. д.

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

Результат:

Так просто и обрабатываются inline keyboards.

3. Завершаем работу бота

Данная функция будет аналогичной функции обработки команд для старта бота, поэтому Вы сможете легко понять её функционал:

@bot.message_handler(commands=['stop'])  # Обработка команды для выхода
def bye(message):
    bye_Sti = open(path+'byeMorty. tgs', 'rb')
    hideBoard = types.ReplyKeyboardRemove()
    bot.send_message(message.chat.id,
                     "Досвидания, {0.first_name}!\\nМы, команда <b>{1.first_name}</b>, надеемся, что ты хорошо провел(а) время \\n\\n"
                     "Присоединяйся к нашей команде в <a href='<https://vk.com/projector_neti>'>vk</a>\\n"
                     "Наш <a href='<https://instagram.com/projector_neti>'>inst</a>\\n\\n"
                     "Напиши Координатору проектов (<a href='<https://vk.com/nikyats>'>Никите Яцию</a>) и задай интересующие тебя вопросы по <i>проектной деятельности</i>\\n\\n"
                     "Надеемся, что тебе ответят очень скоро \\n\\n"
                     "<u>Don't be ill and have a nice day</u> \\n\\n\\n"
                     "P.S.: Если есть какие-то пожелания или вопросы по боту, то напиши <a href='<https://vk.com/setmyaddresspls>'>мне</a>".format(
                         message. from_user, bot.get_me()), parse_mode='html', reply_markup=hideBoard)
    exit()

Здесь происходит следующее:

  1. Отправляется прощальный стикер.
  2. Закрывается встроенная клавиатура (строка 44).
  3. Отправляется прощальное сообщение.

Так как мы используем bot.polling, с параметром none_stop = True, то пользователь может снова вознообновить общение с ботом при помощи команды /start или /go, обработка которых показано в пункте выше.

Результат:

ВК БОТ

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

1. Предварительные подготавления

Установим следующие библиотеки по тем же технологиям:

import vk_api # pip install vk-api
import json   # pip install json
from vk_api.longpoll import VkLongPoll, VkEventType

▍1.1 Получение токена для сообщества Вконтакте.


  1. На главной странице сообщества найти раздел «Управление»
  2. Работа с API
  3. Создать ключ. Выбираете нужные для вас пункты, которые будут доступны боту.

В итоге должно получиться примерно следующее:

Берем ключ и переходим в среду разработки и делаем следующее:

vk = vk_api.VkApi(token=
                  "Ваш_токен")

Далее — следующее:

longpoll = VkLongPoll(vk)

На этом, закончим подготавления.

2. Разворачиваем функционал

Первым делом создадим файл manage. py

Cоздадим прототип встроенной клавиатуры ( всё с помощью документации VkBotAPI ).

main_keyboard = {
    "one_time": False,
    "buttons": [
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"1\\"}",
                "label": "О нас"
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"2\\"}",
                "label": "Мероприятия"
            },
            "color": "positive"
        },
            {
                "action": {
                    "type": "text",
                    "payload": "{\\"button\\": \\"3\\"}",
                    "label": "Приложения"
                },
                "color": "positive"
            }
        ],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"4\\"}",
                "label": "Контакты"
            },
            "color": "primary"
        }]
    ]
}

Затем переводим её в формат json, как требуется в документации:

main_keyboard = json. dumps(main_keyboard, ensure_ascii=False).encode('utf-8')
main_keyboard = str(main_keyboard.decode('utf-8'))

Пример инлайн клавиатуры:

about_us_keyboard = {
    "inline": True,
    "buttons": [
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"1\\"}",
                "label": "Основная информация"
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"2\\"}",
                "label": "Чем мы занимаемся ?"
            },
            "color": "primary"
        },
        {
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"3\\"}",
                "label": "Где мы находимся ?",
            },
            "color": "positive"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"4\\"}",
                "label": "Как попасть в команду ?",
            },
            "color": "primary"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"5\\"}",
                "label": "Контакты",
            },
            "color": "secondary"
        }],
        [{
            "action": {
                "type": "text",
                "payload": "{\\"button\\": \\"6\\"}",
                "label": "Задать вопрос руководителю проекта",
            },
            "color": "negative"
        }]
    ],
}

Не забываем все используемые клавиатуры переводить в формат json:

about_us_keyboard = json. dumps(about_us_keyboard, ensure_ascii=False).encode('utf-8')
about_us_keyboard = str(about_us_keyboard.decode('utf-8'))

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

def write_msg(user_id, message, key):
    vk.method('messages.send',
              {'user_id': user_id,
               'message': message,
               'keyboard': key,
               'random_id': random.randint(0, 2048)})

После создания всех прототипов, мы можем перейти к следующему шагу. ( к этому файлу мы позже вернёмся и доработаем обработку общения пользователя и нашего vk-бота )

▍2.1 Основной функционал (создаем файл vk_bot.py).

Мы не будем разрабатывать методы, которые будут выполнять, например, функцию парсинга времени или погоды, назовем их второстепенными. Я покажу лишь основной метод, который будет обращаться к этим второстепенным методам, для обработки тех или иных сообщений от пользователя. В конце статьи я выложу ссылку на свой GitHub, где Вы сможете самостоятельно просмотреть интересующий Вас функционал любого из метода. Итак:

Конструктор класса:

class VkBot:
    def __init__(self, user_id):
        self.USER_ID = user_id
        self._USERNAME = self._get_user_name_from_vk_id(user_id)
        self.my_str = ""
        self._COMMANDS = ["привет", "погода", "время", "пока"]
        self._inputMes = {"основная информация": answers.about_us1,
                          "чем мы занимаемся ?": answers.about_us2,
                          "где мы находимся ?": answers.about_us3,
                          "ближайшие мероприятия": answers.events1,
                          "проведённые мероприятия": answers.events2,
                          "волонтёрство на мероприятие": answers.events3,
                          "действующие проекты в нгту": answers.events4,
                          "мероприятия межвузовского центра": answers.events5
                          }

Последнее свойство класса — inputMes — это особый словарь, у которого значения ключей — это текст из файла answers. py, где я расположил текст в виде строк, поэтому, чтобы не загромождать код я и вынес основной текст в другой файл.

(Пример кода из файла answers.py)

events1 = "Итак,ближайшие мероприятия:\\n\\n" \\
          "Форум «Байкал»\\n"\\
          "Конкурс «Цифровой ветер»\\n"\\
          "PRONETI"
events2 = "Вот список проведенных мероприятий:\\n"\\
        "МНТК\\n"\\
        "Семинары по проектной деятельности\\n"\\
        "Встреча с представителями предприятий\\n"\\
events3 = "По поводу этого критерия напиши Илье (<https://vk.com/ki1337ki>)\\n"\\
        "А также, ты можешь заполнить анкету, благодаря которой,\\n"\\
        "с тобой лично свяжется один из руководителей направления\\n"\\
        "или координатор проекта (<https://vk.com/nikyats>)"

Итак, основной метод класса — это new_message, который принимает один параметр — message, который обрабатывается соответствующим условным блоком и возвращает какое -то значение обратно туда, откуда был вызван.

def _get_user_name_from_vk_id(self, user_id):
    request = requests.get("<https://vk.com/id>" + str(user_id))
    bs = bs4.BeautifulSoup(request.text, "html.parser")
    user_name = self._clean_all_tag_from_str(bs.findAll("title")[0])
    return user_name.split()[0]
def new_message(self, message):
    # self.my_str = " ".join(re.findall('[0-9]{2}', message))
    if message.lower() == self._COMMANDS[0]:
        return f"Привет, {self._USERNAME}!"
    elif message.lower() == self._COMMANDS[1] or message.lower() == "узнать погоду ":
        return self._get_weather()
    elif message.lower() == self._COMMANDS[2] or message.lower() == "узнать точное время ":
        return self._get_time()
    elif message.lower() == self._COMMANDS[3]:
        return f"До скорой встречи, {self._USERNAME}!"
    else:
        for key, value in self._inputMes.items():
            if message.lower() == key:
                return value
        return "Не понимаю тебя "

3. Возвращаемся в manage.

py и дописываем функционал

Теперь в первых строках нам необходимо проимпортить файл vk_bot. А также нам потребуется библиотека random.

import random # pip install random
from vk_bot import VkBot

После того, как мы объявили longpoll, дописываем основной функционал.

longpoll = VkLongPoll(vk)
try:
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW:
            if event.to_me:
                bot = VkBot(event.user_id)
                if event.text.lower() == "о нас":
                    write_msg(event.user_id, "Немного о нашем проекте", about_us_keyboard)
                elif event.text.lower() == "мероприятия":
                    write_msg(event.user_id, "Что ты хочешь узнать?", events_keyboard)
                elif event.text.lower() == "приложения":
                    write_msg(event.user_id, "Посмотри, что есть здесь!", app_keyboard)
                elif event. text.lower() == "контакты":
                    write_msg(event.user_id, "По любым вопросам можешь обращаться к:", contacts_keyboard)
                elif event.text.lower() == "задать вопрос руководителю проекта":
                    write_msg(event.user_id, "У тебя есть возможность написать сообщение нашему Руководителю проекта",
                              go_answer)
                elif event.text.lower() == "калькулятор":
                    write_msg(event.user_id, "В разработке...", calc_keyboard)
                # elif event.text == " ".join(re.findall('\\d{2}', event.text)):
                #     write_msg(event.user_id, "Отлично, мы здесь", calc_keyboard)
                elif event.text.lower() == "как попасть в команду ?":
                    write_msg(event.user_id, "Напиши координатору проекта - Никите\\n"
                                             "или перейди на сайт проектной деятельности,\\n"
                                             "найди проект номер 612 и подай заявку", in_team)
                else:
                    write_msg(event. user_id, bot.new_message(event.text), main_keyboard)
except Exception as e:
    print(e)

Как можете заметить, в условных блоках if и elif — присутствует обработка тех сообщений, которые подразумевают под собой вывод инлайн или встроенной клавиатуры (в данном примере — выводятся только инлайн клавиатуры). Сюда также можно добавить более сложные обработки сообщений, после которых обработка будет метаться туда сюда по блокам if и elif. Таким образом бот будет работать, пока не «упадёт с ошибкой».

Другое дело обстоит с блоком else, здесь мы обращаемся как раз ко классу нашего Бота, после чего он аналогичным способом находит обработку сообщения и выводит результат. Это можно назвать вложенной обработкой, а так как вложенностей лучше избегать, то лучше использовать тот метод программирования бота, который как раз-таки реализован в телеграмм боте.

Заключение

Надеюсь, что после прочтения данной статьи, Вы как минимум поняли основной принцип создания своего Telegram или Vk бота, а как максимум — легко сможете написать своего бота.

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

Весь код опубликован в моём профиле GitHub.

https://github.com/1chemp/telegram-bot — Телеграм Бот

https://github.com/1chemp/vk-bot — Бот Вконтакте

easy-vk — Анализ работоспособности пакетов Python

Всего загрузок за неделю (368)

Популярность по версии

Иждивенцы
0

Звезды GitHub
3

Вилки
0

Авторы
3


Популярность прямого использования


Пакет PyPI easy-vk получает в общей сложности 368 загрузок в неделю. Таким образом, мы забили уровень популярности easy-vk будет ограничен.

На основе статистики проекта из репозитория GitHub для пакет PyPI easy-vk, мы обнаружили, что он снялся 3 раза, и что 0 других проектов в экосистеме зависят от него.

Показанные числа загрузок являются средними еженедельными загрузками с последние 6 недель.

0,0,37 (Последняя)

Угроза безопасности и лицензии для последней версии

Дата выпуска
Aug 3, 2020

Direct Vulnerabilities
  • C
  • H
  • M
  • L
Indirect Vulnerabilities
  • C
  • H Риск лицензии0063
  • L

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


Лицензия
Массачусетский технологический институт


Политика безопасности
Нет

Мы нашли для вас способ внести свой вклад в проект! Похоже easy-vk не содержит политики безопасности.


Вы можете подключите репозиторий вашего проекта к Snyk чтобы быть в курсе предупреждений системы безопасности и получать автоматические исправления Запросы.

Защитите свой проект от уязвимостей с помощью Snyk

Частота коммитов

Нет недавних коммитов

Открытые проблемы
0

Открытый PR
0

Последняя версия
2 года назад

Последняя фиксация
1 год назад


Дальнейший анализ состояния обслуживания easy-vk на основе частота выпуска версий PyPI, активность репозитория, и другие точки данных определили, что его обслуживание Неактивный.

Важным сигналом обслуживания проекта для easy-vk является это не видел никаких новых версий, выпущенных для PyPI в за последние 12 месяцев 90 124 и может считаться прекращенным проектом или проектом, который получает мало внимания со стороны его сопровождающих.

За последний месяц мы не обнаружили никаких запросов на вытягивание или изменений в статус issue был обнаружен для репозитория GitHub.

Совместимость версий Python
>=3,6, <3,8


Возраст
2 года

Последняя версия
2 года назад

Зависимости
3 прямых / 8 всего

Версии
36

Обслуживающий персонал
1

Колеса
Независимый от ОС

Переменные — JuniperBot

Коллекция наиболее часто используемых переменных шаблона сообщения


Участник

Переменная, которая выводит некоторую полезную информацию об участнике, вызвавшем эту команду или событие (например, объявление о повышении уровня).

Переменная Описание
{{член}} Упоминание
{{member.id}} Уникальный идентификатор
{{упоминание участника}} Упоминание
{{member.псевдоним}} Никнейм на сервере или оригинальное имя
{{member.tag}} Полный тег в формате Псевдоним#1234
{{member.name}} Имя
{{член.дискриминатор}} Дескриминатор (4 цифры после #)
{{member.joinedAt}} Дата и время присоединения
{{member. createdAt}} Дата и время регистрации
{{member.status}} Статус (в сети, бездействие, DnD, офлайн) со значком эмодзи
{{member.bio}} Био указано в !био
{{member.avatarUrl}} URL-адрес аватара
{{member.rank.level}} Уровень участника
{{member.rank.remainingExp}} Осталось опыта до следующего уровня
{{member.rank.levelExp}} Общий опыт, необходимый для текущего уровня
{{member.rank.levelCurrentExp}} Опыт участника на текущем уровне
{{member. rank.totalExp}} Всего участник EXP заработал
{{member.rank.rank}} Ранг члена
{{member.rank.cookies}} Количество файлов cookie, которые есть у участника
{{member.rank.voiceActivity}} Продолжительность голосовой активности

Гильдия

Переменная, которая выводит некоторую полезную информацию о вашем сервере.

Переменная Описание
{{гильдия}} Имя
{{владелец гильдии}} Упоминание владельца
{{гильдия.id}} Уникальный идентификатор
{{гильдия. имя}} Имя
{{гильдия.iconUrl}} URL-адрес значка
{{guild.afkTimeout}} Тайм-аут AFK для голосовых каналов (в минутах)
{{guild.afkChannel}} Голосовой канал АФК
{{guild.memberCount}} Количество членов
{{гильдия.createdAt}} Дата и время создания
{{guild.boostCount}} Количество активных бустов

Канал

Переменная, которая выводит некоторую полезную информацию о целевом канале шаблона сообщения (не будет работать для сообщений DM).

Переменная Описание
{{канал}} Упоминание
{{channel. id}} Уникальный идентификатор
{{channel.name}} Имя
{{канал.упоминание}} Упоминание
{{channel.topic}} Описание (Тема)
{{channel.position}} Номер позиции в списке каналов (1 вверху списка)
{{channel.createdAt}} Дата и время создания

Сообщение

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

Переменная Описание
{{сообщение}} Содержание сообщения ( {{message. contentRaw}} )
{{сообщение.id}} Уникальный идентификатор
{{message.contentRaw}} Необработанное текстовое содержимое этого сообщения.
{{message.contentDisplay}} Текстовое содержимое этого сообщения в формате, который будет показан клиенту Discord.
{{message.contentStripped}} Текстовое содержимое этого сообщения в формате, который будет показан клиенту Discord, и вся уценка удалена.
{{сообщение.автор}} Автор сообщения
{{сообщение.createdAt}} Дата и время создания
{{сообщение.упомянутые члены[0]}} Первый упомянутый участник. Счет начинается с 0, введите 1 для секунды и т. д.
{{сообщение.упомянутые роли}} Список упомянутых ролей
{{сообщение.упомянутые роли[0]}} Первая упомянутая роль. Счет начинается с 0, введите 1 для секунды и т. д.
{{сообщение.упомянутые каналы}} Список упомянутых текстовых каналов
{{сообщение.упомянутые каналы[0]}} Первый упомянутый канал. Счет начинается с 0, введите 1 для секунды и т. д.
{{сообщение.вложения}} Список приложений
{{message.attachments[0]}} Первое вложение. Счет начинается с 0, введите 1 для секунды и т. д.

Рейтинг участников

Дополнительные переменные ранжирования участников.

Переменная Описание
{{ролиДобавлены}} Добавлен список ролевых наград
{{rolesRemoved}} Список ролевых наград удален

Пользовательские команды

Дополнительные переменные для пользовательских команд.

Переменная Описание
{{аргументы}} Текст, введенный с помощью команды. Например, для команды !command Hello There! аргументов будут Привет!
{{arguments.get(N)}} Получить аргумент, введенный с помощью команды. Аргументы разделены пробелами, поэтому вы должны вставить его номер позиции как N :
  • {{arguments. get(1)}} для первого аргумента;
  • {{arguments.get(2)}} для секунды и т. д.;
  • {{arguments.range(N,M)}} Получить ряд аргументов. Например, {{arguments.range(2,5)}} выведет аргументы, начиная со второго по пятый.
    {{аргументы.после(2)}} Получить все аргументы, начиная со второго. Выберите свой номер.
    {{аргументы.до(4)}} Получить аргументы, начиная с первого по четвертый. Выберите свой номер.

    Автоматическая модерация

    Эти переменные используются в фильтрах автоматической модерации для уведомлений о нарушениях. Каждый фильтр имеет свой набор переменных:‌

    Фильтр ссылок
    Переменная Описание
    {{infraction.linkUrl}} Обнаружена ссылка
    {{infraction. inviteCode}} Обнаружен код приглашения
    Фильтр приглашений
    Переменная Описание
    {{infraction.inviteUrl}} Обнаружена ссылка для приглашения discord.gg/
    Фильтр плохих слов
    Переменная Описание
    {{нарушение.слово}} Обнаружено недопустимое слово
    Фильтр повторяющегося текста
    Переменная Описание
    {{infraction.count}} Количество инициированных сообщений
    Фильтр Caps Lock
    Переменная Описание
    {{нарушение. процент}} Процент символов верхнего регистра в сообщении
    Фильтр эмоций
    Переменная Описание
    {{infraction.count}} Количество обнаруженных эмоций
    Фильтр упоминаний
    Переменная Описание
    {{infraction.mentionType}} Тип обнаруженных чрезмерных упоминаний
    {{infraction.count}} Обнаружено количество избыточных упоминаний
    Фильтр Zalgo
    Переменная Описание
    {{нарушение. процент}} Процент Zalgo-символов ко всему сообщению

    Подписки

    Эти переменные используются в подписках на сообщения объявлений:

    Твич
    Переменная Описание
    {{канал}} Имя канала
    {{канал.url}} URL-адрес канала
    {{поток}} Название потока
    {{игра}} Название игры
    Trovo.live
    Переменная Описание
    {{канал}} Имя канала
    {{канал. url}} URL-адрес канала
    {{поток}} Название потока
    YouTube
    Переменная Описание
    {{канал}} Имя канала
    {{канал.url}} URL-адрес канала
    {{видео}} Название видео
    {{video.url}} URL-адрес видео
    ВК
    Переменная Описание
    {{почта}} URL страницы поста

    Наверх

    (Kotlin) Как создать чат-бота

    Что такое чат-бот? Это приложение Space, которое общается с пользователем Space в собственном канале чатов. Минимально жизнеспособный бот должен:

    • Отвечать списком доступных команд, когда пользователь вводит / (косая черта) в канале.

    • Укажите хотя бы одну команду: после того, как пользователь отправит эту команду на канал, бот должен что-то сделать, а затем ответить сообщением.

    Что мы будем делать

    Конечно же, ваш первый чат-бот! Без лишних слов, приветствуйте — бот «Напомнить мне»!

    Наш бот отправит пользователю напоминание через заданное время. Например, если пользователь отправляет боту команду напомнить 60 вздремнуть , через 60 секунд бот ответит вздремни сообщение. Кроме того, наш бот будет иметь команду, которая предоставляет помощь по запросу.

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

    Стартовый набор для создания чат-ботов

    Что нам понадобится в нашем путешествии?

    JetBrains IntelliJ IDEA

    Мы напишем нашего бота на Котлине. Таким образом, вы можете использовать любую IDE по вашему выбору, но в этом руководстве подразумевается, что вы используете IntelliJ IDEA.

    Платформа Ktor

    Эта платформа позволяет легко создавать все типы связанных приложений, например серверы, клиенты, мобильные приложения и приложения для браузера. Мы получим его как одну из зависимостей Gradle, так что никаких дополнительных действий с вашей стороны не потребуется. Конечно, вне этого руководства вы можете создать бота Space, используя любую понравившуюся вам веб-инфраструктуру, например Node.js, ASP.NET и т. д.

    Space SDK

    Как вы, возможно, знаете из раздела «Приложения», любое приложение должно взаимодействовать со Space с помощью Space HTTP API. Чтобы облегчить жизнь разработчикам приложений Space, мы предоставляем Space SDK для Kotlin и .NET. SDK содержит клиент HTTP API, который позволяет легко проходить аутентификацию и взаимодействовать с Space с помощью нескольких высокоуровневых классов. Помимо фреймворка Ktor, мы получим SDK как зависимость Gradle.

    Проходческие услуги

    Такая служба открывает локальные серверы для общедоступного Интернета. Это позволит нам запускать нашего чат-бота локально и получать к нему доступ из Space через общедоступный URL-адрес (мы укажем его как конечную точку чат-бота). Например, вы можете использовать для этой цели ngrok, PageKyte или другую службу туннелирования. Для начала работы с сервисом туннелирования необходимо скачать клиент сервиса: клиент ngrok, клиент PageKyte. Для наших целей достаточно бесплатного плана для ngrok или PageKyte.

    Мы настоятельно рекомендуем использовать службу туннелирования только в целях тестирования во время разработки. Не используйте его для регулярного размещения чат-бота на своем компьютере. Открытый и общедоступный порт на вашем компьютере представляет серьезную угрозу безопасности.

    Шаг 1.

    Создайте проект Ktor
    1. Откройте Intellij IDEA.

    2. Начните создавать новый проект с помощью File | Новый | Проект.

    3. В списке шаблонов выберите Ktor.

    4. Укажите имя проекта и имя веб-сайта, выберите Gradle Kotlin в системе сборки и снимите флажок Добавить образец кода.

    5. Щелкните Далее. Мы не собираемся устанавливать какие-либо плагины Ktor, поэтому на следующей странице просто нажмите «Создать».

    6. Вот оно! Теперь у нас есть пустой проект Ktor.

    Шаг 2. Получите Space SDK и другие зависимости

    Для нашего чат-бота требуются следующие библиотеки:

    • Space SDK для JVM

      Чтобы получить инструкции о том, как ссылаться на последнюю версию SDK, откройте API Playground в вашем Space экземпляр (Расширения | API Playground). Справа в списке в разделе «Код» выберите Kotlin SDK и нажмите «Настроить зависимость». Откроется окно с фрагментами кода для Gradle и Maven. Фрагменты всегда ссылаются на последнюю доступную версию SDK.

    • FasterXML/jackson: для работы с полезными данными JSON.

    • HTTP-клиент Ktor: универсальное приложение Ktor не ссылается на библиотеки для HTTP-клиента. Нам понадобится клиент для отправки запросов в космос. Мы будем использовать HTTP-клиент CIO Ktor, но вы можете использовать любой другой веб-движок для HTTP-клиента.

    1. Откройте build.gradle.kts и добавьте:

      • . /мавен")

      • В раздел зависимостей добавить зависимости к необходимым библиотекам:

        реализация 'com.fasterxml.jackson.module:jackson-module-kotlin:2.13.3' реализация "org.jetbrains:space-sdk-jvm:$space_sdk_version" реализация "io.ktor:ktor-client-core:$ktor_version" реализация "io.ktor:ktor-client-cio:$ktor_version"

        реализация("com. fasterxml.jackson.module:jackson-module-kotlin:$jackson_version") реализация("org.jetbrains:space-sdk-jvm:$space_sdk_version") реализация("io.ktor:ktor-client-core:$ktor_version") реализация("io.ktor:ktor-client-cio:$ktor_version")

      В gradle.properties указать нужные версии пакетов:

      ktor_version=2.0.3 jackson_version=2.13.3 # Мы используем SDK v.106390, но когда вы читаете это руководство, может быть доступна более новая версия. # Чтобы узнать, какая версия SDK является последней доступной: откройте API Playground, # в разделе "Код" справа выберите "Kotlin SDK" и нажмите "Настроить зависимость..." space_sdk_version=106390-beta

    2. Мы не собираемся писать какие-либо тесты для этого приложения, поэтому очистите все зависимости testImplementation из раздела dependencies .

      Ваш build.gradle.kts должен выглядеть так:

      val ktor_version: Строка по проекту val kotlin_version: строка по проекту val logback_version: строка по проекту val space_sdk_version: строка по проекту val jackson_version: строка по проекту плагины { заявление котлин ("jvm") версия "1.7.10" } группа = "com.example" версия = "0.0.1" заявление { mainClass.set("com.example.ApplicationKt") val isDevelopment: Boolean = project.ext.has("разработка") applicationDefaultJvmArgs = listOf("-Dio.ktor.development=$isDevelopment") } репозитории { mavenCentral() maven("https://maven. pkg.jetbrains.space/public/p/space/maven") } зависимости { реализация ("io.ktor: ktor-server-core-jvm: $ktor_version") реализация("io.ktor:ktor-server-netty-jvm:$ktor_version") реализация ("ch.qos.logback: logback-classic: $ logback_version") реализация ("com.fasterxml.jackson.module: jackson-module-kotlin: $ jackson_version") реализация("org.jetbrains:space-sdk-jvm:$space_sdk_version") реализация("io.ktor:ktor-client-core:$ktor_version") реализация("io.ktor:ktor-client-cio:$ktor_version") }

      gradle.properties должно выглядеть так:

      ktor_version=2.0.3 котлин_версия = 1.7.10 logback_версия = 1.2.3 jackson_version=2.13.3 kotlin. code.style=официальный space_sdk_version=106390-beta

    3. В окне Gradle нажмите «Перезагрузить все проекты Gradle», чтобы Gradle загрузил необходимые зависимости.

    4. Готово! Теперь у нас есть Space SDK в нашем проекте.

    Шаг 3. Запустите службу туннелирования

    Мы настоятельно рекомендуем использовать службу туннелирования только в целях тестирования во время разработки. Не используйте его для постоянного размещения чат-бота на своем компьютере. Открытый и общедоступный порт на вашем компьютере представляет серьезную угрозу безопасности.

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

    Прежде чем мы зарегистрируем нашего чат-бота в Space, мы должны получить для него общедоступный URL-адрес. Поскольку ваша среда разработки, вероятно, находится за NAT, самый простой способ получить URL-адрес — использовать службу туннелирования. В нашем случае мы будем использовать ngrok.

    1. Загрузите и разархивируйте клиент ngrok.

    2. В терминале (в macOS или Linux) или в командной строке (в Windows) откройте каталог ngrok.

    3. По умолчанию наш проект Ktor настроен на запуск HTTP-сервера на порту 8080 (вы можете проверить это в файле resources/application.conf ). Запустите туннелирование для этого порта:

      ./ngrok http 8080

    4. Служба ngrok запустится. Это будет выглядеть примерно так:

      Статус сеанса онлайн Учетная запись [email protected] (план: бесплатно) Версия 3.0.6 Регион США (нас) Задержка - Веб-интерфейс http://127.0.0.1:4040 Перенаправление https://98af-94-158-242-146.ngrok.io -> http://localhost:8080 Соединения ttl opn rt1 rt5 p50 p90 0 0 0.00 0.00 0. 00 0.00

      Здесь нас интересует строка Forwarding — она содержит публичный URL. ngrok перенаправляет запросы с этого URL-адреса на наш локальный хост, используя свою службу туннелирования. В приведенном выше примере адрес https://98af-94-158-242-146.ngrok.io , но в вашем случае это будет что-то другое, поскольку ngrok динамически генерирует эти случайные URL-адреса.

    5. Отличная работа! Теперь у нас есть работающая служба туннелирования и общедоступный URL-адрес нашего будущего чат-бота.

    Шаг 4. Зарегистрируйте чат-бота в Space

    Чтобы Space и чат-бот могли общаться друг с другом, мы должны зарегистрировать бота в Space.

    При разработке приложения необходимо решить две важные вещи:

    • Распространение приложения:

      • Приложения для одной организации предназначены только для одной организации Space. Пользователь Space регистрирует и настраивает приложение для одной организации вручную в пользовательском интерфейсе Space.

      • Приложения для нескольких организаций предназначены для нескольких космических организаций. Мультиорганизационное приложение регистрируется и настраивается в конкретном экземпляре Space с помощью вызовов API.

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

    • Предмет авторизации: решите, как ваше приложение должно действовать в Space — от своего имени, от имени конкретного пользователя Space или и то, и другое. Это определяет, какие потоки авторизации будет использовать приложение.

      В нашем случае чат-бот будет сам отправлять уведомления в свой чат-канал. В качестве потока OAuth 2.0 мы будем использовать поток учетных данных клиента. Это позволяет приложению авторизоваться в Space с использованием идентификатора клиента и секрета клиента.

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

    1. Откройте экземпляр Space.

    2. На панели навигации нажмите «Расширения» и выберите «Приложения».

    3. Щелкните Новое приложение.

    4. Дайте приложению уникальное имя, например, бот-напоминай и нажмите «Создать».

    5. Откройте вкладку Авторизация. На этой вкладке мы ничего менять не будем — наш бот простой и не получает никаких данных из космоса.

      Мы находимся на этой вкладке только для того, чтобы вы заметили, насколько это важно — если ваше приложение должно иметь доступ к различным модулям Space, вы должны предоставить ему соответствующие разрешения. Подробнее о запросе разрешений.

    6. Откройте вкладку Аутентификация. Обратите внимание, что поток учетных данных клиента включен для всех приложений по умолчанию. Нам нужно получить идентификатор клиента и секрет клиента приложения. Наш чат-бот будет использовать их для получения токена доступа к Space.

    7. Когда пользователь вводит что-либо в канал чат-бота, Space отправляет пользовательский ввод в приложение. Итак, наш следующий шаг — указать URL-адрес конечной точки нашего приложения и выбрать, как мы будем проверять запросы из Space.

      Откройте вкладку Конечная точка.

      В URI конечной точки укажите общедоступный URL-адрес, сгенерированный службой туннелирования для нашего бота. Давайте сделаем эту конечную точку менее универсальной и добавим постфикс к URL-адресу, например, api/space . Таким образом, конечная конечная точка будет https://{random_string_from_ngrok}.ngrok.io/api/space

      . По умолчанию Space рекомендует использовать метод проверки открытого ключа. Оставим значение по умолчанию и нажмем Сохранить.

    8. Отличная работа! Теперь наш бот зарегистрирован в Space, у нас есть все необходимые данные для аутентификации, и мы готовы приступить к разработке нашего бота.

    Шаг 5. Создание клиента Space

    Все подготовительные этапы позади, давайте напишем код! Во-первых, мы должны начать с создания клиента Space, который позволит нам делать запросы к нашему экземпляру Space.

    1. Добавьте в проект файл Client.kt .

    2. Добавьте код в файл Client.kt :

      package org.remindme импортировать space.jetbrains.api.runtime.SpaceAppInstance импортировать space.jetbrains.api.runtime.SpaceAuth импортировать space.jetbrains.api.runtime.SpaceClient импортировать space.jetbrains.api.runtime.ktorClientForSpace импортировать space.jetbrains.api.runtime.resources.chats импортировать space.jetbrains.api.runtime.types.ChannelIdentifier импортировать space.jetbrains. api.runtime.types.ChatMessage импортировать space.jetbrains.api.runtime.types.ProfileIdentifier // описывает подключение к экземпляру Space val spaceAppInstance = SpaceAppInstance( // Скопируйте-вставьте идентификатор клиента и секрет клиента // ваше приложение получено из космоса. clientId = "идентификатор клиента, назначенный приложению", clientSecret = "секрет клиента, назначенный приложению", // URL вашего экземпляра Space spaceServerUrl = "https://mycompany.jetbrains.space" ) частный val spaceHttpClient = ktorClientForSpace() // Клиент Space используется для вызова методов Space API. // Приложение использует поток OAuth учетных данных клиента (см. [SpaceAuth. ClientCredentials]) // авторизоваться от своего имени. val spaceClient = SpaceClient(ktorClient = spaceHttpClient, appInstance = spaceAppInstance, аутентификация = SpaceAuth.ClientCredentials()) // Получаем пользователя по ID и отправляем ему «сообщение». // 'spaceClient' дает вам доступ к любой конечной точке пространства. приостановить удовольствие sendMessage (userId: String, сообщение: ChatMessage) { spaceClient.chats.messages.sendMessage( канал = ChannelIdentifier.Profile(ProfileIdentifier.Id(userId)), содержание = сообщение ) }

      Примечания:
      • sendMessage(userId: String, message: ChatMessage) использует клиент для отправки сообщений в Space. Давайте расширим это:

        • userId — это идентификатор пользователя, который отправил сообщение в наше приложение и которому мы хотим ответить.

        • ChatMessage — это класс API, который описывает сообщение чата. Дело в том, что сообщения — это не просто текст. Они могут включать сложное форматирование и даже элементы пользовательского интерфейса, такие как кнопки. Для упрощения создания таких сообщений в клиенте API предусмотрен специальный DSL — Конструктор сообщений. Мы рассмотрим это в следующих шагах.

        • spaceClient.chats.messages.sendMessage() — посмотрите, как мы ссылаемся на подсистему чатов. Самое классное в классе SpaceHttpClient — это то, что он позволяет получить доступ к любому модулю Space. Таким образом, если вы хотите получить профиль участника, вы можете позвонить в Team Directory:

          spaceClient.teamDirectory.profiles.getProfile(ProfileIdentifier.Username("John. Doe"))

          Чтобы увидеть список модулей, которые вы можете получить доступ через клиент, откройте API Playground. Заголовки верхнего уровня здесь — это модули, к которым можно получить доступ:

          Вы также можете использовать автозавершение кода в своей среде IDE — просто введите spaceClient. и изучить предложения.

    3. Готово! Теперь у нас есть клиент, поэтому мы можем двигаться дальше и создать первую команду для нашего чат-бота.

    Шаг 6. Создайте свою первую команду

    Давайте начнем с чего-то простого — команды help , которая показывает подсказки по использованию нашего чат-бота.

    1. Создайте CommandHelp.kt и добавьте следующий код:

      package org.remindme импортировать space.jetbrains.api.runtime.helpers.message импортировать space.jetbrains.api.runtime.types.ApiIcon импортировать space. jetbrains.api.runtime.types.ChatMessage импортировать space.jetbrains.api.runtime.types.MessageOutline импортировать space.jetbrains.api.runtime.types.MessageStyle // команда для отображения помощи чат-бота приостановить удовольствие runHelpCommand (полезная нагрузка: MessagePayload) { // получаем идентификатор пользователя из полезной нагрузки и отправляем ему справочное сообщение sendMessage(payload.userId, helpMessage()) } // строим справочное сообщение с помощью специального DSL весело helpMessage(): ChatMessage { ответное сообщение { раздел { text("Скоро помощь будет показана здесь!") } } }

    2. Отлично! Теперь у нас есть команда, которую пользователь может попробовать в действии.

    Шаг 7. Определение конечной точки

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

    Это не учебник Ktor, поэтому мы не будем углубляться в особенности Ktor. Кстати, если вы не знакомы с Ktor, это хорошая возможность познакомиться с этим замечательным фреймворком: просто обратите внимание, насколько лаконичен синтаксис Ktor.

    1. Наш чат-бот — это не только клиентское приложение, но и сервер — он должен прослушивать и обрабатывать запросы, поступающие из космоса. Для этой цели Ktor предоставляет функцию маршрутизации. Давайте воспользуемся этой функцией для обработки запросов POST на конечной точке /api/space .

      Создайте файл Routes.kt и добавьте следующий код:

      package org.remindme импортировать com.fasterxml.jackson.databind.ObjectMapper импортировать io. ktor.http.* импортировать io.ktor.server.application.* импортировать io.ktor.server.request.* импортировать io.ktor.server.response.* импортировать io.ktor.server.routing.* импортировать kotlinx.coroutines.launch импортировать space.jetbrains.api.ExperimentalSpaceSdkApi импортировать space.jetbrains.api.runtime.helpers.command импортировать space.jetbrains.api.runtime.helpers.readPayload импортировать space.jetbrains.api.runtime.helpers.verifyWithPublicKey импортировать space.jetbrains.api.runtime.types.ListCommandsPayload импортировать space.jetbrains.api.runtime.types.MessagePayload весело Application.configureRouting () { маршрутизация { сообщение ("API/пространство") { // чтение тела запроса val body = call. receiveText() // чтение заголовков, необходимых для проверки пробелов val подпись = call.request.header("X-Space-Public-Key-Signature") val timestamp = call.request.header("X-Space-Timestamp")?.toLongOrNull() // verifyWithPublicKey получает ключ из Space, использует его для генерации хэша сообщения // и сравнивает сгенерированный хэш с хешем в сообщении if (signature.isNullOrBlank() || timestamp == null || !spaceClient.verifyWithPublicKey( тело, метка времени, подпись ) ) { call.respond(HttpStatusCode.Unauthorized) возврат@почта } // анализируем полезную нагрузку сообщения // MessagePayload = пользователь отправляет команду // ListCommandsPayload = пользователь вводит косую черту или символ когда (значение полезной нагрузки = readPayload (тело)) { это MessagePayload -> { runHelpCommand(контекст) call. respond(HttpStatusCode.OK, "") } это ListCommandsPayload -> { } } } } }

      Что здесь происходит:

      • Application.configureRouting() настраивает функцию маршрутизации Ktor.

      • spaceClient.verifyWithPublicKey() проверяет экземпляр Space, от которого клиент получает запрос. Он использует открытый ключ из Space для вычисления хэша сообщения и сравнения его с хешем, отправленным в заголовке сообщения. Вы можете найти больше информации о том, как это работает здесь. В этом руководстве мы обрабатываем и проверяем запросы самостоятельно. Кроме того, вы можете использовать Space.processPayload() вспомогательный метод для этой цели. В этом случае вам не нужно реализовывать проверку запросов.

      • readPayload(body: String) — это вспомогательная функция SDK, которая получает данные JSON из Space и десериализует их в ApplicationPayload . Например, в нашем случае необработанные данные из космоса могут выглядеть так:

        { "имя_класса": "MessagePayload", "сообщение": { "имя класса": "Контекст сообщения", "messageId": "JxT000JxT", "channelId": "31m0WE41iCBP", "тело": { "className": "СообщениеЧата.Текст", "текст": "помощь" }, "createdTime": "2020-11-08T21:34:24.919Z" }, "accessToken": "", "verificationToken": "85e23ff", "Идентификатор пользователя": "1eAeu31CZA" }

      • Самая интересная часть — анализ типа полезной нагрузки. В Space SDK есть несколько типов полезной нагрузки, но в этом руководстве мы сосредоточимся только на двух из них:

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

        • ListCommandsPayload : бот получает эту полезную нагрузку, когда пользователь нажимает кнопку косой черты /. Бот должен ответить списком доступных команд.

      • При получении MessagePayload важно ответить некоторым HTTP-кодом ( 200 OK в нашем случае). В противном случае пользователь получит 500 Internal Server Error .

    2. Убедитесь, что функция приложения main() в Application.kt запускает сервер с включенной маршрутизацией:

      fun main() { встроенный сервер (Netty, порт = 8080) { настроить маршрутизацию () }. старт(ожидание = истина) }

    3. Готово! Теперь у нас есть рабочая команда, и мы готовы запустить нашего бота в первый раз!

    Шаг 8. Запустите бота

    1. Откройте файл Application.kt .

    2. Запустите приложение, нажав Запустить в поле рядом с основной функцией в Application.kt :

    3. Откройте экземпляр Space и найдите бота: нажмите 67 9 67 90 90

      его имя.

    4. Если заглянуть в код, то видно, что мы никак не анализируем отправленные пользователем команды. На любой запрос мы отвечаем helpMessage . Итак, чтобы протестировать нашего бота, напишите что-нибудь в чате. Вы должны получить справочное сообщение:

    5. Работает! Теперь давайте добавим остальные функции бота.

    Шаг 9.

    Добавьте поддержку слэш-команд

    Давайте сделаем нашего бота полностью функциональным:

    • Чтобы считаться чат-ботом, приложение должно иметь возможность отвечать списком доступных команд, когда пользователь нажимает / косая черта в чате. В этом случае бот получает ListCommandsPayload тип полезной нагрузки.

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

    1. Создайте файл Commands.kt :

      package org.remindme импортировать space.jetbrains.api.runtime.types.* класс ApplicationCommand( имя val: строка, val информация: строка, val run: suspend (полезная нагрузка: MessagePayload) -> Unit ) { /** * [CommandDetail] возвращается в Space с информацией о команде. * Список команд показывается пользователю. */ fun toSpaceCommand() = CommandDetail(имя, информация) } // список доступных команд значение поддерживаемых команд = listOf ( ApplicationCommand( "помощь", "Покажи эту справку", ) { полезная нагрузка -> runHelpCommand (полезная нагрузка) }, ApplicationCommand( "напоминать", "Напомни мне о чем-нибудь через N секунд, например, " + "чтобы напомнить о \"веще\" за 10 секунд, отправьте 'напомнить 10 о предмете'", ) { полезная нагрузка -> runRemindCommand (полезная нагрузка) } ) /** * Ответ на [ListCommandsPayload]. * Space будет отображать возвращенные команды как команды, поддерживаемые вашим приложением. */ весело getSupportedCommands() = Команды( поддерживаемыеCommands.map { it.toSpaceCommand() } )

      Здесь:

      • Класс ApplicationCommand описывает команду чат-бота: После того, как пользователь отправит чат-боту команду с именем name , бот выполнит функцию команды run .

        Обратите внимание, что команда должна реализовывать функцию toSpaceCommand , которая возвращает CommandDetail – имя и описание команды.

      • Когда бот получает ListCommandsPayload , getSupportedCommands() 9Функция 0257 вернет карту CommandDetail .

    2. Создайте файл CommandRemind. kt :

      пакет org.remindme импортировать kotlinx.coroutines.delay импортировать space.jetbrains.api.runtime.helpers.commandArguments импортировать space.jetbrains.api.runtime.helpers.message импортировать space.jetbrains.api.runtime.types.* приостановить веселье runRemindCommand (полезная нагрузка: MessagePayload) { val напомнитьMeArgs = getArgs (полезная нагрузка) ?: запустить { sendMessage(payload.userId, helpMessage()) возвращаться } напоминаниеAfterDelay(payload.userId, напоминаниеMeArgs) } приватная приостановка забавы sendMessage(userId, acceptRemindMessage(remindMeArgs)) задержка (напомнитьMeArgs.delayMs) sendMessage (идентификатор пользователя, напомнить сообщение (напомнитьMeArgs)) } личное развлечение acceptRemindMessage (remindMeArgs: RemindMeArgs): ChatMessage { ответное сообщение { контур( Структура сообщения( icon = ApiIcon("флажок установлен"), text = "Напоминание принято" ) ) раздел { text("Я напомню вам через ${remindMeArgs. delayMs / 1000} секунд о \"${remindMeArgs.reminderText}\"") } } } личное развлечение напоминаниеMessage(remindMeArgs: RemindMeArgs): ChatMessage { ответное сообщение { контур( Структура сообщения( значок = APIIcon("часы"), текст = "Напоминание" ) ) раздел { текст (напоминатьMeArgs.reminderText) текст( размер = РазмерТекстаСообщения.МАЛЕНЬКИЙ, content = "Прошло ${remindMeArgs.delayMs / 1000} секунд" ) } } } личное развлечение getArgs (полезная нагрузка: MessagePayload): RemindMeArgs? { val args = payload. commandArguments() ?: вернуть ноль val delayMs = args.substringBefore(" ").toLongOrNull()?.times(1000) ?: вернуть ноль val напоминаниеText = args.substringAfter(" ").trimStart().takeIf { it.isNotEmpty() } ?: вернуть ноль вернуть RemindMeArgs(delayMs, напоминаниетекст) } частный класс RemindMeArgs( val delayMs: Длинный, val напоминаниеТекст: строка, )

      Здесь:

      • runRemindCommand запускает таймер на указанное время. getArgs() получает аргументы команды напомнить (время и текст). Итак, когда пользователь вводит , напомнить 10 какой-то текст , аргументы будут такими: 10 , какой-то текст .

      • напоминаниеAfterDelay() отправляет acceptRemindMessage обратно пользователю и по истечении времени таймера отправляет напоминание .

      • acceptRemindMessage и repeatMessage используют DSL построителя сообщений для создания ChatMessage . MessageOutline — это небольшой блок, который предшествует основному тексту сообщения. ApiIcon возвращает изображение значка, которое будет отображаться перед сообщением.

    3. Отредактируйте файл CommandHelp.kt :

      package org.remindme импортировать space.jetbrains.api.runtime.helpers.message импортировать space.jetbrains.api.runtime.types.ApiIcon импортировать space.jetbrains.api.runtime.types.ChatMessage импортировать space.jetbrains.api.runtime.types.MessageOutline импортировать space.jetbrains.api.runtime.types.MessageStyle приостановить удовольствие runHelpCommand (полезная нагрузка: MessagePayload) { sendMessage(payload. userId, helpMessage()) } весело helpMessage(): ChatMessage { ответное сообщение { Структура сообщения( icon = ApiIcon("флажок установлен"), text = "Напомнить мне о помощи бота" ) раздел { text("Список доступных команд", MessageStyle.PRIMARY) поля { поддерживаемыеCommands.forEach { поле(it.name, it.info) } } } } }

      Здесь мы обновили helpMessage , так что теперь он возвращает список поддерживаемых команд .

    4. Отредактируйте файл Routes.kt :

      package org.remindme импортировать com.fasterxml.jackson.databind.ObjectMapper импортировать io.ktor.http.* импортировать io.ktor.server.application.* импортировать io.ktor.server.request.* импортировать io.ktor.server.response.* импортировать io.ktor.server.routing.* импортировать kotlinx.coroutines.launch импортировать space.jetbrains.api.runtime.helpers.command импортировать space.jetbrains.api.runtime.helpers.readPayload импортировать space.jetbrains.api.runtime.helpers.verifyWithPublicKey импортировать space.jetbrains.api.runtime.types.ListCommandsPayload импортировать space.jetbrains.api.runtime.types.MessagePayload весело Routing.api () { сообщение ("API/пространство") { // чтение тела запроса val body = call. receiveText() // проверить, исходит ли запрос от доверенного экземпляра Space val подпись = call.request.header("X-Space-Public-Key-Signature") val timestamp = call.request.header("X-Space-Timestamp")?.toLongOrNull() // verifyWithPublicKey получает ключ из Space, использует его для генерации хэша сообщения // и сравнивает сгенерированный хэш с хешем в сообщении if (signature.isNullOrBlank() || метка времени == null || !spaceClient.verifyWithPublicKey(тело, метка времени, подпись) ) { call.respond(HttpStatusCode.Unauthorized) возврат@почта } когда (значение полезной нагрузки = readPayload (тело)) { это ListCommandsPayload -> { // Пробел запрашивает список поддерживаемых команд call. respondText( // Сериализатор JSON ObjectMapper().writeValueAsString(getSupportedCommands()), ContentType.Application.Json ) } это MessagePayload -> { // пользователь отправил сообщение в приложение val имя_команды = полезная нагрузка.команда() val command = supportedCommands.find { it.name == commandName } если (команда == ноль) { runHelpCommand (полезная нагрузка) } еще { запустить { command.run (полезная нагрузка) } } call.respond(HttpStatusCode.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Закрыть
    Menu