ASP.NET Core C上的Vkontakte聊天机器人

本文提供了在ASP.NET Core C#的VK社交网络上创建简单聊天机器人的分步示例。


第一章准备


让我们从创建和设置社区开始。




选择任何类型的社区



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



让我们设置API



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



为了响应任何事件,我们的脚本必须了解它们。 有两种解决方法-回调API和长轮询。 我们将实现回调API。


一点理论

回调API是用于跟踪VKontakte社区中的用户活动的工具。 使用它可以实现,例如:


  • 发送即时回复传入消息的机器人。
  • 内容自动审核系统。
  • 用于收集和处理受众参与度指标的服务。

长轮询是一项允许您使用“长查询”接收有关新事件的数据的技术。 服务器接收到请求,但不会立即发送响应,而仅在事件发生(例如,新消息到达)或指定的超时时间到时才发送响应。


使用Callback API,我们无需定期重复请求以跟踪更新-我们将立即收到请求。


回调API设置


选择最新版本的API



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



有用的信息:


  1. 引入VK API
  2. 回调API VK
  3. 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 { /// <summary> ///   /// </summary> [JsonProperty("type")] public string Type { get; set; } /// <summary> /// ,   ///       /// </summary> [JsonProperty("object")] public JObject Object { get; set; } /// <summary> /// ID ,     /// </summary> [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 { /// <summary> ///   /// </summary> 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将暂时停止向其发送通知

回调API已准备就绪!


有用的信息:


  1. Github示例
  2. 序列化和反序列化JSON数据
  3. 直流电
  4. .NET Core 2.2的SDK

第3章。


为了与C#中的VK API进行交互,我们将使用VkNET


通过Nuget安装:
包管理器:
PM> Install-Package VkNet


.NET CLI:
> dotnet add package VkNet


用户界面:



有用的信息:


  1. 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":{ //  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


在网站上注册后,我们将提供创建一个新的应用程序。



输入项目名称。



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



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请求以确认地址。 响应后,将显示以下通知: 服务器地址成功保存


现在,我们将在私人消息中编写我们的机器人。



好的编码!

Source: https://habr.com/ru/post/zh-CN441720/


All Articles