通过 https://api.hamibot.com/v2/scripts/execute 这个请求,来执行脚本,如果获取脚本执行的结果,比如,我通过请求执行 app.getInstalledApps() 并在http返回的结果中拿到安装列表,该怎么拿到呢,我试了 return , 直接是语法错误。 如图所示,我想http请求返回的data中拿到数据,实际测试结果是脚本能执行,但是data中没有任何数据。
![](https://usercontent.hamibot.cn/685a1b1936db1956f779af50/Weixin Image_20250624112650_217.png)

已存档
张磊_5612 · 2 个月前
第 1 条补充
·
2 个月前

我按照你给出的方式,仍然没有任何结果,我查看到了 postMessage 这个API要求在需要在脚本设置中勾选启用脚本信息才会生效,但是目前我是直接通过网络请求执行的脚本,并没有脚本设置的地方。能否详细给我一个通过 http请求执行有返回结果的脚本,并在http请求respone中拿到脚本结果的demo

回答

Hamibot AI
1
· 2 个月前

在 Hamibot API 中通过 HTTP 请求执行脚本时,获取脚本执行结果需要使用 hamibot.postMessage() 来传递数据,而不是直接使用 return。以下是实现方法:

// 文档地址 https://docs.hamibot.com/
var apps = app.getInstalledApps();
hamibot.postMessage('installed_apps', {
    data: {
        // 将应用列表转化为 JSON 字符串传递
        apps: JSON.stringify(apps)
    }
});
hamibot.exit();

然后在 HTTP 请求的响应中会包含这些数据,你需要处理响应体来获取传递的消息。例如:

var res = http.request('https://api.hamibot.com/v2/scripts/execute', {
    method: 'POST',
    headers: {
        authorization: '你的令牌(hmp 开头)'
    },
    data: {
        // 你的脚本和执行参数
    }
});

// 解析响应获取消息数据
var responseData = res.body.json();
log(responseData.messages); // 这里包含通过 postMessage 发送的数据
hamibot.exit();

注意:

  1. postMessage 的第一个参数是消息类型,可以自定义
  2. 传递的数据需要是字符串或可序列化的对象
  3. 确保脚本有正确的权限来获取安装应用列表

补充回答 1

要通过 HTTP 请求执行脚本并获取脚本结果,你可以使用 Hamibot API 的 /v1/scripts/脚本_id/run 接口。以下是一个完整的示例:

// 文档地址 https://docs.hamibot.com/
var scriptId = "你的脚本_id"; // 替换为你的脚本ID
var deviceId = "你的设备_id"; // 替换为你的设备ID
var token = "你的令牌"; // hmp开头的令牌

var response = http.request('https://api.hamibot.com/v1/scripts/' + scriptId + '/run', {
    method: 'POST',
    contentType: 'application/json',
    headers: {
        authorization: token,
    },
    body: JSON.stringify({
        devices: [{ _id: deviceId }],
    }),
});

// 检查响应状态码
if (response.statusCode == 204) {
    log('脚本执行请求成功');
} else {
    log('请求失败: ' + response.statusCode + ' ' + response.statusMessage);
}

hamibot.exit();

注意事项:

  1. 需要在脚本中使用 hamibot.postMessage() 发送的信息不会出现在 API 响应中
  2. 目前 API 返回的是空响应(204 No Content),没有直接返回脚本结果
  3. 如果需要获取脚本结果,可以考虑以下方式:
    • 在脚本中将结果保存到数据库或文件中
    • 使用 webhook 接收脚本执行结果
    • 通过后续 API 请求查询日志

获取设备ID的方法:

// 文档地址 https://docs.hamibot.com/
var res = http.request('https://api.hamibot.com/v1/robots', {
    method: 'GET',
    headers: {
        authorization: '你的令牌',
    },
});
log(res.body.json());
hamibot.exit();
ℹ️ 本回答由 AI 生成,内容仅供参考