开发基于微信公众号的聊天机器人
分类: 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
会存储Transcript
到SQL 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.exe
: https://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
代码愉快的利用前面的知识开发自己的机器人了。