diff --git a/src/glitch/wakeup.js b/src/glitch/wakeup.js
index aca6343..5974804 100644
--- a/src/glitch/wakeup.js
+++ b/src/glitch/wakeup.js
@@ -3,15 +3,42 @@
 const WAKEUP_URL = 'https://apache-incubator-echarts-bot-1.glitch.me/probot';
 
 (async function() {
-  const body = await fetch(WAKEUP_URL, {
-    headers: {
-      'Accept': 'text/html',
-      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
+    let isWorking = true;
+    let err;
+    try {
+        const body = await fetch(WAKEUP_URL, {
+            headers: {
+                'Accept': 'text/html',
+                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'
+            }
+        }).then(res => res.text());
+        if (body.indexOf('Welcome to') === -1) {
+            isWorking = false;
+            console.log('Response body:\n', body);
+        }
+    } catch (e) {
+        err = e;
+        isWorking = false;
+    } finally {
+        if (isWorking) {
+            return console.log('✨ bot is now working~');
+        }
+        const errLog = '💤 bot may not be working...';
+        console.error(errLog);
+        if (await isNotificationNeeded()) {
+            throw err || new Error(errLog);
+        }
     }
-  }).then(res => res.text());
-  if (body.indexOf('Welcome to') === -1) {
-    console.log('Response body:\n', body);
-    throw new Error('bot may not be working.');
-  }
-  console.log('･ﾟ✧ bot is now working.');
 })();
+
+async function isNotificationNeeded() {
+    const failedActionRuns = await fetch('https://api.github.com/repos/apache/echarts-bot/actions/workflows/8490751/runs?status=failure&per_page=1')
+        .then(res => res.json());
+    const latestFailedRun = failedActionRuns.workflow_runs[0];
+    if (!latestFailedRun) {
+        return true
+    }
+    const lastFailedTs = Date.parse(latestFailedRun.run_started_at);
+    // send notification when the failure last for one hour and more
+    return Date.now() - lastFailedTs >= 60 * 60 * 1e3;
+}
