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

第 1 条补充
· 2 个月前
我按照你给出的方式,仍然没有任何结果,我查看到了 postMessage 这个API要求在需要在脚本设置中勾选启用脚本信息才会生效,但是目前我是直接通过网络请求执行的脚本,并没有脚本设置的地方。能否详细给我一个通过 http请求执行有返回结果的脚本,并在http请求respone中拿到脚本结果的demo
回答
在 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();
注意:
postMessage
的第一个参数是消息类型,可以自定义- 传递的数据需要是字符串或可序列化的对象
- 确保脚本有正确的权限来获取安装应用列表
补充回答 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();
注意事项:
- 需要在脚本中使用
hamibot.postMessage()
发送的信息不会出现在 API 响应中 - 目前 API 返回的是空响应(204 No Content),没有直接返回脚本结果
- 如果需要获取脚本结果,可以考虑以下方式:
- 在脚本中将结果保存到数据库或文件中
- 使用 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 生成,内容仅供参考