Создание бота для вк: гайд для старта на платформе / Хабр

Содержание

python — Как обрабатывать обращения к боту VK асинхронно, чтобы пользователю не приходилось ждать, пока предыдущий получит ответ?

Вопрос задан

Изменён 3 года назад

Просмотрен 2k раз

Сейчас мой бот в Вк обрабатывает сообщения синхронно:

1) Получил сообщение от пользователя, 
2) Формирует для него ответ и отправляет
*При этом если напишет кто-то ещё, то бот не ответит ему, пока не закончит с предыдущим пользователем.

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

Ранее я уже задавал похожий вопрос и мне посоветовали библиотеку «multiprocessing», однако я не понимаю, каким образом её можно применить конкретно в моем случае. Вот пример того, как работает сейчас (синхронно) с использованием longpoll:

import vk_api
def main():
    # Подключение по токену сообщества, создание объекта longpoll
    session = vk_api.VkApi(token='xxxxxxxxxxxxxxxx')
    longpoll = VkBotLongPoll(session, group_id='xxxxxxxxxxxxxxxx')
    for event in longpoll.listen():
        # Если получено сообщение
        if (event.object.text):
            # Формируем ответ
            generate_response(event.object.text)
if __name__ == '__main__':
    main()

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

  • python
  • асинхронность

14

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

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

from threading import Thread
def send_response(message):
    print(" <-", message)
for i in range(100):
    # Таким образом можно вызывать функции, которые нужно обрабатывать длительное время
    Thread(target=send_response, args=(i,)).start()

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

Советую изучить темы многопоточности(threading), многопроцессинга(multiprocessing), асинхронности(asyncio). Следует понимать когда и что применять.

1

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Создание бота ВК — IF-STUDIO

Создание бота ВК — IF-STUDIO | Разработка сайтов под ключ

Исходя из нашего опыта, среднестатистическому пользователю соцсетей больше приятен в общении бот для ВК, чем звонок консультанта. Так устроена психология современного человека. Сегодня люди не любят телефонные разговоры, избегают задавать вопросы в комментариях, не хотят навязывания товара. Другое дело – бот сообщества. Разработка виртуального помощника для сообщества – отличная идея, достоинства которой невозможно переоценить.
Чем хорош бот для ВКонтакте?
Виртуальный мир развивается очень стремительно. Еще недавно каждый комментарий и сообщение обрабатывались вручную, а сегодня над созданием бота задумывается практически каждый владелец активной группы ВКонтакте. Чем же хорош бот?
1. Он не попросит зарплату, выходные и обеденный перерыв. Отвечает на сообщение мгновенно, решает вопросы, пока вы спите, ужинаете, отдыхаете. Бот не устанет, не выйдет из себя, отвечая на один и тот же вопрос в тысячный раз.
2. Создание бота в ВК экономит до 30% бюджета на разогрев аудитории.
3. Огромный спектр возможностей позволяет использовать ботов для подбора персонала, рассылки предложений, автоматизации обработки заказов, обслуживания тысяч людей одновременно и т. д.
Разработка бота ВКонтакте будет самым эффективным в плане конверсии способом коммуникации с аудиторией. Каждая группа ВК может приносить больше денег, благодаря создания виртуального сотрудника.
Специалисты IF STUDIO создадут для вас бота любого уровня. От простого помощника в рутинных делах, до виртуального гения продаж, который как по волшебству превратит самого холодного любопытного пользователя в готового к сделке покупателя. Остались вопросы? Позвоните нам по номеру 8 (999) 620-69-28, напишите в группу ВКонтакте или оставьте заявку на обратный звонок.

Заполните анкету!

Это поле необходимо заполнить! Это поле необходимо заполнить! Это поле необходимо заполнить! Это поле необходимо заполнить! Это поле необходимо заполнить! Это поле необходимо заполнить! Это поле необходимо заполнить!

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

Оставьте отзыв!

Загрузите свое фото (1:1)

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

Оставьте заявку

Это поле необходимо заполнить! Это поле необходимо заполнить! Это поле необходимо заполнить!

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

Отправлено!

Заявка успешно отправлена! В ближайшее
время мы с Вами свяжемся.

Закрыть

Отправлено!

Отзыв успешно отправлен!
В ближайшее время он появится на сайте!

Закрыть

Произошла ошибка!

Пожалуйста, попробуйте отправить заявку
ещё раз.

Закрыть

Произошла ошибка!

Пожалуйста, попробуйте отправить
отзыв ещё раз.

Закрыть

create-vk-bot — Анализ работоспособности пакетов npm

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

Риск безопасности и лицензии для основных версий

Все версии

9 02. 232 |
Версия Уязвимости Риск лицензии
08/2021

Популярный

  • C
  • H
  • M
  • L
  • H
  • M
  • L

License
Массачусетский технологический институт

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

Ваш проект подвержен уязвимостям?

Сканируйте свои проекты на наличие уязвимостей. Быстро исправить с помощью автоматизированного исправления. Начните работу со Snyk бесплатно.

Начните бесплатно

Еженедельные загрузки (2)

Скачать тренд

Звезды GitHub
2

Вилки
0

Авторы
1


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


Пакет npm create-vk-bot получает всего 2 загрузки в неделю. Таким образом, мы забили Уровень популярности create-vk-bot будет Ограничен.

На основе статистики проекта из репозитория GitHub для npm пакет create-vk-bot, мы обнаружили, что он был снялся 2 раза.

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

Частота фиксации

Нет последних коммитов

Открытые задачи
0

Открытый PR
0

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

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


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

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

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

Совместимость с Node.js
>=14.0.0


Возраст
1 год

