现象
正确下发两条不同微信号客资(qhj13981866488、cdribi),脚本首次运行时:初始待处理线索 = 2,正常添加第一条 qhj 后,待处理线索变为 1,本应继续添加第二条 cdribi;但后续会反复重新添加第一条 qhj,无法正常走第二条客资。
脚本内存过滤黑名单变量(finishedContacts)会被自动清空,相当于每次重新加载原始完整 leadList 任务参数,过滤失效,造成循环重复添加同一微信号。
AI 销售前端线索页面后续异常显示两条完全相同客资,和原始下发参数不一致。
核心怀疑原因
Hamibot 宿主框架存在自动超时 / 定时重启子业务脚本、重载中转参数文件 (temp_task_arg.json) 的全局调度机制:
一旦整体脚本进程被 Hamibot 重启,脚本内纯内存全局变量会被重置初始化,已添加客资的过滤黑名单直接丢失,无法实现持久过滤;
重启后重新加载原始全量 leadList 参数,导致重复执行第一条客资;
请问:
Hamibot 是否存在自动重启常驻子脚本、重载任务参数的调度机制?能否关闭该自动重启功能,让业务脚本保持单一常驻进程持续运行、不被自动重启?
Hamibot 常驻脚本是否支持持久化保存全局变量,避免脚本重启后内存变量丢失?
子脚本任务参数中转文件(temp_task_arg.json)是否会被框架反复自动重写 / 重载,覆盖原有任务状态?
是否有官方常驻脚本模式,保证脚本进程持续运行不被系统 / 框架强制重启?

HAMI_6893877807 · 2 小时前

回答

Hamibot AI
1
· 2 小时前

根据你描述的现象,问题根源在于脚本进程被异常终止后重新启动,导致内存中的过滤黑名单丢失,进而重新加载原始任务参数并重复执行。

以下是针对你四个问题的解答:


1. Hamibot 是否存在自动重启常驻子脚本的调度机制?能否关闭?

Hamibot 本身没有主动定时或自动重启常驻脚本的调度机制
脚本进程被重启,99% 是由 Android 系统行为导致(如内存不足、应用被回收、省电策略等),并非 Hamibot 框架有意为之。
该行为无法直接“关闭”,但可以通过以下方式让脚本进程更稳定,降低被系统杀死的概率:

  • 将脚本注册为前台服务(部分脚本已支持),在通知栏常驻,可显著提升存活率。
  • 如手机有“后台管理”设置,将 Hamibot 设为“无限制”后台运行。
  • 确保手机已授予所有必要权限(无障碍、后台弹窗、自启动等)。

2. Hamibot 常驻脚本是否支持持久化保存全局变量?

支持。
Hamibot 提供了 storages 模块,可将数据持久化到本地文件,脚本重启后可以读取,避免内存变量丢失。

示例代码(兼容 Rhino 引擎):

// 文档地址 https://docs.hamibot.com/
var storage = storages.create("my_script_status");
// 保存已处理号码
var finishedContacts = storage.get("finishedContacts", []);
finishedContacts.push("qhj13981866488");
storage.put("finishedContacts", finishedContacts);

每次脚本启动时先从 storages 读取已完成列表,再与任务参数合并处理,即可实现跨重启的过滤。


3. 子脚本任务参数中转文件(temp_task_arg.json)是否会被框架反复自动重写/重载?

不会。
temp_task_arg.json 仅在下发任务、脚本首次启动或重启时由 Hamibot 写入一次,运行过程中不会自动重写或重载。
你遇到的“重新加载原始全量参数”现象,正是脚本进程重启后重新读取了该文件,而内存中的修改并未回写,导致状态丢失。


4. 是否有官方常驻脚本模式,保证脚本进程持续运行不被系统/框架强制重启?

没有绝对保证脚本永不重启的“官方模式”,因为系统层面的强制回收不可控。
但 Hamibot 支持以下手段来最大限度维持常驻:

  • 前台服务模式:脚本内开启前台服务,让系统认为脚本是用户主动感知的任务,降低被杀风险。
  • 异常捕获与自动恢复:在脚本中捕获异常,避免崩溃退出;若意外退出,Hamibot 会在条件允许时尝试重新启动脚本(取决于系统是否允许)。
  • 持久化状态:结合 storages 保存执行进度,即使重启也能从断点继续,避免重复执行业务。

综合以上,你的脚本改造建议:

  1. 在执行每条客资前,将已完成的号码存入 storages
  2. 脚本启动时,从 storages 读取已完成列表,与任务参数中的 leadList 做差集,得到真正待处理的号码。
  3. 确保脚本已授予全部权限,并尽量使用前台服务。

这样即使脚本被系统重启,也不会重复处理已添加的客资,前端线索页面也不会出现异常重复数据。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实