hamibot是否有API支持修改脚本的配置?
当前场景下,存在这样的业务逻辑:
0. 脚本默认为自动模式,同时存在A模式和B模式;
- 通常场景下,用户使用自动模式,手动启动脚本;
- 为避免用户遗忘,我希望每次脚本执行 A/B 模式结束后,把配置自动置回自动模式;
是否有这样的API或者其他方法可以帮我实现这个需求?
你提到这个方法:
“不过,从你的业务场景来看,更推荐在脚本内部实现配置重置逻辑:
在脚本执行结束时,自动将配置写入配置文件
使用 files.write 方法将模式重置为自动模式
// 文档地址 https://docs.hamibot.com/
try {
// 执行A模式或B模式的代码
if (mode === 'A') {
// A模式逻辑
} else if (mode === 'B') {
// B模式逻辑
}
} finally {
// 无论成功或失败,都将配置重置为自动模式
var config = {
mode: 'auto'
};
files.write('./config.json', JSON.stringify(config));
}
这种方式比调用API更简单可靠,避免了网络请求的延迟和失败风险,同时能确保在任何情况下都能正确重置配置模式。”
我用 files.write('./config.json', JSON.stringify(config)); 修改后的配置,会同步到 hamibot 控制台吗?
我的业务场景下,用户只存在远程在控制台中启动脚本的情况。我担心 files.write 修改配置为自动模式后,远端控制台仍然是 A或B 模式。
回答
是的,Hamibot 提供了 API 支持修改脚本配置。你可以使用 PUT /v1/devscripts/开发脚本_id/files API 来更新脚本的配置文件。
具体实现方式如下:
// 文档地址 https://docs.hamibot.com/
var res = http.request('https://api.hamibot.com/v1/devscripts/你的开发脚本_id/files', {
method: 'PUT',
headers: {
authorization: '你的令牌(hmp 开头)',
},
files: [
{
name: 'data',
file: 'config.json',
type: 'application/json'
}
]
});
不过,从你的业务场景来看,更推荐在脚本内部实现配置重置逻辑:
- 在脚本执行结束时,自动将配置写入配置文件
- 使用
files.write方法将模式重置为自动模式
// 文档地址 https://docs.hamibot.com/
try {
// 执行A模式或B模式的代码
if (mode === 'A') {
// A模式逻辑
} else if (mode === 'B') {
// B模式逻辑
}
} finally {
// 无论成功或失败,都将配置重置为自动模式
var config = {
mode: 'auto'
};
files.write('./config.json', JSON.stringify(config));
}
这种方式比调用API更简单可靠,避免了网络请求的延迟和失败风险,同时能确保在任何情况下都能正确重置配置模式。
补充回答 1
你提出了一个很好的问题。files.write() 方法只能修改设备本地的配置文件,不会自动同步到 Hamibot 控制台。这意味着当用户从控制台远程启动脚本时,实际上使用的是控制台存储的配置版本,而不是设备本地的配置。
针对你的业务场景,这里有两种解决方案:
方案一:脚本启动时重置配置(推荐)
在脚本开始执行时,先通过 API 将远程配置重置为自动模式:
// 文档地址 https://docs.hamibot.com/
// 脚本开始时重置配置为自动模式
var res = http.request('https://api.hamibot.com/v1/devscripts/你的开发脚本_id/files', {
method: 'PUT',
headers: {
authorization: '你的令牌(hmp 开头)',
},
files: [
{
name: 'data',
file: JSON.stringify({
mode: 'auto'
}),
type: 'application/json'
}
]
});
// 继续执行脚本逻辑...
方案二:脚本结束时重置配置
// 文档地址 https://docs.hamibot.com/
try {
// 执行A模式或B模式的代码
if (mode === 'A') {
// A模式逻辑
} else if (mode === 'B') {
// B模式逻辑
}
} finally {
// 脚本结束时通过API重置远程配置
var res = http.request('https://api.hamibot.com/v1/devscripts/你的开发脚本_id/files', {
method: 'PUT',
headers: {
authorization: '你的令牌(hmp 开头)',
},
files: [
{
name: 'data',
file: JSON.stringify({
mode: 'auto'
}),
type: 'application/json'
}
]
});
}
推荐使用方案一,因为这样能确保即使用户中途停止脚本或者脚本异常退出,下次启动时配置仍然是自动模式,更符合你的业务需求。