Nút động và tham số

Các nút inline không chỉ là tĩnh. GetMyBot có thể tạo bàn phím từ dữ liệu — một nút cho mỗi phần tử danh sách — và gắn vào mỗi nút tập tham số riêng của nó, được cố định tại thời điểm gửi. Đây là nền tảng cho các kịch bản "hiển thị danh mục → người dùng chọn sản phẩm cụ thể → xử lý chính xác sản phẩm đó". Tất cả được cấu hình trong khối tin nhắn của hành động "Gửi tin nhắn".

Nút động từ danh sách

Khối "Nút động từ danh sách" triển khai mảng từ ctx thành bàn phím: một nút cho mỗi phần tử mảng. Có bốn thứ cần cấu hình:

  • Danh sách — khóa mảng trong context (over), ví dụ ctx.products. Mảng thường được đặt ở đó bởi các hành động "Yêu cầu đến nguồn", "Yêu cầu web" hoặc tính toán.
  • Bí danh phần tử — tên mà phần tử có thể truy cập trong template (as, mặc định là item).
  • Nút mỗi hàng — số nút đặt trong một dòng (columns, mặc định 1).
  • Template nút — nút thông thường, nhưng văn bản và các trường của nó hỗ trợ thay thế theo bí danh: {{item.name}}, {{item.price}}, v.v.

Khi gửi, template được render cho mỗi phần tử, và sẽ có bấy nhiêu nút như có phần tử trong danh sách. Đây là cách tạo danh mục, danh sách bản ghi bộ sưu tập và menu từ dữ liệu.

Ví dụ

Trong ctx.products có mảng object với các trường id, name, price. Trong template nút hãy chỉ định văn bản {{item.name}} — {{item.price}} ₽, còn trong Carry — khóa product_id với giá trị {{item.id}}. Bạn sẽ nhận một nút cho mỗi sản phẩm, và khi nhấn, bot sẽ biết chính xác sản phẩm nào được chọn.

Tham số khi nhấn (Carry)

Khối "Carry — ảnh chụp dữ liệu vào lần nhấn nút" gắn vào nút tập các cặp khóa → giá trị được tính toán và cố định tại thời điểm gửi tin nhắn. Khi nhấn, các giá trị này được khôi phục vào ctx — vì vậy mỗi nút mang tham số riêng (per-invocation), ngay cả khi có hàng chục nút và chúng được gửi cùng một tin nhắn.

  • carry key — tên mà giá trị sẽ trả về trong ctx khi nhấn.
  • carry value — template với thay thế ({{item.id}}, {{param.order_id}}, {{ctx.x}}), được tính toán khi gửi.
  • Một lần dùng (single_use) — payload bị xóa sau lần nhấn đầu tiên.
  • Thời gian sống payload (ttl_seconds) — thời hạn của ảnh chụp tính bằng giây (0 — giá trị mặc định).

Đây chính là tính năng quan trọng "tham số từ liên kết, gắn với nút cụ thể": giá trị được ghi nhớ trong nút, không phải trong trạng thái chung của người dùng, vì vậy các lần nhấn song song không ghi đè lên nhau.

Đặt tham số bằng nút (set_params)

Ngoài ảnh chụp Carry, nút còn có thể trực tiếp đặt tham số người đăng ký khi nhấn — trường "Tham số" (set_params). Khác với Carry (giá trị tạm trong ctx), set_params ghi vào tham số vĩnh viễn của người dùng ({{param.key}}), được lưu giữa các phiên. Trường tương tự cũng có ở khối tin nhắn — thì tham số được đặt khi gửi, không phải khi nhấn.

Nút khi nhấn cũng có thể thêm và xóa nhãn — bằng các trường tương tự như khối tin nhắn.

Sự khác biệt giữa ba cơ chế

  • Carry — ảnh chụp trong ctx, sống đến khi nhấn, gắn với nút cụ thể, với TTL và tùy chọn một lần.
  • set_params trên nút — ghi tham số vĩnh viễn của người đăng ký khi nhấn.
  • set_params trên khối — ghi tham số vĩnh viễn khi gửi tin nhắn.

Cho kịch bản "đã chọn sản phẩm — xử lý nó" hãy dùng nút động + Carry: danh sách sản phẩm triển khai thành nút, còn product_id của mỗi sản phẩm đi vào Carry của chính nút đó.

Tiếp theo