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

将现有AWS Lex、Lambda部署为Alexa Skills Kit(ASK)的最简方法是什么?

Lex机器人转Alexa Skill Lambda适配方案

你遇到的默认输出You just triggered [IntentName]问题是因为Lambda返回的Lex响应格式无法被Alexa识别,Alexa拿不到自定义回复内容就触发了系统默认提示。不需要重写原有业务代码,仅需加一层请求来源判断和响应格式转换逻辑即可,原有Lex相关功能完全不受影响。

核心实现步骤

  • 保留你原有所有Lex业务逻辑代码,仅修改Lambda入口层
  • 新增请求来源判断逻辑,区分是Lex调用还是Alexa Skill调用
  • 新增响应转换函数,将原有的Lex返回值转为Alexa要求的格式

1. Lambda入口逻辑改造

// 原有Lex的业务处理函数完全不用修改,仅需把它封装为可调用的方法即可
const yourOriginalLexHandler = require('./your-lex-business-logic')

exports.handler = async (event) => {
  // 快速判断请求来源
  const isAlexaRequest = !!event.request?.type
  const isLexRequest = !!event.lexVersion

  // 调用原有业务逻辑拿到Lex格式的返回值
  const lexResponse = await yourOriginalLexHandler(event)

  // 原Lex调用直接返回,不影响原有功能
  if (isLexRequest) return lexResponse

  // Alexa请求走格式转换后返回
  return convertLexToAlexaResponse(lexResponse)
}

2. 实现格式转换函数

根据Lex的dialogAction类型对应转换为Alexa的响应格式:

function convertLexToAlexaResponse(lexRes) {
  const sessionAttrs = lexRes.sessionAttributes || {}
  const replyContent = lexRes.dialogAction.message?.content || "抱歉,我暂时无法处理你的请求"
  const isEndSession = lexRes.dialogAction.type === 'Close'

  const alexaRes = {
    version: "1.0",
    sessionAttributes: sessionAttrs,
    response: {
      outputSpeech: {
        type: lexRes.dialogAction.message?.contentType === 'SSML' ? 'SSML' : 'PlainText',
        [lexRes.dialogAction.message?.contentType === 'SSML' ? 'ssml' : 'text']: replyContent
      },
      shouldEndSession: isEndSession
    }
  }

  // 需要用户继续回复的场景(槽位收集、意图确认等)追加reprompt
  if (!isEndSession) {
    alexaRes.response.reprompt = {
      outputSpeech: alexaRes.response.outputSpeech
    }
  }

  return alexaRes
}

可选适配优化

  • 如果你的Lex逻辑用到了卡片、权限请求等特殊返回内容,可以在转换函数中对应补充Alexa的card、directives等字段即可
  • 如果有自定义的session属性,无需额外处理,转换逻辑会自动透传

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:06:04