Amazon Alexa Skills Kit: как вы связываетесь с внешней учетной записью приложения / идентификатором пользователя

В запросе Amazon Alexa Skill есть userId, и я пытаюсь понять, что это такое и есть ли какая-то ссылка на него, потому что я хочу связать и Amazon Echo с учетной записью в моем собственном приложении, и для этого мне нужно было бы иметь какой-то статический идентификатор пользователя для работы.

Пример запроса:

{
 "version": "1.0",
 "session": {
   "new": false,
   "application": {
   "applicationId": "amzn1.echo-sdk-ams.app.[unique-value-here]"
  },
  "sessionId": "session1234",
  "attributes": {},
  "user": {
    "userId": null //IS THERE A DETAILED REFERENCE OF THIS SOMEWHERE?
  }
},
"request": {
"type": "IntentRequest",
"requestId": "request5678",
"intent": {
  "name": "MyColorIsIntent",
  "slots": {
    "Color": {
      "name": "Color",
      "value": "blue"
    }
  }
}
}
}

person Zigglzworth    schedule 28.06.2015    source источник


Ответы (4)


Я не знаю, почему исходный ответ был удален, но теперь Amazon позволяет связать пользователя Alexa с пользователем в вашей системе. Вот объявление.

Как конечные пользователи настраивают привязку учетной записи для навыка

Пользователи связывают свои учетные записи с помощью приложения Amazon Alexa. Обратите внимание, что пользователи должны использовать приложение. Нет поддержки установления связи исключительно по голосу.

Пользователи обычно начинают процесс при первоначальном включении вашего навыка в приложении:

  1. В приложении Alexa пользователь включает навык.
  2. Приложение отображает вашу страницу входа прямо в приложении, используя URL-адрес авторизации, который вы указали при регистрации своего навыка на портале разработчика. Когда сопутствующее приложение вызывает этот URL-адрес, он включает state, client_id и scope в качестве параметров строки запроса.

    • The state is used by the Alexa service during the account linking process. Your page needs to keep track of this value, as you must
      pass it back later.
    • client_id определяется вами. Ваша страница входа может использовать это, чтобы определить, что запрос поступил от вашего навыка Alexa.
    • Область — это необязательный список областей доступа, указывающий запрошенный уровень доступа. Вы определяете набор областей для поддержки при включении привязки учетной записи для вашего навыка.
  3. Пользователь входит в систему, используя свои обычные учетные данные для вашего сайта.

  4. Ваша служба аутентифицирует пользователя, а затем создает токен доступа, который однозначно идентифицирует пользователя в вашей системе.

  5. Ваш сервис перенаправляет пользователя на специфичный для Amazon URL-адрес и передает состояние, access_token и token_type во фрагменте URL-адреса.

  6. Служба Alexa проверяет возвращенную информацию, а затем сохраняет access_token для пользователя Alexa.

На этом этапе навык включен, учетная запись Alexa пользователя связана с учетной записью в вашей службе, и навык готов к использованию.

person Lucas    schedule 05.09.2015

Отличный вопрос.

Краткий ответ: вам нужно будет создать собственную пару между вашим сторонним пользователем и идентификатором пользователя Alexa. В Alexa Skills SDK нет встроенной поддержки, позволяющей связать Alexa UserID с вашим идентификатором пользователя. Вам нужно будет создать конкретное голосовое намерение, которое связывает идентификаторы Alexa UserID с вашей базой данных пользователей.

Подробный ответ. Давайте начнем с того, что Alexa UserID вы получаете в каждом запросе. Полученный Alexa UserID — это идентификатор пользователя LWA (Login-With-Amozon). Основная цель — позволить Alexa Skills надежно обнаруживать повторяющихся пользователей.

Так что же не работает? Проблема, с которой вы столкнетесь, заключается в том, что идентификатор пользователя LWA всегда анонимен для каждого приложения Alexa. Это важно, потому что гарантирует, что пользователей не отслеживают; но это также не позволяет вам связать идентификатор пользователя Alexa с вашим собственным идентификатором пользователя LWA.

Из Войти с помощью Amazon — Руководство для разработчиков (стр. 10)

Каждая компания, которая создает веб-сайты или приложения для входа в Amazon, получает один и тот же user_id для клиента. Однако, когда клиент входит в приложение или на сайт другой компании, user_id будет другим. Это связано с тем, что user_id нельзя использовать для отслеживания клиентов в Интернете.

Я пытаюсь сказать, что вы не можете просто внедрить LWA в iOS, Android или веб-приложения и ожидать, что вы получите тот же идентификатор пользователя LWA для учетной записи, что и в качестве идентификатора пользователя Alexa. Например, если вы реализовали LWA в своем приложении для Android и получили [email protected] пользователь войдет в свою учетную запись Amazon, вы можете получить amzn1.account.123456 в качестве идентификатора пользователя, но когда тот же пользователь [email protected] разговаривает со своим парным Echo, вы получит amzn1.account.98765 или любой другой совершенно другой идентификатор пользователя. На самом деле я потратил два дня на создание этой архитектуры, откуда я знаю, что она не работает.

