Skip to main content

开发基于微信公众号的聊天机器人

分类:  Azure机器人 标签:  #Azure Bot Framework SDK #Azure Bot Service #机器人 发布于: 2023-08-07 23:16:24

要开发基于微信公众号的聊天机器人有特定的要求:你的公众号必须是非个人用户的公众号,否则大多数功能都是不可用的。

另外SDK本身没有实现基于微信的Adapter, 但是由官方在github上实现了这部分功能:https://github.com/microsoft/BotFramework-WeChat, 可惜的是由于同样的原因,微软官方也没有再维护这部分代码了,同样为了缓解这个问题,我将这部分代码fork到了我的库里,并且提升了代码,使得现在的代码完全可以适用于新的基于.Net 6以上版本的代码,我的代码库在这里:
https://github.com/hylinux/BotFramework-WeChat, 除了提升了原有的代码库之外,我还额外的弄了一个符合.Net 6的Sample:
https://github.com/hylinux/BotFramework-WeChat/tree/master/samples/csharp_dotnetcore/WeChatTestBot

要学习微信的开发以及在微信的Adapter上支持哪些功能,可以详细的参考这个Sample,另外新增了两个Adapter的实现:

  • WeChatAdapterWithErrorHandler
  • WeChatAdapterWithErrorAndTranscriptLoggerHandler

区别在于一个Adapter会存储TranscriptSQL Server, 另外一个不会,关于如何使用SQL Server作为外部的存储,可以参考文档:https://www.azuredeveloper.cn/article-save-status-into-database

另外通过类WeChatAdapterWithErrorHandlerExtensions提供了两个扩展方法:

  • AddWeChatAdapterWithErrorHandler
  • AddWeChatAdapterWithErrorAndTranscriptLoggerHandler

使得在项目中直接利用两个扩展方法就可以快速的将微信的Channel架设起来。例如:

builder.Services.AddSingleton<BotFrameworkAuthentication, ConfigurationBotFrameworkAuthentication>();

//builder.Services.AddSingleton<IStorage, MemoryStorage>();

var ConnectString = builder.Configuration["StoreConnectionString"];

var storage = new EntityFrameworkStorage(ConnectString);
var TranscriptStorageLogger = new EntityFrameworkTranscriptStore(ConnectString);

builder.Services.AddSingleton<IStorage>(storage);
builder.Services.AddSingleton<UserState>(new UserState(storage));
builder.Services.AddSingleton<ConversationState>(new ConversationState(storage));
builder.Services.AddSingleton<ITranscriptStore>(TranscriptStorageLogger);



builder.Services.AddWeChatAdapterWithErrorAndTranscriptLoggerHandler(builder.Configuration);


builder.Services.AddSingleton<MainDialog>();


builder.Services.AddTransient<IBot, RichCardsBot>();

详情见项目WeChatTestBot\Program.cs文件的示例。

另外在开发微信项目时可以使用微信公开的测试账号:
https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

用微信扫码后即可进入:


需要注意另外一个技术点,就是微信开发过程中,这个接口配置信息这里需要一个公共的url, 本地开发怎么样才能拥有一个公共的url?

解决方案就是下载一个ngrok.exehttps://ngrok.com/, 到这里下载注册,并根据文档设置好了后,打开命令行运行:

ngrok.exe http 5000

表示ngrok代理本地的http协议,装来自公网的外部请求到本地的5000端口,也就是你在本地启动的Asp.net Core的应用监听端口


这样你就有了一个公共的的URL了:

https://3a6b-180-162-73-9.jp.ngrok.io

启动你的bot, 配置接口信息然后提交就可以了。Token这里你可以随意定义一个字符串,只要你的应用配置和微信开发平台配置是一致就可以了。

那么你现在就可以开始根据Sample代码愉快的利用前面的知识开发自己的机器人了。