ऑटोमेशन: आपका डेटा, तय समय पर भेजा गया
Marrow आपके स्वास्थ्य डेटा की एक फ़ाइल आपके चुने किसी भी URL पर, आपके चुने समय पर, सीधे फ़ोन से POST कर सकता है। यह पेज संदर्भ है: इसे कैसे सेट करें, हर पेलोड कैसा दिखता है, और उसे लेने वाली चीज़ कैसे लिखें।
n8n, Zapier, Make, Home Assistant, Google Sheets और InfluxDB के लिए बने-बनाए सेटअप कनेक्शन में हैं.
Marrow की सभी गाइड: MCP · सेल्फ़-होस्टेड मिरर · ऑटोमेशन · फ़ाइलें · सहायता
ऑटोमेशन क्या है
एक्सपोर्ट, स्वचालित में सहेजा हुआ एक काम: एक प्रकार का डेटा, एक फ़ॉर्मैट, एक तारीख़ों का दायरा, एक URL, एक समय-अंतराल। Marrow अपने जाँचे हुए स्टोर से फ़ाइल बनाता है और ऐप बंद होने पर भी उसे URL पर POST करता है, हर सिंक कमिट के बाद और हर बैकग्राउंड रिफ़्रेश पर, जब भी अंतराल बीत चुका हो। कुछ भी हमारे ज़रिए नहीं गुज़रता: फ़ोन सीधे आपके एंडपॉइंट से बात करता है।
इसे सेट करना
- एक्सपोर्ट टैब, स्वचालित: इसे चालू करें, फिर नया ऑटोमेशन। किसी टूल के पेज से बनाने पर (n8n, Zapier, Home Assistant और बाकी, जो कनेक्शन में हैं), ऑटोमेशन उस टूल का नाम लेता है और हर फ़ील्ड के पास बताता है कि टूल को वहाँ क्या चाहिए।
- पता: वह https URL जिस पर यह POST करे। हेडर: जो भी आपके रिसीवर को चाहिए (
Authorizationबेयरर टोकन,X-Gitlab-Token, कुछ भी)। जब टूल को कोई हेडर नहीं चाहिए, तब "हेडर जोड़ें" "और विकल्प" के अंदर मिलता है। - डेटा: स्वास्थ्य मेट्रिक्स, वर्कआउट, स्ट्रेंथ लॉग, पोषण डायरी, या लक्षण और मूड, JSON या CSV में। एक ऑटोमेशन एक ही प्रकार का होता है, इसलिए जितने प्रकार चाहिए उतने बनाएँ। हर चालू ऑटोमेशन एक कनेक्शन गिना जाता है: मुफ़्त प्लान में एक समय में 1 कनेक्शन चालू रह सकता है, Marrow Pro में 10 तक, AI और सर्वर मिलाकर।
- अंतराल: हर इतने मिनट, घंटे या दिन में। तारीख़ों का दायरा, एग्रीगेशन और टाइमआउट और विकल्प में हैं.
- अभी चलाएं पहला पेलोड भेजता है, ताकि शेड्यूल का इंतज़ार करने से पहले आप रिसीवर जाँच सकें।
तारीख़ों के दायरे
- पिछली दौड़ के बाद से (डिफ़ॉल्ट): पिछली सफल रन के बाद का सब कुछ, दो दिन के ओवरलैप को घटाकर। HealthKit किसी दिन के खत्म होने के बाद भी उसमें डेटा भरता रहता है, इसलिए ओवरलैप हाल ही में पूरे हुए दिनों को फिर भेजता है। अपनी तरफ़ हर मेट्रिक और दिन का ताज़ा मान रखें, तो दोहराव से कोई नुकसान नहीं होता। जो रिसीवर कुछ समय बंद रहा हो, उसे पहली सफल रन में छूटे हुए सारे दिन मिल जाते हैं।
- आज, पिछले 7 / 30 / 90 दिन, पिछला साल: तय चलती हुई विंडो, जो हर रन में पूरी फिर भेजी जाती हैं। जब आपको डेल्टा की जगह खुद को ठीक करने वाला स्नैपशॉट चाहिए, तब इन्हें चुनें।
पेलोड के रूप
स्वास्थ्य मेट्रिक्स (दैनिक योग, JSON)
Health Auto Export के मेट्रिक्स जैसा ही ढाँचा (name, units और qty वाले data की एक metrics सूची), इसलिए उस ऐप के लिए लिखे रिसीवर में थोड़े ही बदलाव करने पड़ते हैं: यहाँ तारीख़ें सादे दिन हैं, टाइमस्टैम्प नहीं, और नीचे के वर्कआउट और स्ट्रेंथ पेलोड 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 से जवाब दे, वह चलेगा: कोई वेबहुक सेवा, सर्वरलेस फ़ंक्शन, या घर के सर्वर पर कोई स्क्रिप्ट। तीन नियम इसे मज़बूत रखते हैं:
- आख़िरी वाला जीतता है। मानों को (मेट्रिक, दिन) या प्रविष्टि की अपनी पहचान की कुंजी से रखें और दोबारा आने पर ऊपर से लिख दें। विंडो जान-बूझकर एक-दूसरे पर चढ़ती हैं।
- पहले रॉ बॉडी सहेजें। फिर पार्स करें। पार्सर की किसी गड़बड़ी से आपका डेटा कभी नहीं जाना चाहिए।
- जल्दी जवाब दें। 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, या कोई भी रिवर्स प्रॉक्सी) और ऑटोमेशन को इस पर लगा दें। अगर आपको फ़ाइलों के फ़ोल्डर की जगह ऐसी कॉपी चाहिए जिससे सवाल पूछे जा सकें, तो सेल्फ़-होस्टेड मिरर वही रिसीवर है जो पहले से लिखा हुआ है।
जानने लायक बातें
- ऑटोमेशन तभी चलते हैं जब iOS ऐप को चलने दे: सिंक कमिट के बाद, फ़ोरग्राउंड रिफ़्रेश पर, और बैकग्राउंड रिफ़्रेश के दौरान। दिन भर लॉक पड़ा फ़ोन अगली बार अनलॉक होने पर भेजता है। "पिछली दौड़ के बाद से" वाली विंडो बीच के अंतराल को भर देती है।
- हर रन ऑटोमेशन के गतिविधि लॉग (और विकल्प) में उसके नतीजे के साथ दर्ज होता है, इसलिए गलत URL सिर्फ़ आपके सर्वर पर नहीं, ऐप में भी दिख जाता है।
- किसी ऑटोमेशन के हेडर दूसरे प्रकार के लिए इस्तेमाल करने हों, तो उसे डुप्लिकेट करें।
समस्या निवारण
अभी चलाएं से जाँचें। उसके नीचे की लाइन बताती है कि क्या हुआ, और और विकल्प, गतिविधि लॉग में पिछली 30 रन उसी लाइन के साथ रहती हैं। जाँच के दौरान हर रन की सूचना पाने के लिए रन होने पर सूचित करें (और विकल्प) चालू करें।
| Marrow क्या दिखाता है | क्या करें |
|---|---|
जो भेजा गया उसका सार, जैसे 12 diary entries | पहुँच गया: रिसीवर ने 2xx से जवाब दिया। अगर उसकी तरफ़ कुछ नहीं दिखता, तो नीचे की आख़िरी पंक्तियाँ देखें। |
Server answered 401 या 403 | रिसीवर को हेडर चाहिए, या आपका जोड़ा हुआ हेडर गलत है। उसका नाम और मान जाँचें, Bearer और उसके बाद की जगह समेत। |
Server answered 404 | पता गलत है, या रिसीवर सुन नहीं रहा। n8n में Production URL इस्तेमाल करें और वर्कफ़्लो चालू करें। देखें कि अंत में कोई पाथ छूटा तो नहीं। |
Server answered 405 | यह पता POST नहीं लेता। इसे उस एंडपॉइंट पर लगाएँ जो आने वाले डेटा के लिए बना है। |
Server answered 413 | पेलोड रिसीवर के लिए बहुत बड़ा है। छोटा तारीख़ों का दायरा चुनें, कम मेट्रिक्स चुनें, या रॉ सैम्पल की जगह दैनिक योग चुनें। |
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 गलत वेबहुक ID पर ऐसा करता है, और Apps Script रेसिपी गलत
?key=पर। Zapier और Make तब तक कुछ नहीं दिखाते जब तक आप उनके एडिटर में कोई सैम्पल लोड न करें। रिसीवर का अपना इतिहास या लॉग देखें। - रन देर से आते हैं या आते ही नहीं। बैकग्राउंड रन का पल iOS चुनता है: सिंक के बाद, आपके Marrow खोलने पर, और बैकग्राउंड रिफ़्रेश के दौरान। Marrow के लिए Background App Refresh चालू रखें (Settings, General, Background App Refresh)। Low Power Mode बैकग्राउंड रन रोक देता है, और दिन भर लॉक रहने वाला फ़ोन अगली बार अनलॉक होने पर भेजता है। पिछली दौड़ के बाद से अगली सफल रन में छूटा हुआ भर देता है।
- घर के नेटवर्क पर रिसीवर। उस तक पहुँचने के लिए Marrow को Local Network एक्सेस चाहिए: Settings, Privacy and Security, 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.