Marrow Health
UK
Завантажити

Надсилання даних Apple Health у вебхук

В Apple Health немає веб-API, тому ваші дані потрапляють у вебхук лише тоді, коли їх надсилає застосунок на вашому iPhone. Marrow Health робить це безкоштовно: автоматизація відправляє POST-запитом ваші показники здоров'я, тренування, силові підходи, щоденник харчування або симптоми й настрій на будь-який URL, у форматі JSON чи CSV, за обраним вами розкладом, коли застосунок закрито. Нижче описано налаштування, структуру даних і робочі приймачі для n8n, Home Assistant і звичайного сервера. Marrow робимо ми.

Налаштуйте автоматизацію

  1. У Marrow Health відкрийте вкладку Експорт, потім Автоматизовано, потім Нова автоматизація.
  2. Вставте URL вашого вебхука (використовуйте HTTPS). Додайте заголовки, які перевіряє ваш приймач, наприклад токен Authorization типу bearer або ключ header-auth з n8n.
  3. Виберіть вид даних: Показники здоров'я, Тренування, Журнал силових, Щоденник харчування або Симптоми та настрій. Одна автоматизація надсилає один вид, і їх може бути до десяти.
  4. Виберіть JSON або CSV, діапазон дат (за замовчуванням З останнього запуску) і як часто вона спрацьовує: у хвилинах, годинах або днях.
  5. Увімкніть її й торкніться Запустити зараз, щоб надіслати перший пакет, поки ви стежите за приймачем.

Кожен запит це POST із Content-Type: application/json (або text/csv) і вашими заголовками. Кожен запуск разом із кодом відповіді записано в історії автоматизації в застосунку.

Що надходить

Показники здоров'я надходять як денні підсумки в одиниці, названій у units. Пульс надходить як середнє, мінімум і максимум за кожен день, а сон як кожна ніч із фазами, у годинах:

{"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 описані в довіднику з автоматизацій.

Приймання в n8n

  1. Додайте вузол Webhook. Встановіть HTTP Method на POST і задайте шлях, наприклад apple-health.
  2. Для секретності встановіть Authentication на Header Auth і додайте таку саму назву та значення заголовка в автоматизацію Marrow.
  3. Натисніть Listen for test event, а потім упродовж двох хвилин торкніться Запустити зараз у Marrow. Дані з'являться в редакторі.
  4. Опублікуйте робочий процес і вкажіть у Marrow Production URL (той, що з /webhook/, а не з /webhook-test/). Тестовий URL перестає слухати після одного тесту.

Дані лежать у body, тому сьогоднішні кроки в виразі це {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }}. Додайте вузол Split Out для body.data.metrics, щоб обробляти кожен показник як окремий елемент. За замовчуванням n8n приймає пакети до 16 МБ, чого вистачає на роки денних підсумків. Робочі запуски відображаються в Executions, а не в редакторі. (документація n8n про Webhook)

Приймання в Home Assistant

Тригер вебхука приймає POST за адресою /api/webhook/<webhook_id>. Ця автоматизація зберігає останню кількість кроків у числовому помічнику input_number.steps_today (спершу створіть його з максимумом, вищим за ваш найкращий день):

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 }}

(Документація Home Assistant про тригер вебхука)

Приймання на власному сервері

Підійде будь-яка кінцева точка, що приймає POST через HTTPS і відповідає кодом 2xx. Ця архівує кожен пакет у файл:

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 або зворотний проксі. Якщо ви волієте базу даних, до якої можна робити запити, а не теку з файлами, то дзеркало Marrow на власному сервері це вже готовий приймач, і ШІ-агенти теж можуть його опитувати.

Три правила для приймача, який ніколи не втрачає дані

Коли це спрацьовує?

Щоразу, коли iOS дозволяє Marrow працювати: після синхронізації з Apple Health, коли ви його відкриваєте, і під час фонового оновлення, щойно мине обраний вами інтервал. Час фонового оновлення визначає iOS, тож телефон, що цілий день був заблокований, надішле дані, коли його розблокують, а З останнього запуску закриє прогалину.

Інші способи