ปุ่มไดนามิกและพารามิเตอร์

Inline ปุ่มไม่ได้เป็นแบบ Static เสมอไป GetMyBot สามารถสร้างแป้นพิมพ์ จากข้อมูล — หนึ่งปุ่มต่อหนึ่งรายการ — และแนบ ชุดพารามิเตอร์ของตัวเอง กับแต่ละปุ่ม ซึ่งถูกบันทึกในขณะที่ส่งข้อความ นี่คือพื้นฐานของสถานการณ์ «แสดงแคตตาล็อก → ผู้ใช้เลือกสินค้าเฉพาะ → ดำเนินการกับสินค้านั้น» ทุกอย่างตั้งค่าในบล็อคข้อความของแอคชัน «ส่งข้อความ»

ปุ่มไดนามิกจากรายการ

บล็อค «ปุ่มไดนามิกจากรายการ» ขยาย Array จาก ctx เป็นแป้นพิมพ์: หนึ่งปุ่มต่อหนึ่งองค์ประกอบของ Array ต้องตั้งค่าสี่อย่าง:

  • รายการ — คีย์ของ Array ใน Context (over) เช่น ctx.products Array มักถูกวางที่นั่นโดยแอคชัน «คำร้องไปยังแหล่งข้อมูล», «Web Request» หรือการคำนวณ
  • นามแฝงขององค์ประกอบ — ชื่อที่ใช้เข้าถึงองค์ประกอบในเทมเพลต (as ค่าเริ่มต้นคือ item)
  • ปุ่มต่อแถว — จำนวนปุ่มต่อบรรทัด (columns ค่าเริ่มต้นคือ 1)
  • เทมเพลตปุ่ม — ปุ่มปกติ แต่ข้อความและฟิลด์รองรับการแทนที่ตามนามแฝง: {{item.name}}, {{item.price}} ฯลฯ

เมื่อส่ง เทมเพลตจะถูก Render สำหรับแต่ละองค์ประกอบ และปรากฏปุ่มจำนวนเท่ากับองค์ประกอบในรายการ ช่วยสร้างแคตตาล็อก รายการระเบียนคอลเลกชัน และเมนูจากข้อมูล

ตัวอย่าง

ใน ctx.products มี Array ของ Object ที่มีฟิลด์ id, name, price ในเทมเพลตปุ่มระบุข้อความ {{item.name}} — {{item.price}} ฿ และใน Carry ระบุคีย์ product_id พร้อมค่า {{item.id}} คุณจะได้ปุ่มหนึ่งปุ่มต่อสินค้า และเมื่อกดบอทจะรู้แน่ชัดว่าเลือกสินค้าใด

พารามิเตอร์ในการกด (Carry)

บล็อค «Carry — Snapshot ข้อมูลในการกดปุ่ม» แนบชุดคู่ คีย์ → ค่า กับปุ่ม ซึ่งถูกคำนวณและ บันทึกในขณะที่ส่ง ข้อความ เมื่อกดค่าเหล่านี้จะถูกกู้คืนใน ctx — ดังนั้นแต่ละปุ่มจึงมี พารามิเตอร์ของตัวเอง (per-invocation) แม้จะมีปุ่มหลายสิบปุ่มที่ส่งในข้อความเดียวกัน

  • Carry Key — ชื่อที่ค่าจะกลับมาใน ctx เมื่อกด
  • Carry Value — เทมเพลตพร้อมการแทนที่ ({{item.id}}, {{param.order_id}}, {{ctx.x}}) ที่คำนวณเมื่อส่ง
  • ใช้ครั้งเดียว (single_use) — Payload หมดอายุหลังการกดครั้งแรก
  • อายุของ Payload (ttl_seconds) — อายุของ Snapshot เป็นวินาที (0 — ค่าเริ่มต้น)

นี่คือฟีเจอร์สำคัญ «พารามิเตอร์จากลิงก์ที่ผูกกับปุ่มเฉพาะ»: ค่าถูกจดจำในปุ่ม ไม่ใช่ในสถานะทั่วไปของผู้ใช้ ดังนั้นการกดแบบ Parallel จึงไม่เขียนทับกัน

การตั้งค่าพารามิเตอร์ด้วยปุ่ม (set_params)

นอกจาก Carry Snapshot แล้ว ปุ่มยังสามารถ ตั้งค่าพารามิเตอร์ผู้ติดตามโดยตรง เมื่อกด — ฟิลด์ «พารามิเตอร์» (set_params) ต่างจาก Carry (ค่าชั่วคราวใน ctx) set_params เขียนลงใน พารามิเตอร์ถาวรของผู้ใช้ ({{param.key}}) ที่คงอยู่ระหว่างการทำงาน ฟิลด์เดียวกันนี้มีในบล็อคข้อความด้วย — ในกรณีนั้นพารามิเตอร์จะถูกตั้งค่าเมื่อ ส่ง ไม่ใช่เมื่อกด

ปุ่มเมื่อกดยังสามารถ เพิ่มและลบป้ายกำกับ ได้ — ด้วยฟิลด์เดียวกับบล็อคข้อความ

ความแตกต่างของสามกลไก

  • Carry — Snapshot ใน ctx อยู่จนกว่าจะกด ผูกกับปุ่มเฉพาะ มี TTL และใช้ครั้งเดียวได้
  • set_params บนปุ่ม — เขียนพารามิเตอร์ถาวรของผู้ติดตามเมื่อกด
  • set_params บนบล็อค — เขียนพารามิเตอร์ถาวรเมื่อส่งข้อความ

สำหรับสถานการณ์ «เลือกสินค้า — ดำเนินการกับสินค้านั้น» ใช้ ปุ่มไดนามิก + Carry: รายการสินค้าขยายเป็นปุ่ม และ product_id ของแต่ละสินค้าจะไปอยู่ใน Carry ของปุ่มนั้นๆ

ขั้นตอนถัดไป