You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Jovo框架的Alexa技能:如何通过Utterance获取IntentName并跳转意图?

解决Jovo框架下Alexa技能根据初始Utterance动态跳转意图的问题

看起来你之前的思路有点绕了——核心问题是你误解了Alexa的请求触发逻辑:当用户用带具体指令的Utterance(比如Alexa, ask <invocation_name> to get my latest campaign result)唤醒技能时,Alexa会直接发送对应的意图请求(CampaignIntent),而不是先触发LAUNCH意图。你之前把LAUNCH强制跳转到账号关联意图的逻辑,反而会干扰用户的初始请求。

下面是正确的实现方案,分步骤拆解:

1. 调整意图处理的核心逻辑

我们不需要在LAUNCH里统一处理账号关联,而是在每个需要账号权限的目标意图里先检查关联状态,如果未关联,就保存用户当前请求的意图,再引导账号关联;关联完成后自动跳回原意图。

第一步:修改目标意图的代码

在CampaignIntent和ActiveContactIntent里添加账号关联检查,并保存目标意图到会话数据:

async CampaignIntent() {
  // 检查用户是否已完成账号关联
  if (!this.$user.isLinked()) {
    // 把当前意图保存到会话,方便关联后跳转
    this.$session.data.targetIntent = 'CampaignIntent';
    // 弹出账号关联卡片,引导用户完成关联
    return this.$alexaSkill.showAccountLinkingCard(
      '请关联您的账号',
      '关联后才能查看您的活动结果'
    );
  }

  // 账号已关联,执行你的业务逻辑
  // 比如:获取并返回最新活动结果
  const campaignResult = await this.getLatestCampaignResult();
  return this.tell(`您的最新活动结果是:${campaignResult}`);
}

async ActiveContactIntent() {
  if (!this.$user.isLinked()) {
    this.$session.data.targetIntent = 'ActiveContactIntent';
    return this.$alexaSkill.showAccountLinkingCard(
      '请关联您的账号',
      '关联后才能查看您的活跃联系人'
    );
  }

  // 账号已关联,执行你的业务逻辑
  const activeContact = await this.getMostActiveContact();
  return this.tell(`您最活跃的联系人是:${activeContact}`);
}

第二步:处理账号关联完成后的跳转

当用户完成账号关联后,Alexa会自动触发AccountLinkingIntent(如果你的技能配置的是LinkAccountIntent就用这个),此时我们从会话中取出之前保存的目标意图,直接跳转过去:

async AccountLinkingIntent() {
  // 从会话中读取用户最初请求的意图
  const targetIntent = this.$session.data.targetIntent;
  
  if (targetIntent) {
    // 清除会话中的临时数据
    delete this.$session.data.targetIntent;
    // 跳转到用户最初请求的意图
    return this.toIntent(targetIntent);
  }

  // 如果没有保存的意图(比如用户直接从关联入口进来),默认引导到功能选择
  return this.ask('账号关联完成!您可以查询最新活动结果,或者查看最活跃联系人,请问需要什么帮助?');
}

第三步:修正LAUNCH意图的逻辑

LAUNCH是用户无指令唤醒技能时的入口(比如只说Alexa, open <invocation_name>),应该给用户提供功能选择,而不是强制跳转:

LAUNCH() {
  return this.ask('欢迎使用XX技能!您可以查询最新活动结果,或者查看最活跃联系人。请问您需要什么帮助?');
}

2. 关键注意事项

  • 确保交互模型配置正确:在Alexa开发者控制台的交互模型里,给CampaignIntent和ActiveContactIntent添加对应的Utterances,比如:
    • CampaignIntent:get my latest campaign result、give me my latest campaign results
    • ActiveContactIntent:who is my most active contact、show me my most active contact
  • 用Jovo内置方法判断关联状态:this.$user.isLinked()是Jovo封装的便捷方法,比自己解析请求更可靠;
  • 测试时的正确姿势:直接用目标Utterance唤醒技能(比如Alexa, ask <invocation_name> who is my most active contact),此时技能会先检查账号关联,未关联则引导用户完成,关联后自动返回活跃联系人信息。

这样整个流程就完全符合你的需求:用户的初始Utterance直接对应目标意图,账号关联完成后自动跳回该意图执行逻辑。

内容的提问来源于stack exchange,提问作者Subrata Sarkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:06:23