Так что же работает? Вариант аутентификации с помощью PIN-кода, ориентированный на голос, кажется лучшим.

Давайте посмотрим на другое пространство приложений с похожей проблемой: ТВ-приложения (xbox, android TV и т. д.). Многие из этих приложений требуют, чтобы вы вошли в систему, чтобы получить доступ к контенту (например, hulu, netflix и т. д.). Но использование пульта дистанционного управления для ввода имени пользователя и пароля — это просто старый плохой UX. Итак, что мы сделали для ТВ-приложений? Пользователи заходят на myService.com/tv, входят в свою учетную запись и получают специальный короткий числовой и чувствительный ко времени пин-код, который они могут ввести на своем телевизоре.

Когда я внедрял Alexa Skill, мы решили использовать аналогичный подход. Пользователи заходили на наш веб-сайт, в приложение для iOS или Android, переходили на специальную страницу Echo и затем получали пин-код. Инструкции на экране, которые будут выглядеть примерно так:

Подойдите к своему Эху и скажите:

«Запустить фу»

«Мой значок — один, два, три, четыре»

В нашем навыке foo у нас есть намерение PairingIntent слушать my pin is {one two three four|pinCode} образец высказывания. После получения PairingIntent мы проверяли, действителен ли этот пин-код, и если да, то связывали этот идентификатор пользователя Alexa с нашей собственной базой данных пользователей. Если бы булавка была действительной, Эхо сказал бы что-то вроде О, привет, Боб! Теперь у вас есть доступ ко всем вашим замечательным материалам.. Если пин-код недействителен, Alexa предложит пользователям повторить попытку.

Надеюсь, это имеет смысл. Существуют и другие варианты привязки сторонних учетных записей к Alexa Skills, но этот подход с голосовым пин-кодом является самым простым.

person JustinAngel    schedule 29.06.2015
comment
Это имеет смысл, и спасибо за идею создания навыка Alexa Skill, который сочетается с внешним сервисом. - person JamesQMurphy; 09.07.2015
comment
Есть ли причина для удаления ответа? - person Mike Flynn; 17.07.2015

Идентификатор пользователя, присвоенный навыку Alexa, гарантированно будет уникальным для каждого пользователя. Он анонимизирован в соответствии с идентификатором разработчика, поэтому он будет одинаковым для всех ваших навыков, но будет отличаться от разработчика к разработчику. Невозможно явно связать его с каким-либо реальным идентификатором. Вы должны сделать это сами. Моя общая рекомендация - сделать это как синхронизацию Firefox. Если и ваш навык Alexa, и ваше приложение имеют общую серверную часть, то, когда пользователь хочет выполнить синхронизацию с Alexa, сгенерируйте 4-значный код синхронизации, сохраните его в серверной части, прочитайте пользователю и попросите его перейти на веб-сайт и введите его. На веб-сайте, когда они дадут код синхронизации, сопоставьте его и сформируйте связь между ними. Я рассказываю об этом более подробно в моей книге, но в этом суть.

person Joseph Jaquinta    schedule 01.08.2015

В запросе навыка Amazon Alexa я пытаюсь связать его с именем пользователя.

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

Ваши варианты:

  1. Связывание имени пользователя в вашей системе с пользователем Alexa. В этом случае вы не получите имя пользователя. Вы получаете токен, и вы должны связать имя пользователя в своей системе, используя этот токен. Прочтите: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/linking-an-alexa-user-with-a-user-in-your-system

  2. Если то, что вы пытаетесь сделать, это просто однозначно идентифицировать одного пользователя от другого, но вам все равно или вам не нужна какая-либо конкретная информация об этом пользователе. Запрос приходит с пользователем (session.user.userId). Это случайная строка символов, которая идентифицирует этого пользователя для всех отправляемых им запросов, но ничего о них не сообщает. Читайте: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference

  3. У вас может быть намерение, которое будет чем-то вроде «SetUser», и позволить пользователю говорить вам имя пользователя, которое они хотели бы. Затем вы можете использовать # 2 выше, чтобы связать их вместе в каком-то хранилище данных где-нибудь. Я не знаю, поддерживает ли Amazon этот маршрут, поскольку это действительно способ обойти № 1. Итак, это зависит от того, что вы пытаетесь сделать. Если вам нужна личная информация о пользователе, используйте № 1. Если вам просто нужно знать, что это какой-то пользователь против другого пользователя, используйте № 2.

person Abhijit Jagtap    schedule 07.03.2017