คำถามที่พบบ่อย
คำตอบเรื่องสิทธิ์ Webhook การ์ด QR และสิ่งที่ต้องรู้ก่อนเปิดให้ผู้ใช้จริงใช้บอท
เริ่มต้น
บอท HeloSChat คืออะไร ต่างจากแอปทั่วไปยังไง
บอทคือ Service Identity ที่มี BID และ Token ของตัวเอง แยกจาก UID ของผู้ใช้และแยกจาก Server/Group โดยสิทธิ์การเข้าห้องแชท ถูกกำหนดผ่าน Scope และการเชิญ Bot เข้าไปเป็นสมาชิก
ต้องเสียเงินไหม
สมัครเป็นนักพัฒนาและสร้างบอทไม่มีค่าใช้จ่าย สิ่งที่คุณต้องมีคือที่รันโค้ดของบอทเอง ซึ่งจะเป็นเครื่องที่บ้าน VPS หรือบริการ serverless ก็ได้
เขียนด้วยภาษาอะไรได้บ้าง
อะไรก็ได้ที่ยิง HTTP ได้และเปิดพอร์ตรับ webhook ได้ Node.js, Go, Python, PHP, Rust ทั้งหมดใช้ได้เท่ากัน เพราะทุกอย่างคุยกันผ่าน JSON over HTTPS ไม่มี SDK บังคับ
บอทหนึ่งตัวอยู่ได้กี่ห้อง
ไม่จำกัดจำนวนห้อง แต่ถูกจำกัดด้วยสิทธิ์ที่เปิดไว้ ถ้าบอทมีแค่ dm มันจะเข้ากลุ่มหรือเซิร์ฟเวอร์ไม่ได้เลย แม้จะถูกเชิญก็ตาม
ผู้ใช้ทั่วไปเห็นบอทเป็นยังไง
เห็นเป็นสมาชิก Bot ในห้องที่มีชื่อและรูปของ Bot ข้อความที่บอทส่งจะแสดงในกล่องแชทตามปกติ ส่วน Service Card จะแสดงเป็นการ์ดที่กดโต้ตอบได้ ไม่ใช่ข้อความธรรมดา
สิทธิ์และความเป็นส่วนตัว
สิทธิ์แบ่งเป็นกี่ประเภท
สองชั้น และต้องผ่านทั้งสองชั้นถึงจะทำงานได้
ชั้นแรกคือ พื้นที่: dm, group, server บอกว่าบอทเข้าที่ไหนได้ ชั้นที่สองคือ ความสามารถ เช่น messages.send หรือ cards.create บอกว่าเข้าไปแล้วทำอะไรได้
ถ้าไม่อยากให้บอทอ่านทุกข้อความในกลุ่ม ทำยังไง
เปิด messages.mention แทน messages.read บอทจะได้รับเฉพาะข้อความที่ @ ถึงมันเท่านั้น ข้อความอื่นในห้องจะไม่ถูกส่งออกไปยัง webhook ของคุณเลย ส่วนใน DM บอทยังได้รับทุกข้อความ เพราะห้องนั้นถูกเปิดขึ้นเพื่อคุยกับบอทอยู่แล้ว
เปลี่ยนสิทธิ์ทีหลังได้ไหม
ได้ แก้ได้ตลอดที่หน้าบอทใน Console การปิดสิทธิ์มีผลทันทีกับเหตุการณ์ถัดไป เหตุการณ์ที่ถูกส่งไปแล้วจะไม่ถูกเรียกคืน
ถ้าบอทเรียก API ที่ไม่มีสิทธิ์ จะเกิดอะไรขึ้น
คำสั่งขาออกถูกปฏิเสธพร้อมบอกว่าขาด scope ตัวไหน ส่วนเหตุการณ์ขาเข้าจะไม่ถูกส่งต่อ และแพลตฟอร์มจะบันทึกเหตุผลไว้ว่า scope_denied หรือ not_mentioned เพื่อให้ไล่ปัญหาได้
บอทเห็นข้อมูลส่วนตัวของผู้ใช้แค่ไหน
เห็นเท่าที่ Scope และ membership อนุญาต UID ของผู้ส่ง ชื่อที่แสดง และเนื้อหาในห้องที่มันมีสิทธิ์ บอทไม่มีทางเข้าถึง Vault, ข้อความ DM ของคนอื่น หรือห้องที่มันไม่ได้เป็นสมาชิก ไม่ว่าจะเปิดสิทธิ์ไว้แค่ไหน
DM ที่เข้ารหัสแบบ end-to-end บอทอ่านได้ไหม
ไม่ได้ ห้องที่เปิดโหมดเข้ารหัสจะถอดรหัสได้เฉพาะบนอุปกรณ์ของคู่สนทนา เซิร์ฟเวอร์เองก็อ่านไม่ออก บอทจึงอ่านไม่ออกเช่นกัน
การเชื่อมต่อและ Webhook
Webhook ต้องเป็น HTTPS ไหม
ควรเป็น HTTPS ทุกกรณีสำหรับบอทที่ใช้งานจริง เพราะเนื้อหาข้อความและ UID ของผู้ใช้เดินทางผ่าน request นั้น ระหว่างพัฒนาจะใช้ tunnel อย่าง ngrok หรือ Cloudflare Tunnel ก็ได้
บอทได้รับเหตุการณ์อะไรบ้าง
สามชนิด: message.create เมื่อมีข้อความใหม่, card.action เมื่อมีคนกดปุ่มบน Service Card และ qr.scan เมื่อมีคนสแกน QR ของบอท แต่ละชนิดต้องมีสิทธิ์ที่ตรงกันถึงจะถูกส่งออกมา
ต้องตอบ webhook ภายในกี่วินาที
ตอบ 200 กลับมาให้เร็วที่สุด แล้วค่อยไปทำงานหนักแบบ async ถ้าคุณค้าง request ไว้เพื่อรอเรียก API อื่นก่อน คิวเหตุการณ์ของบอทคุณจะช้าตามไปด้วย
ถ้าเซิร์ฟเวอร์ของบอทล่ม เหตุการณ์จะหายไหม
ให้ถือว่าอาจหายได้ ออกแบบบอทให้ทนต่อการพลาดเหตุการณ์ไปบ้าง และอย่าใช้ webhook เป็นแหล่งความจริงเพียงแหล่งเดียว ถ้างานสำคัญให้เก็บสถานะไว้ที่ฝั่งคุณเสมอ
รับเหตุการณ์ซ้ำได้ไหม
ได้ ควรเขียนให้ประมวลผลซ้ำแล้วผลลัพธ์ไม่เปลี่ยน วิธีที่ง่ายที่สุดคือจำ id ของข้อความหรือการ์ดที่เคยจัดการแล้วไว้สักช่วงหนึ่ง
Token หลุดต้องทำยังไง
เข้า Console แล้วออก token ใหม่ทันที ตัวเก่าจะใช้ไม่ได้ อย่าเก็บ token ไว้ในโค้ดที่ push ขึ้น git ใช้ตัวแปรสภาพแวดล้อมแทน
Service Card และ QR
Service Card ต่างจากข้อความธรรมดายังไง
ข้อความธรรมดาจบที่การอ่าน ส่วน Service Card เป็นวัตถุที่มีสถานะ ผู้ใช้กดปุ่มบนการ์ดแล้วบอทจะได้รับ card.action พร้อมรู้ว่าใครกด กดปุ่มไหน และการ์ดนั้นอยู่ในสถานะอะไร
การ์ดโผล่ในห้องแชทเลยหรือเปล่า
ใช่ เมื่อบอทสร้างการ์ดในห้อง แอปจะแสดงเป็นการ์ดโต้ตอบในสายสนทนาให้เลย ไม่ต้องให้ผู้ใช้ไปเปิดหน้าอื่น
QR ของบอทต่างจาก QR เพิ่มเพื่อนยังไง
QR เพิ่มเพื่อนใช้ครั้งเดียวจบและผูกกับคนคนเดียว ส่วน QR ของบอทออกแบบมาให้พิมพ์แล้วติดไว้ในโลกจริง สแกนกี่ครั้งก็ได้ จากกี่คนก็ได้ และทุกครั้งบอทจะได้ qr.scan พร้อมจำนวนครั้งที่ถูกสแกน
แนบข้อมูลของร้านไปกับ QR ได้ไหม
ได้ ตอนสร้าง QR ใส่ป้ายกำกับและข้อมูลของคุณเองไปได้ เช่นรหัสสาขาหรือหมายเลขโต๊ะ แล้วค่าเหล่านั้นจะกลับมาพร้อมเหตุการณ์ตอนถูกสแกน
ยกเลิก QR ที่พิมพ์ไปแล้วได้ไหม
ได้ เพิกถอนได้จาก API ของบอท หลังจากนั้นการสแกนจะไม่ทำงานอีก เหมาะกับกรณีโปสเตอร์หมดอายุหรือแผ่นป้ายถูกนำไปใช้ผิดที่
ข้อจำกัดและการขึ้นจริง
มีการจำกัดอัตราการเรียก API ไหม
มี เพื่อกันบอทตัวเดียวกินทรัพยากรของทั้งระบบ ถ้าถูกจำกัดให้ถอยแบบ exponential backoff แล้วลองใหม่ อย่าวนยิงซ้ำทันทีเพราะจะยิ่งโดนนานขึ้น
บอทส่งข้อความหาคนที่ไม่เคยคุยด้วยได้ไหม
ไม่ได้ บอทเริ่มบทสนทนาเองไม่ได้ ต้องมีคนทักก่อน ถูกเชิญเข้าห้องก่อน หรือสแกน QR ของบอทก่อน นี่เป็นการออกแบบเพื่อกันสแปมตั้งแต่ระดับแพลตฟอร์ม
ทดสอบบอทก่อนปล่อยจริงยังไง
สร้างบอทอีกตัวไว้สำหรับพัฒนาโดยเฉพาะ ให้มี token คนละใบกับตัวจริง แล้วทดสอบในกลุ่มส่วนตัวของคุณเอง อย่าทดสอบด้วย token ของบอทที่คนใช้อยู่
บอทของผมถูกปิดได้ในกรณีไหน
กรณีที่ทำให้ผู้ใช้เดือดร้อน เช่น สแปม หลอกเอาข้อมูล หรือดึงเนื้อหาในห้องออกไปใช้นอกเหนือจากที่แจ้งไว้ ถ้าบอทของคุณเก็บข้อมูลอะไร ให้บอกผู้ใช้ตรง ๆ ตั้งแต่ข้อความแรก
ต้องเก็บ log อะไรไว้บ้าง
เก็บเท่าที่จำเป็นต่อการแก้ปัญหา และอย่าเก็บเนื้อหาข้อความของผู้ใช้นานเกินจำเป็น การเก็บ UID กับ timestamp มักพอสำหรับไล่บั๊กแล้ว