【问题标题】:access Alexa Session persistence from other service从其他服务访问 Alexa 会话持久性
【发布时间】:2019-10-24 10:20:53
【问题描述】:

我有一个 Alexa 托管技能。我正在尝试找到一种从其他地方(例如 angular 2.x)访问 persistenceAdapter.S3PersistenceAdapter() 的方法。可以这样做,还是我必须使用其他数据库来替换 S3?如果是这样,推荐使用哪个数据库?

我使用一些示例代码从 alexa 技能访问 S3。我不知道 attributesManager 是如何工作的,只是复制和粘贴。

.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;

【问题讨论】:

    标签: alexa


    【解决方案1】:

    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
    

    【讨论】:

    • 不是我要找的,但谢谢。问题是我使用的是 alexa 主机,所以我无法为该 s3 配置权限。我将尝试在我的 aws 帐户中移动 lambda,不确定是否可以工作
    【解决方案2】:

    您可以使用 S3 存储桶,语法如下所示,它们确实像上面示例中的持久性属性一样具有 get、set 和 save 以及更多关于这方面的信息,您可以去这里Amazon Docs at the bottom.

    const { S3PersistenceAdapter } = require('ask-sdk-s3-persistence-adapter');
    const S3PersistenceAdapter = new S3PersistenceAdapter({ bucketName : 'FooBucket' })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-30
      • 2013-05-10
      • 2015-12-18
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多