Trương Tuấn AnhTuna / truongtuananh
Tất cả bài viết
ngày ghi
phút đọc
7
nguồn dẫn
10

Sửa website bằng tin nhắn Telegram mà vẫn có người duyệt

Bot Telegram sửa giá và thông tin liên hệ trên web, tôi bấm Chốt thì bản mới lên. Ba lớp chặn ở cửa vào, tám lệnh được phép, một bẫy thứ tự.

Chủ đề:
  • cổng kiểm
  • ai có người duyệt
  • vận hành

Website bán cửa chống cháy của tôi có đơn giá, VAT, tỷ lệ cọc, hotline, và chúng thỉnh thoảng phải đổi. Mỗi lần đổi mà phải mở máy tính, mở công cụ, chạy lệnh đưa bản mới lên thì việc bị hoãn. Nên tôi dựng một bot Telegram: nhắn cho bot, bot sửa, cổng kiểm tự chạy, tôi bấm Chốt, bản mới lên web.

Cái đáng kể lại là ba quyết định phía sau, vì cái nào cũng có phương án khác trông gọn hơn nhưng sai.

Ba quyết định

1. Bot đi qua kho mã, thay vì sửa thẳng trên máy chủ đang chạy. Máy chủ đang chạy được dựng ra từ kho mã. Sửa thẳng trên đó thì lần đưa bản mới lên sau sẽ ghi đè mất, và lịch sử để quay lui cũng mất theo. Đi qua kho mã thì mỗi thay đổi là một mốc lịch sử mang tên người bấm Chốt, đúng cách hai file giá và thông tin công ty vẫn giữ lịch sử. Bot đọc file từ nhánh chính, sửa đúng một giá trị, đẩy lên một nhánh riêng, để nhánh chính nguyên vẹn.

2. Bot đi chung cổng kiểm với tôi. Cổng kiểm của site sống trong kho mã và chạy tự động. Đó là cùng một cổng tôi phải đi qua khi sửa tay. Cho bot một đường kiểm riêng là tạo cổng thứ hai, và hai cổng thì sớm muộn lệch nhau. Cấu hình kiểm dành cho bot kích hoạt mỗi khi bot đẩy lên một nhánh mới: chạy bài kiểm, dựng site, ba cổng kiểm nội dung, kiểm CSS, rồi gửi phần khác biệt về Telegram kèm trạng thái XANH hay ĐỎ.

Sau khi gộp vào nhánh chính, cổng kiểm chạy lần nữa trước khi bản mới lên: lần đầu kiểm nhánh, lần sau kiểm kết quả gộp. Hai bên xanh mà gộp lại đỏ là chuyện thường.

3. Có nút Chốt. Site này bán hàng có quy định pháp lý: cấp EI, QCVN 06:2022, giá. Một con số sai ở đây là rủi ro pháp lý. Cổng kiểm bắt được lỗi kỹ thuật; "1,9tr gõ thành 19tr" thì lọt, vì cả hai đều là số hợp lệ. Cái bắt được lỗi đó là mắt người, một lần bấm.

Nút "Chốt & deploy" chỉ hiện khi cổng kiểm xanh; đỏ thì chỉ có link tới nhật ký. Dải giá cố tình rộng, 500k đến 20tr cho đơn giá cửa, vì việc của nó là chặn lỗi chữ số, còn quyền đổi giá vẫn thuộc về tôi. 19tr vẫn trong dải. Cái tóm được nó là dòng cảnh báo trên màn hình chốt:

Đơn giá EI60 sơn 1 cánh: 1.900.000 → 19.000.000 đ/m²
   ‼️ lệch +900% (10.00× - kiểm lại số chữ số)

Tôi đọc dòng đó rồi mới bấm.

Ba lớp chặn ở cửa vào

Cái cửa nhận tin nhắn đó là quyền ghi lên một website thương mại đang chạy, mở bằng một chuỗi khoá của Telegram. Ba lớp chặn:

  1. Danh sách người được phép mà để trống thì cửa đó trả về 404, tức là không tồn tại. Mặc định là tắt. Trả 404 thay cho 403, để người dò ra về tay không.
  2. Chuỗi khoá bí mật của Telegram được so sánh theo cách không lộ thời gian. Sai là từ chối.
  3. ID người gửi được kiểm lại ở tầng nghiệp vụ. Người lạ bị im lặng bỏ qua, chỉ ghi nhật ký, vì trả lời là tự khai bot làm được gì. Phải là ID số thay cho @username, vì username đổi được còn ID thì giữ nguyên.

