Microsoft Bot 与 Whatsapp 的集成

Microsoft Bot Integration with Whatsapp

我正在尝试将 Microsoft Bot Framework 与 WhatsApp 集成。

我已经有了与机器人服务对话的现有机器人(Skype 和网络聊天),并且正在尝试创建一个新的通信渠道。

如何构建这个新频道?

我已经有了可以从 WhatsApp 发送接收消息的 API,我计划在收到用户消息时连接我的机器人服务,但我不知道如何使用我的机器人服务它接受一个 class Activity

您可以尝试使用文档中所述的Direct Line

You can enable your own client application to communicate with your bot by using the Direct Line channel.

您可以尝试使用 Twilio Channel & then using the Twilio API for WhatsApp

我用的是直线频道。需要构建中继应用程序以在 whatsapp 和 Microsoft 直线之间进行连接。

有两种可能性 connect a bot to additional channels,使用自定义适配器和使用 DirectLine API。

我更喜欢使用适配器,因为您可以直接连接到 WhatsApp 服务,这提供了很大的灵活性。但是,在某些情况下,您可能会受益于使用连接到 Direct Line 的代理服务。

最后,您可以使用任何您喜欢的提供商,只要他们提供 API。例如 Twilio、RingCentral、InfoBip、LivePerson 等提供商。

我推荐的方法:自定义适配器

  • Bot 直接连接到 WhatsApp 服务,使用 bot 中的额外端点
  • 编写良好的适配器将所有 Bot Framework SDK 活动转换为 WhatsApp 服务,反之亦然。 (example).
  • 同一个机器人项目可以使用多个适配器
  • 适配器可以为通道提供特定的辅助函数,可从您的机器人项目中调用。 (example)

目前 BotBuilderCommunity 中提供了以下适用于 WhatsApp 的适配器。

可以在 BotBuilderCommunity 上找到有关如何构建自定义适配器的示例。 (C#, Javascript)


替代方法:连接到 DirectLine 的代理服务

  • DirectLine API 通过自托管代理服务与 WhatsApp 服务通信
  • 代理服务可用于 C#/NodeJS/Python 机器人,而非特定语言
  • 编写良好的代理服务将所有 Bot Framework SDK 活动转换为 WhatsApp 服务,反之亦然。

可以在此处找到有关如何构建代理服务的示例:C#, Javascript

您可以使用 Twilio 频道并使用 Azure Functions 进行连接。 这是 Azure 函数的代码 -

[FunctionName("Function1")]
    public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req, TraceWriter log)
    {
        var dataResponse = await req.Content.ReadAsStringAsync();

        var values = dataResponse .Split('&')
            .Select(value => value.Split('='))
            .ToDictionary(pair => Uri.UnescapeDataString(pair[0]).Replace("+", " "),
                          pair => Uri.UnescapeDataString(pair[1]).Replace("+", " "));

        var whatsAppMsg = values["Body"].ToString();
        var qnaAnswer= await evaluateMessage(whatsAppMsg);
        var response = new MessagingResponse().Message(qnaAnswer);

        var twiml = response.ToString();
        twiml = twiml.Replace("utf-16", "utf-8");

        return new HttpResponseMessage
        {
            Content = new StringContent(twiml, Encoding.UTF8, "application/xml")
        };
    }
  • 其中 evaluate 消息是 QnA Answer 的调用方法。它也可以是 LUIS 实现。

有关连接到 WhatsApp Bot 的 QnA maker 的更多信息 - Create WhatsApp Bot. Get the source code here