Пользовательский слот Alexa skills для свиданий

Итак, я работаю над проектом с Amazon Echo. Моя цель - записать, когда я выполнил определенное действие, и записать его в БД. Моя проблема - часовые пояса, и я избегаю этого, используя время эпохи. Однако из того, что я могу сказать о пользовательских слотах для намерения, я выбираю отформатированные строки даты без времени или отформатированные строки времени без дат, и, кроме того, у меня нет возможности получить часовой пояс клиента без специально прошу об этом на основе некоторых сообщений на форуме, которые я нашел с помощью своего google fu.

Эхо просто ненавидит даты? Это кажется чем-то, что должно быть очень простым, но я изо всех сил пытаюсь понять, как это сделать, не будучи очень неловким и не спрашивая, где они живут, чтобы я мог выполнить поиск их часового пояса. Мне уже пришлось сделать поворот от сообщения им конкретного времени, когда они что-то сделали, к тому, как давно они что-то сделали, потому что я не могу передавать даты обратно в Эхо и ожидать, что оно переведет это. Это еще один глупый поворот, который я должен сделать?


person jking31cs    schedule 13.07.2016    source источник


Ответы (3)


Правильно, вы не можете получить TZ или местоположение клиента от Alexa. Это вопрос конфиденциальности. Единственный способ — попросить об этом самостоятельно.

Существует специальный слот для «пятизначного числа», который идеально подходит для почтового индекса. Это самый простой способ получить приблизительное местоположение пользователя.

Если вы хотите быть более изобретательным, поскольку Echo (в значительной степени) используется только в Америке, вам нужно сузить его до одного из четырех часовых поясов. (За счет Аляски, Гавайев и Аризоны на полгода.) Можно просто спросить, в каком часовом поясе они находятся, что менее навязчиво.

Или, если вы хотите проявить творческий подход, сделайте из этого шутку.

  • A: «Популярная викторина: вы находитесь в восточном стандартном времени?»
  • U: "No"
  • A: «Черт возьми. Дай угадаю еще раз. Ты похож на человека из Mountain Time».

...

Да. Это раздражающее ограничение. Но если вы сможете найти новый способ обойти это, ваше мастерство станет более привлекательным.

person Joseph Jaquinta    schedule 15.07.2016
comment
Другой вопрос указывает на проблемы с использованием пятизначного числа: stackoverflow.com/questions/40132347/ - person Carlos Macasaet; 21.10.2016

Похоже, вы не можете (пока) определить часовой пояс пользователя, но вы все равно сможете достичь своих целей. Несколько мыслей:

  • Вы можете просто сделать так, чтобы система вообще не знала о часовых поясах. У каждого пользователя может быть свой часовой пояс, но все время для конкретного пользователя будет в одном и том же часовом поясе, поэтому любые расчеты длительности будут работать нормально.
  • Тип слота DATETIME отсутствует, поэтому вам нужно обрабатывать каждый слот отдельно как AMAZON.DATE и AMAZON.TIME. например "Отметить завершение {ДАТА} в {ВРЕМЯ}"
  • Кроме того, если вы в реальном мире отмечаете дату и время завершения, можете ли вы просто сгенерировать временную метку внутри своего кода, а не заставлять их говорить это?
  • Запрос Zip может быть быстрым способом установить часовой пояс, если это необходимо.
  • Взлом: если вы используете привязку учетных записей, вы можете определить их часовой пояс со стороны клиента на странице входа.

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

person python1981    schedule 28.09.2016

Существует способ узнать часовой пояс пользователя по коду страны и почтовому индексу, который предоставляет Amazon. Вам просто нужно включить разрешение в консоли разработчика.

После этого всякий раз, когда вы получаете запрос от голосовой службы Alexa, вы получаете consent token. Что указывает на то, что пользователь дал разрешение.

Затем вы можете получить часовой пояс пользователя, запросив Google API. Код Python для того же упомянут ниже.

# to get the country code and postal code of user
res = requests.get('{0}/v1/devices/{1}/settings/address/countryAndPostalCode'.format(context.System.apiEndpoint, context.System.device.deviceId),
                   headers = {'Authorization':'Bearer {}'.format(context.System.apiAccessToken)}).json()
postCode = res['postalCode']
countryCode = res['countryCode']

# key specific to the user
apiAccessKey = 'your-api-key'
# Google Geocoding API: provides latitude and longitude from country code and postal code
res = requests.get('https://maps.googleapis.com/maps/api/geocode/json?address={0},{1}&key={2}'
                   .format(countryCode, postCode, apiAccessKey)).json()

lat = res['results'][0]['geometry']['location']['lat']
lng = res['results'][0]['geometry']['location']['lng']

# Google's Time Zone API: provides timezone from latitude and longitude.
res = requests.get('https://maps.googleapis.com/maps/api/timezone/json?location={0},{1}&timestamp={2}&key={3}'
                   .format(lat, lng, datetime.datetime.timestamp(datetime.datetime.now()),apiAccessKey)).json()

timezone = res['timeZoneId']
person Aman Agarwal    schedule 06.07.2018