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

HAMI_7318208245 · 2 天前

回答

Hamibot AI
1
· 2 天前

实现该需求需要结合 通知监听界面自动化 两项能力。以下是完整的技术方案与脚本示例。

核心原理

  1. 通知监听:利用 events.observeNotification() 监听系统通知栏,筛选微信包名及特定发送人。
  2. 界面自动化:通过 auto 模块模拟点击、长按、输入文本等操作,完成转发与回复。
  3. 兼容性注意:脚本基于 Rhino 1.7.15 引擎,已避免箭头函数与 ES6 新特性,确保在 Hamibot 环境中稳定运行。

前置准备

  1. 权限授予
    • 在 Hamibot APP 中授予 通知监听权限
    • 在 Android 系统设置中授予 无障碍服务(Accessibility) 权限。
    • 确保微信通知栏显示消息详情(若隐藏内容则无法筛选关键词)。
  2. 设备环境:建议保持屏幕常亮,避免锁屏导致自动化中断。

脚本代码

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

auto.waitFor();
// 配置区域
var targetSender = "叶家健";
var targetReceiver = "温元红";
var keyword = "关键词"; // 替换为实际筛选关键词
var replyContent = "收到,稍后处理"; // 固定回复内容

// 监听通知
events.observeNotification();
events.on("notification", function (n) {
    try {
        var packageName = n.getPackageName();
        var title = n.getTitle();
        var text = n.getText();

        // 筛选微信通知
        if (packageName !== "com.tencent.mm") {
            return;
        }

        // 筛选发送人与关键词
        // 注意:微信通知标题通常是联系人名字,内容是消息文本
        if (title && title.indexOf(targetSender) !== -1 && text && text.indexOf(keyword) !== -1) {
            toastLog("发现目标消息,准备处理...");
            
            // 点击通知打开微信
            n.click();
            
            // 等待微信界面加载
            sleep(3000);
            
            // 执行转发与回复任务
            handleWeChatTask(targetReceiver, replyContent);
        }
    } catch (e) {
        log("处理通知时出错:" + e);
    }
});

function handleWeChatTask(receiver, reply) {
    try {
        // 1. 转发消息逻辑
        // 假设最后一条消息为目标消息,长按最后一条消息
        // 注意:微信版本更新可能导致选择器变化,需根据实际情况调整
        var lastMsg = className("android.widget.TextView").textStartsWith("").findOne(2000);
        
        if (lastMsg) {
            // 长按消息
            lastMsg.longClick();
            sleep(1000);
            
            // 点击菜单中的“转发”
            var forwardBtn = text("转发").findOne(2000);
            if (forwardBtn) {
                forwardBtn.click();
                sleep(1000);
                
                // 选择联系人
                var contact = text(receiver).findOne(3000);
                if (contact) {
                    contact.click();
                    sleep(1000);
                    
                    // 点击发送
                    var sendBtn = text("发送").findOne(2000);
                    if (sendBtn) {
                        sendBtn.click();
                        toastLog("消息转发成功");
                        sleep(2000);
                    }
                } else {
                    toastLog("未找到联系人:" + receiver);
                }
            } else {
                toastLog("未找到转发按钮");
            }
        } else {
            toastLog("未定位到消息气泡");
        }

        // 2. 自动回复逻辑
        // 返回输入框区域
        var inputBox = className("android.widget.EditText").findOne(2000);
        if (inputBox) {
            inputBox.setText(reply);
            sleep(500);
            
            var sendBtn = text("发送").findOne(2000);
            if (sendBtn) {
                sendBtn.click();
                toastLog("自动回复成功");
            }
        } else {
            toastLog("未找到输入框");
        }

        // 任务完成后返回桌面或保持当前页面
        // home(); 
    } catch (e) {
        log("自动化任务出错:" + e);
    }
}

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

关键说明

  1. 通知内容获取
    • 代码通过 n.getTitle() 获取发送人,n.getText() 获取消息内容。
    • 若微信设置中开启了“隐藏通知内容”,脚本将无法读取 text,导致筛选失效。需确保微信通知设置中允许显示详情。
  2. 界面选择器稳定性
    • 脚本中使用 className("android.widget.TextView")text("转发") 等选择器。
    • 微信版本更新可能会改变界面结构(如按钮文字变为图标、类名变化)。若脚本失效,需使用 Hamibot 的“界面分析”工具重新抓取控件特征。
  3. 并发处理
    • 通知监听是异步的。若短时间内收到多条消息,脚本会依次处理。建议在实际生产环境中增加锁机制或队列,防止界面操作冲突。
  4. 风险提示
    • 账号安全:高频自动化操作(尤其是转发和自动回复)可能触发微信风控机制,导致账号受限。建议增加随机延时(sleep 时间内加入随机数)模拟人工操作。
    • 界面变化:该脚本依赖特定 UI 结构,不同手机分辨率或微信版本可能导致控件找不到。

优化建议

  • 增加随机延时:在 sleep() 中加入随机变量,例如 sleep(1000 + Math.random() * 500),降低被检测风险。
  • 异常重试:在 handleWeChatTask 中加入重试逻辑,若某一步骤失败(如未找到按钮),可尝试返回重试或记录日志。
  • 日志记录:使用 hamibot.sendEmail() 或消息推送 API 将运行日志发送到服务器,便于远程监控脚本状态。

若遇到控件无法识别的问题,请使用 Hamibot 编辑器的“界面分析”功能实时抓取当前微信界面的控件特征,替换代码中的选择器。

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