คู่มือการเชื่อมต่อ Shopify
Tajo เชื่อมต่อ Shopify เข้ากับ Brevo ในสองส่วน แอป Tajo Shopify แปลง Webhook ของ Shopify เป็นการเขียนข้อมูลลง Brevo ทันทีที่เข้ามา ส่วนกฎการซิงค์ที่เอเจนต์สร้างและคนอนุมัติ จะย้ายเรคคอร์ดเข้า Brevo ตามกำหนดเวลา หน้านี้อธิบายทั้งสองส่วน แล้วต่อด้วยเครื่องมือ Shopify ที่ Tajo ให้บริการผ่าน MCP
ข้อกำหนดเบื้องต้น
ก่อนเริ่มการเชื่อมต่อ ตรวจสอบให้แน่ใจว่าคุณมี:
- ร้าน Shopify ในแพ็กเกจใดก็ได้ (Basic, Shopify, Advanced หรือ Plus)
- บัญชี Tajo (Tajo อยู่ในช่วง early access)
- บัญชี Brevo ซึ่งเป็นปลายทางของการซิงค์
- สิทธิ์ผู้ดูแลระบบ ในร้าน Shopify ของคุณ
ขั้นตอนที่ 1: เชื่อมต่อร้าน Shopify ของคุณ
Tajo อยู่ในช่วง early access แอป Shopify ไม่ได้ขึ้นรายการใน Shopify App Store และไม่มีลิงก์ติดตั้งแบบทำเอง ติดต่อทีม เพื่อให้ช่วยตั้งค่า เมื่อพื้นที่ทำงาน Tajo ของคุณพร้อมแล้ว:
- ใน Tajo เปิด Connections
- กรอกโดเมน myshopify.com ของร้านคุณ แล้วเลือก Connect Shopify Shopify จะแสดงขอบเขตสิทธิ์ที่ Tajo ขอ และพาคุณกลับมายัง Tajo เมื่อคุณอนุมัติ
- ตรวจสอบว่าแต่ละขอบเขตสิทธิ์ใช้ทำอะไร และ Tajo เขียนอะไรกลับไปยัง Shopify ได้ที่ คำอธิบายสิทธิ์ Shopify
ขั้นตอนที่ 2: สิ่งที่แอป Tajo Shopify ส่งไปยัง Brevo
แอปจะตรวจสอบ Webhook ของ Shopify แต่ละรายการ จัดเก็บ นำเข้าคิว และประมวลผลทันที topic ลูกค้าและสินค้าจะรอประมาณสี่วินาทีก่อน ไม่มีช่วงเวลารวมเป็นชุด งานที่ล้มเหลวจะถูกลองใหม่โดยเว้นระยะห่างเพิ่มขึ้น (backoff)
topic ของ Webhook
แอป Tajo Shopify สมัครรับ topic ของ Webhook ใน Shopify เหล่านี้:
| topic ของ Webhook | วัตถุประสงค์ |
|---|---|
customers/create, customers/update, customers/delete | ทำให้ผู้ติดต่อใน Brevo เป็นปัจจุบัน |
orders/create, orders/updated, orders/fulfilled, orders/cancelled | เหตุการณ์คำสั่งซื้อและตัวชี้วัดคำสั่งซื้อสำหรับ Brevo |
orders/paid, refunds/create | ให้และหักคะแนนสะสม |
checkouts/create, checkouts/update | กู้คืนการชำระเงินที่ถูกทิ้งใน Brevo |
products/create, products/update, products/delete | ทำให้แคตตาล็อกสินค้าใน Brevo เป็นปัจจุบัน |
inventory_levels/update | ทำให้สต็อกสินค้าใน Brevo เป็นปัจจุบัน |
collections/create, collections/update, collections/delete | ทำให้คอลเลกชันเป็นปัจจุบัน |
companies/*, company_contacts/*, company_locations/* (create, update, delete) | ซิงค์บริษัท B2B |
app/uninstalled, app/scopes_update, app_subscriptions/update | วงจรชีวิตของแอป |
Webhook ความเป็นส่วนตัวที่ Shopify บังคับ (คำขอข้อมูลลูกค้า การลบข้อมูลลูกค้า การลบข้อมูลร้านค้า) ก็ได้รับการจัดการเช่นกัน แอปไม่ได้สมัครรับ carts/* ตะกร้าที่ถูกทิ้งมาจาก topic checkouts/*
สิ่งที่ไปถึง Brevo:
| เหตุการณ์ใน Shopify | ใน Brevo |
|---|---|
| สร้างหรืออัปเดตลูกค้า | สร้างหรืออัปเดตผู้ติดต่อพร้อมชื่อ อีเมล และความยินยอมทางการตลาด ในแพ็กเกจแบบชำระเงิน แอปจะเพิ่มแท็ก จำนวนคำสั่งซื้อ ยอดใช้จ่าย และคำสั่งซื้อล่าสุด |
| ลบลูกค้า | ผู้ติดต่อจะถูกยกเลิกการสมัครรับ ไม่ได้ถูกลบ |
| สร้าง อัปเดต ชำระเงิน จัดส่ง หรือยกเลิกคำสั่งซื้อ | คำสั่งซื้อผ่าน API คำสั่งซื้อของ Brevo และเหตุการณ์ order_paid, order_completed และ order_cancelled |
| สร้างการคืนเงิน | เหตุการณ์ order_refunded หากคุณใช้โปรแกรมสะสมคะแนนของ Brevo ผ่าน Tajo คะแนนจะถูกหักตามสัดส่วน |
| ชำระเงินคำสั่งซื้อ โดยมีโปรแกรมสะสมคะแนนของ Brevo | ให้คะแนนตามอัตราคะแนนต่อดอลลาร์ที่คุณกำหนด |
| สร้างหรืออัปเดตการชำระเงิน โดยมีอีเมลและรายการสินค้า | เหตุการณ์ cart_updated และ cart_abandoned ระบบอัตโนมัติใน Brevo ของคุณเป็นตัวตัดสินว่าจะส่งเมื่อใด |
| สร้าง อัปเดต หรือลบสินค้าหรือคอลเลกชัน | แคตตาล็อกสินค้าและหมวดหมู่ของ Brevo |
| อัปเดตระดับสต็อก | สต็อกของสินค้าในแคตตาล็อกของ Brevo เมื่อตัวเลือกสินค้าเปลี่ยนจาก 0 เป็นมากกว่า 0 ผู้ซื้อแต่ละคนที่ขอรับการแจ้งเตือนจะได้รับเหตุการณ์ back_in_stock หนึ่งครั้งต่อการเติมสต็อกแต่ละรอบ |
แอปไม่ได้เพิ่มปุ่ม “แจ้งเตือนฉัน” ลงในธีมของคุณ คำขอแจ้งเตือนเมื่อสินค้ากลับมามีสต็อกต้องมาจากหน้าร้านของคุณ เช่น จากปุ่มที่คุณเพิ่มเอง
ข้อมูลที่มีอยู่แล้ว
เมื่อติดตั้ง แอปจะนำเข้าลูกค้าที่มีอยู่ของคุณเป็นผู้ติดต่อใน Brevo การซิงค์ข้อมูลย้อนหลังทั้งหมดเริ่มได้จากหน้าซิงค์ของแอป ในแพ็กเกจแบบชำระเงินจะนำเข้าสินค้า คอลเลกชัน บริษัท และคำสั่งซื้อด้วย
ขั้นตอนที่ 3: สร้างกฎการซิงค์ด้วยเอเจนต์
กฎการซิงค์คือคำจำกัดความแบบ declarative ของการซิงค์หนึ่งรายการ: ทรัพยากรต้นทาง การดำเนินการใน Brevo การแมปฟิลด์ และตัวกรอง คุณไม่ต้องเขียนเอง คุณอธิบาย เอเจนต์สร้าง และคนอนุมัติ
- ใน Tajo เปิด Agents แล้วขอการซิงค์จาก Brevo Integration Architect ด้วยภาษาทั่วไป ตัวอย่างเช่น: “ส่งลูกค้า Shopify ที่ยอมรับการตลาดทางอีเมลไปยัง Brevo เป็นผู้ติดต่อ”
- เอเจนต์ตรวจสอบคอนเนกเตอร์ Shopify ตัวอย่างที่ได้จะคืนชื่อและประเภทของฟิลด์เท่านั้น ไม่เคยคืนค่าข้อมูลลูกค้า
- เอเจนต์เสนอกฎพร้อมการแมปฟิลด์และตัวกรอง จากนั้นตรวจสอบการแมปฟิลด์กับการดำเนินการของ Brevo และทดลองรันแบบ dry run กับฉบับร่าง ทั้งสองขั้นตอนไม่อ่านเรคคอร์ดลูกค้า
- เอเจนต์บันทึกกฎเป็นฉบับร่าง คุณยังเริ่มจากเทมเพลตได้ที่ Connections > Syncs and mappings > New sync from template
- Request publish approval จะรันการพรีวิวกับร้านของคุณ โดยอ่านเรคคอร์ดไม่เกิน 10 รายการ ไม่เขียนอะไรลง Brevo และไม่เลื่อนเคอร์เซอร์ บันทึกเฉพาะจำนวน: เรคคอร์ดที่ดึงมา ที่มีสิทธิ์ ที่แมปแล้ว และที่ถูกตัวกรองปฏิเสธ รวมถึงข้อผิดพลาดในการแมป หากการพรีวิวล้มเหลว จะไม่มีการสร้างคำขออนุมัติ
- คนอนุมัติคำขอในหน้า Approvals พร้อมเหตุผลเป็นลายลักษณ์อักษร การอนุมัติผูกกับค่าแฮช SHA-256 ของกฎและหมดอายุหลัง 30 นาที จากนั้นหน้าของกฎจะแสดง Publish approved version
การแก้ไขกฎที่เผยแพร่แล้วจะทำให้กฎกลับเป็นฉบับร่าง และต้องผ่านการพรีวิวและการอนุมัติอีกครั้งก่อนจะทำงานได้
ตัวอย่างกฎจริง
นี่คือเทมเพลต Shopify customers -> Brevo contacts ตามที่ Tajo กำหนดไว้:
sourceSlug: "shopify",sourceResource: "customers",destinationSlug: "brevo",destinationAction: "upsert_contact",fieldMap: [ { source: "email", destination: "email", transform: "toLowerCase" }, { source: "first_name", destination: "attributes.FIRSTNAME" }, { source: "last_name", destination: "attributes.LASTNAME" }, { source: "phone", destination: "attributes.PHONE" }, { source: "total_spent", destination: "attributes.TOTAL_SPENT", transform: "toNumber" }, { source: "orders_count", destination: "attributes.ORDERS_COUNT", transform: "toNumber" }, { source: "tajo_email_marketing_consent", destination: "attributes.OPT_IN", transform: "toBoolean" }, { source: "tags", destination: "attributes.SHOPIFY_TAGS" }, { source: "id", destination: "attributes.SHOPIFY_ID", transform: "toString" }, { source: "created_at", destination: "attributes.SHOPIFY_CREATED_AT" }, { source: "updated_at", destination: "attributes.SHOPIFY_UPDATED_AT" },],filterExpression: "($json.tajo_email_marketing_consent === true) && ($json.tajo_email_suppressed === false)",ตัวกรองนี้คือการตรวจสอบความยินยอม Tajo ได้ค่าทั้งสองจาก email_marketing_consent.state ของ Shopify หรือจากแฟล็กรุ่นเก่า accepts_marketing กฎที่เขียนผู้ติดต่อลง Brevo จะเผยแพร่ไม่ได้หากไม่มีตัวกรองนี้ ส่วนเทมเพลต Shopify อีกตัวคือ Shopify orders → Brevo orders จะบันทึกคำสั่งซื้อใน Brevo สำหรับผู้ซื้อที่ยอมรับการตลาดตอนชำระเงิน
กฎทำงานเมื่อใด
- กฎการซิงค์ผู้ติดต่อทำงานทุก 15 นาทีโดยค่าเริ่มต้น การรันแต่ละครั้งเริ่มจากเคอร์เซอร์ของกฎ
- หน้าของกฎที่ใช้งานอยู่มีปุ่ม Test run (1 batch)
- กฎ Shopify orders → Brevo orders ที่ใช้งานอยู่และเผยแพร่แล้วก็ทำงานทุก 15 นาทีเช่นกัน การรันตามกำหนดเวลาครั้งแรกเริ่มก่อนขณะนั้นไม่กี่นาที และไม่ส่งคำสั่งซื้อที่เก่ากว่านั้น การรันแต่ละครั้งหลังจากนั้นจะส่งคำสั่งซื้อที่อัปเดตตั้งแต่การรันครั้งก่อน
- คำสั่งซื้อในอดีตจะไปถึง Brevo ก็ต่อเมื่อคุณรันกฎเองเท่านั้น: ด้วยปุ่ม Test run (1 batch) หรือขอให้เอเจนต์ Sync Operator รันกฎให้
- กฎคำสั่งซื้อจะทำงานตามกำหนดเวลาก็ต่อเมื่อใช้ตัวกรองความยินยอมทางการตลาดของผู้ซื้อตามเทมเพลตเท่านั้น กฎที่มีการแก้ไขตัวกรองจะทำงานเฉพาะเมื่อคุณสั่งรันเอง
- หลังจากรันล้มเหลวติดต่อกันห้าครั้ง กฎจะหยุดตัวเองชั่วคราว และหน้าของกฎจะแสดงข้อผิดพลาดล่าสุด แก้ไขสาเหตุ แล้วเผยแพร่อีกครั้ง
การรันแต่ละครั้งจะแสดงในประวัติการรันของกฎ พร้อมจำนวนเรคคอร์ดที่อ่าน เขียน และล้มเหลว และระยะเวลาที่ใช้
สิ่งที่คอนเนกเตอร์ Shopify อ่านและเขียน
กฎการซิงค์เขียนลงปลายทางเท่านั้น ซึ่งในที่นี้คือ Brevo และไม่เคยเขียนลง Shopify
แอป Tajo Shopify ขอขอบเขตสิทธิ์ 12 รายการ และเขียนข้อมูลลง Shopify เพียงไม่กี่อย่าง เช่น การยกเลิกความยินยอมและแท็กสะสมคะแนน คำอธิบายสิทธิ์ Shopify แสดงขอบเขตสิทธิ์และการเขียนทุกรายการ พร้อมสิ่งที่กระตุ้นให้เกิดการเขียนนั้น
เอเจนต์และโฮสต์ MCP เข้าถึงร้านผ่านคอนเนกเตอร์ Shopify:
| อ่าน | เขียน |
|---|---|
| รายละเอียดร้าน ลูกค้า (รายการและการค้นหา) คำสั่งซื้อ สินค้า metafield ของลูกค้า ระดับสต็อก สถานะการส่งออกแบบกลุ่ม | metafield ของลูกค้าและแท็กลูกค้า รวมถึงการเริ่มส่งออกแบบกลุ่ม การเขียนแต่ละครั้งจะถูกเตรียมเป็นข้อเสนอและทำงานหลังได้รับการอนุมัติเท่านั้น |
คอนเนกเตอร์ยังประกาศการปรับสต็อกไว้ด้วย ซึ่งต้องใช้ขอบเขตสิทธิ์ write_inventory ที่แอป Tajo Shopify ไม่ได้ขอ
ขั้นตอนที่ 4: ใช้เครื่องมือ Shopify ผ่าน MCP
Tajo ให้บริการคอนเนกเตอร์ Shopify เป็นเซิร์ฟเวอร์ MCP ที่ https://alto.tajo.io/mcp/connectors/shopify เพิ่มลงใน Claude Code:
claude mcp add --transport http tajo-shopify https://alto.tajo.io/mcp/connectors/shopifyโฮสต์จะค้นพบเซิร์ฟเวอร์ OAuth ของ Tajo และเปิดหน้าเข้าสู่ระบบ Tajo การเข้าถึงจำกัดเฉพาะบัญชี early access เซิร์ฟเวอร์มีเครื่องมือ 12 รายการ:
| เครื่องมือ | หน้าที่ |
|---|---|
preview_tajo_shopify_app | พรีวิวแบบโต้ตอบของแอป Tajo Shopify แสดงผลเป็น MCP UI |
get_shop | รายละเอียดของร้าน |
search_customers | ค้นหาลูกค้าด้วยไวยากรณ์คำค้นของ Shopify เช่น tag:tajo-vip หรือ total_spent:>100 |
list_customers | แสดงรายการลูกค้าแบบแบ่งหน้า |
list_orders | แสดงรายการคำสั่งซื้อแบบแบ่งหน้า |
list_products | แสดงรายการสินค้าพร้อมตัวเลือกสินค้า รูปภาพ และสต็อก |
get_customer_metafields | อ่าน metafield ของลูกค้า |
get_inventory_levels | อ่านสต็อกของตัวเลือกสินค้าในทุกสถานที่ |
poll_bulk_export | ตรวจสอบการส่งออกแบบกลุ่มและรับลิงก์ดาวน์โหลดเมื่อเสร็จ |
calculate_rewards_profile | คำนวณระดับ คะแนน และยอดรางวัลของลูกค้าจากข้อมูลการค้าที่ซิงค์แล้ว |
shopify_propose | เตรียมการเขียนลง Shopify หนึ่งรายการเป็นข้อเสนอ โดยยังไม่มีการส่งใด ๆ |
shopify_apply | รันข้อเสนอที่ได้รับอนุมัติแล้ว |
การแก้ไขปัญหา
- ผู้ติดต่อไม่ปรากฏใน Brevo: ดู ผู้ติดต่อหายไปใน Brevo
- กฎที่ไม่ทำงาน หรือหยุดตัวเองชั่วคราว: ดู ข้อมูลไม่ซิงค์
ขั้นตอนถัดไป
- ทำความเข้าใจการซิงค์ข้อมูล วิธีการทำงานของกฎการซิงค์
- คำอธิบายสิทธิ์ Shopify ขอบเขตสิทธิ์และการเขียนทุกรายการ
- Shopify + Brevo คู่มือการเชื่อมต่อ
- ติดต่อทีม เพื่อให้ช่วยตั้งค่า