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

Alexa技能返回INVALID_SKILL_RESPONSE错误排查求助

排查Alexa Skill返回INVALID_SKILL_RESPONSE的可能原因

我之前搭建Alexa Skill后端的时候也踩过这个坑,结合你的代码和Alexa的规范,几个最可能导致INVALID_SKILL_RESPONSE的原因如下:

  • JSON响应格式或编码问题
    你的响应结构看起来符合基本要求,但细节上可能有疏漏:

    • 检查是否存在UTF-8 BOM:如果你的PHP文件开头有隐藏的BOM字符,返回的JSON会被多余字节污染,导致Alexa解析失败。用文本编辑器(比如VS Code)将文件编码设为“UTF-8无BOM”即可解决。
    • 补充shouldEndSession字段:虽然Alexa允许省略这个字段,但明确设置它能避免潜在的解析问题。修改你的响应数组试试:
      return response(
          [
              'version' => '1.0',
              'response' => [
                  'outputSpeech' => [
                      'type' => 'PlainText',
                      'text' => 'Hello world',
                  ],
                  'shouldEndSession' => false // 新增该字段
              ]
          ],
          200,
          ['Content-Type' => 'application/json']
      );
      
    • 确认JSON编码正确性:如果是自定义的响应逻辑,确保用json_encode()时没有错误(比如设置JSON_UNESCAPED_UNICODE等参数),Laravel的response()->json()则无需担心这个问题。
  • HTTPS证书不符合要求
    Alexa对HTTPS证书的校验非常严格:

    • 必须是公共可信CA颁发的证书,自签名证书会直接被拒绝。
    • 证书域名必须与端点域名完全匹配(如果是子域名,证书需要包含通配符或对应子域名)。
    • 证书链必须完整:很多服务器只安装了主证书,缺少中间证书,导致Alexa无法验证证书有效性。可以用SSL检测工具确认证书链是否完整。
  • 响应中存在多余输出
    检查你的PHP代码有没有在return response()之前输出任何内容——比如echo、var_dump,甚至是PHP标签外的空格、换行、注释。这些多余内容会破坏JSON结构,导致Alexa解析失败。例如:

    <?php
    // 这里的换行或空格会被输出到响应头之后
    return response(...);
    ?>
    <!-- 标签外的注释也会被当作输出内容 -->
    

    确保PHP文件除了核心代码,没有任何额外输出。

  • 请求验证未通过(间接导致响应无效)
    虽然你的端点被触发了,但如果服务未正确验证Alexa的请求签名,亚马逊可能会拒绝你的响应。Alexa要求所有请求必须验证签名和来源合法性。你可以先在Alexa开发者控制台的「Endpoint」设置中关闭「Skill Request Validation」进行测试:如果关闭后响应正常,那就是签名验证逻辑出了问题,需要修复验证流程(比如同步服务器时间、确保能正确获取亚马逊的验证证书)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:03:36