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

Alexa技能开发:如何将动态生成的二维码作为图像返回给用户

最优实现方案

Alexa标准卡片不支持base64格式的图像,仅接受可公网访问的HTTPS URL,因此你需要将动态生成的二维码先上传到可公开访问的存储服务,再返回对应的URL即可。最适配你现有AWS技术栈的方案是搭配S3存储实现,步骤如下:

  • 给你的Lambda执行角色添加S3写入权限,提前创建一个用于存放二维码的S3存储桶,配置桶的公共访问权限(或使用S3预签名URL,避免公开桶配置),也可以给桶加生命周期规则,自动删除超过1天的二维码文件节省存储成本
  • 安装所需依赖,除了现有的qrcode库外,Lambda运行环境默认内置aws-sdk,不需要额外打包上传
  • 修改意图处理逻辑,生成二维码后上传到S3,拿到URL后传入responseBuilder即可

完整代码示例

const AWS = require('aws-sdk');
const QRCode = require('qrcode');
// 配置S3实例
const s3 = new AWS.S3({
  region: '你的S3桶所在区域',
});
const S3_BUCKET_NAME = '你创建的S3桶名';

const LaunchRequest_Handler = {
  canHandle(handlerInput) {
    const request = handlerInput.requestEnvelope.request;
    return request.type === 'LaunchRequest';
  },
  async handle(handlerInput) {
    const responseBuilder = handlerInput.responseBuilder;
    const say = '欢迎使用本技能';

    // 从DynamoDB查询得到要生成二维码的字符串
    const stringToCreateQRWith = "8306e21d-0c9e-4465-91e9-0cf86fca110d";

    // 1. 生成二维码buffer,尺寸适配Alexa卡片要求(小图推荐720*480px,大图推荐1200*800px)
    const qrBuffer = await QRCode.toBuffer(stringToCreateQRWith, {
      width: 720,
      margin: 2
    });

    // 2. 上传到S3
    const fileName = `qr-${Date.now()}.png`;
    await s3.putObject({
      Bucket: S3_BUCKET_NAME,
      Key: fileName,
      Body: qrBuffer,
      ContentType: 'image/png',
      ACL: 'public-read' // 用预签名URL的话可删除该行
    }).promise();

    // 3. 拿到二维码URL,也可调用s3.getSignedUrl生成预签名URL
    const qrImageUrl = `https://${S3_BUCKET_NAME}.s3.${AWS.config.region}.amazonaws.com/${fileName}`;

    // 4. 返回响应
    return responseBuilder
      .speak(say)
      .withStandardCard("欢迎使用", "扫描下方二维码查看内容", qrImageUrl, qrImageUrl)
      .reprompt('请说出你需要的操作')
      .getResponse();
  }
}

可选轻量方案

如果你的二维码内容不涉及敏感信息,不想额外维护S3存储,也可以直接使用公开二维码生成服务的动态拼接URL,无需自行生成和存储二维码:

const stringToCreateQRWith = "8306e21d-0c9e-4465-91e9-0cf86fca110d";
const qrImageUrl = `https://api.qrserver.com/v1/create-qr-code/?size=720x720&data=${encodeURIComponent(stringToCreateQRWith)}`;

直接将上述URL传入withStandardCard方法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:36:00