· 监听微信通知栏消息,筛选发送人为“叶家健”。
· 若消息内容包含关键词,则模拟点击打开微信对话窗口。
· 自动将原消息转发给温元红(可模拟长按→转发→选择联系人→发送)。
· 自动在叶家健的对话框输入固定回复并发送。
回答
实现该需求需要结合 通知监听 与 界面自动化 两项能力。以下是完整的技术方案与脚本示例。
核心原理
- 通知监听:利用
events.observeNotification()监听系统通知栏,筛选微信包名及特定发送人。 - 界面自动化:通过
auto模块模拟点击、长按、输入文本等操作,完成转发与回复。 - 兼容性注意:脚本基于 Rhino 1.7.15 引擎,已避免箭头函数与 ES6 新特性,确保在 Hamibot 环境中稳定运行。
前置准备
- 权限授予:
- 在 Hamibot APP 中授予 通知监听权限。
- 在 Android 系统设置中授予 无障碍服务(Accessibility) 权限。
- 确保微信通知栏显示消息详情(若隐藏内容则无法筛选关键词)。
- 设备环境:建议保持屏幕常亮,避免锁屏导致自动化中断。
脚本代码
// 文档地址 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("监听服务已启动");
关键说明
- 通知内容获取:
- 代码通过
n.getTitle()获取发送人,n.getText()获取消息内容。 - 若微信设置中开启了“隐藏通知内容”,脚本将无法读取
text,导致筛选失效。需确保微信通知设置中允许显示详情。
- 代码通过
- 界面选择器稳定性:
- 脚本中使用
className("android.widget.TextView")和text("转发")等选择器。 - 微信版本更新可能会改变界面结构(如按钮文字变为图标、类名变化)。若脚本失效,需使用 Hamibot 的“界面分析”工具重新抓取控件特征。
- 脚本中使用
- 并发处理:
- 通知监听是异步的。若短时间内收到多条消息,脚本会依次处理。建议在实际生产环境中增加锁机制或队列,防止界面操作冲突。
- 风险提示:
- 账号安全:高频自动化操作(尤其是转发和自动回复)可能触发微信风控机制,导致账号受限。建议增加随机延时(
sleep时间内加入随机数)模拟人工操作。 - 界面变化:该脚本依赖特定 UI 结构,不同手机分辨率或微信版本可能导致控件找不到。
- 账号安全:高频自动化操作(尤其是转发和自动回复)可能触发微信风控机制,导致账号受限。建议增加随机延时(
优化建议
- 增加随机延时:在
sleep()中加入随机变量,例如sleep(1000 + Math.random() * 500),降低被检测风险。 - 异常重试:在
handleWeChatTask中加入重试逻辑,若某一步骤失败(如未找到按钮),可尝试返回重试或记录日志。 - 日志记录:使用
hamibot.sendEmail()或消息推送 API 将运行日志发送到服务器,便于远程监控脚本状态。
若遇到控件无法识别的问题,请使用 Hamibot 编辑器的“界面分析”功能实时抓取当前微信界面的控件特征,替换代码中的选择器。
ℹ️ 本回答由 AI 生成,内容仅供参考