如何从 MS Bot Framework、Skype For Business 获取 "conversationUpdate" 和 "endOfConversation" 以外的数据
How to get other than "conversationUpdate" and "endOfConversation" from MS Bot Framework, Skype For Business
虽然我们没有找到 our previous question 关于我们的 bot 注册到 Skype for Business 频道(以下简称 SfB)的解决方案,但我们尝试创建全新的 bot 并为全新用户执行到 SfB 频道的新注册。创建和注册过程中没有错误。
目前,当 Visutal Studio 2017(Cloud Explorer>Attach Debugger)附加到部署在 Azure 的机器人时,我们可以在调试模式下读取传入的 Activity
,但我们只观察到以下类型的活动:“conversationUpdate”或“endOfConversation”每次我们通过 SfB 向我们的机器人发送消息时。
更新
该机器人是使用链接到 Azure 和 MSDN 订阅的帐户创建和注册的,但该帐户不属于我们的 Azure Active Directory。 SfB 使用的发件人和机器人帐户是我们 Azure Active Directory 的一部分。
如果我从 Azure 门户创建专用的 Azure Active Directory,该帐户也拥有机器人本身,那么通过 SfB 的通信适用于在这个专用的 Azure Active Directory 中创建的帐户。
更新结束
我们现在可以检查 Azure 或 SfB 的哪些日志或设置以使通信最终正常工作?
对代表可能需要双重检查的机器人的用户是否有任何特殊要求?
如果机器人的所有者无权访问定义了机器人受众用户的 Azure Active Directory,机器人是否有任何额外的安全设置?
查看序列化 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 频道正确生成响应:
4) 在 bot Analytics 中,我们看到 WebChat 和 SfB 的传入消息和用户
5) 如果我们尝试响应类型 "conversationUpdate" 或 "endOfConversation" 的 Activity,那么我们会观察到:
{"Conversation does not exist"} Microsoft.Rest.HttpOperationException
6) 如果我们尝试执行创建新对话的代码,那么我们会得到:
{"BVD operation failed with 404"} Microsoft.Rest.HttpOperationException
第 5) 点和第 6) 点是意料之中的,附加只是为了说明
目前,S4B Bot 只能与同一域中的用户通信。原因是安全性,因为机器人可以识别与之交互的用户的身份(用户身份未经过哈希处理),并且在最终用户可以在租户中使用机器人之前需要租户管理员步骤。
因此目前不支持federation/cross-tenant场景。
在大多数情况下,建议在每个 AAD 中创建一个机器人“实例”"domain"。
虽然我们没有找到 our previous question 关于我们的 bot 注册到 Skype for Business 频道(以下简称 SfB)的解决方案,但我们尝试创建全新的 bot 并为全新用户执行到 SfB 频道的新注册。创建和注册过程中没有错误。
目前,当 Visutal Studio 2017(Cloud Explorer>Attach Debugger)附加到部署在 Azure 的机器人时,我们可以在调试模式下读取传入的 Activity
,但我们只观察到以下类型的活动:“conversationUpdate”或“endOfConversation”每次我们通过 SfB 向我们的机器人发送消息时。
更新
该机器人是使用链接到 Azure 和 MSDN 订阅的帐户创建和注册的,但该帐户不属于我们的 Azure Active Directory。 SfB 使用的发件人和机器人帐户是我们 Azure Active Directory 的一部分。
如果我从 Azure 门户创建专用的 Azure Active Directory,该帐户也拥有机器人本身,那么通过 SfB 的通信适用于在这个专用的 Azure Active Directory 中创建的帐户。
更新结束
我们现在可以检查 Azure 或 SfB 的哪些日志或设置以使通信最终正常工作? 对代表可能需要双重检查的机器人的用户是否有任何特殊要求? 如果机器人的所有者无权访问定义了机器人受众用户的 Azure Active Directory,机器人是否有任何额外的安全设置?
查看序列化 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 频道正确生成响应:
4) 在 bot Analytics 中,我们看到 WebChat 和 SfB 的传入消息和用户
5) 如果我们尝试响应类型 "conversationUpdate" 或 "endOfConversation" 的 Activity,那么我们会观察到:
{"Conversation does not exist"} Microsoft.Rest.HttpOperationException
6) 如果我们尝试执行创建新对话的代码,那么我们会得到:
{"BVD operation failed with 404"} Microsoft.Rest.HttpOperationException
第 5) 点和第 6) 点是意料之中的,附加只是为了说明
目前,S4B Bot 只能与同一域中的用户通信。原因是安全性,因为机器人可以识别与之交互的用户的身份(用户身份未经过哈希处理),并且在最终用户可以在租户中使用机器人之前需要租户管理员步骤。
因此目前不支持federation/cross-tenant场景。
在大多数情况下,建议在每个 AAD 中创建一个机器人“实例”"domain"。