本文提供了在ASP.NET Core C#的VK社交网络上创建简单聊天机器人的分步示例。
第一章准备
让我们从创建和设置社区开始。


选择任何类型的社区

在字段中填写任何数据,就可以完成! 组已创建。

让我们设置API

创建一个API密钥(全部允许)

为了响应任何事件,我们的脚本必须了解它们。 有两种解决方法-回调API和长轮询。 我们将实现回调API。
一点理论回调API是用于跟踪VKontakte社区中的用户活动的工具。 使用它可以实现,例如:
- 发送即时回复传入消息的机器人。
- 内容自动审核系统。
- 用于收集和处理受众参与度指标的服务。
长轮询是一项允许您使用“长查询”接收有关新事件的数据的技术。 服务器接收到请求,但不会立即发送响应,而仅在事件发生(例如,新消息到达)或指定的超时时间到时才发送响应。
使用Callback API,我们无需定期重复请求以跟踪更新-我们将立即收到请求。
回调API设置
选择最新版本的API

选择事件“传入消息”的类型。

有用的信息:
- 引入VK API
- 回调API VK
- Json模式
第2章。实现回调API
启动您最喜欢的IDE,创建一个ASP.NET Core Web应用程序。
项目类型:Web Api
框架:netcoreapp 2.2

为了确认服务器地址,我们需要返回一个具有唯一值的字符串。
我们将其用于Callback API设置。

让我们扩展ASP.NET Core应用程序的配置 。
在这里,我们将存储开发中涉及的所有密钥。

{ "Config": { "AccessToken": "0bd8573ea40badd694b4da0bbc7d54f52996", "Confirmation" : "b23557a3" }, "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" }
当社区中发生事件时,VKontakte将使用JSON格式的数据向服务器发送请求,并带有导致该事件的对象的基本信息。
传入JSON的结构。 { "type":< >, "object":<, >, "group_id":<ID , > }
例如:
{ "type":"group_join", "object":{ "user_id":1, "join_type":"approved" }, "group_id":1 }
为了方便反序列化传入的JSON,我们将使用数据传输对象(DTO)模式。
using System; using Newtonsoft.Json; namespace Cookie.Controllers { [Serializable] public class Updates {
要处理传入的请求,请创建CallbackController.cs 。
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace Cookie.Controllers { [Route("api/[controller]")] [ApiController] public class CallbackController : ControllerBase {
请注意:收到通知后,您的服务器应返回字符串“ ok”和HTTP 200的状态。如果服务器连续多次返回错误,则Callback API将暂时停止向其发送通知
回调API已准备就绪!
有用的信息:
- Github示例
- 序列化和反序列化JSON数据
- 直流电
- .NET Core 2.2的SDK
第3章。
为了与C#中的VK API进行交互,我们将使用VkNET库
通过Nuget安装:
包管理器:
PM> Install-Package VkNet
.NET CLI:
> dotnet add package VkNet
用户界面:

有用的信息:
- VkNET文档
第4章。更多功能!
在扩展Bot的逻辑之前,我们在Web应用程序中授权该组。
为此,请在IoC容器中注册IVkApi。
类Startup.cs方法ConfigureServices 。
using VkNet; using VkNet.Abstractions; using VkNet.Model; services.AddSingleton<IVkApi>(sp => { var api = new VkApi(); api.Authorize(new ApiAuthParams{ AccessToken = Configuration["Config:AccessToken"] }); return api; });
现在,通过添加传入消息处理来扩展我们的CallbackController.cs 。
我们类似于IConfiguration来实现IVkApi 。
using VkNet.Abstractions; private readonly IConfiguration _configuration; private readonly IVkApi _vkApi; public CallbackController(IVkApi vkApi, IConfiguration configuration){ _vkApi = vkApi; _configuration = configuration; }
而案件本身,将捕获新的信息。 我们在其中添加了一些逻辑。
一些文件RandomId-唯一标识符(与API_ID和发件人ID相关),旨在防止再次发送同一条消息。 它与消息一起保存,并在消息历史记录中可用。
指定的RandomId用于验证消息整个历史记录中的唯一性,因此请使用较大的范围(最大为int32)。
PeerId是目标标识符。
文字 -个人讯息的文字。 如果未指定附件,则为必需。
using VkNet.Model; using VkNet.Model.RequestParams; using VkNet.Utils; case "message_new":{
第5章部署
现在,我们需要一个将所有请求都定向到的服务器。 免费选项之一是Heroku 。
在网站上注册后,我们将提供创建一个新的应用程序。

输入项目名称。

创建项目后,将其重定向到“ 部署”页面

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设置中指定链接,
转向回调控制器 。
https://**PROJECT_NAME**.herokuapp.com/api/callback

VK将向我们的服务器发送JSON请求以确认地址。 响应后,将显示以下通知: 服务器地址成功保存
现在,我们将在私人消息中编写我们的机器人。

好的编码!