· 监听微信通知栏消息,筛选发送人为“叶家健”。
· 若消息内容包含关键词,则模拟点击打开微信对话窗口。
· 自动将原消息转发给温元红(可模拟长按→转发→选择联系人→发送)。
· 自动在叶家健的对话框输入固定回复并发送。
回答
实现该需求需要结合 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();
}
关键功能说明
-
通知监听:
- 使用
events.observeNotification()开启监听。 - 通过
n.getPackageName()确保只处理微信(com.tencent.mm)的通知。 - 通过
n.getTitle()匹配发送人姓名。 - 通过
n.getText()匹配消息内容中的关键词。
- 使用
-
UI 自动化:
auto.waitFor()确保无障碍服务已就绪。- 使用
text()、className()等选择器定位界面元素。 - 使用
longClick()模拟长按消息弹出菜单。 - 使用
setText()和click()完成输入和发送操作。
-
多线程处理:
- 使用
threads.start()将耗时的 UI 操作放入子线程,避免阻塞通知监听主线程,防止错过后续消息。
- 使用
最佳实践与风险提示
-
隐私与合规风险:
- 自动化操作微信可能违反微信平台的使用条款,存在账号被封禁的风险。请仅在个人学习或非关键业务场景下谨慎使用。
- 脚本中涉及的姓名均为示例,实际使用时请确保不侵犯他人隐私。
-
界面稳定性:
- 微信界面会随版本更新而变化,
text("转发")或className("android.widget.EditText")等选择器可能失效。若脚本失效,需使用 Hamibot 的“界面分析”工具重新抓取元素特征。 - 不同手机系统(MIUI, ColorOS 等)的无障碍服务稳定性不同,建议保持 Hamibot 后台常驻。
- 微信界面会随版本更新而变化,
-
权限要求:
- 必须授予 Hamibot 无障碍服务权限。
- 必须授予 Hamibot 通知读取权限。
- 建议关闭电池优化,防止后台进程被杀。
-
异常处理:
- 脚本中加入了
try...catch和findOne(5000)超时设置,防止因界面未加载导致脚本崩溃。 - 实际部署前,建议在测试机上充分验证转发和回复流程的稳定性。
- 脚本中加入了
-
兼容性:
- 脚本使用
var定义变量,避免使用箭头函数,确保兼容 Hamibot 底层的 Rhino 1.7.15 引擎。 - 若遇到
text()无法匹配,可尝试使用containsText()或基于坐标的click(x, y)作为备选方案。
- 脚本使用
如需进一步调试,可在 Hamibot 控制台查看 toastLog 输出的日志信息,定位具体卡在哪个步骤。
ℹ️ 本回答由 AI 生成,内容仅供参考