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

สูตรการเชื่อมต่อระบบ

สี่รูปแบบนี้ครอบคลุมการเชื่อมต่อเกือบทุกแบบที่เราพบ แต่ละแบบใช้การเรียกไม่กี่ครั้ง และนำมาประกอบกันได้

เปลี่ยนปลายทางของโค้ดที่พิมพ์ไปแล้ว

นี่คือเหตุผลหลักที่ทีมส่วนใหญ่หันมาใช้ API โค้ดบนบรรจุภัณฑ์ สติกเกอร์ หรือโปสเตอร์ยังใช้งานได้ต่อไป ขณะที่แคมเปญเบื้องหลังย้ายที่

curl -X POST https://api.mosaqo.app/v1/public-api/qr/$QR_ID/destination \
  -H "Authorization: Bearer $MOSAQO_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/winter" }'

สำหรับโค้ดที่เผยแพร่แล้ว การเปลี่ยนมีผลทันที ไม่ต้องเผยแพร่ซ้ำ และ response จะบอกว่าโค้ดอยู่ในสถานะ live หรือยังเป็นฉบับร่าง

แนบ QR เข้ากับเรกคอร์ดใน CRM

สร้างโค้ดด้วย URL ของเรกคอร์ดนั้นเอง เผยแพร่ แล้วดึงภาพเข้าฟิลด์ไฟล์ได้โดยตรง endpoint สำหรับภาพจะคืนไบต์มาแบบ inline CRM ส่วนใหญ่จึงรับเป็นไฟล์แนบได้เลยโดยไม่ต้องอัปโหลดผ่านตัวกลาง

const headers = { Authorization: `Bearer ${process.env.MOSAQO_KEY}` };

const created = await fetch('https://api.mosaqo.app/v1/public-api/qr', {
  method: 'POST',
  headers: { ...headers, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    name: `Deal ${deal.id}`,
    mode: 'dynamic',
    contentType: 'url',
    content: { targetUrl: `https://crm.example.com/deals/${deal.id}` },
  }),
}).then((r) => r.json());

const qrId = created.data.id;
await fetch(`https://api.mosaqo.app/v1/public-api/qr/${qrId}/publish`, { method: 'POST', headers });

const png = await fetch(
  `https://api.mosaqo.app/v1/public-api/qr/${qrId}/image?format=png&size=1024`,
  { headers },
).then((r) => r.arrayBuffer());

เก็บ qrId ไว้ในเรกคอร์ดของคุณ นี่คือกุญแจสำหรับทุกอย่างที่ตามมา — การเปลี่ยนปลายทาง การเก็บเข้าคลัง และ analytics

ออกโค้ดทีละจำนวนมาก

หนึ่งโค้ดต่อหนึ่งสินค้า ต่อหนึ่งโต๊ะ ต่อหนึ่งสินทรัพย์ ส่งไฟล์ CSV เข้ามา poll สถานะของงาน แล้วจับคู่ผลลัพธ์กลับเข้ากับแถวข้อมูลของคุณ — แต่ละแถวจะมี qrId ที่สร้างขึ้นกำกับไว้

curl -X POST https://api.mosaqo.app/v1/public-api/bulk \
  -H "Authorization: Bearer $MOSAQO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contentType": "url",
    "mode": "dynamic",
    "csv": "name,destination\nTable 1,https://example.com/menu?t=1\nTable 2,https://example.com/menu?t=2"
  }'

curl "https://api.mosaqo.app/v1/public-api/bulk/$JOB_ID?limit=500" \
  -H "Authorization: Bearer $MOSAQO_KEY"

ส่ง "dryRun": true ก่อน เพื่อตรวจสอบทุกแถวโดยไม่เขียนข้อมูลใด ๆ

ฝังภาพด้วย URL

Airtable, Notion และ Sheets แสดงภาพจากลิงก์ที่ตัวมันเองไปดึงมา จึงไม่เคยส่งเฮดเดอร์ Authorization ของคุณไปด้วย และใช้ endpoint ข้างต้นไม่ได้ ให้ขอลิงก์ที่ลงลายเซ็นแทน:

curl -X POST https://api.mosaqo.app/v1/public-api/qr/$QR_ID/image-url \
  -H "Authorization: Bearer $MOSAQO_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "format": "png", "size": 1024 }'

