Разделы · 11/11
Если не работает
sparku doctor, типичные ошибки — от отсутствия сокета до 409, журнал запросов и консоль «Проверка».
Первым делом — sparku doctor#
sparku doctor
sparku doctor deploy # плюс проверка токена и схемы конкретной интеграции
Проходит по шагам и печатает ✓/✗ на каждом: сокет, /v1/health, версия CLI
против версии приложения, а с адресом интеграции — источник токена и её поля.
Останавливается на первой проблеме и возвращает соответствующий код выхода
(CLI sparku).
sparku 2.4.0
✓ сокет: /Users/you/.sparku/run/api.sock
✓ SparkU 2.4.0, API v1
✓ токен для «deploy»: $SPARKU_TOKEN_DEPLOY
✓ интеграция «Деплой»: progress (progress), stage (state), title (text)
Сокета нет#
✗ сокета нет: /Users/you/.sparku/run/api.sock
Значит одно из двух:
- SparkU не запущен. Запустите приложение.
- «Свои интеграции» выключены. Настройки → Интеграции → «Свои интеграции» → «Включить…». Функция экспериментальная и по умолчанию выключена (см. Обзор).
Любой запрос к отсутствующему сокету — код 69 (sparku) или ошибка соединения
(curl: (7) Failed to connect, ConnectionRefusedError у Python). Скрипт может
надёжно отличить «SparkU не запущен» от прочих ошибок: недоступность проверяется
первой, до токена и адреса.
401 — нет или не тот токен#
{"error": {"code": "unauthorized", "message": "нужен токен: заголовок Authorization: Bearer <токен> (Настройки SparkU → Свои интеграции → Подключение)"}}
{"error": {"code": "invalid_token", "message": "токен не подходит к интеграции «deploy» — возможно, его перевыпустили"}}
unauthorized— заголовкаAuthorizationнет вовсе. Вsparkuэто значит, что токен не нашёлся ни в--token, ни в--token-file, ни вSPARKU_TOKEN_<АДРЕС>, ни вSPARKU_TOKEN(порядок поиска — CLI sparku).invalid_token— токен есть, но не подходит: опечатка, чужой токен или его перевыпустили в Настройках (например, после подозрения на утечку). Возьмите актуальный токен там же: «slug» → Подключение.
sparku в обоих случаях завершается кодом 77.
404 — нет такой интеграции#
{"error": {"code": "unknown_integration", "message": "интеграции «deploy» нет; создайте её в Настройках SparkU → Свои интеграции"}}
Опечатка в адресе или интеграция ещё не создана человеком — API никогда не
создаёт интеграции сам (Понятия). sparku — код 67.
422 — значение не прошло проверку#
{"error": {"code": "invalid_fields", "message": "progress: ожидалось 0…1, пришло 70",
"fields": [{"field": "progress", "message": "progress: ожидалось 0…1, пришло 70"}]}}
Текст ошибки рассчитан на то, чтобы сразу быть понятным в терминале — какое поле
и что с ним не так. Запись всё или ничего: если хоть одно поле в запросе не
прошло проверку, не применяется ни одно, даже если остальные были верными. Сверьте
тип и границы поля со схемой — GET /v1/integrations/{slug} или раздел «Поля» в
редакторе. sparku — код 65.
429 — notify слишком часто#
{"error": {"code": "too_many_notices", "message": "notify не чаще раза в 2 с"}}
Заголовок ответа Retry-After подсказывает, сколько ждать. Это не ошибка данных —
лимит защищает от «стробоскопа», если notify вызывается в цикле. sparku — код
75; скрипт может ловить именно 75, чтобы не путать частый notify с прочими
проблемами.
409 — конфликт состояния#
| Код | Причина | Что делать |
|---|---|---|
integration_disabled |
интеграция выключена в Настройках | включить её в разделе «Свои интеграции» |
notify_disabled |
notify выключен в настройках именно этой интеграции |
включить в разделе «Островок» редактора |
dialog_pending |
у интеграции уже есть вопрос без ответа | дождаться ответа или снятия текущего вопроса |
import_pending |
SparkU уже предлагает человеку другой импорт | дождаться его ответа |
Все эти коды — временное состояние, не ошибка запроса: sparku возвращает 69
(«SparkU недоступен») для первых двух и то же значение для остальных — см. таблицу
кодов в HTTP API.
Журнал запросов интеграции#
Настройки → Свои интеграции → «slug» → раздел «Журнал» — последние 50 запросов к
этой интеграции: действие (push/end/notify/ask/listen/describe), код
ответа, текст ошибки или ответ человека, и процесс-клиент (python3, curl и
т. д. по PID на том конце сокета). Это первое место, куда стоит смотреть, когда
скрипт «вроде бы что-то отправляет», но на островке ничего не меняется: журнал
показывает, дошёл ли запрос и что ему ответил сервер, без необходимости включать
отладку на стороне скрипта.
Консоль «Проверка» в редакторе#
В редакторе интеграции (раздел «Проверка») можно отправить значения тем же путём,
что и push, снять их, вызвать notify и задать тестовый вопрос — не выходя в
терминал. Полезно, чтобы отделить «не так настроена карточка» от «скрипт шлёт не
то»: если значения из консоли отображаются на островке правильно, а из скрипта —
нет, проблема в скрипте (адрес, токен, имена полей, форма JSON), не в самой
интеграции.
Прочее#
- Просроченные значения. Если
GET /v1/integrations/{slug}показывает пустойvalues, а вы точно писали значения, — проверьтеexpires_atв прошлом ответе: срок жизни (valueLifetimeинтеграции или?ttl=) истёк.push— это upsert, следующая запись всё восстановит. - Версия CLI и приложения разошлись.
sparku doctorпечатает предупреждение, еслиsparkuв/usr/local/binсимлинкует на другую копию SparkU, чем запущенная. Переустановите симлинк: Настройки → Свои интеграции → «Командная строка». sparku listenне получает события. Пока поток не открыт, элементы с действием «Событие слушателю» неактивны на самом островке — нажатие никуда не уходит, событие не генерируется вовсе. Откройтеlistenи лишь потом нажимайте кнопку; см. Кнопки и события.