Подробная инструкция по развертыванию 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

  1. В Dialogflow ConsoleFulfillment → Включить Webhook.
  2. Укажите URL:
   https://your-domain.com/webhook
  1. В 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 биллинга (вместо заглушки).
  • Настроить аутентификацию (если вебхук публичный).
  • Реализовать логирование запросов (например, в базу данных).

🚀 Готово! Бот теперь может динамически отвечать абонентам.

Комментарии

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

обязательно