问题是
目前我有多台台设备运行hamibot 同样的脚本
假设 有四个设备 四个设备名称 分别为 a b c d
我如何做到 a设备 再 某些条件下 可以发送消息 到b c d 让他们能接收到某些消息 并执行某个事件
回答
你可以通过 Hamibot 的 消息推送 API 结合脚本中对设备名称的判断来实现:当设备 a 满足某些条件时,主动向设备 b、c、d 发送通知或指令,其他设备接收到后执行对应逻辑。
以下是具体实现方案:
✅ 实现思路
- 使用 HTTP API 推送消息:设备 a 在满足条件时,调用
https://api.hamibot.com/v1/message/send向指定设备发送消息。 - 在 b、c、d 上轮询接收消息:通过定时请求 Hamibot 控制台 API 获取最新消息,并解析内容触发事件。
- 通过设备名区分行为:每个设备读取
hamibot.robotName判断自己是否需要响应。
🔧 步骤一:获取你的 API 令牌
前往 Hamibot 控制台 - 令牌管理 创建一个令牌(以 hmp_ 开头),用于身份认证。
📤 设备 a 的代码(发送消息)
// 文档地址 https://docs.hamibot.com/
// 当前设备名为 a 并且满足某个条件时
if (hamibot.robotName === 'a') {
// 假设触发条件为 true
const condition = true;
if (condition) {
const token = 'your_token_here'; // 替换为你的 hmp_ 开头的令牌
const message = encodeURIComponent('trigger_event:start_task');
const url = `https://api.hamibot.com/v1/message/send?token=${token}&text=${message}`;
http.get(url, function(res) {
if (res.statusCode === 204) {
log('消息已成功推送给所有设备');
} else {
log('发送失败,状态码: ' + res.statusCode);
}
});
}
}
这条消息会发送到 Hamibot 的全局消息通道,任何能访问 API 的设备都可以读取。
📥 设备 b、c、d 的代码(接收并处理)
这些设备定期检查是否有新消息,如果收到特定命令则执行动作。
// 文档地址 https://docs.hamibot.com/
// 只允许 b、c、d 执行此逻辑
const targetDevices = ['b', 'c', 'd'];
if (!targetDevices.includes(hamibot.robotName)) {
exit();
}
setInterval(function() {
const token = 'your_token_here'; // 使用相同的令牌
const res = http.request('https://api.hamibot.com/v1/message/latest', {
method: 'GET',
headers: {
authorization: token
}
});
if (res.statusCode === 200) {
const data = res.body.json();
const text = data.text; // 消息内容
if (text === 'trigger_event:start_task') {
log('收到启动任务指令,开始执行...');
// 👇 在这里添加你要执行的事件
performTask();
}
} else {
log('获取消息失败: ' + res.statusCode);
}
}, 10000); // 每 10 秒检查一次
function performTask() {
// 自定义你要执行的操作
toast('正在执行任务...');
// 例如:打开应用、点击操作等
}
🔄 补充说明
- 消息时效性:
/v1/message/latest返回最新的那条消息。如果你需要历史记录,请自行维护队列或使用持久化存储。 - 安全性:确保你的令牌不泄露,不要上传到公共平台。
- 网络要求:所有设备需联网才能收发消息。
- 频率控制:建议轮询间隔不低于 5 秒,避免频繁请求被限流。
✅ 总结
| 功能 | 实现方式 |
|---|---|
| a 发送消息 | 调用 message/send API |
| b/c/d 接收消息 | 轮询 message/latest API |
| 触发事件 | 解析消息内容并执行函数 |
| 设备识别 | 使用 hamibot.robotName 区分角色 |
这样就可以实现多设备之间的简单通信与协同任务调度。
如有更复杂的协作需求(如参数传递、状态同步),可以结合 脚本变量 API 或开发脚本进行管理。
ℹ️ 本回答由 AI 生成,内容仅供参考