Подключение Webhook
Webhook — это способ интеграции, который позволяет автоматически передавать информацию о заказах в вашу CRM-систему или систему учёта. При создании или изменении статуса заказа Botobot отправляет HTTP-запрос на указанный вами URL с данными заказа.
🎯 Что даёт интеграция
- Гибкая интеграция — подключение к любой системе учёта или CRM, которая может принимать HTTP-запросы
- Автоматическая передача заказов — все новые заказы из Telegram-бота сразу отправляются на ваш сервер
- Обновления статусов — получайте уведомления при изменении статуса заказа
- Полная информация — передача всех данных о заказе, товарах и клиенте
⚙️ Настройка интеграции
Шаг 1: Подготовка endpoint
Прежде чем настроить webhook в Botobot, подготовьте на вашей стороне endpoint (URL), который будет принимать данные о заказах:
- Создайте скрипт или настройте систему для приёма HTTP-запросов
- Реализуйте обработку данных в формате
application/x-www-form-urlencoded(для POST) или query string (для GET) - Убедитесь, что URL доступен из интернета (не localhost)
Предпочтительный метод — POST, так как он более надёжен для передачи больших объёмов данных и не ограничен длиной URL.
Шаг 2: Подключение webhook в Botobot
- Войдите в личный кабинет Botobot
- Перейдите в раздел "Интеграции"
- Найдите Webhook и нажмите "Подключить"
- Укажите URL, на который будут отправляться запросы о заказах
- Выберите HTTP-метод (POST или GET)
- Нажмите "Сохранить"
Шаг 3: Проверка интеграции
После сохранения настроек проверьте работу webhook:
- Создайте тестовый заказ в вашем Telegram-боте
- Проверьте, что на ваш URL пришёл запрос с данными заказа
- Убедитесь, что все данные корректно обрабатываются вашей системой
📋 Формат передачи данных
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_id | ID чата в Telegram | 123456789 |
user_telegram[id] | ID пользователя Telegram | 123456789 |
user_telegram[first_name] | Имя пользователя | Иван |
user_telegram[last_name] | Фамилия пользователя | Иванов |
user_telegram[username] | Username в Telegram | ivan_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?
Рекомендации по безопасности:
- Используйте HTTPS для защиты данных при передаче
- Настройте IP-фильтрацию на вашем сервере
- Добавьте секретный токен в URL для проверки подлинности запросов
- Валидируйте полученные данные перед обработкой
Что делать, если webhook не срабатывает?
Проверьте следующее:
- URL доступен из интернета — localhost не будет работать
- Сервер отвечает 200 OK — любой другой код может считаться ошибкой
- Нет ошибок в обработчике — проверьте логи вашего сервера
- URL указан правильно — проверьте на опечатки
Можно ли получать данные в формате JSON?
В текущей версии данные передаются только в формате application/x-www-form-urlencoded (POST) или query string (GET). Если вам нужен JSON, вы можете преобразовать полученные данные на своей стороне.
Как часто отправляются запросы?
Webhook отправляет запрос:
- При создании нового заказа (мгновенно)
- При изменении статуса заказа (мгновенно)
Что делать, если нужно несколько попыток доставки?
В текущей версии webhook отправляет запрос до трех раз. Если ваш сервер временно недоступен, рекомендуем:
- Настроить очередь сообщений на вашей стороне
- Использовать дополнительные системы мониторинга
- Обеспечить высокую доступность вашего сервиса
Можно ли отправлять ответ обратно в Botobot?
В текущей версии webhook работает только в одном направлении (из Botobot на ваш сервер). Для двусторонней связи используйте API Botobot.
🔧 Устранение проблем
Запросы не приходят на сервер
Возможные причины:
- URL недоступен из интернета (используется localhost или IP из локальной сети)
- Блокировка firewall или настройки безопасности
- Ошибка в указанном URL
Решение:
- Убедитесь, что URL доступен из интернета (используйте онлайн-инструменты проверки)
- Проверьте настройки firewall и откройте нужный порт
- Проверьте URL на опечатки и корректность
Данные приходят, но не обрабатываются
Возможные причины:
- Неправильная обработка формата данных
- Ошибки в коде обработчика
- Неверный Content-Type
Решение:
- Проверьте, что обработчик корректно парсит
application/x-www-form-urlencoded - Добавьте логирование для отладки
- Убедитесь, что все поля читаются правильно
Массивы товаров не парсятся
Возможные причины:
- Неправильная обработка массивов в формате
goods[n][field] - Ограничения фреймворка или сервера
Решение:
- Используйте примеры кода выше для правильного парсинга
- Проверьте настройки вашего фреймворка для работы с массивами в POST-данных
- Добавьте отладочный вывод сырых данных запроса
💡 Советы по работе
Оптимальный workflow
- Заказы принимаются через Telegram-бота
- Webhook отправляет данные в вашу CRM или систему учёта
- Обработка заказов ведётся в вашей системе
- Аналитика и отчёты формируются в вашей системе
Тестирование webhook
Для тестирования webhook можно использовать:
- webhook.site — онлайн-сервис для просмотра входящих запросов
- ngrok — создание публичного URL для локального сервера
- Postman — симуляция webhook-запросов
Мониторинг
Рекомендуем настроить:
- Логирование всех входящих запросов
- Мониторинг доступности вашего endpoint
- Уведомления об ошибках обработки
💡 Нужна помощь?
- 📧 Напишите в поддержку: support@botobot.ru
- 💬 Telegram: @BotobotSupport_bot
- 📚 Посетите наш FAQ
Готовы к следующему шагу? Вернитесь к списку интеграций или изучите другие возможности Botobot →