Cortana BOT Framework return 一些自动生成的 ID
Cortana BOT Framework return some auto generated ID
我正在为机器人框架应用程序进行 Cortana 通道集成。
我已启用 Cortana.I 的调试信息,并使用我的 Microsoft 帐户登录到 Cortana NoteBook,该帐户是使用 Gmail Id 创建的。
我想在我的 BOT 应用程序中捕获我的 Gmail ID,但是当我调试 bot 时,我得到了一些自动生成的 ID,如下所示。
{
"botId": "SpeechBot1",
"botRequest": {
"type": "message",
"id": "GYobtdHWUXY",
"timestamp": "2017-11-08T10:17:06.2836473Z",
"serviceUrl": "https://CortanaBFChannelWestUS.azurewebsites.net/",
"channelId": "cortana",
"from": {
"id": "D65148253A8E11E86BAEF4C3FB964163E6028E4E9FC6DE221F88CA1A37DD4AF4"
},
}
提前致谢。
为了在 bot 通信期间从 cortana 接收用户的电子邮件地址,您需要请求用户访问该信息。这可以从机器人开发门户完成:https://dev.botframework.com/bots/channels?id=YourBotId&channelId=cortana 在底部附近,您会看到标题为 "Request user profile data":
的部分
我请求 User.Info.Email 并将其命名为 UserEmail。保存后,Cortana 将请求用户允许提供他们的电子邮件地址:
一旦用户同意,"UserInfo" 类型的实体将在 botRequest 中包含 "UserEmail" 属性:
{
"botId": "testcortanabotx2",
"botRequest": {
"type": "message",
"id": "ArL21qrKN1",
"timestamp": "2017-11-09T00:51:36.1278058Z",
"serviceUrl": "https://CortanaBFChannelWestUS.azurewebsites.net/",
"channelId": "cortana",
"from": {
"id": "BBFF225566992B987D49552D3457A129914957CCDD74A95F613C60F0996"
},
"conversation": {
"id": "c9879863a-78ca-4107-de18-9187443681d3"
},
"recipient": {
"id": "testcortanabotx2"
},
"locale": "en-US",
"entities": [
{
"type": "Intent",
"name": "Microsoft.Launch"
},
{
"type": "UserInfo",
"UserEmail": "MyPersonalEmailAddress@gmail.com"
},
{
"type": "DeviceInfo",
"supportsDisplay": "true"
}
],
"channelData": {
"skillId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"skillProductId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"isDebug": true
}
}
}
这可以在 .net 机器人中使用 Newtonsoft.json 访问,例如:
string userEmailAddress = string.Empty;
if (message.ChannelId == ChannelIds.Cortana)
{
if (message.Entities != null && message.Entities.Any())
{
var info = message.Entities.FirstOrDefault(e => e.Type == "UserInfo");
if (info != null)
{
userEmailAddress = (string)info.Properties["UserEmail"];
}
}
}
我正在为机器人框架应用程序进行 Cortana 通道集成。 我已启用 Cortana.I 的调试信息,并使用我的 Microsoft 帐户登录到 Cortana NoteBook,该帐户是使用 Gmail Id 创建的。 我想在我的 BOT 应用程序中捕获我的 Gmail ID,但是当我调试 bot 时,我得到了一些自动生成的 ID,如下所示。
{
"botId": "SpeechBot1",
"botRequest": {
"type": "message",
"id": "GYobtdHWUXY",
"timestamp": "2017-11-08T10:17:06.2836473Z",
"serviceUrl": "https://CortanaBFChannelWestUS.azurewebsites.net/",
"channelId": "cortana",
"from": {
"id": "D65148253A8E11E86BAEF4C3FB964163E6028E4E9FC6DE221F88CA1A37DD4AF4"
},
}
提前致谢。
为了在 bot 通信期间从 cortana 接收用户的电子邮件地址,您需要请求用户访问该信息。这可以从机器人开发门户完成:https://dev.botframework.com/bots/channels?id=YourBotId&channelId=cortana 在底部附近,您会看到标题为 "Request user profile data":
的部分我请求 User.Info.Email 并将其命名为 UserEmail。保存后,Cortana 将请求用户允许提供他们的电子邮件地址:
一旦用户同意,"UserInfo" 类型的实体将在 botRequest 中包含 "UserEmail" 属性:
{
"botId": "testcortanabotx2",
"botRequest": {
"type": "message",
"id": "ArL21qrKN1",
"timestamp": "2017-11-09T00:51:36.1278058Z",
"serviceUrl": "https://CortanaBFChannelWestUS.azurewebsites.net/",
"channelId": "cortana",
"from": {
"id": "BBFF225566992B987D49552D3457A129914957CCDD74A95F613C60F0996"
},
"conversation": {
"id": "c9879863a-78ca-4107-de18-9187443681d3"
},
"recipient": {
"id": "testcortanabotx2"
},
"locale": "en-US",
"entities": [
{
"type": "Intent",
"name": "Microsoft.Launch"
},
{
"type": "UserInfo",
"UserEmail": "MyPersonalEmailAddress@gmail.com"
},
{
"type": "DeviceInfo",
"supportsDisplay": "true"
}
],
"channelData": {
"skillId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"skillProductId": "xxxxxx-xxxx-xxxx-xxxx-xxxxxx",
"isDebug": true
}
}
}
这可以在 .net 机器人中使用 Newtonsoft.json 访问,例如:
string userEmailAddress = string.Empty;
if (message.ChannelId == ChannelIds.Cortana)
{
if (message.Entities != null && message.Entities.Any())
{
var info = message.Entities.FirstOrDefault(e => e.Type == "UserInfo");
if (info != null)
{
userEmailAddress = (string)info.Properties["UserEmail"];
}
}
}