Перейти к основному содержимому

Подключение Webhook

Webhook — это способ интеграции, который позволяет автоматически передавать информацию о заказах в вашу CRM-систему или систему учёта. При создании или изменении статуса заказа Botobot отправляет HTTP-запрос на указанный вами URL с данными заказа.


🎯 Что даёт интеграция

  • Гибкая интеграция — подключение к любой системе учёта или CRM, которая может принимать HTTP-запросы
  • Автоматическая передача заказов — все новые заказы из Telegram-бота сразу отправляются на ваш сервер
  • Обновления статусов — получайте уведомления при изменении статуса заказа
  • Полная информация — передача всех данных о заказе, товарах и клиенте

⚙️ Настройка интеграции

Шаг 1: Подготовка endpoint

Прежде чем настроить webhook в Botobot, подготовьте на вашей стороне endpoint (URL), который будет принимать данные о заказах:

  1. Создайте скрипт или настройте систему для приёма HTTP-запросов
  2. Реализуйте обработку данных в формате application/x-www-form-urlencoded (для POST) или query string (для GET)
  3. Убедитесь, что URL доступен из интернета (не localhost)
Рекомендация

Предпочтительный метод — POST, так как он более надёжен для передачи больших объёмов данных и не ограничен длиной URL.

Шаг 2: Подключение webhook в Botobot

  1. Войдите в личный кабинет Botobot
  2. Перейдите в раздел "Интеграции"
  3. Найдите Webhook и нажмите "Подключить"
  1. Укажите URL, на который будут отправляться запросы о заказах
  2. Выберите HTTP-метод (POST или GET)
  1. Нажмите "Сохранить"

Шаг 3: Проверка интеграции

После сохранения настроек проверьте работу webhook:

  1. Создайте тестовый заказ в вашем Telegram-боте
  2. Проверьте, что на ваш URL пришёл запрос с данными заказа
  3. Убедитесь, что все данные корректно обрабатываются вашей системой

📋 Формат передачи данных

POST-запросы

При использовании метода POST данные передаются в формате application/x-www-form-urlencoded:

POST https://your-domain.com/webhook HTTP/1.1
Content-Type: application/x-www-form-urlencoded

id=12345&cost_total=1500&recipient=Иван+Иванов&...

GET-запросы

При использовании метода GET данные передаются в query string:

GET https://your-domain.com/webhook?id=12345&cost_total=1500&recipient=Иван+Иванов&...

📊 Передаваемые поля

Информация о заказе

ПолеОписаниеПример
idУникальный ID заказа12345
cost_cartСтоимость товаров в корзине1200
cost_deliveryСтоимость доставки300
cost_discountРазмер скидки0
cost_totalИтоговая стоимость заказа1500
addressАдрес доставкиул. Строителей 15

Информация о доставке

ПолеОписаниеПример
delivery[id]ID способа доставки2
delivery[title]Название способа доставкиСамовывоз
delivery[type]Тип доставкиpickup
delivery[price]Стоимость доставки300

Товары в заказе

Массив товаров передаётся с индексом [n], где n — порядковый номер товара (начиная с 0):

ПолеОписаниеПример
goods[n][id]ID товара501
goods[n][article]Артикул товараART-123
goods[n][title]Название товараФутболка белая
goods[n][price]Цена за единицу600
goods[n][count]Количество2
goods[n][discount]Скидка на товар0
goods[n][total]Итоговая стоимость товара1200

Информация о клиенте

ПолеОписаниеПример
recipientИмя получателяИван Иванов
mobileНомер телефона+79001234567
user_chat_idID чата в Telegram123456789
user_telegram[id]ID пользователя Telegram123456789
user_telegram[first_name]Имя пользователяИван
user_telegram[last_name]Фамилия пользователяИванов
user_telegram[username]Username в Telegramivan_ivanov

💻 Пример обработки данных

PHP

<?php
// Получение данных из webhook
$order_id = $_POST['id'];
$total = $_POST['cost_total'];
$recipient = $_POST['recipient'];
$mobile = $_POST['mobile'];

// Получение товаров
$goods = [];
$i = 0;
while (isset($_POST["goods"][$i])) {
$goods[] = [
'id' => $_POST["goods"][$i]['id'],
'title' => $_POST["goods"][$i]['title'],
'count' => $_POST["goods"][$i]['count'],
'price' => $_POST["goods"][$i]['price'],
];
$i++;
}

// Обработка заказа
// ... ваша логика обработки ...

// Возврат успешного ответа
http_response_code(200);
echo "OK";
?>

Python (Flask)

from flask import Flask, request

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
# Получение данных из webhook
order_id = request.form.get('id')
total = request.form.get('cost_total')
recipient = request.form.get('recipient')
mobile = request.form.get('mobile')