Tắt khẩn cấp là gỡ một biến môi trường, cửa đó về 404 ngay khi máy khởi động lại. Thông báo đơn hàng vẫn chạy vì phần đó tách riêng.

Một chi tiết bắt buộc: trả lời Telegram ngay rồi mới làm việc. Telegram gửi lại tin nhắn khi câu trả lời về chậm hơn khoảng 60 giây, mà gọi AI rồi đọc ghi kho mã có thể lâu hơn thế. Chậm một nhịp là một câu lệnh tạo hai nhánh.

Bẫy thứ tự: gộp cổng kiểm trước, bật bot sau

Thứ tự này cố định, do cách dây chuyền tự động nạp cấu hình: nó chạy đúng file cấu hình nằm trong chính nhánh vừa được đẩy lên. Nhánh của bot lại sinh ra từ nhánh chính. Nhánh chính thiếu file cấu hình kiểm thì nhánh của bot thiếu theo, cổng kiểm nằm im, và nút Chốt cũng nằm im. Bot vẫn tạo được nhánh, chỉ là sau đó im lặng.

Lệnh /deploy cũng chỉ kích được cấu hình đã nằm sẵn trên nhánh mặc định. Gộp xong thì cấu hình đưa bản mới lên mới có mặt để kích.

Nên thứ tự đúng là: gộp vào nhánh chính trước, rồi mới chạy lệnh bật bot.

Bot sửa được gì, và dừng ở đâu

Bot chỉ sửa trường có trong danh sách trắng. Tám lệnh sửa dữ liệu:

LệnhSửa gìDải cho phép
/giađơn giá cửa theo cấp EI, bề mặt, số cánh500k đến 20tr
/phukiengói phụ kiện100k đến 10tr
/hosophí hồ sơ0 đến 5tr
/vatthuế suất0 đến 0,2
/coctỷ lệ cọc0,1 đến 1
/hotlinehotlinedạng số Việt Nam
/emailemail liên hệdạng email
/flagcờ tính năngdanh sách cờ cố định

Thêm /sua cho AI soạn câu chữ mô tả, và /xem, /deploy, /giupdo chỉ đọc. Nhập số ngoài dải thì bot trả lời rõ: dải này chặn lỗi thiếu thừa chữ số, quyền đổi giá vẫn của bạn; giá thật ngoài dải thì sửa file bằng tay kèm bằng chứng.

Bốn thứ bot để nguyên:

  • Mọi thứ ngoài hai thư mục dữ liệu và cấu hình: mã nguồn, giao diện, CSS. Phạm vi hẹp là thứ giữ cho một chuỗi khoá bị lộ chỉ dừng ở vài trường dữ liệu.
  • Khoá lạ. Tạo khoá mới là cách âm thầm nhất làm hỏng file mà cổng kiểm vẫn xanh.
  • Cờ mở bán đầy đủ và cờ bật thanh toán. Hai cờ này quay lại một cổng riêng, nơi bộ điều kiện mở bán được viết đúng một lần: giấy phép, bằng chứng, hồ sơ tuân thủ, quyền dùng ảnh. Bot đối chiếu, liệt kê phần còn thiếu, và để việc bật lại cho tay người. Đây là cổng pháp lý.
  • Tên hay vị trí nhà máy đối tác, kể cả khi AI tự viết ra trong /sua. Chặn hai tầng: trước khi tạo nhánh, và ở cổng kiểm nội dung trước khi đưa bản mới lên.

Điều tôi rút ra

  • "AI đề xuất, người duyệt" sống bằng ba thứ cụ thể: một nhánh riêng, một cổng kiểm tự chạy, và một nút. Bỏ một trong ba thì quy tắc chỉ còn trên giấy.
  • Cổng kiểm tự động bắt lỗi kỹ thuật. Lỗi nghiệp vụ, kiểu số hợp lệ nhưng sai, chỉ có mắt người bắt được. Cho AI đi cùng cổng với bạn, chung một đường kiểm.
  • Phạm vi hẹp là lớp bảo vệ rẻ nhất. Chuỗi khoá có lộ thì thiệt hại cũng chỉ trong vài trường của danh sách trắng, và mỗi thay đổi vẫn qua tay tôi bấm.
  • Thứ tự bật sai có thể làm cả hệ thống im lặng, nhật ký vẫn sạch. Ghi lại thứ tự.

Nếu công ty bạn muốn một kênh sửa dữ liệu có cổng duyệt như thế này, kể tôi nghe bối cảnh.