ใช้ได้เฉพาะโค้ดที่เผยแพร่แล้ว — โค้ดที่เผยแพร่แล้วถูกพิมพ์และออกสู่โลกภายนอกไปแล้ว ส่วนฉบับร่างอาจเป็นแคมเปญที่ยังไม่ประกาศ นำค่า url ที่ได้ไปใส่ในฟิลด์ไฟล์แนบหรือฟิลด์ภาพได้เลย การเก็บเข้าคลังหรือลบโค้ดจะทำให้ลิงก์ใช้ไม่ได้ทันที ซึ่งเป็นวิธีเพิกถอนลิงก์ที่แพร่ออกไปไกลเกินกว่าที่ตั้งใจไว้

ตอบสนองต่อการสแกน

ข้อมูลการสแกนไม่เคยถูกส่งออกไป: ไม่มี webhook รายการสแกนแต่ละครั้ง และเราไม่ส่ง analytics ระดับการสแกนไปยัง endpoint ของบุคคลที่สาม หากข้อมูลแบบรวมเพียงพอ ให้สมัครรับ scan.aggregate_ready หรือดึงรายการสแกนเองตามรอบเวลา:

curl "https://api.mosaqo.app/v1/public-api/scans?since=$LAST_SEEN&limit=500" \
  -H "Authorization: Bearer $MOSAQO_KEY"

เก็บค่า pagination.nextCursor ที่ได้ไว้ แล้วส่งกลับมาในครั้งถัดไป ลำดับข้อมูลคงที่ ตัว poller จึงไม่อ่านซ้ำและไม่ข้ามการสแกนใด ฟิลด์ที่จะปรากฏขึ้นอยู่กับการตั้งค่าความเป็นส่วนตัวของ analytics ใน workspace คุณ — response จะแสดงรายการ allowedDimensions ไว้ให้ทราบว่าควรคาดหวังอะไร

หากการ poll ใช้ไม่ได้จริง ๆ สำหรับคุณ และคุณจำเป็นต้องได้รับข้อมูลการสแกนทันทีที่เกิดขึ้น เรามีให้ตามคำขอ ไม่ใช่โดยค่าเริ่มต้น

แพลตฟอร์มโนโค้ด

Make, Zapier, n8n และ Pipedream คุยกับ Mosaqo ได้แล้ววันนี้ด้วยโมดูล HTTP ทั่วไป และชิ้นส่วนที่แพลตฟอร์มเหล่านี้ต้องการก็พร้อมอยู่แล้ว: GET /me สำหรับทดสอบการเชื่อมต่อ การแบ่งหน้าด้วย cursor สำหรับตัววนซ้ำ และการสมัครรับ webhook ที่ทริกเกอร์สร้างและลบได้ด้วยตัวเอง

สิ่งที่แพลตฟอร์มถามค่าที่ใช้
Base URLhttps://api.mosaqo.app/v1/public-api
เฮดเดอร์ยืนยันตัวตนAuthorization: Bearer <your key>
ทดสอบการเชื่อมต่อGET /me
นำเข้า OpenAPIhttps://api.mosaqo.app/v1/public-api/openapi.json
ทริกเกอร์แบบทันทีPOST /webhooks เมื่อเปิดใช้งาน และ DELETE /webhooks/{id} เมื่อปิดใช้งาน
ทริกเกอร์แบบ pollingGET /qr?updatedSince=…&cursor=…

เอกสาร OpenAPI ชุดเดียวกันนี้นำเข้า Postman และ Insomnia ได้ และสร้าง client แบบมีชนิดข้อมูลได้ด้วย openapi-typescript หรือตัวสร้างโค้ด OpenAPI ตัวใดก็ได้

สองกฎที่ควรทำตาม

  • เก็บ `qrId` ไม่ใช่ URL สาธารณะ URL นั้นคงที่ก็จริง แต่ทุกการเรียกหลังจากนั้นต้องใช้ id
  • เก็บเข้าคลังแทนการลบ การลบเป็นการถาวรและทำให้สำเนาที่พิมพ์ไปแล้วทุกชิ้นใช้ไม่ได้ ส่วนการเก็บเข้าคลังเพียงนำโค้ดออกจากระบบและย้อนกลับได้

รายละเอียดของทุก endpoint อยู่ใน API reference