Подробная инструкция по развертыванию Webhook для Dialogflow на виртуальной машине (VPS)
В этом руководстве шаг за шагом разберем, как запустить веб-перехватчик (webhook) для Dialogflow на выделенном сервере (VPS) с использованием:
✅ Node.js (сервер на Express.js)
✅ Docker (для удобного деплоя)
✅ Nginx (как reverse proxy + HTTPS)
✅ PM2 (для управления процессом)
🔹 Шаг 1: Подготовка сервера
1.1 Выбор VPS
Подойдет любой сервер с Ubuntu 20.04/22.04:
- Hetzner Cloud, DigitalOcean, AWS Lightsail, TimeWeb и др.
- Минимальные требования: 1 ядро, 1 ГБ RAM, 10 ГБ SSD.
1.2 Подключение к серверу
ssh root@IP_адрес_сервера
1.3 Обновление системы
sudo apt update && sudo apt upgrade -y
🔹 Шаг 2: Установка Node.js и npm
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
Проверка версии:
node -v # Должно быть v18+
npm -v
🔹 Шаг 3: Создание сервера для Webhook
3.1 Инициализация проекта
mkdir dialogflow-webhook && cd dialogflow-webhook
npm init -y
npm install express body-parser
3.2 Код сервера (server.js
)
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.post('/webhook', (req, res) => {
const intent = req.body.queryResult.intent.displayName;
const params = req.body.queryResult.parameters;
if (intent === 'check_balance') {
// Здесь запрос к API биллинга
res.json({ fulfillmentText: "Ваш баланс: 500 руб." });
} else {
res.json({ fulfillmentText: "Неизвестный запрос." });
}
});
const PORT = 3000;
app.listen(PORT, () => console.log(`Webhook работает на порту ${PORT}`));
3.3 Тест сервера (локально)
node server.js
→ Проверьте:
curl -X POST http://localhost:3000/webhook -H "Content-Type: application/json" -d '{"queryResult": {"intent": {"displayName": "check_balance"}}}'
Должен вернуть: {"fulfillmentText":"Ваш баланс: 500 руб."}
🔹 Шаг 4: Запуск через PM2
Чтобы сервер работал после закрытия SSH:
sudo npm install -g pm2
pm2 start server.js --name "dialogflow-webhook"
pm2 save
pm2 startup # Создаст автозагрузку
Проверка:
pm2 status
🔹 Шаг 5: Настройка Nginx + HTTPS
5.1 Установка Nginx
sudo apt install -y nginx
sudo systemctl start nginx
5.2 Конфиг Nginx (/etc/nginx/sites-available/dialogflow.conf
)
server {
listen 80;
server_name your-domain.com; # Или IP сервера
location /webhook {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Включите конфиг:
sudo ln -s /etc/nginx/sites-available/dialogflow.conf /etc/nginx/sites-enabled/
sudo nginx -t # Проверка синтаксиса
sudo systemctl reload nginx
5.3 SSL-сертификат (Let’s Encrypt)
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
→ Ответьте на вопросы, сертификат обновляется автоматически.
Итоговый URL вебхука:
https://your-domain.com/webhook
🔹 Шаг 6: Настройка Webhook в Dialogflow
- В Dialogflow Console → Fulfillment → Включить Webhook.
- Укажите URL:
https://your-domain.com/webhook
- В Intent’ах включите «Enable webhook call».
🔹 Шаг 7: Дополнительно (Firewall, Мониторинг)
7.1 Настройка UFW (фаервол)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow OpenSSH
sudo ufw enable
7.2 Мониторинг логов
pm2 logs
# Или логи Nginx:
tail -f /var/log/nginx/error.log
🔹 Итог
Теперь у вас есть:
✔ Сервер на Node.js, обрабатывающий запросы от Dialogflow.
✔ Nginx в качестве прокси с HTTPS.
✔ PM2 для постоянной работы процесса.
Следующие шаги:
- Подключить настоящий API биллинга (вместо заглушки).
- Настроить аутентификацию (если вебхук публичный).
- Реализовать логирование запросов (например, в базу данных).
🚀 Готово! Бот теперь может динамически отвечать абонентам.