Luật pháp bên trong mã nguồn của chúng tôi
Một nút hủy hợp đồng phải hoạt động mà không cần đăng nhập. Một biểu mẫu không bao giờ được từ chối bạn. Vì sao với chúng tôi, nghĩa vụ pháp lý là kiến trúc, không phải văn bản mẫu.

Khi cho phép mua Premium, chúng tôi đã nghĩ phần pháp lý chỉ là vài trang văn bản ở chân trang. Điều đó sai. Có những nghĩa vụ hoàn toàn không thể viết thành văn bản, vì chúng quy định một tính năng phải được xây dựng như thế nào.
Bốn ví dụ cho thấy điều đó đặc biệt rõ. Nói trước để rõ đây là gì: đây là mô tả cách chúng tôi triển khai, không phải tư vấn pháp lý. Các quy định dưới đây là luật Đức, nơi AlphaCloud hoạt động.
Nút hủy hợp đồng không được phép yêu cầu đăng nhập
Điều 312k Bộ luật Dân sự Đức yêu cầu các hợp đồng ký kết trực tuyến phải có một cách hủy truy cập được trực tiếp. Từ đó sinh ra những yêu cầu mà bạn không thể bổ sung về sau bằng câu chữ:
- Trang phải hoạt động mà không cần đăng nhập
- Nó phải nằm ở chân trang của mọi trang
- Nó cần hai bước: nhập thông tin, rồi xác nhận qua một nút có nhãn rõ ràng
- Phải gửi đi một xác nhận đã nhận dưới dạng văn bản
Điểm cuối cùng quyết định kiến trúc. Một lời hủy hợp đồng là một tuyên bố đơn phương và có hiệu lực khi được nhận. Vì vậy nó phải luôn được ghi nhận và xác nhận, bất kể nó đến từ ai.
Biểu mẫu không bao giờ được từ chối bạn
Đây là chỗ cách làm hiển nhiên suýt khiến chúng tôi mắc sai lầm.
Cách làm hiển nhiên: chỉ chấp nhận yêu cầu hủy nếu ID máy chủ và email khớp với một gói đăng ký đang hoạt động. Nghe hợp lý, nhưng sai tới hai lần.
Thứ nhất, nó sẽ chặn một khách hàng thật gõ nhầm email hoặc dùng địa chỉ khác. Yêu cầu hủy của họ coi như chưa được nhận, gói đăng ký tự gia hạn, và trong tay họ có bằng chứng rằng mình đã cố hủy.
Thứ hai, và đây là phần khó chịu hơn: chính thông báo lỗi đã là một câu trả lời. Ai nhận lại "không tìm thấy gói đăng ký" sẽ biết rằng máy chủ này không trả tiền. ID máy chủ Discord không phải bí mật, bất kỳ thành viên nào cũng đọc được. Biểu mẫu sẽ trở thành công cụ dò xét máy chủ của người khác.
Giải pháp tách biệt hai thứ tưởng như là một:
| Điều kiện | |
|---|---|
| Tiếp nhận tuyên bố | vô điều kiện, luôn được ghi nhận và xác nhận |
| Thực hiện việc hủy | chỉ khi email đã gửi khớp với người mua đã lưu |
Mọi trường hợp còn lại được đưa vào hàng đợi và được một người xem xét. Điều đó được phép vì điều 312k khoản 2 cho phép rõ ràng việc yêu cầu thông tin nhận dạng. Chỉ có việc đặt một bước đăng nhập ở trước là bị cấm.
Cũng vì lý do đó, phản hồi công khai chỉ được nêu ngày kết thúc khi danh tính đã được xác nhận. Nếu không, lời xác nhận lại trở thành một công cụ dò đoán.
Việc rút lại hợp đồng thì cố ý yêu cầu đăng nhập
Ngay bên cạnh là một tính năng chúng tôi xây theo hướng ngược lại: rút lại hợp đồng kèm hoàn tiền theo tỷ lệ nằm sau bước đăng nhập.
Đó không phải mâu thuẫn. Điều 312k áp dụng cho việc hủy hợp đồng, không phải rút lại hợp đồng, và hoàn toàn không có nghĩa vụ phải cung cấp biểu mẫu rút lại hợp đồng trực tuyến, miễn là con đường không chính thức vẫn mở. Khác biệt nằm ở hậu quả: việc hủy tác động đến tương lai, còn hoàn tiền thì chuyển tiền ngay bây giờ, và không thể lấy lại.
Ba quy tắc rút ra từ đó, mà chúng tôi không nới lỏng:
Không bắt buộc nêu lý do. Điều 355 khoản 1 cho phép rút lại hợp đồng mà rõ ràng không cần nêu lý do. Trường này là tùy chọn và phải giữ là tùy chọn, dù một trường bắt buộc hấp dẫn đến đâu cho mục đích thống kê.
Sau 14 ngày, chỉ con đường tự động bị từ chối, không bao giờ là bản thân tuyên bố. Thời hạn được kéo dài đến tối đa mười hai tháng và mười bốn ngày nếu khách hàng không được thông báo đúng cách. Một câu "quá muộn" chung chung vì vậy có thể sai.
Cơ chế chống trả tiền hai lần mang tính thận trọng. Dấu đánh dấu được đặt trước khi lệnh hoàn tiền chạy. Nếu sau đó hoàn tiền thất bại, dấu vẫn giữ nguyên và một người sẽ tiếp quản. Chi trả hai lần là kết cục duy nhất không thể khắc phục.
Tin nhắn riêng trên Discord không phải là phương tiện lưu trữ lâu dài
Điều 312f khoản 3 yêu cầu xác nhận hợp đồng trên một phương tiện lưu trữ lâu dài, và xác nhận đó phải tái hiện được sự đồng ý đã đưa ra.
Ban đầu chúng tôi gửi một tin nhắn riêng trên Discord, vì đó vốn là kênh mà khách hàng của chúng tôi đang ở. Như vậy là không đạt. Một tin nhắn riêng nằm trên một nền tảng chúng tôi không kiểm soát, và nó không thể lưu giữ cũng như không bất biến theo nghĩa mà quy định này hướng tới.
Vì vậy chúng tôi thêm email, và cùng với nó là một sự phụ thuộc khó chịu: nếu thông tin đăng nhập email chưa được đặt, việc gửi chỉ ghi một cảnh báo vào nhật ký và nghĩa vụ không được thực hiện. Một nghĩa vụ luật định phụ thuộc vào một biến môi trường là một tình trạng đáng để lưu tâm.
Không có thuế VAT, và điều đó phải được nói giống nhau ở mọi nơi
AlphaCloud là doanh nghiệp nhỏ theo điều 19 Luật Thuế giá trị gia tăng Đức. Giá là giá cuối cùng, thuế VAT không bao giờ được hiển thị.
Nghe như một chú thích, nhưng thực ra là một bài toán nhất quán trải khắp nhiều chỗ: trang bảng giá, hộp thoại thanh toán, điều khoản dịch vụ, chính sách quyền riêng tư, chân trang hóa đơn và cấu hình tại nhà cung cấp dịch vụ thanh toán đều phải nói cùng một điều. Chúng tôi từng để một dòng "chưa bao gồm VAT" nằm đó rất lâu, và nó đơn giản là sai.
Và AI
Từ tháng 8 năm 2026, các nghĩa vụ minh bạch của Đạo luật AI châu Âu được áp dụng đầy đủ. Bất kỳ ai nói chuyện với một hệ thống AI đều phải nhận ra được điều đó, muộn nhất là ở lần tương tác đầu tiên.
Câu quan trọng nhất với chúng tôi từ đợt rà soát đó: một trang pháp lý ở chân trang có lẽ không đáp ứng được yêu cầu này. Việc công bố phải diễn ra ở nơi tương tác diễn ra, tức là ngay trong tin nhắn Discord. Đó là lý do hỗ trợ ticket bằng AI của chúng tôi tự giới thiệu mà không cần ai hỏi và có một nút hiển thị rõ để tắt nó. Đánh giá chi tiết của chúng tôi có tại Minh bạch AI.
Sợi chỉ chung
Cả bốn ví dụ đều có cùng một hình dạng: nghĩa vụ trông như một văn bản nhưng thực chất là một yêu cầu về cấu trúc. Một bước đăng nhập đặt sai chỗ, một thông báo lỗi để lộ quá nhiều, một lời xác nhận qua sai kênh, một thứ tự cho phép chi trả hai lần.
Vì vậy giờ chúng tôi đọc văn bản pháp lý như một bản đặc tả, và chúng tôi cũng kiểm tra theo chiều ngược lại: mã nguồn có thực sự làm đúng những gì điều khoản của chúng tôi nói không? Chính ở câu hỏi đó, chúng tôi đã tìm ra hai điểm sai lệch thực sự, và có một bài viết riêng về chúng.
Bài viết khác
Vì sao gần như mọi thứ trong AlphaCloud vẫn miễn phí
Hầu hết bot Discord khóa những tính năng hữu ích nhất sau một gói đăng ký. Chúng tôi cố ý không làm vậy, và điều đó ít liên quan đến sự hào phóng hơn bạn tưởng.
Hậu trườngTheo dõi 4.000 máy chủ Discord: Grafana, PostHog và những gì chúng cho chúng tôi thấy
Một vòng lặp âm thầm tạo ra một nửa lưu lượng của chúng tôi, ba triệu yêu cầu vô ích mỗi ngày và một cuộc tấn công kết thúc sau một phút. Hệ thống giám sát của chúng tôi thấy gì, và cố ý không thấy gì.
Hậu trườngChạy bot trên hơn 2.000 máy chủ Discord đã dạy chúng tôi điều gì
Bốn điều diễn ra khác ở quy mô lớn so với những gì bạn giả định khi viết mã.