Amazon Alexa Skills Kit: как вы связываетесь с внешней учетной записью приложения/userId
В запросе умения amazon alexa есть userId, и я пытаюсь понять, что это такое, и если есть какая-то ссылка для него, потому что я хочу связать и учетную запись пользователя Amazon Echo с помощью учетной записи в моем собственном приложении, и для этого мне придется иметь какой-то статический userId для работы.
Пример запроса:
{
"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"
}
}
}
}
}
Ответы
Ответ 1
Я не знаю, почему исходный ответ был удален, но Amazon теперь позволяет вам связать пользователя Alexa с пользователем в вашей системе. Здесь объявление.
Как конечные пользователи настраивают привязку учетной записи для навыка
Пользователи связывают свои аккаунты с помощью приложения Amazon Alexa. Обратите внимание, что пользователи должен использовать приложение. Нет никакой поддержки для установления ссылки исключительно голосом.
Обычно пользователи запускают процесс, когда изначально приложение:
- В приложении Alexa пользователь позволяет использовать умение.
-
Приложение отображает вашу страницу входа прямо в приложении, используя URL-адрес авторизации, который вы указываете при регистрации своих навыков на портал разработчиков. Когда приложение-компаньон вызывает этот URL-адрес, оно включает state, client_id и scope в качестве параметров строки запроса.
- Состояние используется службой Alexa во время процесса компоновки учетной записи. Ваша страница должна отслеживать это значение, так как вы должны пропустите его позже.
- Client_id определяется вами. Ваша страница входа может использовать это, чтобы определить, что запрос пришел из вашего умения Alexa.
- Область действия - это необязательный список областей доступа, указывающих уровень запрашиваемого доступа. Вы определяете набор областей для поддержки, когда чтобы связать учетную запись для вашего навыка.
-
Пользователь регистрируется с использованием своих обычных учетных данных для вашего сайта.
-
Ваша служба аутентифицирует пользователя, а затем генерирует токен доступа, который однозначно идентифицирует пользователя в вашей системе.
-
Ваш сервис перенаправляет пользователя на определенный URL-адрес Amazon и передает его по состоянию, access_token и token_type в URL-адресе фрагмент.
-
Служба Alexa проверяет возвращаемую информацию и затем сохраняет access_token для пользователя Alexa.
На этом этапе умение включено, учетная запись пользователя Alexa связанный с учетной записью в вашем сервисе, и умение готово быть б.
Ответ 2
Отличный вопрос.
Короткий ответ: Вам нужно будет создать собственное сопряжение между вашим сторонним пользователем и Alexa UserID. Там нет встроенной поддержки в SDK Alexa Skills, которая позволяет связать Alexa UserID с вашим ID пользователя. Вам нужно будет создать конкретный голос, который связывает Alexa UserIDs с вашей БД пользователей.
Более длинный ответ:. Пусть начнется разговор об этом Alexa UserID, который вы получите в каждом запросе. Пользователь Alexa UserID - это идентификатор пользователя LWA (Login-With-Amozon). Основная цель - позволить Alexa Skills надежно обнаруживать повторяющихся пользователей.
Итак, что не работает? Проблема, с которой вы столкнетесь, заключается в том, что LWA userId всегда анонимно для каждого приложения Alexa. Это важно, потому что это гарантирует, что пользователи не отслеживаются; но также препятствует связыванию идентификатора пользователя Alexa с вашим собственным идентификатором пользователя LWA.
Из Войти с Amazon - Руководство разработчика" (стр. 10)
Каждая компания, создающая веб-сайты или приложения для входа в Amazon, получает тот же user_id для клиента. Однако, когда клиент входит в систему другое приложение или сайт компании user_id будет отличаться. Это поэтому user_id не может использоваться для отслеживания клиентов через Интернет.
То, что я пытаюсь сказать, заключается в том, что вы не можете просто реализовать LWA в iOS, Android или веб-приложениях и ожидать получить тот же LWA userId для учетной записи, что и вы, как пользовательский идентификатор Alexa. Например, если вы реализовали LWA в своем приложении для Android, у пользователя [email protected] был зарегистрирован пользователь на свою учетную запись Amazon, вы можете получить amzn1.account.123456 как userID, но когда тот же пользователь [email protected] разговаривает со своим парным эхом, вы получите amzn1.account.98765 или любой другой совершенно другой userId. Я фактически потратил два дня на строительство этой архитектуры, и я знаю, что она не работает.
Итак, что работает? Лучше всего использовать голосовую настройку аутентификации Pin.
Посмотрите на другое пространство приложений с аналогичной проблемой: телевизионные приложения (xbox, android TV и т.д.). Многие из этих приложений требуют входа в систему, чтобы получить доступ к контенту (например, hulu, netflix и т.д.). Но использование пульта дистанционного управления для ввода имени пользователя и пароля - это просто старый плохой UX. Итак, что мы делали для ТВ-приложений? Пользователи переходят на myService.com/tv, заходят в свою учетную запись и получают специальный короткий, числовой и чувствительный по времени PIN-код, который они могут вводить на свой телевизор.
Когда я реализовывал Alexa Skill, мы решили использовать аналогичный подход. Пользователи войдут на наш сайт, приложение iOS или приложение для Android, перейдите на специальную страницу эха, а затем получите пин-код. Экранные инструкции, которые будут читать примерно так:
Перейдите в свое эхо и скажите:
'Запустить foo'
'Мой вывод - один два три четыре'
В нашем навыке foo у нас есть намерение PairingIntent прослушать "мой вывод - это {one two three four | pinCode}" примерное высказывание. Получив PairingIntent, мы проверили бы, был ли этот пин-код действительным, и если это связано с Alexa userID с нашей собственной БД пользователей. Если бы штырь был действительным, Эхо скажет что-то вроде "О, привет, Боб! Теперь у тебя есть доступ ко всем твоим потрясающим вещам". Если PIN-код недействителен, alexa предложит пользователям повторить попытку.
Надеюсь, это имеет смысл. Существуют и другие варианты связывания сторонних учетных записей с Alexa Skills, но этот подход с голосовым буфетом является самым простым.
Ответ 3
Идентификатор пользователя, присвоенный навыку Alexa, гарантированно уникален для каждого пользователя. Он анонимный в соответствии с идентификатором разработчика, поэтому он будет таким же во всех ваших навыках, но он будет отличаться от разработчика к разработчику. Невозможно напрямую привязать его к любому ID реального мира. Вы должны сделать это сами.
Моя общая рекомендация - сделать это как Firefox sync. Если оба ваших навыка Alexa и ваше приложение имеют общий доступ, тогда, когда пользователь хочет синхронизировать с Alexa, сгенерируйте 4-символьный код синхронизации, сохраните его в конце, прочитайте его пользователю и скажите им, чтобы он на веб-сайт и введите его. На веб-сайте, когда они дают код синхронизации, соответствуют ему и образуют вашу связь между ними.
Я рассказываю об этом чуть подробнее в моей книге, но это суть этого.
Ответ 4
В запросе на умение amazon alexa я пытаюсь связать его с именем пользователя.
Как вы не можете получить фактическое имя пользователя. Но, чтобы быть более полными, есть разные способы, которые используются, чтобы делать то, что вы пытаетесь сделать. Это будет зависеть от того, что вы пытаетесь сделать, чтобы узнать, какой подход для вас.
Ваши варианты:
-
Связывание имени пользователя в вашей системе с пользователем Alexa. В этом случае вы не получите имя пользователя. Вы получаете токен, и вы связываете имя пользователя вместе в своей системе, используя этот токен. Читайте: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/linking-an-alexa-user-with-a-user-in-your-system
-
Если то, что вы пытаетесь сделать, это просто однозначно идентифицировать одного пользователя от другого, но вам не нужна или нужна какая-либо конкретная информация об этом пользователе. Запрос поставляется с пользователем (session.user.userId). Это случайная строка символов, которая будет идентифицировать этого пользователя для всех отправляемых ими запросов, но ничего не сообщает о них. Читайте: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference
-
У вас может быть намерение, которое будет что-то вроде "SetUser" и позволит пользователю говорить с вами имя пользователя, которое они хотели бы. Затем вы можете использовать # 2 выше, чтобы связать их вместе в каком-то хранилище данных. Я не знаю, поддерживает ли Amazon этот маршрут, так как это действительно станет способом обойти №1. Таким образом, это зависит от того, что вы пытаетесь сделать. Если вам нужна личная информация о пользователе, используйте # 1. Если вам просто нужно знать, что некоторые пользователи против другого пользователя используют # 2.