代码之家  ›  专栏  ›  技术社区  ›  rudolf_franek UUHHIVS

如何从Skype For Business的MS Bot Framework中获取除“conversationUpdate”和“endOfConversation”之外的其他信息

  •  2
  • rudolf_franek UUHHIVS  · 技术社区  · 7 年前

    虽然我们没有找到解决方案 our previous question 关于将我们的机器人注册到Skype for Business channel(以下简称SfB),我们尝试创建全新的机器人,并为全新用户重新注册到SfB channel。创建和注册过程中没有错误。

    现在我们可以看到 Activity 在调试模式下,当Visutal Studio 2017(Cloud Explorer>Attach Debugger)连接到Azure上部署的bot时,我们只观察到以下类型的活动: 会话更新 “或” 内转换 “每次我们通过SfB向我们的机器人发送消息。

    更新

    bot是使用链接到Azure和MSDN订阅的帐户创建和注册的,但是该帐户不是我们Azure Active Directory的一部分。SfB使用的发件人和bot帐户是我们Azure Active Directory的一部分。

    如果我从同时拥有bot本身的帐户所拥有的Azure门户创建专用Azure Active Directory,则通过SfB的委托适用于在此专用Azure Active Directory中创建的帐户。

    结束更新

    我们现在可以检查Azure或SfB的哪些日志或设置,以使通信最终正常工作? 代表机器人的用户是否有任何特殊要求,需要进行双重检查? 如果bot的所有者对定义了bot受众用户的Azure Active Directory没有权限,那么该bot是否还有其他安全设置?

    请参阅序列化json活动的示例:

    {
      "type": "conversationUpdate",
      "id": "6d5f79c9-9a89-4606-92cb-9ead49405865",
      "timestamp": "2017-12-01T14:13:53.3958935Z",
      "serviceUrl": "https://webpooldb40r04.infra.lync.com/platformservice/.../botframework",
      "channelId": "skypeforbusiness",
      "from": { "id": "sip:me@us.com", "name": "LastName, Me" },
      "conversation": { "isGroup": true, "id": "YzkxZDQ2MmQjc2lwOmFmZmJib3RAYmx1ZWxpbmtz..." },
      "recipient": { "id": "sip:ourbot@us.info", "name": "sip:ourbot@us.info" },
      "membersAdded": [],
      "membersRemoved": [ { "id": "sip:me@us.com", "name": "LastName, Me" } ],
      "attachments": [],
      "entities": []
    }
    

    {
      "type": "endOfConversation",
      "id": "4b485bcf-59c8-446f-9d56-74dda973db25",
      "timestamp": "2017-12-01T14:13:53.4115031Z",
      "serviceUrl": "https://webpooldb40r04.infra.lync.com/platformservice/.../botframework",
      "channelId": "skypeforbusiness",
      "from": { "id": "sip:ourbot@us.info" },
      "conversation": { "isGroup": true, "id": "YzkxZDQ2MmQjc2lwOmFmZmJib3RAYmx1ZWxpbmtz..." },
      "recipient": { "id": "sip:ourbot@us.info", "name": "sip:ourbot@us.info" },
      "membersAdded": [],
      "membersRemoved": [],
      "attachments": [],
      "entities": []
    }
    

    评论:

    1) 机器人注册时间超过一周。

    2) 我们的控制器包含尽可能少的代码,以避免任何可能影响测试的问题:

        public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
        {
            if (activity != null)
            {
                if (activity.Type == ActivityTypes.Message)
                {
                    var reply = activity.CreateReply("Reply");
                    using (var client = new ConnectorClient(new Uri(reply.ServiceUrl)))
                    {
                        await connectorClient.Conversations.ReplyToActivityAsync(reply);
                    }
                }
            }
    
            return Request.CreateResponse(HttpStatusCode.OK);
        }
    

    3) 正在为WebChat频道正确生成响应: WebChat sample text and response

    4) 在bot分析中,我们可以看到WebChat和SfB的传入消息和用户 enter image description here

    5) 如果我们试图对类型为“conversationUpdate”或“endOfConversation”的活动做出回应,那么我们观察到:

    {"Conversation does not exist"} Microsoft.Rest.HttpOperationException
    

    6) 如果我们尝试执行创建新对话的代码,那么我们会得到:

    {"BVD operation failed with 404"} Microsoft.Rest.HttpOperationException
    

    第5)点和第6)点是意料之中的,仅为说明而附加

    1 回复  |  直到 7 年前
        1
  •  1
  •   albigi    7 年前

    目前,S4B机器人只能与同一域中的用户通信。原因是安全性,因为机器人程序可以识别与之交互的用户的身份(用户身份没有散列),在最终用户可以在租户中使用机器人程序之前,需要租户管理员步骤。

    因此,目前不支持联合/跨租户场景。

    在大多数情况下,建议在每个AAD“域”中创建一个bot实例。