ข้ามไปยังเนื้อหา

ติดตั้งแอปผู้เช่า (LINE LIFF)

deploy apps/tenant และ Edge Functions ของ LINE แล้วตั้ง TENANT_APP_URL ให้หลังบ้าน

แอปผู้เช่า (apps/tenant) เป็นเว็บที่ LINE เปิดผ่าน LIFF หนึ่งแอปใช้ได้ทุกหอ แยกหอด้วย path /t/<slug> · แอปเดียวกันมีหน้าห้องว่าง /r/<slug> ที่ไม่ต้องล็อกอิน (ลิงก์ใน ตั้งค่า → หน้าห้องว่าง ก็ใช้ TENANT_APP_URL เช่นกัน)

  1. Deploy apps/tenant (Vercel: โปรเจกต์แยกจากหลังบ้าน, Root Directory apps/tenant) ใช้ env เดียวกับหลังบ้าน: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY (ไม่ต้องมี key ลับ) ต้องเป็น https
  2. ตั้ง TENANT_APP_URL=https://<โดเมนแอปผู้เช่า> ให้แอปหลังบ้าน (apps/admin) แล้ว redeploy หลังบ้าน (env ใหม่มีผลกับ deployment ใหม่เท่านั้น) — หน้า ตั้งค่า → LINE OA ใช้สร้าง LIFF Endpoint URL (https://<โดเมนแอปผู้เช่า>/t/<slug>) ให้เจ้าของหอคัดลอก
  3. pnpm functions:deploy (มี line-login, line-webhook, line-check, line-send — ตัวสุดท้ายส่งข้อความแจ้งเตือน หลังบ้านเรียกหลังออกใบแจ้งหนี้/เปลี่ยนสถานะงานซ่อม)
  4. Supabase Dashboard → Authentication → Rate Limits: Token verifications ต่อ IP ควรรองรับผู้เช่าหลายคนใน Wi-Fi เดียวกันที่เปิดแอปครั้งแรกพร้อมกัน (เช่น 150 ต่อ 5 นาที) — หลังเข้าครั้งแรก session อยู่ในเครื่องผู้เช่า ไม่ต้องยืนยันซ้ำ

แจ้งเตือนผู้เช่าทาง LINE แบบเตือนก่อน/หลังครบกำหนดและสัญญาใกล้สิ้นสุด ใช้ pg_cron (09:00 น. ทุกวัน) และ pg_net (ส่งคิวทุก 10 นาที) ซึ่ง migration 0040 เปิดให้เอง

  1. pnpm db:push — นอกจาก apply migration แล้วยังเก็บ URL ของ project ลง Vault (project_url) ให้ pg_net เรียก line-send ได้ (รันซ้ำได้ไม่มีผลเสีย)
  2. pnpm functions:deploy line-send
  3. เปิด ตั้งค่า → แจ้งเตือนผู้เช่า ถ้าไม่มีกล่อง “การเตือนตามเวลายังไม่พร้อม” แสดงว่าครบแล้ว ถ้ายังมี: Supabase Dashboard → Database → Extensions ตรวจว่า pg_cron และ pg_net เปิดอยู่ แล้ว pnpm db:push อีกครั้ง

ตรวจงานที่ตั้งไว้: select jobname, schedule from cron.job where jobname like 'am-line-%'; (ควรมี am-line-reminders และ am-line-send) · ผลการเรียก: select status_code, created from net._http_response order by created desc limit 10;

ข้อความแบบส่งทันที (ใบแจ้งหนี้ออก รับเงิน งานซ่อม) ไม่ต้องพึ่ง pg_cron: หลังบ้านเรียก line-send หลังพนักงานทำรายการ

ผู้เช่าเห็น สาเหตุ / วิธีแก้
“บริการผู้เช่า — เปิดหน้านี้จากเมนูใน LINE OA ของหอพัก” LINE เปิดโดเมนเปล่าที่ไม่มี /t/<slug> — แก้ Endpoint URL ในแท็บ LIFF ให้ตรงกับหน้าตั้งค่า และลิงก์ในริชเมนู/แชตต้องเป็น https://liff.line.me/<LIFF ID> ไม่ใช่โดเมนแอปผู้เช่า
หอพักนี้ยังไม่เปิดให้ใช้งานผ่าน LINE ยังไม่ได้ติ๊กเปิดใช้งานในตั้งค่า หรือ slug ใน URL ไม่ตรงกับหอ

ผู้เช่าแต่ละคนเป็นผู้ใช้ใน Supabase Auth (อีเมลแทน <LINE userId>@<org id>.line.invalid ไม่มีการส่งอีเมล) แต่ไม่ได้เป็นสมาชิกขององค์กร จึงอ่านตารางใดๆ ไม่ได้ อ่านได้เฉพาะผ่าน RPC tenant_* — รายละเอียดใน docs/adr/0002-tenant-auth-line.md