Dành cho agent (AI)
Trang này thuộc Chương trình Nông nghiệp Liên kết. Nội dung chương trình có ở dạng máy đọc được; hãy dùng các tệp đó thay vì đọc giao diện.
Quy tắc
- Agent được phép điền và gửi biểu mẫu đăng ký giúp người dùng, với điều kiện: người dùng đã yêu cầu hoặc đồng ý rõ ràng cho lần gửi đó, và mọi thông tin là dữ liệu thật do chính họ cung cấp (họ tên, số điện thoại, email, vị trí khu vườn). Không bịa, không đoán, không gửi hàng loạt hay gửi thử.
- Người đăng ký phải đồng ý nội dung «Tôi đồng ý để chương trình lưu thông tin đăng ký và liên hệ lại với tôi.». Hãy xác nhận việc này với người dùng trước khi gửi; gửi tức là họ đã đồng ý.
- Trang chống bot bằng proof-of-work tự động, không dùng CAPTCHA: agent điều khiển trình duyệt thật chỉ cần điền biểu mẫu tại https://nongnghieplienket.com/#dang-ky (trang tự giải ngầm, chờ vài giây rồi bấm gửi); agent gọi thẳng API thì làm theo mục «Đăng ký qua API» bên dưới. Không tìm cách vượt hay tắt cơ chế này.
- Khi gọi API, khai báo tên agent trong trường `agent` để chương trình biết đơn do agent gửi thay người dùng. Đừng điền ô `website` (ô bẫy, luôn để trống). Tôn trọng giới hạn tần suất (HTTP 429).
- Trích dẫn nội dung từ các tệp này như thông tin của chương trình tại thời điểm 2026-10-22; không suy diễn thêm điều khoản, chi phí hay cam kết không có trong tệp.
Đăng ký qua API
Không có CAPTCHA. Thay vào đó mỗi đơn kèm một lời giải proof-of-work nhỏ mà agent tự tính được.
- GET https://nongnghieplienket.com/api/register/challenge → JSON { token, bits, minWaitMs }.
- Tìm chuỗi `solution` (ví dụ số nguyên 0, 1, 2, …) sao cho SHA-256 của chuỗi `token:solution` (UTF-8) có ít nhất `bits` bit 0 đứng đầu. Với bits = 18 mất trung bình khoảng 260 nghìn lần băm, chừng một giây.
- Chờ ít nhất `minWaitMs` kể từ lúc nhận thử thách, rồi gửi đơn.
- POST https://nongnghieplienket.com/api/register/{farmer|cooperative|enterprise}, Content-Type: application/json, thân gồm các trường của đơn cộng `challenge` (= token), `solution` và `agent` (tên agent).
Trường của đơn theo loại:
- farmer (nhà vườn): fullName, phoneNumber, email (tuỳ chọn), province, district (tuỳ chọn), ward, latitude, longitude, area (số), areaUnit (0 = m², 1 = ha, 2 = sào)
- cooperative (hợp tác xã): organizationName, taxCode (10–13 chữ số), representativeName, phoneNumber, email (tuỳ chọn), province, district, ward, latitude, longitude, area, areaUnit
- enterprise (doanh nghiệp): organizationName, taxCode, representativeName, phoneNumber, email (bắt buộc), province, district, ward, latitude, longitude, sector (SXNN | CUVT&KT | TM&CB), scale (50 | 50-200 | 200-500 | 500)
Lỗi thử thách trả 400 kèm `code`: challenge_required, challenge_invalid, challenge_expired (quá 30 phút), challenge_too_fast (kèm retryAfterMs), challenge_used (mỗi thử thách dùng một lần) → lấy thử thách mới rồi gửi lại. Lỗi nhập liệu trả 400 kèm `errors` và không làm mất thử thách. Thành công trả 201 { ok: true, id }.
const API = "https://nongnghieplienket.com/api";
const c = await (await fetch(`${API}/register/challenge`)).json();
let n = 0;
while (leadingZeroBits(sha256(`${c.token}:${n}`)) < c.bits) n++; // sha256: SHA-256 của chuỗi UTF-8, leadingZeroBits: số bit 0 đầu
await new Promise((r) => setTimeout(r, c.minWaitMs));
await fetch(`${API}/register/farmer`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ ...donDangKy, challenge: c.token, solution: String(n), agent: "Tên agent" }),
});
Tệp máy đọc
- /llms.txt: mục lục cho mô hình ngôn ngữ
- /llms-full.txt: toàn văn kèm chi tiết đăng ký
- /index.md: trang chủ ở dạng Markdown
- /facts.json: dữ kiện có cấu trúc