Otomasyonlar: verileriniz, zamanlamayla gönderilir
Marrow, sağlık verilerinizin bir dosyasını seçtiğiniz herhangi bir URL'ye, seçtiğiniz sıklıkta, doğrudan telefondan POST edebilir. Bu sayfa başvuru kaynağıdır: nasıl kurulur, her yükün neye benzediği ve onu alacak bir şeyin nasıl yazılacağı.
n8n, Zapier, Make, Home Assistant, Google Sheets ve InfluxDB için hazır kurulumlar bağlantılar altında.
Tüm Marrow rehberleri: MCP · Kendi barındırdığınız yansı · Otomasyonlar · Dosyalar · Destek
Otomasyon nedir
Dışa aktar, Otomatik içinde kayıtlı bir iş: bir tür veri, bir biçim, bir tarih aralığı, bir URL, bir sıklık. Marrow dosyayı doğrulanmış deposundan oluşturur ve sıklık dolduğunda, her eşzamanlama kaydından sonra ve her arka plan yenilemesinde, uygulama kapalıyken URL'ye POST eder. Hiçbir şey bizden geçmez: telefon doğrudan sizin uç noktanızla konuşur.
Bir otomasyon kurma
- Dışa aktar sekmesi, Otomatik: açın, ardından Yeni Otomasyon. Bir aracın sayfasından (n8n, Zapier, Home Assistant ve bağlantılar altındaki diğerleri) oluşturulan otomasyon o aracın adını taşır ve her alanın yanında aracın orada ne beklediğini söyler.
- Adres: POST edeceği https URL'si. Başlıklar: alıcınızın ihtiyaç duyduğu her şey (bir
Authorizationbearer token'ı, birX-Gitlab-Token, her ne ise). Araç hiçbirine ihtiyaç duymuyorsa Başlık ekle, Daha fazla seçenek altındadır. - Veriler: Sağlık ölçümleri, Antrenmanlar, Kuvvet günlüğü, Beslenme günlüğü veya Belirtiler ve ruh hali, JSON ya da CSV olarak. Bir otomasyon tek tür taşır, bu yüzden istediğiniz her tür için bir tane yapın. Açık olan her biri bir bağlantı sayılır: Ücretsiz planda aynı anda 1 bağlantı açık kalır, Marrow Pro'da yapay zekalar ve sunucular dahil en fazla 10.
- Sıklık: kaç dakikada, saatte ya da günde bir. Tarih aralığı, toplama ve zaman aşımı Daha fazla seçenek altındadır.
- Şimdi çalıştır ilk yükü gönderir, böylece zamanlamayı beklemeden alıcıyı kontrol edebilirsiniz.
Tarih aralıkları
- Son çalıştırmadan beri (varsayılan): son başarılı çalıştırmadan beri her şey, iki günlük bir çakışmayla. HealthKit bir günü bittikten sonra da doldurmaya devam eder, bu yüzden çakışma yakın zamanda tamamlanan günleri yeniden gönderir. Her ölçüm ve gün için en son değeri kendi tarafınızda tutun, tekrarlar zarar vermez. Bir süre kapalı kalan alıcı, başarılı olan ilk çalıştırmada kaçırdığı her günü alır.
- Bugün, Son 7 / 30 / 90 gün, Son bir yıl: her çalıştırmada tümüyle yeniden gönderilen sabit kayan pencereler. Bir fark yerine kendini onaran bir anlık görüntü tercih ediyorsanız bunları seçin.
Yük biçimleri
Sağlık ölçümleri (günlük toplamlar, JSON)
Health Auto Export'un ölçümleriyle aynı yapı (name, units ve qty içeren data alanlarından oluşan bir metrics listesi). Bu yüzden o uygulama için yazılmış bir alıcının yalnızca küçük değişikliklere ihtiyacı olur: buradaki tarihler zaman damgası değil, düz günlerdir ve aşağıdaki antrenman ve kuvvet yükleri Marrow'a özgüdür. Değerler units içinde belirtilen saklanan birimdedir (kg, m, mL, degC, kcal, count). Kalp atış hızı her günün Avg, Min ve Max değerleri olarak bpm cinsinden, uyku ise her gece evreleriyle ve saat olarak gelir. İngiliz ölçü birimlerini istiyorsanız dönüştürmeyi kendi tarafınızda yapın.
{"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"}]}
]}}
Ham örnekler (Ham örnekler gruplaması), günlük toplam yerine her örneği başlangıç ve bitiş zamanıyla gönderir. CSV ölçümleri dosyalar sayfasında anlatılan geniş tablo olarak gelir.
Antrenmanlar
{"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"}
]}}
Kuvvet günlüğü
Her çalışma seti (ısınmalar dahil değildir), ayrıca egzersiz başına ilerleme ve kas grubu başına hacim. Ağırlıklar Ayarlar, Birimler içinde seçtiğiniz birimdedir. unit alanı hangisi olduğunu söyler. Her setin set_type değeri work, failure veya drop'tur ve tekrar rezervini (reps in reserve) kaydettiyseniz sette ayrıca rir bulunur. set_credits, bir kas grubuna yazılan setleri sayar, bir egzersiz birkaç grubu çalıştırıyorsa kesirlerle.
{"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}]
}}
Beslenme günlüğü
{"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}}
]}
]}}
Alıcı yazmak
HTTPS POST kabul edip 2xx ile yanıt veren her şey işe yarar: bir webhook hizmeti, sunucusuz bir fonksiyon, ev sunucusundaki bir betik. Üç kural onu sağlam tutar:
- Sonuncusu geçerlidir. Değerleri (ölçüm, gün) ya da kaydın kendi kimliğine göre anahtarlayarak saklayın ve tekrar gelince üzerine yazın. Pencereler bilerek çakışır.
- Önce ham gövdeyi arşivleyin. Sonra ayrıştırın. Bir ayrıştırıcı hatası size asla veriyi kaybettirmemeli.
- Hızlı yanıt verin. Marrow, belirlediğiniz zaman aşımına kadar (varsayılan 60 sn) bekler, aksi halde çalıştırmayı başarısız sayar. Başarısız çalıştırmalar bir sonraki sıklık adımında son başarılı pencereden yeniden denenir.
Her gönderiyi arşivleyen on iki satırlık bir Python alıcısı:
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()
Onu HTTPS'in arkasına koyun (bir Cloudflare Tunnel, Tailscale Funnel ya da herhangi bir ters vekil sunucu) ve otomasyonu ona yönlendirin. İstediğiniz şey dosya klasörü yerine sorgulanabilir bir kopyaysa, kendi barındırdığınız yansı zaten yazılmış o alıcıdır.
Bilmekte fayda var
- Otomasyonlar yalnızca iOS uygulamanın çalışmasına izin verdiğinde çalışır: bir eşzamanlama kaydından sonra, ön plan yenilemesinde ve arka plan yenilemesi sırasında. Gün boyu kilitli kalan bir telefon, kilidi bir sonraki açılışında gönderir. Son çalıştırmadan beri penceresi aradaki boşluğu kapatır.
- Her çalıştırma, otomasyonun Aktivite günlüğünde (Daha fazla seçenek) sonucuyla birlikte kaydedilir, böylece yanlış yapılandırılmış bir URL yalnızca sunucunuzda değil, uygulamada da görünür.
- Başlıklarını başka bir tür için yeniden kullanmak üzere bir otomasyonu çoğaltın.
Sorun giderme
Şimdi çalıştır ile test edin. Altındaki satır ne olduğunu söyler, Daha fazla seçenek, Aktivite günlüğü ise son 30 çalıştırmayı aynı satırla tutar. Kontrol ederken her çalıştırma için bildirim almak üzere Çalıştırıldığında bildir'i (Daha fazla seçenek) açın.
| Marrow'un gösterdiği | Ne yapmalı |
|---|---|
Gönderilenin özeti, örneğin 12 diary entries | Teslim edildi: alıcı 2xx ile yanıt verdi. Onun tarafında hiçbir şey görünmüyorsa aşağıdaki son satırlara bakın. |
Server answered 401 veya 403 | Alıcı bir başlık istiyor ya da eklediğiniz yanlış. Adını ve değerini kontrol edin, Bearer ve ardından gelen boşluk dahil. |
Server answered 404 | Adres yanlış ya da alıcı dinlemiyor. n8n'de Production URL'yi kullanın ve iş akışını etkinleştirin. Sonda eksik bir yol olup olmadığına bakın. |
Server answered 405 | Adres POST kabul etmiyor. Onu gelen veri için ayrılmış uç noktaya yönlendirin. |
Server answered 413 | Yük alıcı için çok büyük. Daha kısa bir tarih aralığı, daha az ölçüm ya da Ham örnekler yerine Günlük toplamlar seçin. |
Server answered 500 veya başka bir 5xx | Alıcı işlerken başarısız oldu. Kendi günlüğüne bakın. Önce ham gövdeyi arşivleyin, sonra ayrıştırın. |
| İstek zaman aşımına uğradı | Alıcı zaman aşımından uzun sürdü. Önce yanıt verip işi sonra yapın ya da Daha fazla seçenek altındaki Zaman aşımı'nı yükseltin (300 sn'ye kadar). |
| Uygulama Aktarım Güvenliği ilkesi güvenli bir bağlantı kullanılmasını gerektiriyor | Adres, internette düz http. https kullanın. iOS, Marrow'un düz http'yi yalnızca kendi ağınızda kullanmasına izin verir. |
| Belirtilen ana bilgisayar adına sahip bir sunucu bulunamadı | Adreste bir yazım hatası var ya da yalnızca ev ağınızın bildiği bir ad kullanılmış. Telefondaki Safari'de kontrol edin. |
No valid URL - set an https endpoint first | Adres boş ya da https:// ile başlamıyor (kendi ağınızda http:// de olur). |
Nothing to export in this range | Tarih aralığında o türden veri yok. Daha fazla seçenek altında daha uzun bir aralık seçin ya da önce bir şey kaydedin. |
- Teslim edildi ama hiçbir şey gelmiyor. Bazı alıcılar veriyi düşürseler bile 200 yanıtı verir. Home Assistant yanlış bir webhook kimliğinde, Apps Script tarifi ise yanlış bir
?key=değerinde böyle yapar. Zapier ve Make, düzenleyicilerinde bir örnek yüklemediğiniz sürece hiçbir şey göstermez. Alıcının kendi geçmişine ya da günlüğüne bakın. - Çalıştırmalar geç geliyor ya da hiç gelmiyor. iOS, arka plan çalıştırmalarının anına karar verir: bir eşzamanlamadan sonra, Marrow'u açtığınızda ve arka plan yenilemesi sırasında. Marrow için Arka Planda Uygulama Yenileme'yi açık tutun (Ayarlar, Genel, Arka Planda Uygulama Yenileme). Düşük Güç Modu arka plan çalıştırmalarını geri tutar ve gün boyu kilitli kalan bir telefon, kilidi bir sonraki açılışında gönderir. Son çalıştırmadan beri, başarılı olan bir sonraki çalıştırmada telafi eder.
- Ev ağınızdaki bir alıcı. Marrow'un ona ulaşması için Yerel Ağ erişimine ihtiyacı var: Ayarlar, Gizlilik ve Güvenlik, Yerel Ağ. iOS soru sorabilsin diye Marrow açıkken bir kez Şimdi çalıştır'a dokunun. Arka planda iOS, siz yanıtlayana kadar sormadan reddeder.
- Uygulama kapatıldı. Marrow'u uygulama değiştiricide kaydırıp kapattıktan sonra, siz onu yeniden açana kadar iOS onu arka planda uyandırmayabilir.
- Aynı günler iki kez geliyor. Bilerek: Son çalıştırmadan beri son iki günü yeniden gönderir, çünkü Apple Health onları doldurmaya devam eder. Her ölçüm ve gün için en son değeri tutun.
- Açılmıyor. Açık olan her otomasyon bir bağlantı sayılır. Ücretsiz planda aynı anda 1 bağlantı açık kalır, Marrow Pro'da en fazla 10: yapay zekalar, sunucular ve otomasyonlar birlikte. Önce başka birini kapatın.
- Birimler yanlış görünüyor. Ölçümler,
unitsiçinde belirtilen saklanan birimlerle gelir (kg, m, mL, degC, kcal). Kuvvet setleri Ayarlar, Birimler'i izler veunitalanı hangisi olduğunu söyler.
Araç başına çözümler kendi sayfasında: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, herhangi bir URL.