我具有Alexa主持的技能。我正在尝试找到一种从其他地方(例如angular 2.x)访问persistenceAdapter.S3PersistenceAdapter()的方法。可以做到这一点,还是我必须使用其他数据库替换S3?如果是这样,建议使用哪个数据库?
我使用一些示例代码从Alexa技能访问S3。我不知道attributeManager的工作原理,只是复制和粘贴。
.withPersistenceAdapter(
new persistenceAdapter.S3PersistenceAdapter({bucketName:process.env.S3_PERSISTENCE_BUCKET})
)
和
const attributesManager = handlerInput.attributesManager;
const sessionAttributes = await attributesManager.getPersistentAttributes() || {};
const temperature = sessionAttributes.hasOwnProperty('temperature') ? sessionAttributes.temperature : 0;
答案 0 :(得分:0)
S3不是数据库-S3是对象存储。如果您需要数据库,则可以改用DynamoDB。听起来像是-您通常不会为此使用S3。
无论如何,您将无法在Angular或其他(非Alexa技能)项目中使用ASK SDK。但是,您可以使用AWS开发工具包连接到S3(或DynamoDB)。
https://github.com/aws/aws-sdk-js
您有3种类型的Alexa属性-请求,会话和持久性。我注意到您的变量名为sessionAttributes
,但是您正在做getPersistentAttributes
。
以下是您如何使用withPersistentAdapter
-https://www.talkingtocomputers.com/alexa-skills-kit-ask-sdk-v2#data-persistence
但是,这是使用DynamoDB的示例。这是更简单的IMO:
module.exports.handler = Alexa.SkillBuilders.standard()
.addRequestHandlers(/* your handlers */)
.withTableName(/* your table name (string) */)
.withDynamoDbClient()
.lambda()
}
然后您可以执行类似的操作(在异步函数中):
const att = await attributesManager.getPersistentAttributes()
const temperature = att.temperature ? att.temperature : 0
但是,当然,如果要访问该属性,则需要先在其中保存该属性。例如(在异步函数中):
const att = await attributesManager.getPersistentAttributes()
await attributesManager.setPersistentAttributes( { ...att, temperature: 10 }) // set the value
await attributesManager.savePersistentAttributes() // save it
答案 1 :(得分:0)
您可以使用S3存储桶,其语法如下所示,它们确实具有如上例中的持久性属性那样的get,set和save,对此您可以在Amazon Docs at the bottom.
const { S3PersistenceAdapter } = require('ask-sdk-s3-persistence-adapter');
const S3PersistenceAdapter = new S3PersistenceAdapter({ bucketName : 'FooBucket' })