您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

将机器人连接到微信

适用于: SDK v4

可将机器人配置为使用微信正式帐户平台来与用户通信。

下载适用于 Bot Framework 的微信适配器

适用于 Microsoft Bot Framework 的微信适配器是 GitHub 上的一个开源适配器。 下载适用于 Bot Framework 的微信适配器

创建微信帐户

若要将机器人配置为使用微信通信,需要在微信正式帐户平台上创建一个微信正式帐户,然后将机器人连接到应用。 目前我们仅支持服务帐户。

更改首选语言

可以在登录之前更改首选的显示语言。

change_language

注册服务帐户

实际的服务帐户必须通过 WeChat 验证,才能在验证帐户之前启用 webhook。 若要创建自己的服务帐户,请按照此处的说明操作。 简单而言,只需单击顶部的“立即注册”,选择“服务帐户”,然后按照说明操作即可。

register_account

沙盒帐户

如果你只是想要测试微信与机器人的集成,可以使用沙盒帐户,而无需创建服务帐户。 详细了解如何创建沙盒帐户

启用机器人的微信适配器

Bot Project 是一个常规的 Bot Framework SDK V4 项目。 在启动该项目之前,需要确保能够运行机器人。 下载适用于 Bot Framework 的微信适配器

先决条件

  • 版本 2.2. x .NET Core SDK ()

添加对微信适配器源的引用

请直接引用微信适配器项目,或添加 ~/BotFramework-WeChat/libraries/csharp_dotnetcore/outputpackages 作为本地 NuGet 源。

将微信适配器注入到机器人的 Startup.cs 中

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    // Create the storage we'll be using for User and Conversation state. (Memory is great for testing purposes.)
    services.AddSingleton<IStorage, MemoryStorage>();

    // Create the User state. (Used in this bot's Dialog implementation.)
    services.AddSingleton<UserState>();

    // Create the Conversation state. (Used by the Dialog system itself.)
    services.AddSingleton<ConversationState>();

    // Load WeChat settings.
    var wechatSettings = new WeChatSettings();
    Configuration.Bind("WeChatSettings", wechatSettings);
    services.AddSingleton<WeChatSettings>(wechatSettings);

    // Configure hosted serivce.
    services.AddSingleton<IBackgroundTaskQueue, BackgroundTaskQueue>();
    services.AddHostedService<QueuedHostedService>();
    services.AddSingleton<WeChatHttpAdapter>();

    // The Dialog that will be run by the bot.
    services.AddSingleton<MainDialog>();

    // Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
    services.AddTransient<IBot, EchoBot>();
}

更新机器人控制器

[Route("api/messages")]
[ApiController]
public class BotController : ControllerBase
{  
    private readonly IBot _bot;
    private readonly WeChatHttpAdapter _weChatHttpAdapter;
    private readonly string Token;
    public BotController(IBot bot, WeChatHttpAdapter weChatAdapter)
    {
        _bot = bot;
        _weChatHttpAdapter = weChatAdapter;
    }

    [HttpPost("/WeChat")]
    [HttpGet("/WeChat")]
    public async Task PostWeChatAsync([FromQuery] SecretInfo secretInfo)
    {
        // Delegate the processing of the HTTP POST to the adapter.
        // The adapter will invoke the bot.
        await _weChatHttpAdapter.ProcessAsync(Request, Response, _bot, secretInfo);
    }
}

设置 appsettings.json

需要在启动机器人之前设置 appsettings.json,下面介绍了所需的内容。

"WeChatSettings": {
    "UploadTemporaryMedia": true,
    "PassiveResponseMode": false,
    "Token": "",
    "EncodingAESKey": "",
    "AppId": "",
    "AppSecret": ""
}

服务帐户

如果你已有一个服务帐户并准备好进行部署,则可以在左侧导航栏上的“基本配置”中找到 AppIDAppSecretEncodingAESKeyToken,如下所示。

别忘了,需要设置 IP 允许列表,否则 WeChat 不会接受你的请求。

serviceaccount_console

沙盒帐户

沙盒帐户没有 EncodingAESKey,来自微信的消息并未加密,因此请将 EncodingAESKey 留空。 此处仅有三个参数:appIDappsecretToken

sandbox_account

启动机器人并设置终结点 URL

现在可以设置机器人后端。 在执行此操作之前,必须先启动机器人并保存设置,然后,微信会发送验证 URL 的请求。 请使用类似于 https://your_end_point/WeChat 的模式设置终结点,或者像在 BotController.cs 中一样指定个人设置。

sandbox_account2

订阅正式帐户

在微信中可以找到一个用于订阅测试帐户的 QR 码。

subscribe

通过微信进行测试

一切准备就绪后,可以在微信客户端中尝试与机器人聊天。 可以尝试运行 tests 文件夹中的示例机器人。 此示例机器人包含微信适配器,并与聊天机器人和卡片机器人集成。

聊天