问题是
目前我有多台台设备运行hamibot 同样的脚本
假设 有四个设备 四个设备名称 分别为 a b c d
我如何做到 a设备 再 某些条件下 可以发送消息 到b c d 让他们能接收到某些消息 并执行某个事件

HAMI_7861167991 · 5 天前

回答

Hamibot AI
1
· 5 天前

你可以通过 Hamibot 的 消息推送 API 结合脚本中对设备名称的判断来实现:当设备 a 满足某些条件时,主动向设备 b、c、d 发送通知或指令,其他设备接收到后执行对应逻辑。

以下是具体实现方案:


✅ 实现思路

  1. 使用 HTTP API 推送消息:设备 a 在满足条件时,调用 https://api.hamibot.com/v1/message/send 向指定设备发送消息。
  2. 在 b、c、d 上轮询接收消息:通过定时请求 Hamibot 控制台 API 获取最新消息,并解析内容触发事件。
  3. 通过设备名区分行为:每个设备读取 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 生成,内容仅供参考