Skip to content

Вопросы и решение проблем ​

Ключи доступа ​

Я потерял client secret. Можно посмотреть его снова? ​

Нет. Он показывается один раз, при создании. Смените его, чтобы получить новый — но помните, что смена отключает всех клиентов, подключённых к вашей интеграции, во всех аккаунтах.

Меняются ли ключи после одобрения интеграции? ​

Нет. Одобрение ключи не затрагивает. Видимость тоже меняет только одобрение карточки: PRIVATE становится PUBLIC. Одобрение релиза делает код запускаемым, но не делает приложение публичным.

client_id не меняется никогда. secret и api_key меняются только тогда, когда вы сами их перевыпускаете: Перевыпустить ключи в панели заменяет оба ключа за один вызов; кнопки для смены только API-ключа в панели нет — это делается через API с regenerate_api_key: true. См. Смена ключей.

Что такое код приложения или интеграции? ​

Постоянный публичный slug, который хранится как system_id в API. В Моих приложениях вы сами выбираете его, проверяете доступность и занимаете до публикации. Это аналог кода виджета amoCRM; после сохранения переименовать его нельзя. Он же — {widget_code} в URL левого меню и значение bito.widget.code.

Можно обслуживать несколько клиентов одним API-ключом? ​

Нет. api_key принадлежит одному аккаунту. Для многих клиентов нужен OAuth, где у каждой установки своя пара токенов.

Авторизация ​

На каждый запрос приходит Integration is not installed ​

Интеграция создаётся неустановленной. Откройте её в списке Установлены на странице Интеграция и нажмите Установить — см. Создание интеграции. Та же ошибка возвращается после того, как клиент удалил интеграцию.

403 и You don't have permission to access from this IP ​

У интеграции заполнен ip_whitelist, а запрос пришёл с адреса, которого в списке нет. Добавьте адрес своего сервера (IPv4 или CIDR) или очистите список — см. Создание интеграции.

На каждый запрос приходит 401 Unauthorized ​

Проверьте по порядку: имя заголовка (api-key для ключа, Authorization: Bearer … для OAuth), что ключ содержит префикс username:, и что access-токену меньше 24 часов.

Access-токен перестал работать раньше 24 часов ​

Сессию за токеном завершили. Обычная причина — смена секрета, вторая по частоте — клиент удалил вашу интеграцию. Авторизуйтесь заново.

Invalid credentials при обмене кода авторизации ​

Либо код уже использован, либо ему больше 20 минут, либо не совпал client_secret. Код одноразовый — начните сценарий заново.

Обновление токена падает с Invalid credentials ​

Refresh-токен ротируется при каждом использовании. Если вы сохранили старый после успешного обновления, он уже мёртв. Сохраняйте новую пару в той же транзакции, где используете старую.

Вебхуки ​

Подписался, но ничего не приходит ​

Проверьте, что адрес https://, доступен из интернета и не находится во внутренней сети — Bito отклоняет loopback, RFC1918, link-local и адреса облачных метаданных. Затем проверьте, не было ли изменение массовой операцией: массовый импорт и групповые обновления не порождают вебхуков вообще.

Подпись никогда не совпадает ​

Почти наверняка вы считаете HMAC от повторно сериализованного тела. Считайте подпись по сырым байтам запроса, до любого JSON.parse. Ключ — секрет вашего клиента (client_secret); если вы его сменили, используйте новый. См. проверку подписи.

Событие пришло дважды / не по порядку / не пришло ​

Все три случая возможны by design. Доставка выполняется одной попыткой, без повторов и без гарантии порядка. Считайте вебхук поводом перечитать запись и периодически сверяйтесь полным чтением.

Интеграцию удалили, и вебхуки перестали работать ​

Удаление удаляет все вебхуки интеграции. При повторной установке подписка webhook_uri создаётся заново автоматически, а адреса, добавленные через webhook/subscribe, нужно подписать заново. Секрет подписи не меняется: это секрет вашего клиента (client_secret), и он меняется только при смене секрета.

Публикация ​

Сколько идёт проверка и что проверяют? ​

Bito отдельно проверяет карточку маркетплейса и релиз: тексты, права, публичные HTTPS lifecycle URL, архив и manifest, объявленные точки, install/uninstall и реальный путь проверки внутри Bito. Релиз проходит три этапа по порядку — код, карточка и проверка использования. См. Отправка на проверку и Проверка и публикация.

Заявку отклонили ​

Сначала определите, какой процесс отклонён. Причина карточки видна в Основной информации, причина релиза — у конкретной версии во вкладке Версии. Исправьте и повторно отправьте только этот процесс; общего состояния у карточки и релиза нет.

Релиз одобрен. Почему приложения нет в маркетплейсе? ​

Одобрение релиза делает код запускаемым, но не одобряет карточку. Отправьте карточку из Основной информации. При публикации виджета Bito также проверит, что текущий релиз одобрен модератором, а не только активирован локально.

После одобрения интеграция установится у всех? ​

Нет. Одобрение только добавляет её в маркетплейс. Каждый клиент устанавливает её сам, и каждая установка вызывает ваш хук установки.

Поведение API ​

Почему списки идут через POST, а не GET? ​

Потому что фильтры передаются телом JSON, а не строкой запроса: пагинация, диапазоны дат и вложенные фильтры плохо помещаются в URL. Чтение одной записи — GET, изменение — PUT, удаление — DELETE. Полная картина — в таблице методов.

Учтите: админский API Bito (тот, с которым работает веб-панель) принимает только POST. Здесь это правило не действует.

Удалил запись, а она всё равно возвращается ​

Bito использует мягкое удаление. Запись помечается удалённой, но не исчезает, и у большинства ресурсов есть эндпоинт get-deleted. Фильтруйте на своей стороне, если нужны только живые записи.

Как синхронизировать только изменения? ​

Большинство get-paging принимают фильтр updated_at. Храните время последней синхронизации и передавайте его — это намного дешевле, чем каждый раз перебирать всю коллекцию.

Идемпотентны ли запросы на запись? ​

Нет. Повторный create создаст вторую запись. Дедуплицируйте на своей стороне, прежде чем повторять запрос.

Не помогло? Напишите в поддержку.

Bito 2.0 Integration API