Planner
Задачи Заметки Схемы Сервис Аккаунт

Аутентификация

Все запросы к /v1/ требуют заголовок:

Authorization: Bearer planner_xxxxxxxx…

Ключи создаются в разделе Аккаунт → API-ключи. Ключ отображается единожды при создании — сохраните его сразу.

Задачи

GET /v1/tasks Список всех задач

Опциональный параметр ?status=new|in_progress|done — фильтр по статусу.

curl https://planner40.ru/v1/tasks \
  -H "Authorization: Bearer $KEY"
POST /v1/tasks Создать задачу
curl -X POST https://planner40.ru/v1/tasks \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Купить молоко","description":"2 литра"}'

Ответ: {"id":"…"}, статус 201.

GET /v1/tasks/{id} Задача + подзадачи
curl https://planner40.ru/v1/tasks/<id> \
  -H "Authorization: Bearer $KEY"

Ответ: {"task":{…},"subtasks":[…]}.

PATCH /v1/tasks/{id} Обновить задачу

Передайте только изменяемые поля: title, description, status.

curl -X PATCH https://planner40.ru/v1/tasks/<id> \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"done"}'

Ответ: 204 No Content. Допустимые статусы: new, in_progress, done.

DELETE /v1/tasks/{id} Удалить задачу
curl -X DELETE https://planner40.ru/v1/tasks/<id> \
  -H "Authorization: Bearer $KEY"

Ответ: 204 No Content.

Заметки

GET /v1/notes Список всех заметок
curl https://planner40.ru/v1/notes \
  -H "Authorization: Bearer $KEY"
POST /v1/notes Создать заметку
curl -X POST https://planner40.ru/v1/notes \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Рецепт","content":"Смешать муку и яйца…"}'

Ответ: {"id":"…"}, статус 201.

GET /v1/notes/{id} Получить заметку
curl https://planner40.ru/v1/notes/<id> \
  -H "Authorization: Bearer $KEY"
PATCH /v1/notes/{id} Обновить заметку

Передайте только изменяемые поля: title, content.

curl -X PATCH https://planner40.ru/v1/notes/<id> \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"content":"Обновлённый текст"}'
DELETE /v1/notes/{id} Удалить заметку
curl -X DELETE https://planner40.ru/v1/notes/<id> \
  -H "Authorization: Bearer $KEY"

Вебхук Яндекс Алисы

Принимает голосовые команды от навыка и выполняет действия с задачами и заметками. Аутентификация — Яндекс OAuth 2.0 (Authorization Code Flow). Пользователь подтверждает доступ один раз на странице /oauth.html; Яндекс хранит выданный токен и передаёт его в каждом запросе в поле session.user.access_token.

POST /oauth/authorize Выдать код авторизации (AJAX, CSRF)

Вызывается JS страницы /oauth.html после подтверждения пользователем. Требует браузерную сессию и CSRF-токен. Тело: {"client_id":"alice","redirect_uri":"…","state":"…"}. Возвращает {"redirect_to":"…?code=…&state=…"}.

POST /oauth/token Обменять код на токен (публичный)

Вызывается сервером Яндекса. Тело: application/x-www-form-urlencoded с полями grant_type=authorization_code, code, redirect_uri, client_id=alice, client_secret. Возвращает {"access_token":"planner_…","token_type":"bearer","expires_in":31536000}. Секрет задаётся переменной окружения ALICE_OAUTH_CLIENT_SECRET.

POST /alice/webhook Вебхук навыка Алисы

Токен из session.user.access_token в теле запроса валидируется как Bearer API-ключ. Если токен отсутствует или недействителен — возвращается "start_account_linking": {} для повторной привязки. Сервер определяет намерение по тексту фразы и выбирает команду автоматически.

Что сказатьЧто произойдётПример фразы
Создать заметку Сохраняет заметку; заголовок — первые 60 символов текста «Запиши купить молоко», «Добавь заметку рецепт борща», «Сохрани запись…»
Дописать в заметку Ищет заметку по заголовку и добавляет текст в конец содержимого «Допиши в заметку рецепт добавить соль», «Добавь к заметке todo сделать отчёт», «Дополни заметку…»
Создать задачу Создаёт задачу со статусом new «Добавь задачу позвонить маме», «Создай задачу…», «Запланируй…»
Список задач в работе Озвучивает до 5 задач со статусом in_progress «Что в работе», «Задачи в работе», «Что сейчас делаю»
Все активные задачи Озвучивает до 5 задач со статусом new или in_progress «Какие задачи», «Список задач», «Что запланировано»
Последние заметки Озвучивает заголовки до 5 последних изменённых заметок «Какие заметки», «Последние заметки», «Что в заметках»

Если фраза не распознана ни как команда задачи, ни как запрос списка — текст сохраняется как заметка (поведение по умолчанию).

# Создать заметку (токен передаётся Яндексом в поле session.user.access_token)
curl -X POST https://planner40.ru/alice/webhook \
  -H "Content-Type: application/json" \
  -d '{"request":{"original_utterance":"Запиши купить молоко"},"session":{"new":false,"user_id":"u1","skill_id":"s1","user":{"access_token":"planner_…"}},"version":"1.0"}'

# Создать задачу
curl -X POST https://planner40.ru/alice/webhook \
  -H "Content-Type: application/json" \
  -d '{"request":{"original_utterance":"Добавь задачу сделать отчёт"},"session":{"new":false,"user_id":"u1","skill_id":"s1","user":{"access_token":"planner_…"}},"version":"1.0"}'

# Ответ при отсутствии токена — Яндекс инициирует привязку аккаунта
# {"response":{"text":"…","end_session":true},"start_account_linking":{},"version":"1.0"}

Если аккаунт привязан и session.new: true — навык приветствует пользователя и перечисляет доступные команды. Без токена (access_token отсутствует или недействителен) ответ всегда содержит start_account_linking независимо от session.new. Сессия закрывается после каждого ответа (end_session: true), кроме случаев когда текст пустой — тогда навык ждёт повторной попытки.

Коды ответов

КодЗначение
200Успех, тело — JSON
201Ресурс создан, тело — {"id":"…"}
204Успех, тело пустое
400Неверный запрос (отсутствует обязательное поле, недопустимый статус)
401Ключ не передан или неверен
404Ресурс не найден
500Внутренняя ошибка сервера
Когда Метод Путь Статус Мс Ключ

    OAuth клиенты

    Зарегистрируйте клиента, скопируйте Client ID и Client Secret в настройки навыка в Яндекс Диалогах. Секрет показывается один раз при создании.

    Скопируйте секрет — он больше не будет показан

    Client ID:
    Client Secret:
    Client ID Название Redirect URI Создан

    Клиентов нет. Создайте первого выше.

    Когда Кто Что Откуда