@@ -99,6 +99,8 @@ type TelegramObservedMessageArtifact = {
9999 mediaKinds : string [ ] ;
100100} ;
101101
102+ const DEFAULT_TELEGRAM_QA_CANARY_TIMEOUT_MS = 30_000 ;
103+
102104type TelegramQaScenarioResult = {
103105 id : string ;
104106 title : string ;
@@ -350,6 +352,30 @@ function shouldLogTelegramQaLiveProgress(env: NodeJS.ProcessEnv = process.env) {
350352 return parseTelegramQaProgressBooleanEnv ( env . CI ) === true ;
351353}
352354
355+ function parsePositiveTelegramQaEnvMs ( env : NodeJS . ProcessEnv , name : string , fallbackMs : number ) {
356+ const raw = env [ name ] ;
357+ if ( raw === undefined ) {
358+ return fallbackMs ;
359+ }
360+ const parsed = Number ( raw ) ;
361+ if ( ! Number . isFinite ( parsed ) || parsed < 1 ) {
362+ return fallbackMs ;
363+ }
364+ return Math . floor ( parsed ) ;
365+ }
366+
367+ function resolveTelegramQaCanaryTimeoutMs ( env : NodeJS . ProcessEnv = process . env ) {
368+ return parsePositiveTelegramQaEnvMs (
369+ env ,
370+ "OPENCLAW_QA_TELEGRAM_CANARY_TIMEOUT_MS" ,
371+ DEFAULT_TELEGRAM_QA_CANARY_TIMEOUT_MS ,
372+ ) ;
373+ }
374+
375+ function formatTelegramQaTimeoutSeconds ( timeoutMs : number ) {
376+ return `${ Math . round ( timeoutMs / 1_000 ) } s` ;
377+ }
378+
353379function writeTelegramQaProgress ( enabled : boolean , message : string ) {
354380 if ( ! enabled ) {
355381 return ;
@@ -862,6 +888,7 @@ async function runCanary(params: {
862888 groupId : string ;
863889 sutUsername : string ;
864890 sutBotId : number ;
891+ timeoutMs : number ;
865892 observedMessages : TelegramObservedMessage [ ] ;
866893} ) {
867894 const offset = await flushTelegramUpdates ( params . driverToken ) ;
@@ -880,7 +907,7 @@ async function runCanary(params: {
880907 sutObserved = await waitForObservedMessage ( {
881908 token : params . driverToken ,
882909 initialOffset : offset ,
883- timeoutMs : 30_000 ,
910+ timeoutMs : params . timeoutMs ,
884911 observedMessages : params . observedMessages ,
885912 observationScenarioId : "telegram-canary" ,
886913 observationScenarioTitle : "Telegram canary" ,
@@ -921,7 +948,7 @@ async function runCanary(params: {
921948 }
922949 throw new TelegramQaCanaryError (
923950 "sut_reply_timeout" ,
924- " SUT bot did not send any group reply after the canary command within 30s." ,
951+ ` SUT bot did not send any group reply after the canary command within ${ formatTelegramQaTimeoutSeconds ( params . timeoutMs ) } .` ,
925952 {
926953 groupId : params . groupId ,
927954 sutBotId : params . sutBotId ,
@@ -1208,6 +1235,7 @@ export async function runTelegramQaLive(params: {
12081235 groupId : runtimeEnv . groupId ,
12091236 sutUsername,
12101237 sutBotId : sutIdentity . id ,
1238+ timeoutMs : resolveTelegramQaCanaryTimeoutMs ( ) ,
12111239 observedMessages,
12121240 } ) ;
12131241 scenarioResults . push ( {
@@ -1481,6 +1509,7 @@ export const __testing = {
14811509 normalizeTelegramObservedMessage,
14821510 parseTelegramQaProgressBooleanEnv,
14831511 parseTelegramQaCredentialPayload,
1512+ resolveTelegramQaCanaryTimeoutMs,
14841513 resolveTelegramQaRuntimeEnv,
14851514 sanitizeTelegramQaProgressValue,
14861515 shouldLogTelegramQaLiveProgress,
0 commit comments