Cortana BOT Framework возвращает автоматически сгенерированный идентификатор

Я работаю над интеграцией каналов Кортаны для приложения фреймворка ботов. Я включил отладочную информацию для Cortana. Я вошел в Cortana NoteBook со своей учетной записью Microsoft, созданной с использованием идентификатора Gmail. Я хочу сохранить свой идентификатор Gmail в своем приложении BOT, но при отладке бота получаю автоматически сгенерированный идентификатор, как показано ниже.

{
  "botId": "SpeechBot1",
  "botRequest": {
    "type": "message",
    "id": "GYobtdHWUXY",
    "timestamp": "2017-11-08T10:17:06.2836473Z",
    "serviceUrl": "https://CortanaBFChannelWestUS.azurewebsites.net/",
    "channelId": "cortana",
    "from": {
      "id": "D65148253A8E11E86BAEF4C3FB964163E6028E4E9FC6DE221F88CA1A37DD4AF4"
    },
}

Заранее спасибо.


person Amol Pawar    schedule 08.11.2017    source источник


Ответы (1)


Чтобы получить адрес электронной почты пользователя от Кортаны во время общения с ботом, вам необходимо запросить доступ к этой информации у пользователя. Это можно сделать на портале разработчиков ботов: https://dev.botframework.com/bots/channels?id=YourBotId&channelId=cortana Внизу вы увидите раздел под названием «Запросить данные профиля пользователя»:

введите описание изображения здесь

Я запросил User.Info.Email и назвал его UserEmail. После сохранения Кортана запросит у пользователя разрешение указать свой адрес электронной почты:

введите описание изображения здесь

После согласия пользователя объект типа UserInfo будет содержать свойство UserEmail в botRequest:

{
  "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": "[email protected]"
      },
      {
        "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"];
        }
    }
}
person Eric Dahlvang    schedule 09.11.2017
comment
Спасибо, Эрик, за подробный ответ. :-) - person Amol Pawar; 09.11.2017