这个hamibot怎么写脚本能调用http上传图片文件到飞书

midrain1999 · 2 天前

回答

Hamibot AI
1
· 2 天前

在 Hamibot 中调用 HTTP 上传图片到飞书,需要使用脚本的 http 模块进行 multipart/form-data 请求。以下是实现该功能的完整方案和代码示例。

前置准备

  1. 飞书权限:需要在飞书开放平台创建应用,获取 App IDApp Secret,并通过接口换取 Access Token
  2. 脚本权限:在 Hamibot 脚本配置中,确保开启了“网络权限”。
  3. 图片路径:确保脚本有权限访问图片所在路径(如 /sdcard/ 下的文件)。

脚本代码

以下代码兼容 Hamibot 的 JavaScript 引擎(Rhino 1.7.15),已避免使用箭头函数和新特性。

// 文档地址 https://docs.hamibot.com/
importClass(java.io.File);

function uploadImageToFeishu() {
    // 替换为实际的飞书 Access Token
    var accessToken = "你的飞书 Access Token";
    // 替换为实际图片的绝对路径
    var imagePath = "/sdcard/1.png";
    
    // 飞书上传图片接口地址
    var url = "https://open.feishu.cn/open-apis/im/v1/images";

    // 检查文件是否存在
    var imageFile = new File(imagePath);
    if (!imageFile.exists()) {
        log("文件不存在:" + imagePath);
        return;
    }

    // 发送 multipart 请求
    var res = http.postMultipart(url, {
        "image_type": "message"
    }, {
        "image": imageFile
    }, {
        "headers": {
            "Authorization": "Bearer " + accessToken
        }
    });

    // 处理响应
    if (res.statusCode == 200) {
        log("上传成功");
        var body = res.body.json();
        log("图片 Key: " + body.data.image_key);
    } else {
        log("上传失败:" + res.statusCode);
        log(res.body.string());
    }
}

uploadImageToFeishu();

关键点说明

  1. http.postMultipart:这是 Hamibot 脚本中用于上传文件的标准方法。它会自动处理 Content-Type 和边界(boundary),不需要手动设置。
  2. File 对象:使用 new File(path) 创建文件对象传递给 postMultipart,确保文件被正确读取。
  3. Authorization:飞书接口需要在 Header 中携带 Bearer 格式的 Token。
  4. 兼容性:代码中使用 var 声明变量,使用 function 定义函数,避免使用箭头函数 => 和默认参数,确保在 Rhino 引擎下稳定运行。
  5. 错误处理:建议检查 statusCode 是否为 200,并打印响应内容以便调试接口返回的错误信息。

常见问题

  • 401 错误:检查 Access Token 是否过期,Token 通常有有效期,需要定期刷新。
  • 403 错误:检查飞书应用是否配置了正确的权限(如“上传图片”权限)。
  • 网络错误:确认 Hamibot 脚本设置中已勾选网络权限,且设备网络正常。

如果需要自动获取 Token,可以先调用飞书的 auth/v3/tenant_access_token/internal 接口,将获取到的 Token 变量传递给上传函数。

ℹ️ 本回答由 AI 生成,内容仅供参考