Как написать бота для ВК на c

Чат-бот для Вконтакте на ASP.NET Core C#

2019-02-25 в 16:07, admin , рубрики: .net, api, C#, c# .net vk api бот вконтакте

В данной статье представлен пошаговый пример создания простого чат-бота в социальной сети VK на ASP.NET Core C#.

Глава 1. Подготовка

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

Чат-бот для Вконтакте на ASP.NET Core C# - 1

Чат-бот для Вконтакте на ASP.NET Core C# - 2

Выбираем любой тип сообщества

Чат-бот для Вконтакте на ASP.NET Core C# - 3

Заполняем поля любыми данными и готово! Группа создана.

Как написать бота для «ВКонтакте» на С#

Чат-бот для Вконтакте на ASP.NET Core C# - 4

Приступим к настройке API

Чат-бот для Вконтакте на ASP.NET Core C# - 5

Создаем API ключ (Разрешаем все)

Чат-бот для Вконтакте на ASP.NET Core C# - 6

Чтобы реагировать на какие-либо события, наш скрипт должен о них узнать. Для этого существуют два подхода — Callback API и Long Poll. Мы будем реализовывать Callback API.

Немного теории

Callback API — это инструмент для отслеживания активности пользователей в сообществе ВКонтакте. С его помощью можно реализовать, например:

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

Настройка Callback API

Выбираем последнюю версию API

Чат-бот для Вконтакте на ASP.NET Core C# - 7

Выбираем тип события «входящее сообщение».

Чат-бот для Вконтакте на ASP.NET Core C# - 8

  1. Знакомство с API ВКонтакте
  2. Callback API VK
  3. JSON-схема

Глава 2. Реализация Callback API

Запускаем любимую IDE, создаем ASP.NET Core Web Application.

Тип проекта: Web Api
Framework: netcoreapp 2.2

Чат-бот для Вконтакте на ASP.NET Core C# - 9

C# Написание стандартного бота VK

Для подтверждения адреса сервера нам потребуется вернуть строку с уникальным значением.
Берем ее в настройках Callback API.

Чат-бот для Вконтакте на ASP.NET Core C# - 10

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

Чат-бот для Вконтакте на ASP.NET Core C# - 11

< «Config»: < «AccessToken»: «0bd8573ea40badd694b4da0bbc7d54f52996», «Confirmation» : «b23557a3» >, «Logging»: < «LogLevel»: < «Default»: «Warning» >>, «AllowedHosts»: «*» >

Когда в сообществе произойдет событие, ВКонтакте отправит на сервер запрос с данными в формате JSON с основной информацией об объекте, вызвавшем данное событие.

Структура входящего JSON.

< «type»:, «object»:, «group_id»: >
< «type»:»group_join», «object»:< «user_id»:1, «join_type»:»approved» >, «group_id»:1 >

Для удобства десериализации входящего JSON воспользуемся паттерном Data Transfer Object (DTO).

using System; using Newtonsoft.Json; namespace Cookie.Controllers < [Serializable] public class Updates < /// /// Тип события /// [JsonProperty(«type»)] public string Type < get; set; >/// /// Объект, инициировавший событие /// Структура объекта зависит от типа уведомления /// [JsonProperty(«object»)] public JObject Object < get; set; >/// /// ID сообщества, в котором произошло событие /// [JsonProperty(«group_id»)] public long GroupId < get; set; >> >

Для обработки входящих запросом создадим CallbackController.cs.

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace Cookie.Controllers < [Route(«api/[controller]»)] [ApiController] public class CallbackController : ControllerBase < /// /// Конфигурация приложения /// private readonly IConfiguration _configuration; public CallbackController(IConfiguration configuration) < _configuration = configuration; >[HttpPost] public IActionResult Callback([FromBody] Updates updates) < // Проверяем, что находится в поле «type» switch (updates.Type) < // Если это уведомление для подтверждения адреса case «confirmation»: // Отправляем строку для подтверждения return Ok(_configuration[«Config:Confirmation»]); >// Возвращаем «ok» серверу Callback API return Ok(«ok»); > > >

