การทำงานอัตโนมัติ: ข้อมูลของคุณ ส่งตามกำหนดเวลา
Marrow POST ไฟล์ข้อมูลสุขภาพของคุณไปยัง URL ใดก็ได้ที่คุณเลือก ตามความถี่ที่คุณเลือก โดยส่งจากโทรศัพท์โดยตรง หน้านี้คือเอกสารอ้างอิง ได้แก่ วิธีตั้งค่า payload แต่ละแบบหน้าตาเป็นอย่างไร และวิธีเขียนตัวรับ
การตั้งค่าสำเร็จรูปสำหรับ n8n, Zapier, Make, Home Assistant, Google Sheets และ InfluxDB อยู่ในการเชื่อมต่อ.
คู่มือ Marrow ทั้งหมด: MCP · มิเรอร์ที่โฮสต์เอง · การทำงานอัตโนมัติ · ไฟล์ · ความช่วยเหลือ
การทำงานอัตโนมัติคืออะไร
งานที่บันทึกไว้ใน ส่งออก, อัตโนมัติ: ข้อมูลหนึ่งชนิด หนึ่งรูปแบบ หนึ่งช่วงวันที่ หนึ่ง URL หนึ่งความถี่ Marrow สร้างไฟล์จากที่เก็บข้อมูลที่ตรวจสอบแล้ว และ POST ไปที่ URL แม้ปิดแอปอยู่ หลังการซิงค์ทุกครั้งและในแต่ละรอบรีเฟรชเบื้องหลัง เมื่อครบความถี่ที่ตั้งไว้ ไม่มีอะไรผ่านเซิร์ฟเวอร์ของเรา โทรศัพท์คุยกับ endpoint ของคุณโดยตรง
วิธีตั้งค่า
- แท็บส่งออก, อัตโนมัติ: เปิดใช้ แล้วเลือก การทำงานอัตโนมัติใหม่ ถ้าสร้างจากหน้าของเครื่องมือ (n8n, Zapier, Home Assistant และอื่นๆ ในการเชื่อมต่อ) การทำงานอัตโนมัติจะใช้ชื่อของเครื่องมือนั้น และบอกข้างแต่ละช่องว่าเครื่องมือต้องการอะไรในช่องนั้น
- ที่อยู่: URL แบบ https ที่ต้องการ POST ไป หัวข้อ (header): ที่ตัวรับของคุณต้องใช้ (bearer token แบบ
Authorization,X-Gitlab-Tokenหรืออะไรก็ได้) ถ้าเครื่องมือไม่ต้องใช้เลย เพิ่มหัวข้อ อยู่ใต้ตัวเลือกเพิ่มเติม - ข้อมูล: ตัวชี้วัดสุขภาพ การออกกำลังกาย บันทึกเวทเทรนนิ่ง ไดอารี่โภชนาการ หรืออาการและอารมณ์ เป็น JSON หรือ CSV หนึ่งการทำงานอัตโนมัติส่งได้หนึ่งชนิด จึงสร้างหนึ่งรายการต่อหนึ่งชนิดที่ต้องการ แต่ละรายการที่เปิดอยู่นับเป็นหนึ่งการเชื่อมต่อ แพลนฟรีเปิดได้ 1 การเชื่อมต่อในแต่ละครั้ง Marrow Pro ได้สูงสุด 10 รวม AI และเซิร์ฟเวอร์
- ความถี่: ทุกกี่นาที ชั่วโมง หรือวัน ช่วงวันที่ การรวมข้อมูล และเวลาหมดอยู่ใต้ ตัวเลือกเพิ่มเติม.
- สั่งทำงานตอนนี้ ส่ง payload แรกไปให้ คุณจะได้ตรวจตัวรับก่อนรอถึงเวลาตามกำหนด
ช่วงวันที่
- ตั้งแต่ครั้งล่าสุด (ค่าเริ่มต้น): ทุกอย่างตั้งแต่การทำงานที่สำเร็จครั้งล่าสุด ลบด้วยช่วงซ้อนทับสองวัน HealthKit ยังเติมข้อมูลของวันหนึ่งต่อไปหลังวันนั้นจบแล้ว ช่วงซ้อนทับจึงส่งวันที่เพิ่งจบไปซ้ำ ให้เก็บค่าล่าสุดต่อตัวชี้วัดและวันไว้ที่ฝั่งคุณ แล้วข้อมูลที่ซ้ำก็ไม่เป็นปัญหา ตัวรับที่ล่มไปพักหนึ่งจะได้รับทุกวันที่พลาดไปในรอบแรกที่ส่งสำเร็จ
- วันนี้, 7 / 30 / 90 วันที่ผ่านมา, ปีที่ผ่านมา: ช่วงเวลาแบบเลื่อนที่ตายตัว ส่งใหม่ทั้งหมดทุกรอบ เลือกแบบนี้เมื่อคุณอยากได้ภาพรวมที่แก้ตัวเองได้มากกว่าข้อมูลเฉพาะส่วนที่เปลี่ยน
รูปแบบของ payload
ตัวชี้วัดสุขภาพ (ยอดรวมรายวัน, JSON)
โครงสร้างเดียวกับตัวชี้วัดของ Health Auto Export (รายการ metrics ที่มี name, units และ data ซึ่งมี qty) ตัวรับที่เขียนไว้สำหรับแอปนั้นจึงแก้เพียงเล็กน้อย วันที่ในที่นี้เป็นวันธรรมดา ไม่ใช่ timestamp และ payload ของการออกกำลังกายและเวทเทรนนิ่งด้านล่างเป็นของ Marrow เอง ค่าต่างๆ อยู่ในหน่วยที่เก็บไว้ตามที่ระบุใน units (kg, m, mL, degC, kcal, count) อัตราการเต้นของหัวใจส่งเป็น Avg, Min และ Max ของแต่ละวัน หน่วย bpm และการนอนหลับส่งเป็นแต่ละคืนพร้อมระยะการนอน หน่วยเป็นชั่วโมง หากต้องการหน่วยแบบอิมพีเรียล ให้แปลงที่ฝั่งคุณ
{"data": {"metrics": [
{"name": "body_mass", "units": "kg",
"data": [{"date": "2026-09-11", "qty": 81.3}]},
{"name": "step_count", "units": "count",
"data": [{"date": "2026-09-11", "qty": 8746}]},
{"name": "heart_rate", "units": "bpm",
"data": [{"date": "2026-09-11", "Avg": 71, "Min": 52, "Max": 148}]},
{"name": "sleep_analysis", "units": "h",
"data": [{"date": "2026-09-11", "totalSleep": 7.2, "asleep": 7.2, "deep": 1.1, "rem": 1.6, "core": 4.3, "awake": 0.2,
"sleepStart": "2026-09-10 23:36:00 -0400", "sleepEnd": "2026-09-11 07:02:00 -0400"}]}
]}}
ตัวอย่างดิบ (การจัดกลุ่ม ตัวอย่างดิบ) ส่งทุกตัวอย่างพร้อมเวลาเริ่มและสิ้นสุดแทนยอดรวมรายวัน ตัวชี้วัดแบบ CSV มาเป็นตารางกว้างที่อธิบายไว้ในหน้าไฟล์.
การออกกำลังกาย
{"data": {"workouts": [
{"activity": "Running", "start": "2026-09-11T18:43:41Z", "end": "2026-09-11T19:13:53Z",
"duration_min": 30.2, "kcal": 512, "distance_mi": 3.06, "avg_hr": 174, "source": "Apple Watch"}
]}}
บันทึกเวทเทรนนิ่ง
ทุกเซ็ตหลัก (ไม่รวมเซ็ตวอร์มอัป) พร้อมความก้าวหน้าต่อท่าและปริมาณต่อกลุ่มกล้ามเนื้อ น้ำหนักอยู่ในหน่วยที่คุณเลือกใน การตั้งค่า, หน่วย ฟิลด์ unit บอกว่าเป็นหน่วยไหน set_type ของแต่ละเซ็ตเป็น work, failure หรือ drop และเซ็ตจะมี rir ด้วยเมื่อคุณบันทึกจำนวนครั้งที่เหลือ set_credits นับเซ็ตที่ให้เครดิตกับกลุ่มกล้ามเนื้อ เป็นเศษส่วนเมื่อท่าหนึ่งใช้หลายกลุ่ม
{"data": {"unit": "lb",
"sets": [{"time": "2026-09-11T17:02:00Z", "session": "Push day", "exercise": "Bench Press",
"set": 1, "weight": 185, "reps": 8, "est_1rm": 229.6, "set_type": "work"}],
"exercises": [{"exercise": "Bench Press", "best_est_1rm": 229.6,
"sessions": [{"date": "2026-09-11T17:02:00Z", "sets": 3, "top_weight": 185, "top_reps": 8, "est_1rm": 229.6, "volume": 3885}]}],
"muscle_groups": [{"group": "Chest", "volume": 3108.0, "set_credits": 2.4}]
}}
ไดอารี่โภชนาการ
{"data": {"days": [
{"day": "2026-09-11", "entries": [
{"meal": "breakfast", "name": "Oatmeal", "grams": 250, "kcal": 300,
"protein_g": 10, "carbs_g": 54, "fat_g": 5, "logged_at": "2026-09-11T12:10:00Z",
"nutrients": {"dietary_fiber": 8.0, "dietary_sugar": 1.2}}
]}
]}}
การเขียนตัวรับ
อะไรก็ได้ที่รับ HTTPS POST และตอบกลับ 2xx ใช้ได้ทั้งนั้น ไม่ว่าจะเป็นบริการ webhook ฟังก์ชันแบบ serverless หรือสคริปต์บนเซิร์ฟเวอร์ที่บ้าน สามกฎนี้ช่วยให้ระบบแข็งแรง:
- ค่าล่าสุดชนะ เก็บค่าโดยใช้ (ตัวชี้วัด, วัน) หรือตัวตนของรายการเองเป็นคีย์ และเขียนทับเมื่อมาซ้ำ ช่วงเวลาซ้อนทับกันโดยออกแบบไว้
- เก็บเนื้อหาดิบไว้ก่อน แล้วค่อยแยกวิเคราะห์ ข้อผิดพลาดของตัวแยกวิเคราะห์ไม่ควรทำให้คุณเสียข้อมูล
- ตอบกลับให้เร็ว Marrow รอได้นานสุดตามเวลาหมดที่คุณตั้ง (ค่าเริ่มต้น 60 วินาที) ถ้าเกินจะถือว่าการทำงานล้มเหลว การทำงานที่ล้มเหลวจะลองใหม่ในรอบถัดไป โดยเริ่มจากช่วงที่สำเร็จครั้งล่าสุด
ตัวรับ Python สิบสองบรรทัดที่เก็บทุกโพสต์:
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
class H(BaseHTTPRequestHandler):
def do_POST(self):
body = self.rfile.read(int(self.headers.get("Content-Length", 0)))
with open(f"marrow-{int(time.time())}.json", "wb") as f:
f.write(body)
self.send_response(200)
self.end_headers()
HTTPServer(("0.0.0.0", 8798), H).serve_forever()
วางไว้หลัง HTTPS (Cloudflare Tunnel, Tailscale Funnel หรือ reverse proxy ใดก็ได้) แล้วชี้การทำงานอัตโนมัติไปที่มัน ถ้าสิ่งที่คุณต้องการคือสำเนาที่ค้นหาได้มากกว่าโฟลเดอร์ของไฟล์ มิเรอร์ที่โฮสต์เองก็คือตัวรับที่เขียนไว้เรียบร้อยแล้ว
ควรรู้
- การทำงานอัตโนมัติจะทำงานเฉพาะเมื่อ iOS ให้แอปทำงานได้ คือหลังการซิงค์ ตอนรีเฟรชในหน้าจอหลัก และระหว่างรีเฟรชเบื้องหลัง โทรศัพท์ที่ล็อกทิ้งไว้ทั้งวันจะส่งตอนปลดล็อกครั้งถัดไป ช่วงตั้งแต่ครั้งล่าสุดจะครอบคลุมช่วงที่หายไป
- ทุกครั้งที่ทำงานจะบันทึกไว้ในบันทึกกิจกรรมของการทำงานอัตโนมัตินั้น (ตัวเลือกเพิ่มเติม) พร้อมผลลัพธ์ URL ที่ตั้งผิดจึงเห็นได้ในแอป ไม่ใช่เห็นเฉพาะที่เซิร์ฟเวอร์ของคุณ
- ทำสำเนาการทำงานอัตโนมัติ เพื่อนำเฮดเดอร์ไปใช้ซ้ำกับข้อมูลอีกชนิด
การแก้ปัญหา
ทดสอบด้วย สั่งทำงานตอนนี้ บรรทัดใต้ปุ่มบอกว่าเกิดอะไรขึ้น และ ตัวเลือกเพิ่มเติม, บันทึกกิจกรรม เก็บ 30 ครั้งล่าสุดพร้อมบรรทัดเดียวกัน เปิด แจ้งเตือนเมื่อทำงาน (ตัวเลือกเพิ่มเติม) เพื่อรับการแจ้งเตือนทุกครั้งที่ทำงานระหว่างที่คุณตรวจสอบ
| สิ่งที่ Marrow แสดง | สิ่งที่ควรทำ |
|---|---|
สรุปสิ่งที่ส่งไป เช่น 12 diary entries | ส่งถึงแล้ว: ตัวรับตอบกลับ 2xx ถ้าฝั่งตัวรับไม่เห็นอะไร ดูแถวสุดท้ายด้านล่าง |
Server answered 401 หรือ 403 | ตัวรับต้องการเฮดเดอร์ หรือเฮดเดอร์ที่คุณเพิ่มไม่ถูกต้อง ตรวจสอบชื่อและค่า รวมถึง Bearer และช่องว่างที่ตามหลัง |
Server answered 404 | ที่อยู่ผิด หรือตัวรับไม่ได้รับฟังอยู่ ใน n8n ให้ใช้ Production URL และเปิดใช้งานเวิร์กโฟลว์ ตรวจดูว่า path ท้ายที่อยู่ขาดไปหรือไม่ |
Server answered 405 | ที่อยู่นี้ไม่รับ POST ชี้ไปที่ endpoint ที่ออกแบบมาเพื่อรับข้อมูลเข้า |
Server answered 413 | payload ใหญ่เกินไปสำหรับตัวรับ เลือกช่วงวันที่ให้สั้นลง ตัวชี้วัดให้น้อยลง หรือใช้ยอดรวมรายวันแทนตัวอย่างดิบ |
Server answered 500 หรือ 5xx อื่นๆ | ตัวรับทำงานล้มเหลวขณะจัดการข้อมูล ดูบันทึกของตัวรับเอง เก็บเนื้อหาดิบไว้ก่อน แล้วค่อยแยกวิเคราะห์ |
| คำขอหมดเวลา | ตัวรับใช้เวลานานกว่าเวลาหมดที่ตั้งไว้ ให้ตอบกลับก่อนแล้วค่อยทำงานต่อ หรือเพิ่ม เวลาหมด ใต้ตัวเลือกเพิ่มเติม (สูงสุด 300 วินาที) |
| นโยบาย App Transport Security กำหนดให้ใช้การเชื่อมต่อที่ปลอดภัย | ที่อยู่เป็น http ธรรมดาบนอินเทอร์เน็ต ให้ใช้ https iOS อนุญาตให้ Marrow ใช้ http ธรรมดาเฉพาะในเครือข่ายของคุณเอง |
| ไม่พบเซิร์ฟเวอร์ที่มีชื่อโฮสต์ที่ระบุ | พิมพ์ที่อยู่ผิด หรือเป็นชื่อที่รู้กันเฉพาะในเครือข่ายบ้านของคุณ ลองเปิดใน Safari บนโทรศัพท์เพื่อตรวจสอบ |
No valid URL - set an https endpoint first | ที่อยู่ว่างเปล่า หรือไม่ได้ขึ้นต้นด้วย https:// (หรือ http:// ในเครือข่ายของคุณเอง) |
Nothing to export in this range | ไม่มีข้อมูลชนิดนั้นในช่วงวันที่ที่เลือก เลือกช่วงที่ยาวขึ้นใต้ตัวเลือกเพิ่มเติม หรือบันทึกอะไรสักอย่างก่อน |
- ส่งถึงแล้ว แต่ไม่มีอะไรมา ตัวรับบางตัวตอบกลับ 200 แม้จะทิ้งข้อมูลไป Home Assistant ทำแบบนี้เมื่อ webhook id ผิด และสูตร Apps Script ก็ทำแบบนี้เมื่อ
?key=ผิด Zapier และ Make จะไม่แสดงอะไรจนกว่าคุณจะโหลดตัวอย่างในตัวแก้ไขของเขา ตรวจดูประวัติหรือบันทึกของตัวรับเอง - ทำงานช้าหรือไม่ทำงานเลย iOS เลือกจังหวะของการทำงานเบื้องหลัง คือหลังการซิงค์ ตอนที่คุณเปิด Marrow และระหว่างรีเฟรชเบื้องหลัง เปิดการรีเฟรชแอปในพื้นหลังไว้สำหรับ Marrow (การตั้งค่า, ทั่วไป, การรีเฟรชแอปในพื้นหลัง) โหมดประหยัดพลังงานจะหน่วงการทำงานเบื้องหลัง และโทรศัพท์ที่ล็อกทิ้งไว้จะส่งตอนปลดล็อกครั้งถัดไป ตั้งแต่ครั้งล่าสุดจะตามให้ทันในรอบถัดไปที่สำเร็จ
- ตัวรับในเครือข่ายบ้านของคุณ Marrow ต้องได้รับสิทธิ์เข้าถึงเครือข่ายในพื้นที่จึงจะเข้าถึงได้: การตั้งค่า, ความเป็นส่วนตัวและความปลอดภัย, เครือข่ายในพื้นที่ (Local Network) แตะสั่งทำงานตอนนี้สักครั้งโดยเปิด Marrow ไว้ เพื่อให้ iOS ถามได้ ในเบื้องหลัง iOS จะปฏิเสธโดยไม่ถามจนกว่าคุณจะตอบ
- ปัดทิ้งแอป หลังจากที่คุณปัด Marrow ทิ้งในตัวสลับแอป iOS อาจไม่ปลุกแอปในเบื้องหลังจนกว่าคุณจะเปิดอีกครั้ง
- วันเดียวกันมาสองครั้ง ตั้งใจให้เป็นอย่างนั้น: ตั้งแต่ครั้งล่าสุดส่งสองวันล่าสุดซ้ำ เพราะ Apple Health ยังเติมข้อมูลของวันเหล่านั้นอยู่ ให้เก็บค่าล่าสุดต่อตัวชี้วัดและวัน
- เปิดไม่ได้ แต่ละการทำงานอัตโนมัติที่เปิดอยู่นับเป็นหนึ่งการเชื่อมต่อ แพลนฟรีเปิดได้ครั้งละ 1 การเชื่อมต่อ Marrow Pro ได้สูงสุด 10 รวม AI เซิร์ฟเวอร์ และการทำงานอัตโนมัติทั้งหมด ปิดอีกอันก่อน
- หน่วยดูไม่ถูกต้อง ตัวชี้วัดส่งมาในหน่วยที่เก็บไว้ตามที่ระบุใน
units(kg, m, mL, degC, kcal) เซ็ตเวทเทรนนิ่งเป็นไปตามการตั้งค่า, หน่วย และฟิลด์unitบอกว่าเป็นหน่วยไหน
วิธีแก้เฉพาะแต่ละเครื่องมืออยู่ในหน้าของเครื่องมือนั้น: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, URL ใดก็ได้.