#node.js #amazon-web-services #aws-lambda #alexa #alexa-skill
Вопрос:
Я использую функцию Лямбда для своего навыка Alexa. Для моего намерения запуска я запрашиваю DynamoDB и возвращаю строку, которую я сначала хочу преобразовать в QR-код, а затем я хочу вернуть ее на устройство Alexa в виде изображения внутри responseBuilder
Alexa отлично работает, отображая изображения с внешних URL-адресов, таких как
const rabbitImage = "https://i.imgur.com/U6eF0oH.jpeg";
return responseBuilder
.speak(say)
.withStandardCard("Welcome to Alexa", "description", rabbitImage, rabbitImage)
.reprompt('try again, ' say)
.getResponse();
Но я застрял на том, как отправить QR-код обратно на устройство Alexa в responseBuilder
.
Я использую nodejs
библиотеку под названием qrcode
, которая может преобразовать строку в QR-код, а затем в base64
.
https://www.npmjs.com/package/qrcode
Но , согласно документам Alexa для отправки a "card" aka image
, обратно пользователю это должен быть URL-адрес.
The Alexa Skills Kit provides different types of cards:
A Standard card also displays plain text, but can include an image. You provide the text for the title and content, and the URL for the image to display.
Поэтому я не уверен, будет ли base64
сгенерированная qrcode
библиотека работать в этом случае.
Каков наилучший способ отправить динамически сгенерированный QR-код обратно на устройство Alexa в качестве ответа в этом сценарии?
const LaunchRequest_Handler = {
canHandle(handlerInput) {
const request = handlerInput.requestEnvelope.request;
return request.type === 'LaunchRequest';
},
handle(handlerInput) {
const responseBuilder = handlerInput.responseBuilder;
//Perform query to DynamoDB
var stringToCreateQRWith = "8306e21d-0c9e-4465-91e9-0cf86fca110d";
//Generate qr code and send back to user here
//???Unsure how to do and what format to send it in
var qrImageToSendToUser = ???
return responseBuilder
.speak(say)
.withStandardCard("Welcome to Alexa", "description", qrImageToSendToUser , qrImageToSendToUser )
.reprompt('try again, ' say)
.getResponse();
}
Комментарии:
1. Я бы, вероятно , даже не преобразовал его в base64, а скорее
png
загрузил это изображение в корзину S3 с открытым разрешением (что позволит вам использовать http-ссылку для каждого сохраненного объекта) и использовать эту ссылку для ссылки на изображение. Имейте в виду, что это не очень безопасное решение, технически все ваши QR-коды доступны в общедоступном Интернете! Однако, насколько я понимаю из приведенной документации, изображения в любом случае действительны только по URL-адресу, так что это может быть общей проблемой для вашего варианта использования.2. Поскольку вы создаете QR-код, вам, вероятно, захочется использовать предварительно подписанный URL-адрес для защиты содержимого QR-кода и предотвращения сканирования любого qr-кода, который вы создаете, в открытой корзине S3. Таким образом, ваш процесс будет состоять в том, чтобы сгенерировать QR-код, загрузить файл изображения в S3, сгенерировать предварительно подписанный URL-адрес, а затем отправить предварительно подписанный URL-адрес Alexa. Информация о предварительно подписанных URL-адресах: boto3.amazonaws.com/v1/documentation/api/latest/guide/…
Ответ №1:
Как предложил @kopaka, это правильный путь. Нет никакого способа обойти это.
В соответствии с документацией
Это несколько вещей, которые вам нужно иметь в виду.
На самих изображениях вы захотите создать 2 изображения с 720px x 480px
помощью и 1200px x 800px
. Чтобы убедиться, что они хорошо отображаются на нескольких экранах разного размера. В противном случае они не гарантируют наилучший опыт для вашего пользователя, так как они могут масштабировать изображение вверх/вниз по размеру.
При выборе хранилища вам необходимо убедиться, что вы можете обслуживать эти изображения с помощью Https
действительного ssl-сертификата, которому доверяет Amazon, и с его помощью.