Обратите внимание: после получения уведомления Ваш сервер должен возвращать строку «ok» и статус HTTP 200. Если сервер несколько раз подряд вернет ошибку, Callback API временно перестанет отправлять на него уведомления

Callback API готов!

  1. Пример на github
  2. Сериализация и десериализация данных JSON
  3. DI IoC
  4. SDK для .NET Core 2.2

Глава 3. Вк?

Для взаимодействия с VK API на C# воспользуемся библиотекой VkNET

Установка через Nuget:
Package manager:
PM> Install-Package VkNet

.NET CLI:
> dotnet add package VkNet

Чат-бот для Вконтакте на ASP.NET Core C# - 12

Глава 4. Больше функционала!

Перед расширением логики бота, авторизуем группу в нашем веб-приложении.
Для этого регистрируем IVkApi в IoC-контейнере.

Еще по теме:  Как скрыть себя в Вконтакте на Айфоне

using VkNet; using VkNet.Abstractions; using VkNet.Model; services.AddSingleton(sp => < var api = new VkApi(); api.Authorize(new ApiAuthParams< AccessToken = Configuration[«Config:AccessToken»] >); return api; >);

Теперь расширим наш контроллер, добавив обработку входящих сообщений.

using VkNet.Abstractions; private readonly IConfiguration _configuration; private readonly IVkApi _vkApi; public CallbackController(IVkApi vkApi, IConfiguration configuration)

И сам кейс, который будет ловить новые сообщения. В нем мы добавить немного логики.

Немного документации

RandomId — уникальный (в привязке к API_ID и ID отправителя) идентификатор, предназначенный для предотвращения повторной отправки одинакового сообщения. Сохраняется вместе с сообщением и доступен в истории сообщений.

Заданный RandomId используется для проверки уникальности за всю историю сообщений, поэтому используйте большой диапазон(до int32).

PeerId — идентификатор назначения.

Text — текст личного сообщения. Обязательный параметр, если не задан параметр attachment.

using VkNet.Model; using VkNet.Model.RequestParams; using VkNet.Utils; case «message_new»:< // Десериализация var msg = Message.FromJson(new VkResponse(updates.Object)); // Отправим в ответ полученный от пользователя текст _vkApi.Messages.Send(new MessagesSendParams< RandomId = new DateTime().Millisecond, PeerId = msg.PeerId.Value, Message = msg.Text >); break; >

Глава 5. Деплой

Теперь нам потребуется сервер, куда будут направлены все запросы. Один из бесплатных вариантов это Heroku.

После регистрации на сайте, нам предложат создать новое приложение.

Чат-бот для Вконтакте на ASP.NET Core C# - 13

Вводим название проекта.

Чат-бот для Вконтакте на ASP.NET Core C# - 14

После создания проекта, будет перенаправление на страницу Deploy

Чат-бот для Вконтакте на ASP.NET Core C# - 15

Для Heroku CLI требуется Git. Если у вас еще не установлен Git, то скачайте его перед установкой CLI.

Для начала скачаем Heroku CLI.

Авторизуем Heroku аккаунт.
$ heroku login

Переходим в проектный каталог.
$ cd (путь до проекта)

Создаём текущем каталоге новый подкаталог с именем .git содержащий все необходимые файлы репозитория — основу Git-репозитория.
$ git init

Подключаемся к удалённому репозиторию (нашему проекту)
$ heroku git:remote -a (название проекта)

Buildpacks отвечают за преобразование развернутого кода в slug, который затем может быть выполнен на dyno.
$ heroku buildpacks:set https://github.com/jincod/dotnetcore-buildpack.git -a (название проекта)

Для того чтобы начать отслеживать (добавить под версионный контроль) наши файлы.
$ git add .

