


























@@ -142,6 +142,7 @@ type WhatsAppCredentialHeartbeat = ReturnType<typeof startQaCredentialLeaseHeart
142142143143const WHATSAPP_QA_CAPTURE_CONTENT_ENV = "OPENCLAW_QA_WHATSAPP_CAPTURE_CONTENT";
144144const QA_REDACT_PUBLIC_METADATA_ENV = "OPENCLAW_QA_REDACT_PUBLIC_METADATA";
145+const WHATSAPP_QA_TRANSIENT_DRIVER_ATTEMPTS = 3;
145146const WHATSAPP_QA_ENV_KEYS = [
146147"OPENCLAW_QA_WHATSAPP_DRIVER_PHONE_E164",
147148"OPENCLAW_QA_WHATSAPP_SUT_PHONE_E164",
@@ -474,6 +475,14 @@ function isTransientWhatsAppQaDriverError(error: unknown) {
474475return /\bConnection Closed\b/iu.test(formatErrorMessage(error));
475476}
476477478+async function restartWhatsAppQaDriverSession(params: {
479+authDir: string;
480+current: WhatsAppQaDriverSession;
481+}) {
482+await params.current.close().catch(() => {});
483+return await startWhatsAppQaDriverSession({ authDir: params.authDir });
484+}
485+477486async function runWhatsAppScenario(params: {
478487driver: WhatsAppQaDriverSession;
479488driverPhoneE164: string;
@@ -772,7 +781,7 @@ export async function runWhatsAppQaLive(params: {
772781);
773782continue;
774783}
775-let retriedDriver = false;
784+let driverAttempt = 1;
776785while (true) {
777786try {
778787const result = await runWhatsAppScenario({
@@ -792,17 +801,31 @@ export async function runWhatsAppQaLive(params: {
792801sutPhoneE164: runtimeEnv.sutPhoneE164,
793802});
794803scenarioResults.push(
795-retriedDriver
796- ? { ...result, details: `${result.details}; driver reconnected` }
804+driverAttempt > 1
805+ ? {
806+ ...result,
807+details: `${result.details}; driver reconnected ${driverAttempt - 1}x`,
808+}
797809 : result,
798810);
799811break;
800812} catch (error) {
801-if (!retriedDriver && isTransientWhatsAppQaDriverError(error)) {
802-retriedDriver = true;
803-await activeDriver.close().catch(() => {});
804-activeDriver = await startWhatsAppQaDriverSession({ authDir: driverAuthDir });
805-driver = activeDriver;
813+if (
814+driverAttempt < WHATSAPP_QA_TRANSIENT_DRIVER_ATTEMPTS &&
815+isTransientWhatsAppQaDriverError(error)
816+) {
817+driverAttempt += 1;
818+try {
819+activeDriver = await restartWhatsAppQaDriverSession({
820+authDir: driverAuthDir,
821+current: activeDriver,
822+});
823+driver = activeDriver;
824+} catch (restartError) {
825+if (!isTransientWhatsAppQaDriverError(restartError)) {
826+throw restartError;
827+}
828+}
806829continue;
807830}
808831preservedGatewayDebugArtifacts = true;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。