Marrow Health
ID
Unduh

Kirim data Apple Health ke webhook

Apple Health tidak punya API web, jadi datamu hanya sampai ke webhook kalau ada aplikasi di iPhone yang mengirimnya. Marrow Health melakukannya secara gratis: sebuah otomatisasi mengirim POST berisi metrik kesehatan, latihan, set kekuatan, buku harian makanan, atau gejala dan suasana hati kamu ke URL mana pun, sebagai JSON atau CSV, sesuai jadwal yang kamu pilih, bahkan saat aplikasi ditutup. Di bawah ini ada langkah pengaturan, payload, dan penerima yang berfungsi untuk n8n, Home Assistant, dan server biasa. Kami membuat Marrow.

Mengatur otomatisasi

  1. Di Marrow Health, buka tab Ekspor, lalu Otomatis, lalu Otomatisasi Baru.
  2. Tempel URL webhook kamu (gunakan HTTPS). Tambahkan header apa pun yang diperiksa penerimamu, seperti token bearer Authorization atau kunci header-auth n8n.
  3. Pilih jenis data: Metrik kesehatan, Latihan, Catatan kekuatan, Buku harian nutrisi, atau Gejala dan suasana hati. Satu otomatisasi mengirim satu jenis, dan kamu bisa punya hingga sepuluh.
  4. Pilih JSON atau CSV, rentang tanggal (Sejak proses terakhir adalah default) dan seberapa sering dijalankan, dalam menit, jam, atau hari.
  5. Aktifkan, lalu ketuk Jalankan sekarang untuk mengirim payload pertama sambil kamu memantau penerimanya.

Setiap permintaan adalah POST dengan Content-Type: application/json (atau text/csv) dan header kamu. Setiap proses, beserta kode responsnya, tercantum di riwayat otomatisasi di aplikasi.

Yang diterima

Metrik kesehatan tiba sebagai total harian, dalam satuan yang disebut di units. Detak jantung datang sebagai rata-rata, minimum, dan maksimum tiap hari, dan tidur sebagai tiap malam beserta tahapnya, dalam jam:

{"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"}]}
]}}

Payload latihan, kekuatan, nutrisi, dan suasana hati, sampel mentah sebagai ganti total harian, serta tata letak CSV ada di referensi otomatisasi.

Menerimanya di n8n

  1. Tambahkan node Webhook. Atur HTTP Method ke POST dan beri path, misalnya apple-health.
  2. Untuk menambahkan kunci rahasia, atur Authentication ke Header Auth dan tambahkan nama dan nilai header yang sama ke otomatisasi Marrow.
  3. Klik Listen for test event, lalu ketuk Jalankan sekarang di Marrow dalam dua menit. Payload muncul di editor.
  4. Publikasikan workflow dan arahkan Marrow ke Production URL (yang berisi /webhook/, bukan /webhook-test/). URL tes berhenti mendengarkan setelah satu tes.

Payload ada di bawah body, jadi langkah hari ini adalah {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} dalam sebuah ekspresi. Tambahkan node Split Out pada body.data.metrics untuk menangani tiap metrik sebagai item tersendiri. n8n menerima payload hingga 16 MB secara default, cukup untuk total harian bertahun-tahun. Proses produksi muncul di Executions, bukan di editor. (Dokumentasi n8n Webhook)

Menerimanya di Home Assistant

Pemicu webhook menerima POST di /api/webhook/<webhook_id>. Otomatisasi ini menyimpan jumlah langkah terbaru di number helper bernama input_number.steps_today (buat dulu, dengan nilai maksimum di atas hari terbaikmu):

automation:
  - alias: "Apple Health from Marrow"
    triggers:
      - trigger: webhook
        webhook_id: "pick-a-long-random-id"
        allowed_methods:
          - POST
        local_only: false
    actions:
      - action: input_number.set_value
        target:
          entity_id: input_number.steps_today
        data:
          value: >-
            {{ ((trigger.json.data.metrics
                 | selectattr('name', 'eq', 'step_count') | first).data
                 | last).qty }}

(Dokumentasi pemicu webhook Home Assistant)

Menerimanya di server kamu sendiri

Endpoint apa pun yang menerima POST HTTPS dan menjawab 2xx bisa dipakai. Yang ini mengarsipkan setiap payload ke sebuah file:

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 dengan Cloudflare Tunnel, Tailscale Funnel, atau reverse proxy. Kalau kamu lebih suka database yang bisa di-query daripada folder berisi file, mirror self-hosted Marrow adalah penerima yang sudah jadi, dan agen AI juga bisa melakukan query ke dalamnya.

Tiga aturan untuk penerima yang tidak pernah kehilangan data

Kapan otomatisasi berjalan?

Kapan pun iOS mengizinkan Marrow berjalan: setelah sinkron dengan Apple Health, saat kamu membukanya, dan saat penyegaran latar belakang, setelah interval yang kamu pilih terlewati. iOS yang menentukan kapan penyegaran latar belakang terjadi, jadi ponsel yang dibiarkan terkunci seharian mengirim saat berikutnya dibuka kuncinya, dan Sejak proses terakhir menutup selisihnya.

Cara lain