如何在 Skill 创建后立即执行操作?
How to do something as soon as Skill is created?
在我的 Alexa Skill 中,我在 'addRequestInterceptors' 中设置了动态实体,因为实体必须尽快可用,问题是如果用户说 'Alexa, open SKILLNAME
' 实体被正确初始化,但是如果此时用户改为说 'Alexa, ask SKILLNAME
where is DYNAMICENTITY
',则技能失败,因为尚未设置 DYNAMICENTITY
。
所以我的问题是,如何像创建技能时一样尽快设置我的动态实体?我已经尝试过 LaunchIntent,但如上例所示,如果用户在调用中提出问题,则可以避免..
所以 LaunchIntent 和 addRequestInterceptors 不适合这样做..
这是我应该尽快 运行 的代码:
const LoadListaPuntiVendita = {
async process(handlerInput) {
const {attributesManager, requestEnvelope} = handlerInput;
const sessionAttributes = attributesManager.getSessionAttributes();
const attributes = await attributesManager.getPersistentAttributes() || {};
const piva = attributes.hasOwnProperty('piva') ? attributes.piva : null;
sessionAttributes["piva"] = piva;
if (!piva || piva === null) {
return;
}
let negozi = sessionAttributes['negozi']
if (!negozi) {
const response = await logic.fetchNegozi(piva);
sessionAttributes['negozi'] = response;
addDynamicEntities(handlerInput.responseBuilder, 'PuntoVenditaType', response);
}
}
};
乍一看,这是一个可能的错误。这只会 运行 在您至少进行了一次保存“piva”并将其设置为客户的持久值的交换之后。
如果您在技能初始化时 运行 执行此操作,则它仍然必须 运行 在持久性适配器初始化并从您的存储中检索“piva”的值之后并且必须在没有设置实体的情况下为“piva”或代码returns存储了一个值。
在我的 Alexa Skill 中,我在 'addRequestInterceptors' 中设置了动态实体,因为实体必须尽快可用,问题是如果用户说 'Alexa, open SKILLNAME
' 实体被正确初始化,但是如果此时用户改为说 'Alexa, ask SKILLNAME
where is DYNAMICENTITY
',则技能失败,因为尚未设置 DYNAMICENTITY
。
所以我的问题是,如何像创建技能时一样尽快设置我的动态实体?我已经尝试过 LaunchIntent,但如上例所示,如果用户在调用中提出问题,则可以避免..
所以 LaunchIntent 和 addRequestInterceptors 不适合这样做..
这是我应该尽快 运行 的代码:
const LoadListaPuntiVendita = {
async process(handlerInput) {
const {attributesManager, requestEnvelope} = handlerInput;
const sessionAttributes = attributesManager.getSessionAttributes();
const attributes = await attributesManager.getPersistentAttributes() || {};
const piva = attributes.hasOwnProperty('piva') ? attributes.piva : null;
sessionAttributes["piva"] = piva;
if (!piva || piva === null) {
return;
}
let negozi = sessionAttributes['negozi']
if (!negozi) {
const response = await logic.fetchNegozi(piva);
sessionAttributes['negozi'] = response;
addDynamicEntities(handlerInput.responseBuilder, 'PuntoVenditaType', response);
}
}
};
乍一看,这是一个可能的错误。这只会 运行 在您至少进行了一次保存“piva”并将其设置为客户的持久值的交换之后。
如果您在技能初始化时 运行 执行此操作,则它仍然必须 运行 在持久性适配器初始化并从您的存储中检索“piva”的值之后并且必须在没有设置实体的情况下为“piva”或代码returns存储了一个值。