Dự án · Trợ lý điều hành qua chat · Vòng 14

Cái chuông: làm sao anh biết bot đã câm, khi không có ai ngồi canh?

Hôm 30/7 bot im 25,2 giờ. Mã không sai — nó dừng đúng như được dạy. Thứ hỏng là không ai được báo. Đây là vòng chọn cách dựng lại cái chuông.

Gửi: 06/08/2026 · 21:0x London / 03:0x VN (7/8)

✅ ĐÃ QUYẾT LÚC 22:49 — 06/08/2026 (giờ London)

Anh chốt: Q1 = a — người gác TỰ CỨU (thấy câm → thử mạng → mạng đã về thì tự dựng bot dậy, rồi báo) · Q2 = a — CẢ HAI đường (hiện thông báo trên máy Mac nhắn Telegram khi có mạng trở lại).

Trang này giữ nguyên làm sổ quyết định. Việc dựng người gác đã chuyển cho executor — PM không tự ôm phần mã.

Chuyện gì đã xảy ra: 06:03 sáng 30/7, mạng nhà chết. Bot tự nối lại 10 lần (giãn 2 giây → 5 → 15 → 60, trải gần 20 phút). Mạng vẫn chết ⇒ nó dừng và ghi cạn trần, cần người xem. Rồi nằm im tới 07:36 sáng 31/7.

Vì sao không ai tới: cái chuông lúc đó treo vào một phiên chat của trợ lý — và phiên ấy bị ngắt đúng sáng hôm đó. Chuông reo vào phòng trống. Máy phát hiện đúng; người đưa tin chết.

Điều em mới đào ra hôm nay, và nó là mấu chốt: máy anh ĐÃ CÓ sẵn cơ chế hồi sinh — bot chạy dưới lịch nền hệ thống với chế độ KeepAlive (chết là dựng lại ngay). Nhưng nó đứng nhìn suốt 25 giờ, vì nó chỉ biết bắt "tiến trình CHẾT". Bot hôm đó không chết — nó im. Cỗ máy cứu hộ bỏ qua nạn nhân vì nạn nhân vẫn còn thở.

Mốc em mới đào ra hôm nay, và nó đổi trọng tâm câu chuyện: mạng chỉ chết khoảng hơn một tiếng. Lúc 07:39 sáng hôm đó, một phiên trợ lý khác trên chính máy này đã đăng bài lên kênh làm việc bình thường — tức máy đã có mạng trở lại. Vậy mà bot vẫn nằm im thêm 24 giờ nữa. ⇒ Thiệt hại không tỉ lệ với độ dài sự cố, mà tỉ lệ với khoảng thời gian không ai kiểm tra. Cửa sổ để cứu đã mở sau ~1 giờ, và mở suốt một ngày, không ai bước qua. Em nói thẳng: dữ kiện này nghiêng về phương án (a) bên dưới — em đưa lên vì anh cần biết trước khi tick, không phải để mớm. (Mức chắc chắn: mốc 06:03 · 06:22 · 07:36 hôm sau lấy từ sổ sự kiện máy — chắc chắn. Mốc 07:39 lấy từ dấu giờ tự khai trong tin kênh — hợp lý nhưng không phải dấu giờ hệ thống.)

⇒ Vì vậy có một đường sửa KHÔNG đụng một dòng nào của bot đang chạy: dựng một người gác riêng, biết phân biệt "còn thở" với "còn nghe", và bấm đúng cái nút hồi sinh mà hệ thống vốn đã có.

Q1 · Người gác làm tới đâu

Khi phát hiện bot câm, người gác được phép tự cứu hay chỉ được kêu?

Người gác là gì: một việc nền nhỏ, chạy tách hẳn khỏi bot và khỏi mọi phiên chat · Chạy gì: ~/Operations/scripts/zalo-bridge-watchdog.sh (đội viết, anh xem được) · Nhịp: 2 phút/lần · Cách nhận biết câm: tiến trình còn sống nhưng 0 kết nối, xác nhận 2 lần cách nhau 12 giây (tránh báo nhầm lúc đang nối lại ~4 giây), hoặc sổ sự kiện vừa ghi cạn trần.

Điều em muốn nói thẳng: ba lựa chọn trên không đụng gì tới mã của bot. Đội đã thử sửa bằng mã hai lần (bản v8, v9) và reviewer bác cả hai — executor tự kiểm, xác nhận lỗi là thật, rồi tự rút. File chạy thật vẫn nguyên vẹn, chưa bị đụng 1 byte. Bài học: thứ hỏng nằm ngoài mã, nên đừng vá thêm vào mã.
Q2 · Chuông reo vào đâu

Anh muốn nghe tiếng chuông bằng đường nào?

Chỗ vướng thật: lúc bot câm vì mất mạng thì mọi đường nhắn qua mạng cũng đứt. Nên người gác sẽ giữ tin lại và bắn đi ngay khi mạng về, thay vì mất tin.

Đã chọn 0/2
Quyết định của anh — copy dán lại chat cho PM