Marrow Health
RU
Скачать

Отправка данных Apple Health в вебхук

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

Настройка автоматизации

  1. В Marrow Health откройте вкладку «Экспорт», затем Автоматически, затем Новая автоматизация.
  2. Вставьте URL вашего вебхука (используйте HTTPS). Добавьте заголовки, которые проверяет ваш приемник, например bearer-токен Authorization или ключ 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 docs)

Прием в Home Assistant

Триггер webhook принимает 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 по триггеру webhook)

Прием на вашем собственном сервере

Подойдет любой адрес, который принимает HTTPS POST и отвечает кодом 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, поэтому телефон, который весь день был заблокирован, отправит данные при следующей разблокировке, а С последнего запуска закроет пропуск.

Другие способы