#amazon-web-services #amazon-s3 #alexa-skills-kit #alexa-skill
#amazon-web-services #amazon-s3 #alexa-skills-kit #alexa-навык
Вопрос:
У меня то, что выглядит как обычная проблема. Я использую пример кода python, сгенерированный Amazon при создании навыка, размещенного на Alexa, для создания предустановленного URL-адреса для аудиофайла в S3 следующим образом:
url = utils.create_presigned_url(f"Media/file.mp3")
speak_output = f'<audio src="{url}"/>'
Генерируемый URL-адрес действителен в течение 10 минут и выглядит следующим образом:
https://s3.eu-west-1.amazonaws.com/88516b63-75bc-4c6a-a6cf-d12860d50b4e-eu-west-1/Media/file.mp3?X-Amz-Algorithm=AWS4-HMAC-SHA256amp;X-Amz-Credential=ASIAYFCHQ4OU2ZBBLLU4/20200926/eu-west-1/s3/aws4_requestamp;X-Amz-Date=20200926T082211Zamp;X-Amz-Expires=600amp;X-Amz-SignedHeaders=hostamp;X-Amz-Security-Token=IQoJb3JpZ2luX2VjENH//////////wEaCWV1LXdlc3QtMSJIMEYCIQDfV53BV52momhRGAQkPJVym/N/rzPMYmCT8SOBke6CKgIhAI4AGnWd9gpzMeQb+1nhQ4VusLLTzs2ZNZFcMpdxaSRPKuwBCOn//////////wEQABoMNTYwNjQzMjM2Nzc3IgzP4Hvvs9jrXQGNqCMqwAEysuGmMv8JVDGN4gUip2JPlmM7JxiEURGyhQxB9KGycK9y5hQQ6U+Nd85W/ZpzFksrzGagC8jJXPgJGSl0eTN1EF+Oq+k504K/faSKAQr06G7Lb87CKrDFSssoUZGcztQ3oixft9Y3FMCPzd5/oO9AG+LoK2HzG2YEQyEq05aUqsNDQZG13znFpv80uLELBQc35Oy888k9PYC2tJBvMnuFpMOWr/ZiGvZKQm8OnpYElmyHjAvY81/l6CxXcuTFwRowq/G7+wU63wHmb0KR+PtPngH3cWgdzkBobNewKpXvczWurUPR9e73SJEjoHPS7VIkGGx6DkWXyUZIB8eOMuy0rZdnsR7MUPc6/MjRiqqbboLxqN+7vmls0tycCSe0INH+o1Kkb2VZwU5kWb+3ZAHtzp4xERw2NQXvgVkK5gSoWbt7SGMJfjkp5cSbkxlI1aJxisgdWKWokZiU3GyqrlqVuNpRqom7ZZsuLTNOWTzUqQSx92F3ZNefJE17Jr/yy6PSqA7DHRd+v6Jiyuk35GSDdEeJClCofkByxnbu3da+8Qtnm/tDsUMVamp;X-Amz-Signature=16fa135dadc7cfa83f9bce10ffcad0e0aff7617414d88fae4b068af5cc2ebd73
Таким образом, конечный SSML, возвращаемый функцией, выглядит следующим образом:
{
"body": {
"version": "1.0",
"sessionAttributes": {},
"userAgent": "ask-python/1.11.0 Python/3.7.9",
"response": {
"outputSpeech": {
"type": "SSML",
"ssml": "<speak><audio src="superlongurl"/></speak>"
}
}
}
}
Для меня это выглядит правильно, но Alexa говорит:
"request": {
"type": "SessionEndedRequest",
"requestId": "amzn1.echo-api.request.effc325d-f969-4f3b-aa0e-d339c65ec349",
"timestamp": "2020-09-26T08:22:12Z",
"locale": "es-ES",
"reason": "ERROR",
"error": {
"type": "INVALID_RESPONSE",
"message": "Invalid SSML Output Speech for requestId amzn1.echo-api.request.43ec04ea-4a0c-4971-bb28-71de95141fd6. Error: Fatal error occurred when processing SSML content. This usually happens when the SSML is not well formed. Error: Unexpected character '=' (code 61); expected a semi-colon after the reference for entity 'X-Amz-Credential'n at [row,col {unknown-source}]: [1,168]"
}
}
И я не могу понять, почему. Я уже читал этот вопрос, но решение заключается в том, чтобы сделать объект общедоступным в вашем собственном ведре, вместо того, чтобы использовать тот, который предоставлен alexa hosted skill, который мне не подходит.
Я также попробовал этот вариант, экранирующий символы с помощью cgi (я использовал html-пакет), но ответ, который я получаю,:
"request": {
"type": "SessionEndedRequest",
"requestId": "amzn1.echo-api.request.b25a36d3-be89-4952-b688-ae2dc9b7710c",
"timestamp": "2020-09-26T08:28:23Z",
"locale": "es-ES",
"reason": "ERROR",
"error": {
"type": "INVALID_RESPONSE",
"message": "Invalid Audio Content for requestId amzn1.echo-api.request.5fac838c-0bd1-4704-bdaf-3cbf42d9c766. Error: The audio is not of a supported MPEG version"
}
}
Что не имеет смысла, поскольку первый URL-адрес работает нормально. Если я пытаюсь получить доступ к экранированному URL-адресу, он мне не позволяет и жалуется на отсутствие полей (параметры запроса).
У кого-нибудь есть реальное решение для этого?
Большое вам спасибо!
Ответ №1:
После нескольких разговоров со службой поддержки и проверки многих вещей. Проблема заключалась в битрейте и частоте дискретизации файла MP3. Здесь у вас есть все требования к аудиофайлам: