somratpro commited on
Commit
9aba9c1
·
1 Parent(s): a0b9abe

feat: add cooldown period to WhatsApp status checks to prevent redundant pairing requests

Browse files
Files changed (1) hide show
  1. wa-guardian.js +20 -0
wa-guardian.js CHANGED
@@ -17,6 +17,7 @@ const GATEWAY_TOKEN = process.env.GATEWAY_TOKEN || "huggingclaw";
17
  const CHECK_INTERVAL = 5000;
18
  const WAIT_TIMEOUT = 120000;
19
  const POST_515_NO_LOGOUT_MS = 90 * 1000;
 
20
  const RESET_MARKER_PATH = path.join(
21
  process.env.HOME || "/home/node",
22
  ".openclaw",
@@ -27,6 +28,7 @@ const RESET_MARKER_PATH = path.join(
27
  let isWaiting = false;
28
  let hasShownWaitMessage = false;
29
  let last515At = 0;
 
30
 
31
  function extractErrorMessage(msg) {
32
  if (!msg || typeof msg !== "object") return "Unknown error";
@@ -117,10 +119,27 @@ async function callRpc(ws, method, params) {
117
 
118
  async function checkStatus() {
119
  if (isWaiting) return;
 
120
 
121
  let ws;
122
  try {
123
  ws = await createConnection();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  isWaiting = true;
125
  if (!hasShownWaitMessage) {
126
  console.log("\n[guardian] 📱 WhatsApp pairing in progress. Please scan the QR code in the Control UI.");
@@ -139,6 +158,7 @@ async function checkStatus() {
139
 
140
  if (result && (result.connected || linkedAfter515)) {
141
  hasShownWaitMessage = false;
 
142
 
143
  if (linkedAfter515) {
144
  console.log("[guardian] 515 after scan: credentials saved, reloading config to start WhatsApp...");
 
17
  const CHECK_INTERVAL = 5000;
18
  const WAIT_TIMEOUT = 120000;
19
  const POST_515_NO_LOGOUT_MS = 90 * 1000;
20
+ const SUCCESS_COOLDOWN_MS = 60 * 1000;
21
  const RESET_MARKER_PATH = path.join(
22
  process.env.HOME || "/home/node",
23
  ".openclaw",
 
28
  let isWaiting = false;
29
  let hasShownWaitMessage = false;
30
  let last515At = 0;
31
+ let lastConnectedAt = 0;
32
 
33
  function extractErrorMessage(msg) {
34
  if (!msg || typeof msg !== "object") return "Unknown error";
 
119
 
120
  async function checkStatus() {
121
  if (isWaiting) return;
122
+ if (lastConnectedAt && Date.now() - lastConnectedAt < SUCCESS_COOLDOWN_MS) return;
123
 
124
  let ws;
125
  try {
126
  ws = await createConnection();
127
+
128
+ const statusRes = await callRpc(ws, "channels.status", {});
129
+ const channels = (statusRes.payload || statusRes.result)?.channels || {};
130
+ const wa = channels.whatsapp;
131
+
132
+ if (!wa) {
133
+ hasShownWaitMessage = false;
134
+ return;
135
+ }
136
+
137
+ if (wa.connected) {
138
+ hasShownWaitMessage = false;
139
+ lastConnectedAt = Date.now();
140
+ return;
141
+ }
142
+
143
  isWaiting = true;
144
  if (!hasShownWaitMessage) {
145
  console.log("\n[guardian] 📱 WhatsApp pairing in progress. Please scan the QR code in the Control UI.");
 
158
 
159
  if (result && (result.connected || linkedAfter515)) {
160
  hasShownWaitMessage = false;
161
+ lastConnectedAt = Date.now();
162
 
163
  if (linkedAfter515) {
164
  console.log("[guardian] 515 after scan: credentials saved, reloading config to start WhatsApp...");