· 监听微信通知栏消息,筛选发送人为“叶家健”。
· 若消息内容包含关键词,则模拟点击打开微信对话窗口。
· 自动将原消息转发给温元红(可模拟长按→转发→选择联系人→发送)。
· 自动在叶家健的对话框输入固定回复并发送。

HAMI_7318208245 · 2 天前

回答

Hamibot AI
1
· 2 天前

实现该需求需要结合 Hamibot 的 通知监听无障碍服务(UI 自动化) 功能。以下方案基于 Hamibot 标准 API 编写,请确保设备已授予 Hamibot 通知权限和无障碍权限。

核心脚本示例

// 文档地址 https://docs.hamibot.com/

// 配置区域
var TARGET_SENDER = "叶家健";
var FORWARD_TARGET = "温元红";
var KEY_WORDS = [" urgent ", " 紧急 ", " 速回 "]; // 示例关键词,可自行修改
var REPLY_TEXT = "收到,正在处理。";

// 初始化
auto.waitFor();
if (!requestScreenCapture()) {
    toastLog("需要屏幕截图权限,请授予");
}

// 监听通知
events.observeNotification();
events.on("notification", function (n) {
    try {
        // 筛选微信通知
        if (n.getPackageName() !== "com.tencent.mm") {
            return;
        }

        // 筛选发送人
        var title = n.getTitle();
        if (title !== TARGET_SENDER) {
            return;
        }

        // 筛选关键词
        var text = n.getText();
        var hasKeyword = false;
        for (var i = 0; i < KEY_WORDS.length; i++) {
            if (text.indexOf(KEY_WORDS[i]) !== -1) {
                hasKeyword = true;
                break;
            }
        }

        if (hasKeyword) {
            toastLog("发现目标消息,开始处理...");
            // 异步处理,避免阻塞通知监听
            threads.start(function () {
                handleTask(n, text);
            });
        }
    } catch (e) {
        toastLog("处理通知出错:" + e);
    }
});

toastLog("监听服务已启动");

// 任务处理逻辑
function handleTask(notification, messageContent) {
    // 1. 点击通知打开微信
    notification.click();
    sleep(2000); // 等待界面加载

    // 2. 查找并长按消息进行转发
    // 注意:微信版本更新可能导致 UI 结构变化,需根据实际情况调整选择器
    var messageElement = text(messageContent).findOne(5000);
    if (messageElement) {
        longClick(messageElement.bounds().centerX(), messageElement.bounds().centerY());
        sleep(1000);

        // 点击菜单中的“转发”
        var forwardBtn = text("转发").findOne(5000);
        if (forwardBtn) {
            forwardBtn.click();
            sleep(1500);

            // 3. 选择联系人“温元红”
            // 在联系人选择界面搜索或点击
            var contact = text(FORWARD_TARGET).findOne(5000);
            if (contact) {
                contact.click();
                sleep(1000);
                
                // 点击发送按钮
                var sendBtn = text("发送").findOne(5000);
                if (sendBtn) {
                    sendBtn.click();
                    toastLog("消息已转发给" + FORWARD_TARGET);
                }
            }
        }
    }

    // 4. 返回原对话框回复
    // 假设当前仍在聊天窗口,若已跳转需重新进入
    // 此处简化处理,假设仍在当前窗口或返回重进
    var inputBox = className("android.widget.EditText").findOne(5000);
    if (inputBox) {
        inputBox.setText(REPLY_TEXT);
        sleep(500);
        // 点击发送按钮,通常位于右侧
        var sendButton = text("发送").findOne(5000);
        if (!sendButton) {
             // 兼容部分版本可能是图标按钮
             sendButton = className("android.widget.ImageButton").findOne(5000);
        }
        
        if (sendButton) {
            sendButton.click();
            toastLog("已自动回复");
        }
    }

    // 5. 返回桌面或保持现状
    home();
}

关键功能说明

  1. 通知监听

    • 使用 events.observeNotification() 开启监听。
    • 通过 n.getPackageName() 确保只处理微信(com.tencent.mm)的通知。
    • 通过 n.getTitle() 匹配发送人姓名。
    • 通过 n.getText() 匹配消息内容中的关键词。
  2. UI 自动化

    • auto.waitFor() 确保无障碍服务已就绪。
    • 使用 text()className() 等选择器定位界面元素。
    • 使用 longClick() 模拟长按消息弹出菜单。
    • 使用 setText()click() 完成输入和发送操作。
  3. 多线程处理

    • 使用 threads.start() 将耗时的 UI 操作放入子线程,避免阻塞通知监听主线程,防止错过后续消息。

最佳实践与风险提示

  1. 隐私与合规风险

    • 自动化操作微信可能违反微信平台的使用条款,存在账号被封禁的风险。请仅在个人学习或非关键业务场景下谨慎使用。
    • 脚本中涉及的姓名均为示例,实际使用时请确保不侵犯他人隐私。
  2. 界面稳定性

    • 微信界面会随版本更新而变化,text("转发")className("android.widget.EditText") 等选择器可能失效。若脚本失效,需使用 Hamibot 的“界面分析”工具重新抓取元素特征。
    • 不同手机系统(MIUI, ColorOS 等)的无障碍服务稳定性不同,建议保持 Hamibot 后台常驻。
  3. 权限要求

    • 必须授予 Hamibot 无障碍服务权限
    • 必须授予 Hamibot 通知读取权限
    • 建议关闭电池优化,防止后台进程被杀。
  4. 异常处理

    • 脚本中加入了 try...catchfindOne(5000) 超时设置,防止因界面未加载导致脚本崩溃。
    • 实际部署前,建议在测试机上充分验证转发和回复流程的稳定性。
  5. 兼容性

    • 脚本使用 var 定义变量,避免使用箭头函数,确保兼容 Hamibot 底层的 Rhino 1.7.15 引擎。
    • 若遇到 text() 无法匹配,可尝试使用 containsText() 或基于坐标的 click(x, y) 作为备选方案。

如需进一步调试,可在 Hamibot 控制台查看 toastLog 输出的日志信息,定位具体卡在哪个步骤。

ℹ️ 本回答由 AI 生成,内容仅供参考