Зависимости
0 Прямые

Версии
5

Установочный размер
2,42 КБ

Распределенные теги
1

Количество файлов
3

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

Типы TS
Нет


create-vk-bot имеет более одного и последнего тега по умолчанию, опубликованного для пакет нпм. Это означает, что для этого могут быть доступны другие теги. пакет, например рядом, чтобы указать будущие выпуски, или стабильный, чтобы указать стабильные релизы.

Приложение для фреймворка для мультиплатформенного бота

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

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

И вопрос: а если мы хотим создать более одного бота для одного сервиса? Например, мы знаем, что Средняя Азия сидит в Вконтакте и Telegram, как нам с минимальными усилиями написать ботов, работающих с людьми и здесь, и там? Если вдруг мы захотим использовать ботов для работы с аудиторией в Facebook, нам действительно придется разрабатывать нового бота с нуля и переписывать под него всю логику или пытаться разобраться в новом API или библиотеке?

  • На самом деле решения есть, и их много, но все они сводятся к тому, что вам приходится размещать своего бота из сервиса, который также предоставляет платформу. То есть как такового коробочного решения не получается. Возможно я ошибаюсь и не до конца понял, что на самом деле есть, но сам факт того, что первая ссылка в гугле не ведет к решению, уже настораживает. Есть еще Ботман. Это действительно мощная полноценная развивающая opensource-библиотека с кучей фишек и исчерпывающей документацией. И он написан на PHP.

Ничего не имеем против PHP, в любом случае публично не признаем, чтобы не строить лишнего, но и развивать на нем совсем не хотим. Решили поискать что-то похожее на Python , помимо Python есть куча библиотек, позволяющих работать с Telegram Bot API. И мы ничего не нашли, поэтому вскоре пришли к выводу, что надо писать самим.

Название Ботовод пришло само собой.SmartSpate

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


от ботовод импорт ботовод, сообщение, утилиты

@utils.convert_to_text
def handler_message (агент, чат, текст):
сообщение = сообщение ()
message. text = "Я получил сообщение"
agent.send_message (чат, сообщение)

@utils.convert_to_images
def handler_images (агент, чат, изображения):
сообщение = сообщение ()
message.text = "Я вижу фото"
agent.send_message (чат, сообщение)

def handler_echo (агент, чат, сообщение):
agent.send_message (чат, сообщение)

настройки = [
{
"имя": "телеграмма",
"агент": "botovod.agents.telegram",
"настройки": {"токен": "462755273: AzBZBQ7AAnqFEXqZ_P8Z-qvCddmjqTVAYPI", "метод": "опрос"}
},
]
botovod = Ботовод (настройки)
botovod.add_handler (обработчик_сообщения)
botovod.add_handler (handler_images)
botovod.add_handler (handler_echo)
ботовод.старт ()

 

Здесь мы определяем 3 обработчика входящих сообщений, каждый что-то отправляет в ответ. Первый: «мы получили сообщение», второй: «мы видим фото», третий просто отправит обратно то, что получил.

Затем создаем менеджер ботов (Ботовод) и отправляем ему настройки бота, в данном случае для бота в Telegram.
Затем последовательно добавляем обработчики сообщений.
Если сообщение приходит к боту, оно будет отправлено первому обработчику, который согласится его принять.

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

Сейчас постараемся подробно рассказать что к чему:

  • Есть бот менеджер — объект класса Ботовод — имя бота (у каждого свое уникальное), агент класс, который будет его обрабатывать и настройки для бота, передаются ему в конструкторе.
  • Так же в бот менеджер добавлены в очередь обработчики . Если боту приходит сообщение, менеджер будет проверять их по очереди, пока не найдет обработчик, который не выдает исключение NotPassed. Первый добавленный обработчик проверяется первым, последним, соответственно, последним.
  • Если вы собираетесь использовать Webhook , то Bot manager можно подключить к веб-серверу. Для этого у менеджера ботов есть метод прослушивания, который принимает имя бота, заголовки, тело запроса.
  • Затем он передает эти данные парсеру агента, который возвращает сгенерированное сообщение после того, как это сообщение протолкнуто через обработчики. В ответ метод listen возвращает словарь {«status»: any_code, «headers»: direct(), «body»: «any_text»} , где headers — заголовки ответа, а в body — тело ответа. Иногда мессенджер/социальная сеть требуют, чтобы сервер возвращал объект, поэтому мы считаем такое поведение удобным.

Приведем пример для бота Вконтакте под именем « vk-bot », а Ботовод подключится к серверу Джанго:


деф вид (запрос):
response=manager.listen("vk-bot", request.headers, request.text)
вернуть HttpResponse (статус = ответ ["статус"], заголовки = ответ ["заголовки"], ответ ["тело"]

 

Сгенерированное сообщение является объектом класса Message. Включает в себя поля:

  • текст – текст сообщения;
  • изображений – список изображений;
  • audios – список аудиофайлов;
  • видео – список с видео;
  • документов – список с документами;
  • локаций — список с локациями на карте;
  • raw – необработанное тело сообщения или дополнительная информация к нему (словарь).

Также каждый список объекта «Сообщение» (изображения, аудио, видео, документы) содержит специальные объекты, классы которых унаследованы от Attachment. Класс Attachment по умолчанию имеет метод url и file_path, в который парсеры агентов обычно помещают информацию о полученном файле. Список локаций содержит объекты Location, в конструкторе которым необходимо передать долготу и широту (longitude и latitude).

Ниже приведен пример построения сообщений в обработчиках.

 обработчик def (агент, чат, сообщение):
out = ботовод.Сообщение ()
изображение = botovod.

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

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

Закрыть
Menu