$ git commit -am «cookie»

$ git push heroku master

И идем делать чаёк.

Когда наше приложение будет загружено на Heroku, то мы сможем открыть его по следующей ссылке https://**PROJECT_NAME**.herokuapp.com/

Возвращаемся в нашу группу, и в настройках Callback API указываем ссылку,
обращаяясь к Callback контроллеру.

Чат-бот для Вконтакте на ASP.NET Core C# - 16

Вк отправит JSON запрос на наш сервер, чтобы подтвердить адрес. После ответа будет выведено следующее уведомление: Адрес сервера успешно сохранён

Теперь напишем нашему боту в личные сообщения.

Источник: www.pvsm.ru

Создание VK чат-бота на базе VkBotCore C#

Данная статья создана для ленивых людей, которые не хотят много кодить и иметь дело со всей «начинкой».

Подготовка группы

Для начала нам необходимо создать сообщество, которое будет привязано к нашему боту.

Для этого заходим в раздел «Сообщества» и нажимаем «Создать сообщество»

image

Теперь настроим его для работы с Callback-API //Подробнее про Callback-API

image

Переходим в «Управление»>>

>>«Настройки»>>«Работа с API»

image

Создаём ключ доступа со всеми разрешениями и выписываем его, он нам ещё пригодится

image

Далее переходим на вкладку Callback-API, Выбираем последнюю версию API и выписываем указанный код конфирмации

image

Осталось включить сообщения. Переходим в раздел «Сообщения»>>«Настройки для бота» включаем и сохраняем настройку

image

Подготовка сервера

Для работы боту необходимо место, где он будет запущен. Для этого подойдёт любой хостинг, ведь .NET Core можно запустить с любой платформы. Также потребуется домен, так как VK принимает только домены в качестве адреса сервера.

Мною рассмотрен пример с VPS сервером на Ubuntu 18.04

На чистый сервер для работы бота необходимо поставить .NET Core не ниже 2.2 версии.

Вводим следующие команды:
Команда для регистрации ключа Microsoft и веб-канала:

> wget -q https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb

Обновляем продукты, доступные для установки:

> sudo apt-get update > sudo apt-get install apt-transport-https > sudo apt-get update

Теперь устанавливаем сам .NET Core
Для Runtime версии вводим команду:

Еще по теме:  Что такое ферма Вконтакте

> sudo apt-get install aspnetcore-runtime-3.1

Для Software Development Kit версии:

> sudo apt-get install dotnet-sdk-3.1

После установки среды проверим её готовность командой:

> dotnet —info

Установка и настройка

Переходим непосредственно к боту.

Скачиваем и выгружаем архив со сборкой.

Открываем файл appsettings.json

image

Вставляем в значения AccessToken ключ доступа и в значение Confirmation ключ конфирмации, сохранённые ранее.

image

Сохраняем и возвращаемся в консоль.

Командой 《 cd «путь к папке» 》 переходим к папке со сборкой и вводим команду для запуска:

> dotnet vkBotCore.dll

Остаётся привязать бота к группе. Для этого в разделе Callback-API в поле адреса вписываем домен, к которому привязан сервер с путём /api/callback

image

Если всё сделано правильно, то после подтверждения появится зелёная галочка.

Создание плагина

Базовые функции VkBotCore как чат-бота включают в себя только 2 команды: /help и /everyone
Для увеличения функционала необходимо написать плагин.

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

Создадим новый проект

image

Подключим к проекту библиотеку vkBotCore.dll из сборки

image

image

Добавляем using на vkBotCore.Plugins и наследуем основной класс от Plugin

using vkBotCore.Plugins; namespace myPlugin < public class MyFirstPlugin : Plugin < >>

Добавим команду hello, чтобы она отвечала Привет

using vkBotCore.Plugins; using vkBotCore.Plugins.Attributes; namespace myPlugin < public class MyFirstPlugin : Plugin < [Command] public void Hello(CommandContext context) < context.Chat.SendMessage($»Привет «); > > >

