Otomatisasi: datamu, dikirim sesuai jadwal
Marrow bisa mengirim POST berisi file data kesehatanmu ke URL mana pun yang kamu pilih, dengan jadwal yang kamu pilih, langsung dari ponsel. Halaman ini adalah referensinya: cara mengaturnya, seperti apa tiap payload, dan cara menulis sesuatu yang menerimanya.
Pengaturan siap pakai untuk n8n, Zapier, Make, Home Assistant, Google Sheets, dan InfluxDB ada di bawah koneksi.
Semua panduan Marrow: MCP · Mirror self-hosted · Otomatisasi · File · Dukungan
Apa itu otomatisasi
Pekerjaan tersimpan di Ekspor, Otomatis: satu jenis data, satu format, satu rentang tanggal, satu URL, satu jadwal. Marrow membuat file dari penyimpanannya yang terverifikasi dan mengirim POST ke URL itu tanpa aplikasi dibuka, setelah setiap sinkronisasi selesai dan pada setiap penyegaran latar belakang, setiap kali jadwal sudah terlewati. Tidak ada yang melewati kami: ponsel berbicara langsung ke endpoint kamu.
Cara mengaturnya
- Tab Ekspor, Otomatis: aktifkan, lalu Otomatisasi Baru. Jika dibuat dari halaman sebuah tool (n8n, Zapier, Home Assistant, dan lainnya di bawah koneksi), otomatisasi itu memakai nama tool tersebut dan menjelaskan di samping tiap kolom apa yang diinginkan tool itu di sana.
- Alamat: URL https tujuan POST. Header: apa pun yang dibutuhkan penerimamu (token bearer
Authorization,X-Gitlab-Token, apa saja). Jika tool tidak membutuhkannya, Tambah header ada di bawah Opsi lainnya. - Data: Metrik kesehatan, Latihan, Catatan kekuatan, Buku harian nutrisi, atau Gejala dan suasana hati, sebagai JSON atau CSV. Satu otomatisasi membawa satu jenis, jadi buat satu per jenis yang kamu mau. Setiap yang aktif dihitung sebagai satu koneksi: Gratis menjaga 1 koneksi aktif sekaligus, Marrow Pro hingga 10, termasuk AI dan server.
- Kadensi: setiap sekian menit, jam, atau hari. Rentang tanggal, agregasi, dan batas waktu ada di bawah Opsi lainnya.
- Jalankan sekarang mengirim payload pertama agar kamu bisa memeriksa penerimanya sebelum menunggu jadwal.
Rentang tanggal
- Sejak proses terakhir (default): semuanya sejak proses terakhir yang berhasil, mundur dua hari sebagai tumpang tindih. HealthKit terus melengkapi sebuah hari setelah hari itu berakhir, jadi tumpang tindih itu mengirim ulang hari-hari yang baru selesai. Simpan nilai terbaru per metrik dan hari di sisi kamu, dan pengulangan itu tidak berbahaya. Penerima yang sempat mati beberapa waktu akan menerima setiap hari yang terlewat pada proses pertama yang berhasil.
- Hari ini, 7 / 30 / 90 hari terakhir, Tahun lalu: jendela bergulir yang tetap, dikirim ulang penuh setiap proses. Pilih ini kalau kamu lebih suka snapshot yang memperbaiki dirinya sendiri daripada delta.
Bentuk payload
Metrik kesehatan (total harian, JSON)
Struktur yang sama dengan metrik Health Auto Export (daftar metrics berisi name, units, dan data dengan qty), jadi penerima yang ditulis untuk aplikasi itu hanya butuh sedikit perubahan: tanggal di sini berupa hari biasa, bukan timestamp, dan payload latihan dan kekuatan di bawah adalah milik Marrow sendiri. Nilai dalam satuan tersimpan yang disebut di units (kg, m, mL, degC, kcal, count). Detak jantung datang sebagai Avg, Min, dan Max tiap hari dalam bpm, dan tidur sebagai tiap malam beserta tahapnya dalam jam. Konversi di sisi kamu kalau kamu ingin satuan imperial.
{"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"}]}
]}}
Sampel mentah (pengelompokan Sampel mentah) mengirim setiap sampel dengan waktu mulai dan selesainya, bukan total harian. Metrik CSV datang sebagai tabel lebar yang dijelaskan di halaman file.
Latihan
{"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"}
]}}
Catatan kekuatan
Setiap set kerja (pemanasan tidak disertakan), ditambah kemajuan per latihan dan volume per kelompok otot. Beban dalam satuan yang kamu pilih di Pengaturan, Satuan. Kolom unit menyebutkan yang mana. set_type tiap set adalah work, failure, atau drop, dan sebuah set juga membawa rir kalau kamu mencatat repetisi cadangan. set_credits menghitung set yang dikreditkan ke sebuah kelompok otot, dalam pecahan kalau satu latihan melibatkan beberapa kelompok.
{"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}]
}}
Buku harian nutrisi
{"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}}
]}
]}}
Menulis penerima
Apa pun yang menerima POST HTTPS dan menjawab 2xx bisa dipakai: layanan webhook, fungsi serverless, atau skrip di server rumah. Tiga aturan membuatnya tangguh:
- Yang terbaru menang. Simpan nilai dengan kunci (metrik, hari) atau identitas entri itu sendiri, lalu timpa saat berulang. Jendelanya memang sengaja tumpang tindih.
- Arsipkan body mentah dulu. Baru parse. Bug parser tidak boleh membuatmu kehilangan data.
- Jawab dengan cepat. Marrow menunggu hingga batas waktu yang kamu atur (default 60 detik), dan jika lewat, proses itu ditandai gagal. Proses yang gagal dicoba ulang pada kadensi berikutnya dari jendela sukses terakhir.
Penerima Python dua belas baris yang mengarsipkan setiap kiriman:
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()
Letakkan di balik HTTPS (Cloudflare Tunnel, Tailscale Funnel, atau reverse proxy apa pun) dan arahkan otomatisasi ke sana. Kalau yang kamu mau adalah salinan yang bisa di-query, bukan folder berisi file, mirror self-hosted adalah penerima yang sudah jadi.
Perlu diketahui
- Otomatisasi hanya berjalan saat iOS mengizinkan aplikasi berjalan: setelah sinkronisasi selesai, saat penyegaran di latar depan, dan saat penyegaran latar belakang. Ponsel yang terkunci seharian mengirim saat berikutnya dibuka kuncinya. Jendela sejak proses terakhir menutup selisihnya.
- Setiap proses dicatat di Log aktivitas otomatisasi (Opsi lainnya) beserta hasilnya, jadi URL yang salah diatur terlihat di aplikasi, bukan hanya di servermu.
- Duplikatkan otomatisasi untuk memakai ulang header-nya bagi jenis data lain.
Pemecahan masalah
Uji dengan Jalankan sekarang. Baris di bawahnya menjelaskan apa yang terjadi, dan Opsi lainnya, Log aktivitas menyimpan 30 proses terakhir dengan baris yang sama. Aktifkan Beri tahu saat dijalankan (Opsi lainnya) untuk mendapat notifikasi di setiap proses selama kamu memeriksa.
| Yang ditampilkan Marrow | Yang harus dilakukan |
|---|---|
Ringkasan isi yang dikirim, seperti 12 diary entries | Terkirim: penerima menjawab 2xx. Kalau tidak ada yang muncul di sisinya, lihat baris terakhir di bawah. |
Server answered 401 atau 403 | Penerima menginginkan header, atau header yang kamu tambahkan salah. Periksa nama dan nilainya, termasuk Bearer dan spasi setelahnya. |
Server answered 404 | Alamat salah, atau penerima tidak mendengarkan. Di n8n, pakai Production URL dan aktifkan workflow. Periksa apakah path di bagian akhir terlewat. |
Server answered 405 | Alamat itu tidak menerima POST. Arahkan ke endpoint yang memang untuk data masuk. |
Server answered 413 | Payload terlalu besar untuk penerima. Pilih rentang tanggal yang lebih pendek, lebih sedikit metrik, atau Total harian sebagai ganti Sampel mentah. |
Server answered 500 atau 5xx lainnya | Penerima gagal saat menanganinya. Lihat lognya sendiri. Arsipkan body mentah dulu, baru parse. |
| Waktu permintaan habis | Penerima butuh waktu lebih lama dari batas waktu. Jawab dulu lalu kerjakan setelahnya, atau naikkan Batas waktu di Opsi lainnya (hingga 300 detik). |
| Kebijakan App Transport Security mengharuskan penggunaan koneksi yang aman | Alamatnya http biasa di internet. Pakai https. iOS hanya mengizinkan Marrow memakai http biasa di jaringan kamu sendiri. |
| Server dengan nama host yang ditentukan tidak ditemukan | Salah ketik di alamat, atau nama yang hanya dikenal jaringan rumahmu. Periksa di Safari di ponsel. |
No valid URL - set an https endpoint first | Alamat kosong atau tidak diawali https:// (atau http:// di jaringan kamu sendiri). |
Nothing to export in this range | Tidak ada data jenis itu dalam rentang tanggal. Pilih rentang yang lebih panjang di Opsi lainnya, atau catat sesuatu dulu. |
- Terkirim, tapi tidak ada yang sampai. Beberapa penerima menjawab 200 meski membuang datanya. Home Assistant begitu kalau id webhook salah, dan resep Apps Script begitu kalau
?key=salah. Zapier dan Make tidak menampilkan apa pun sampai kamu memuat sampel di editornya. Periksa riwayat atau log penerima itu sendiri. - Proses terlambat atau tidak jalan sama sekali. iOS yang memilih waktu untuk proses latar belakang: setelah sinkronisasi, saat kamu membuka Marrow, dan saat penyegaran latar belakang. Biarkan Penyegaran App di Latar Belakang tetap aktif untuk Marrow (Pengaturan, Umum, Penyegaran App di Latar Belakang). Mode Daya Rendah menahan proses latar belakang, dan ponsel yang terkunci seharian mengirim saat berikutnya dibuka kuncinya. Sejak proses terakhir mengejar ketertinggalan pada proses berikutnya yang berhasil.
- Penerima di jaringan rumahmu. Marrow butuh akses Jaringan Lokal untuk menjangkaunya: Pengaturan, Privasi dan Keamanan, Jaringan Lokal. Ketuk Jalankan sekarang sekali dengan Marrow terbuka agar iOS bisa bertanya. Di latar belakang, iOS menolak tanpa bertanya sampai kamu menjawabnya.
- Digeser keluar. Setelah kamu menggeser Marrow keluar dari pengalih aplikasi, iOS mungkin tidak membangunkannya di latar belakang sampai kamu membukanya lagi.
- Hari yang sama datang dua kali. Memang disengaja: Sejak proses terakhir mengirim ulang dua hari terakhir, karena Apple Health terus melengkapinya. Simpan nilai terbaru per metrik dan hari.
- Tidak mau aktif. Setiap otomatisasi yang aktif dihitung sebagai satu koneksi. Gratis menjaga 1 koneksi aktif sekaligus, Marrow Pro hingga 10: AI, server, dan otomatisasi digabung. Matikan yang lain dulu.
- Satuan terlihat salah. Metrik tiba dalam satuan tersimpan yang disebut di
units(kg, m, mL, degC, kcal). Set kekuatan mengikuti Pengaturan, Satuan, dan kolomunitmenyebutkan yang mana.
Solusi untuk tiap tool ada di halamannya masing-masing: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, URL apa pun.