Alexa flask-ask получить персональную информацию пользователя - PullRequest
0 голосов
/ 22 октября 2018

Я настроил умение Alexa, чтобы использовать Flask-Ask.Умение работает нормально, как и ожидалось.Теперь мне нужно получить личную информацию пользователя, такую ​​как имя, телефон, адрес электронной почты, адрес. Так что я использовал приведенный ниже код

@ask.intent('AskPermission')
def get_permission():
    token=context.System.apiAccessToken
    api_end_point=context.System.apiEndpoint
    request_id=request.requestId
    headers = {"Content-Type": "application/json",
               # "X-Amzn-RequestId":request_id,
               "Authorization": "Bearer {}".format(token)}
    body = {
              "version": "1.0",
              "response": {
                "card": {
                  "type": "AskForPermissionsConsent",
                  "permissions": [
                    "alexa::profile:email:read",
                  ]
                }
              }
            }

    permission_result = requests.get('{api_end_point}/v2/accounts/~current/settings/Profile.email'.format(api_end_point=api_end_point), json=body, headers=headers)

Я получаю 403 в ответ каждый раз.Я тестирую его на симуляторе alexa.Я включил разрешение в навыках, как показано ниже: enter image description here

Так что я здесь что-то не так делаю

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Просто для тех, кто застрял на одной точке.Я тестировал его на симуляторе alexa.Таким образом, чтобы получить разрешение, вам нужно перейти на https://alexa.amazon.in/spa/index.html#cards. Этот URL не упоминается ни в одной документации.

Выберите навыки (из левого меню) => Ваши навыки => Все навыки. Предоставьте разрешение.

Ниже видео помогло мне сделать это.https://www.youtube.com/watch?v=2Xfn5kNWbnU

0 голосов
/ 23 ноября 2018

Вам не нужно передавать тело в API:

@ask.intent('AskPermission')
def get_permission():
    """ Retreive User email from alexa user profile api """

    token = context.System.apiAccessToken
    api_end_point = context.System.apiEndpoint
    headers = {
        "Host": "api.amazonalexa.com",
        "Accept": "application/json",
        "Authorization": "Bearer {}".format(token)}

    resp = requests.get('{api_end_point}/v2/accounts/~current/settings/Profile.email'.format(api_end_point=api_end_point),headers=headers)
    if resp.status_code == 200:
        return resp.json()
    return resp
0 голосов
/ 22 октября 2018

Включение разрешения в конфигурации навыка означает, что навык может запросить у пользователя согласие на доступ к определенной информации.В вашем случае, электронный идентификатор.После настройки этого разрешения пользователь должен предоставить доступ к этой конкретной информации.Это так же, как вы предоставляете разрешение в приложениях для Android.Пользователь может дать разрешение на ваш навык двумя способами:

  1. Пользователи должны будут явно предоставить доступ к вашему навыку в меню Settings вашего навыка Alexa.
  2. Вы можете отправить permission card пользователю для согласия.

Прежде чем вы нажмете apiEndpoint с apiAccessToken, вы должны иметь доступ к этой информации.В противном случае вы получите 403.Поэтому, когда вы получаете 403, отправьте пользователю обратно permission card.И как только пользователь предоставит вам разрешение, нажмите apiEndpoint для получения необходимой информации.

...