# Получение товаров
goods = []
i = 0
while f'goods[{i}][id]' in request.form:
goods.append({
'id': request.form.get(f'goods[{i}][id]'),
'title': request.form.get(f'goods[{i}][title]'),
'count': request.form.get(f'goods[{i}][count]'),
'price': request.form.get(f'goods[{i}][price]'),
})
i += 1

# Обработка заказа
# ... ваша логика обработки ...

return 'OK', 200

if __name__ == '__main__':
app.run()

Node.js (Express)

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/webhook', (req, res) => {
// Получение данных из webhook
const orderId = req.body.id;
const total = req.body.cost_total;
const recipient = req.body.recipient;
const mobile = req.body.mobile;

// Получение товаров
const goods = [];
let i = 0;
while (req.body.goods && req.body.goods[i]) {
goods.push({
id: req.body.goods[i].id,
title: req.body.goods[i].title,
count: req.body.goods[i].count,
price: req.body.goods[i].price,
});
i++;
}

// Обработка заказа
// ... ваша логика обработки ...

res.status(200).send('OK');
});

app.listen(3000, () => {
console.log('Webhook server listening on port 3000');
});

❓ Частые вопросы

Какой метод выбрать: POST или GET?

Рекомендуем использовать POST, так как:

  • Более надёжен для передачи больших объёмов данных
  • Не ограничен длиной URL (у GET есть ограничение ~2000 символов)
  • Считается более безопасным, так как данные не видны в логах сервера

Как обезопасить webhook?

Рекомендации по безопасности:

  1. Используйте HTTPS для защиты данных при передаче
  2. Настройте IP-фильтрацию на вашем сервере
  3. Добавьте секретный токен в URL для проверки подлинности запросов
  4. Валидируйте полученные данные перед обработкой

Что делать, если webhook не срабатывает?

Проверьте следующее:

  1. URL доступен из интернета — localhost не будет работать
  2. Сервер отвечает 200 OK — любой другой код может считаться ошибкой
  3. Нет ошибок в обработчике — проверьте логи вашего сервера
  4. URL указан правильно — проверьте на опечатки

Можно ли получать данные в формате JSON?

В текущей версии данные передаются только в формате application/x-www-form-urlencoded (POST) или query string (GET). Если вам нужен JSON, вы можете преобразовать полученные данные на своей стороне.

Как часто отправляются запросы?

Webhook отправляет запрос:

  • При создании нового заказа (мгновенно)
  • При изменении статуса заказа (мгновенно)

Что делать, если нужно несколько попыток доставки?

В текущей версии webhook отправляет запрос до трех раз. Если ваш сервер временно недоступен, рекомендуем:

  1. Настроить очередь сообщений на вашей стороне
  2. Использовать дополнительные системы мониторинга
  3. Обеспечить высокую доступность вашего сервиса

Можно ли отправлять ответ обратно в Botobot?

В текущей версии webhook работает только в одном направлении (из Botobot на ваш сервер). Для двусторонней связи используйте API Botobot.


🔧 Устранение проблем

Запросы не приходят на сервер

Возможные причины:

  • URL недоступен из интернета (используется localhost или IP из локальной сети)
  • Блокировка firewall или настройки безопасности
  • Ошибка в указанном URL

Решение:

  1. Убедитесь, что URL доступен из интернета (используйте онлайн-инструменты проверки)
  2. Проверьте настройки firewall и откройте нужный порт
  3. Проверьте URL на опечатки и корректность

Данные приходят, но не обрабатываются

Возможные причины:

  • Неправильная обработка формата данных
  • Ошибки в коде обработчика
  • Неверный Content-Type

Решение:

  1. Проверьте, что обработчик корректно парсит application/x-www-form-urlencoded
  2. Добавьте логирование для отладки
  3. Убедитесь, что все поля читаются правильно

Массивы товаров не парсятся

Возможные причины:

  • Неправильная обработка массивов в формате goods[n][field]
  • Ограничения фреймворка или сервера

Решение:

  1. Используйте примеры кода выше для правильного парсинга
  2. Проверьте настройки вашего фреймворка для работы с массивами в POST-данных
  3. Добавьте отладочный вывод сырых данных запроса

💡 Советы по работе

Оптимальный workflow

  1. Заказы принимаются через Telegram-бота
  2. Webhook отправляет данные в вашу CRM или систему учёта
  3. Обработка заказов ведётся в вашей системе
  4. Аналитика и отчёты формируются в вашей системе

Тестирование webhook

Для тестирования webhook можно использовать:

  • webhook.site — онлайн-сервис для просмотра входящих запросов
  • ngrok — создание публичного URL для локального сервера
  • Postman — симуляция webhook-запросов

Мониторинг

Рекомендуем настроить:

  • Логирование всех входящих запросов
  • Мониторинг доступности вашего endpoint
  • Уведомления об ошибках обработки

💡 Нужна помощь?


Готовы к следующему шагу? Вернитесь к списку интеграций или изучите другие возможности Botobot →