ปุ่มไดนามิกและพารามิเตอร์
Inline ปุ่มไม่ได้เป็นแบบ Static เสมอไป GetMyBot สามารถสร้างแป้นพิมพ์ จากข้อมูล — หนึ่งปุ่มต่อหนึ่งรายการ — และแนบ ชุดพารามิเตอร์ของตัวเอง กับแต่ละปุ่ม ซึ่งถูกบันทึกในขณะที่ส่งข้อความ นี่คือพื้นฐานของสถานการณ์ «แสดงแคตตาล็อก → ผู้ใช้เลือกสินค้าเฉพาะ → ดำเนินการกับสินค้านั้น» ทุกอย่างตั้งค่าในบล็อคข้อความของแอคชัน «ส่งข้อความ»
ปุ่มไดนามิกจากรายการ
บล็อค «ปุ่มไดนามิกจากรายการ» ขยาย Array จาก ctx เป็นแป้นพิมพ์: หนึ่งปุ่มต่อหนึ่งองค์ประกอบของ Array ต้องตั้งค่าสี่อย่าง:
- รายการ — คีย์ของ Array ใน Context (
over) เช่นctx.productsArray มักถูกวางที่นั่นโดยแอคชัน «คำร้องไปยังแหล่งข้อมูล», «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 ของปุ่มนั้นๆ
ขั้นตอนถัดไป
- ข้อความและปุ่ม — บล็อคข้อความ ประเภทปุ่ม และพฤติกรรมเมื่อกด
- การแทนที่ค่าและสูตร — ตัวแปร
{{item.*}},{{ctx.*}},{{param.*}}ในเทมเพลต - ลิงก์รีแอคชัน — ปุ่มนำไปที่ใดและวิธีดูกราฟการเปลี่ยนผ่าน
- คอลเลกชันและข้อมูล — แหล่งรายการสำหรับปุ่มไดนามิก