Теперь создадим в папке сборки новую папку с названием plugins
Сохраним в ней собранный плагин

Источник: savepearlharbor.com

Чат-бот для Вконтакте на ASP.NET Core C#

В данной статье представлен пошаговый пример создания простого чат-бота в социальной сети VK на ASP.NET Core C#.

Глава 1. Подготовка

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

Выбираем любой тип сообщества

Заполняем поля любыми данными и готово! Группа создана.

Приступим к настройке API

Создаем API ключ (Разрешаем все)

Чтобы реагировать на какие-либо события, наш скрипт должен о них узнать. Для этого существуют два подхода — Callback API и Long Poll. Мы будем реализовывать Callback API.

Немного теории

Callback API — это инструмент для отслеживания активности пользователей в сообществе ВКонтакте. С его помощью можно реализовать, например:

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

Long Polling — это технология, которая позволяет получать данные о новых событиях с помощью «длинных запросов». Сервер получает запрос, но отправляет ответ на него не сразу, а лишь тогда, когда произойдет какое-либо событие (например, придёт новое сообщение), либо истечет заданное время ожидания.

Используя Callback API, нам не потребуется регулярно повторять запросы, чтобы отслеживать обновления — мы будем получать их мгновенно.

Настройка Callback API

Выбираем последнюю версию API

Выбираем тип события «входящее сообщение».

Глава 2. Реализация Callback API

Запускаем любимую IDE, создаем ASP.NET Core Web Application.

Тип проекта: Web Api
Framework: netcoreapp 2.2

Для подтверждения адреса сервера нам потребуется вернуть строку с уникальным значением.
Берем ее в настройках Callback API.

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

< «Config»: < «AccessToken»: «0bd8573ea40badd694b4da0bbc7d54f52996», «Confirmation» : «b23557a3» >, «Logging»: < «LogLevel»: < «Default»: «Warning» >>, «AllowedHosts»: «*» >

Когда в сообществе произойдет событие, ВКонтакте отправит на сервер запрос с данными в формате JSON с основной информацией об объекте, вызвавшем данное событие.

Структура входящего JSON.

< «type»:, «object»:, «group_id»: >
< «type»:»group_join», «object»:< «user_id»:1, «join_type»:»approved» >, «group_id»:1 >

Для удобства десериализации входящего JSON воспользуемся паттерном Data Transfer Object (DTO).

using System; using Newtonsoft.Json; namespace Cookie.Controllers < [Serializable] public class Updates < /// /// Тип события /// [JsonProperty(«type»)] public string Type < get; set; >/// /// Объект, инициировавший событие /// Структура объекта зависит от типа уведомления /// [JsonProperty(«object»)] public JObject Object < get; set; >/// /// ID сообщества, в котором произошло событие /// [JsonProperty(«group_id»)] public long GroupId < get; set; >> >

Еще по теме:  Как вставить ссылку в историю в ВК

Для обработки входящих запросом создадим CallbackController.cs.

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace Cookie.Controllers < [Route(«api/[controller]»)] [ApiController] public class CallbackController : ControllerBase < /// /// Конфигурация приложения /// private readonly IConfiguration _configuration; public CallbackController(IConfiguration configuration) < _configuration = configuration; >[HttpPost] public IActionResult Callback([FromBody] Updates updates) < // Проверяем, что находится в поле «type» switch (updates.Type) < // Если это уведомление для подтверждения адреса case «confirmation»: // Отправляем строку для подтверждения return Ok(_configuration[«Config:Confirmation»]); >// Возвращаем «ok» серверу Callback API return Ok(«ok»); > > >

Обратите внимание: после получения уведомления Ваш сервер должен возвращать строку «ok» и статус HTTP 200. Если сервер несколько раз подряд вернет ошибку, Callback API временно перестанет отправлять на него уведомления

