Добро пожаловать в документацию Quote3D! ⏳

Веб-хуки

Интегрируйте Quote3D в ваш рабочий процесс с помощью уведомлений в реальном времени.

Что такое веб-хуки?

Веб-хуки позволяют вашему приложению получать уведомления в режиме реального времени о событиях, происходящих в Quote3D. Вместо опроса нашего API на предмет обновлений (например, проверки завершения расчёта стоимости), Quote3D будет отправлять HTTP POST-запрос по указанному вами URL сразу после возникновения события.

Это гораздо эффективнее и позволяет запускать автоматизированные рабочие процессы в вашей собственной системе, такие как обновление статуса заказа, уведомление клиента или запуск производственного задания.

Доступные события

  • quote.completed: Запускается при успешном завершении расчета стоимости 3D-печати.
  • quote.failed: Запускается, если расчет стоимости не удался по какой-либо причине.
  • file.uploaded: Запускается при успешной загрузке нового файла модели на ваш аккаунт.
  • file.deleted: Запускается при удалении файла модели из вашего хранилища.
  • job.status_changed: Запускается на различных этапах асинхронной обработки задания.
  • widget.added_to_cart: Запускается, когда клиент добавляет модель в корзину, используя ваш встраиваемый виджет.

Пример полезной нагрузки

Все webhook-запросы отправляются в формате JSON. Вот пример полезной нагрузки события quote.completed:

{
  "event": "quote.completed",
  "timestamp": "2026-03-10T14:30:00.000Z",
  "data": {
    "jobId": "job_01HXYZ123456789",
    "quoteId": "job_01HXYZ123456789",
    "status": "completed",
    "fileName": "gearbox-housing.stl",
    "fileId": "fl_987654321",
    "processingTimeMs": 22134,
    "result": {
      "quote_id": "job_01HXYZ123456789",
      "total_price": 25.5,
      "currency": "USD",
      "estimated_time": "2h 15m",
      "estimated_time_seconds": 8100,
      "filament_weight": 42.8,
      "printInfo": {
        "technology": "FDM",
        "material": "PLA",
        "color": "Black"
      }
    },
    "error": null
  }
}

Безопасность и верификация

Для обеспечения того, чтобы webhook-запросы исходили именно от Quote3D и не были подделаны, мы включаем HMAC-SHA256 подпись в заголовок X-Webhook-Signature.

При создании webhook в панели управления вам будет показан уникальный Секретный Ключ. Вам следует использовать этот ключ для верификации подписи каждого входящего запроса.

Этапы верификации:

  1. Прочитайте тело запроса в необработанном виде как строку.
  2. Извлеките подпись из заголовка X-Webhook-Signature и имя события из X-Webhook-Event.
  3. Вычислите HMAC-SHA256 хеш необработанного тела, используя ваш Webhook Secret.
  4. Вычислите хеш, добавьте префикс sha256= и сравните его с подписью. Если они совпадают, запрос подлинный.
const crypto = require('crypto');

// Secret Key from your Quote3D Dashboard
const SECRET = 'your_webhook_secret_here';

function verifySignature(req) {
  const signature = req.headers['x-webhook-signature'];
  const event = req.headers['x-webhook-event'];
  const body = req.rawBody; // Keep the exact raw JSON string

  const hmac = crypto.createHmac('sha256', SECRET);
  const digest = 'sha256=' + hmac.update(body).digest('hex');

  if (typeof signature !== 'string' || typeof event !== 'string') {
    return false;
  }

  const received = Buffer.from(signature, 'utf8');
  const expected = Buffer.from(digest, 'utf8');

  return received.length === expected.length &&
    crypto.timingSafeEqual(received, expected);
}

Управление вебхуками

Вы можете управлять своими вебхуками непосредственно из Панели управления:

  1. Перейдите на страницу Вебхуков в вашей панели управления.
  2. Нажмите Создать вебхук, чтобы добавить новую конечную точку.
  3. Введите URL вашей конечной точки (должен быть HTTPS) и выберите События, которые вы хотите отслеживать.
  4. Немедленно скопируйте свой Секретный ключ и храните его в безопасном месте. Вы больше не сможете его увидеть!
  5. При необходимости укажите ссылку на API Token, чтобы вебхук срабатывал только для действий, выполненных с этим токеном.

Повторная отправка неудачных доставок

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

POST /v2/webhooks/{webhook_id}/deliveries/{delivery_id}/resend

Эта конечная точка создает новую попытку доставки для существующей доставки веб-хука. Она полезна после того, как вы исправили принимающий сервер или хотите воспроизвести конкретное событие для отладки.

  • Используйте представление деталей веб-хука, чтобы определить ID доставки, которую вы хотите воспроизвести.
  • Вызовите конечную точку повторной отправки, указав ID веб-хука и ID доставки. API отвечает кодом 202 Accepted и создает новую ожидающую доставку.
  • Веб-хук должен быть по-прежнему активным и принадлежать аутентифицированному пользователю, иначе запрос на повторную отправку будет отклонен.

Рекомендации

  • Немедленно возвращайте статус 200 OK, чтобы подтвердить получение веб-хука.
  • Выполняйте ресурсоемкие операции асинхронно (например, используя очередь фоновых задач), чтобы избежать истечения времени ожидания.
  • Всегда проверяйте подпись, чтобы защитить вашу конечную точку от несанкционированных запросов.
  • Идемпотентность: Убедитесь, что ваша система может корректно обрабатывать один и тот же веб-хук несколько раз, так как мы можем повторять доставку в случае временных ошибок.