Callback API готов!

  1. Пример на github
  2. Сериализация и десериализация данных JSON
  3. DI IoC
  4. SDK для .NET Core 2.2

Глава 3. Вк?

Для взаимодействия с VK API на C# воспользуемся библиотекой VkNET

Установка через Nuget:
Package manager:
PM> Install-Package VkNet

.NET CLI:
> dotnet add package VkNet

Глава 4. Больше функционала!

Перед расширением логики бота, авторизуем группу в нашем веб-приложении.
Для этого регистрируем IVkApi в IoC-контейнере.

Класс Startup.cs метод ConfigureServices.

using VkNet; using VkNet.Abstractions; using VkNet.Model; services.AddSingleton(sp => < var api = new VkApi(); api.Authorize(new ApiAuthParams< AccessToken = Configuration[«Config:AccessToken»] >); return api; >);

Теперь расширим наш CallbackController.cs, добавив обработку входящих сообщений.

Внедряем IVkApi по аналогии с IConfiguration.

using VkNet.Abstractions; private readonly IConfiguration _configuration; private readonly IVkApi _vkApi; public CallbackController(IVkApi vkApi, IConfiguration configuration)

И сам кейс, который будет ловить новые сообщения. В нем мы добавить немного логики.

Немного документации

RandomId — уникальный (в привязке к API_ID и ID отправителя) идентификатор, предназначенный для предотвращения повторной отправки одинакового сообщения. Сохраняется вместе с сообщением и доступен в истории сообщений.

Заданный RandomId используется для проверки уникальности за всю историю сообщений, поэтому используйте большой диапазон(до int32).

PeerId — идентификатор назначения.

Text — текст личного сообщения. Обязательный параметр, если не задан параметр attachment.

using VkNet.Model; using VkNet.Model.RequestParams; using VkNet.Utils; case «message_new»:< // Десериализация var msg = Message.FromJson(new VkResponse(updates.Object)); // Отправим в ответ полученный от пользователя текст _vkApi.Messages.Send(new MessagesSendParams< RandomId = new DateTime().Millisecond, PeerId = msg.PeerId.Value, Message = msg.Text >); break; >

Глава 5. Деплой

Теперь нам потребуется сервер, куда будут направлены все запросы. Один из бесплатных вариантов это Heroku.

После регистрации на сайте, нам предложат создать новое приложение.

Вводим название проекта.

После создания проекта будет перенаправление на страницу Deploy

Для Heroku CLI требуется Git. Если у вас еще не установлен Git, то скачайте его перед установкой CLI.

Для начала скачаем Heroku CLI.

Авторизуем Heroku аккаунт.
$ heroku login

Переходим в проектный каталог.
$ cd (путь до проекта)

Создаём текущем каталоге новый подкаталог с именем .git содержащий все необходимые файлы репозитория — основу Git-репозитория.
$ git init

Подключаемся к удалённому репозиторию (нашему проекту)
$ heroku git:remote -a (название проекта)

Buildpacks отвечают за преобразование развернутого кода в slug, который затем может быть выполнен на dyno.
$ heroku buildpacks:set https://github.com/jincod/dotnetcore-buildpack.git -a (название проекта)

Для того чтобы начать отслеживать (добавить под версионный контроль) наши файлы.
$ git add .

$ git commit -am «cookie»

$ git push heroku master

И идем делать чаёк.

Когда наше приложение будет загружено на Heroku, то мы сможем открыть его по следующей ссылке https://**PROJECT_NAME**.herokuapp.com/

Возвращаемся в нашу группу, и в настройках Callback API указываем ссылку,
обращаясь к Callback контроллеру.
https://**PROJECT_NAME**.herokuapp.com/api/callback

Вк отправит JSON запрос на наш сервер, чтобы подтвердить адрес. После ответа будет выведено следующее уведомление: Адрес сервера успешно сохранён

Теперь напишем нашему боту в личные сообщения.

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...