Вебхук (webhook) — это способ автоматической передачи информации между приложениями или сервисами в реальном времени. Вопреки заблуждениям вебхук это не URL, а именно событие, которое приходит на специальный для этого URL. Давайте разберемся на простом примере:
Обычная романтическая ситуация. Молодой человек ждёт сообщение от знакомой девушки в Telegram.
- Если Краш не в силах совладать с эмоциями, открыл с ней диалог и постоянно обновляет экран в надежде, что вот-вот появится новое сообщение — это у программистов называется опросом (polling). Вы можете каждые пять минут заходить в Телеграм и обновлять переписку.
- А если Краш спокоен, закрыл мессенджер и занимается своими делами, зная, что "как напишет — придёт уведомление" — это и есть вебхук.
С вебхуками все примерно, как в этой романтической истории, но работают они на уровне "общения" между приложениями. Когда в одном сервисе происходит событие, он сразу же "пингует" другой сервис HTTP-запросом и передаёт ему данные.
И наоборот, ваш сервис может сам отправлять вебхуки другим приложениям, как бы говоря: "не нужно меня дёргать каждые пять минут с вопросами, как только будет что-то новое — я сам сообщу".
То есть технически вебхук — это не URL (многие привыкли называть вебхуком именно URL на который приходят события), а HTTP-запрос, который некоторые приложения умеют отправлять, когда происходит определённое событие. Чтобы получать данные от приложения, которое умеет отправлять что-то с помощью вебхука, вам нужно заранее указать URL-адрес, на который нужно его отправить. И когда произойдет событие — например, новый платёж, комментарий или загрузка файла — приложение сразу же отправляет запрос с данными на ваш URL.
Как устроен обмен данными через вебхуки?
Итак, мы разобрались, что вебхук — это не URL (как многие привыкли думать), а запрос, который автоматически отправляется при возникновении определённого события в каком-то сервисе. То есть это механизм передачи данных в реальном времени между приложениями.
Получается, чтобы настроить такой обмен данными между двумя сервисами с помощью вебхуков, нужно решить две задачи:
Настроить отправку данных с помощью вебхука в одном сервисе (исходящий вебхук)
Настроить получение этих данных в другом сервисе (входящий вебхук)
Исходящий вебхук — это ОТПРАВКА ДАННЫХ. Это когда какой-то сервис умеет отправлять данные о событиях, которые в нем произошли. Чтобы сервис смог это сделать ему в настройках нужно указать URL(из другого сервиса) куда нужно эти данные отправлять.
Входящий вебхук — это ПОЛУЧЕНИЕ ДАННЫХ. Когда какой-то сервис предоставляет вам URL, на который можно отправить события и данные из другого сервиса.
Как настроить отправку данных между сервисами через вебхук
Для примера представим, что у вас есть приложение или сервис, и вы хотите, чтобы при каком-то событии (например, новая заявка, регистрация пользователя, новое сообщение) данные автоматически передавались в другой сервис.
Способ 1: Готовая интеграция через webhook
Тут, понятно. Это самый простой способ, с которым легко справиться даже без технических знаний. Перед началом рекомендуем изучить базу знаний и инструкции ваших сервисов или поискать в интернете, используя фразы типа «[название сервиса] как настроить вебхуки». Или сразу уточнить у поддержки сервиса о такой возможности.
Пошаговая инструкция:
Шаг 1. Откройте настройки сервиса, КУДА ВЫ ХОТИТЕ ОТПРАВЛЯТЬ ДАННЫЕ. Ищите раздел с названием «Интеграции», «Вебхуки», «API» или «Автоматизация».
Шаг 2. В этом разделе найдите пункт «Вебхуки» или «Webhook». Здесь важно найти поле с уже сгенерированным URL или возможность создать такой URL. Это и есть входящий вебхук — адрес, на который можно отправлять данные. Скопируйте этот URL.
Шаг 3. Теперь откройте настройки сервиса, ОТКУДА ВЫ ХОТИТЕ ОТПРАВЛЯТЬ ДАННЫЕ. Снова ищите раздел «Интеграции», «Вебхуки», «API» или «Автоматизация». Но теперь вам нужно найти поле, куда можно вставить скопированный ранее URL. Вставьте скопированный URL. Готово!
Пара примеров, как выглядят настройки изнутри сервисов.
Вот пример из популярной amoCRM. На этом скриншоте пользователь может вставить URL сервиса, куда нужно отправлять данные из amoCRM, и выбрать, какие именно события должны отправляться.
Вот пример из популярного корпоративного мессенджера Пачка. На этом скриншоте показаны настройки входящих вебхуков в Пачке. Пользователь может скопировать специальный URL Пачки для вебхуков и получать на него данные из других сервисов. Когда на этот URL приходит вебхук, бот в мессенджере автоматически отправляет сообщение в канал, куда он добавлен.
Если бы нам нужно было отправлять данные из amoCRM в Пачку, то сначала мы бы скопировали URL Пачки для входящего вебхука (см. скриншот выше). А затем вставили бы этот URL в amoCRM.
Способ 2: Отправить вебхук с помощью сервисов автоматизации
Но к сожалению, не всегда бывает так, как нам очень бы хотелось. И не всегда оба сервиса поддерживают готовую интеграцию через вебхуки. Гораздо более частая ситуация, когда один сервис умеет отправлять данные и в нем можно указать URL, куда отправлять данные. Но второй сервис нигде в настройках не дает такого готового URL куда он эти данные готов принять — по крайней мере, в видимых настройках интерфейса.
Возьмём тот же Telegram. Технически вы можете настроить отправку данных в бота через вебхук, но в BotFather нет кнопки «Вставить URL для вебхука» — это нужно делать программно, через API. То есть писать код.
Передача данных через вебхуки работает через API (Application Programming Interface) — это набор правил, по которым программы обмениваются данными. Чтобы написать собственное решение, нужно: 1. Написать код для получения, обработки и отправки данных между сервисами 2. Разместить этот код на сервере (хостинг) и, скорее всего, платить за него.
Благо в таких ситуациях, когда код писать мы не умеем или не хотим, можно использовать nocode-сервисы автоматизации. Такие сервисы позволяют интегрировать различные сервисы друг с другом, но в них вместо кода вы работаете с визуальным конструктором сценариев — просто выбираете нужные действия из готовых блоков и соединяете их.
Для примера: чтобы отправить сообщение в Telegram через API, нужно написать минимум 23 строчки кода. В Альбато это просто блок «Отправить сообщение в Telegram» — выбрали чат, написали текст, готово.
К сожалению к 2025 году на российском рынке осталось не так много таких платформ. По критериям стабильности, безопасности, серверов в РФ и приёма рублёвой оплаты мы бы рекомендовали Альбато.
Пример, как выглядят настройки отправки вебхука в Альбато:
На этом скриншоте Альбато сгенерировал для нас URL, на который с помощью вебхука можно отправить данные из другого сервиса. Мы можем скопировать этот URL и вставить его в настройки вебхуков в amoCRM (см. скриншот из примеров выше).
Когда в amoCRM произойдет событие (например, новая сделка), система отправит нам данные на наш URL в Альбато. Альбато получит эти данные и автоматически пересылает их в виде сообщения в Telegram-бот.
Естественно в amoCRM, давно уже есть встроенная интеграция с Telegram. Но абсолютно такая же схема применима для интеграции к примеру с сервисами email рассылок.
Способ 3: Программирование отправки вебхука через API
Этот способ подходит тем, кто умеет программировать или готов разобраться в коде.
Для реализации вам понадобится написать код на каком-либо языке программирования (Python, PHP, JavaScript или другом) и иметь доступ к API обоих сервисов.
Как отправить вебхук о новых заявках из Google Sheets в Telegram
Допустим вы ведёте учёт заявок в Google-таблице, и каждый раз, когда в неё добавляется новая строка с заявкой, вы хотите получать уведомление в Telegram-бот. Давайте разберём, как это запрограммировать.
Шаг 1: Создание Telegram-бота и получение токена:
Для начала нам нужно получить API токен (ключ) бота, который будет присылать сообщение с данными из таблицы. Для этого откройте Telegram, в строке поиска введите BotFather и следуя командам или создайте вашего бота в Telegram (и скопируйте его API токен) или отправьте команду /mybots и скопируйте API ключ уже существующего. Как создать бота в Телеграм и как добавить команду боту в Телеграм мы разобрали в предыдущих статьях. Токен выглядит как длинная строка из цифр и букв, разделённая двоеточием, например "123456789:ABCdefGHIjklMNOpqrsTUVwxyz". Скопируйте этот токен и сохраните где-нибудь, он понадобится нам дальше.
Важно: никогда не публикуйте токен бота в открытых источниках и не показывайте его посторонним людям, так как любой, кто знает токен, может управлять вашим ботом.
Шаг 2: Получение Chat ID для отправки сообщений
Теперь нам нужно узнать идентификатор чата, куда бот будет отправлять уведомления. Если вы хотите получать уведомления в личные сообщения (просто вам лично в Telegram), получить Chat ID очень просто.
В Telegram найдите бота с именем userinfobot или getmyid_bot. Оба эти бота созданы специально для того, чтобы показывать техническую информацию о пользователях и чатах. Откройте любого из них и отправьте команду /start или просто любое сообщение, например "Привет". Бот ответит вам сообщением, в котором будет указана вся информация о вас, включая ваш уникальный идентификатор. В ответе бота найдите строку с надписью "ID:" число, которое стоит после этой надписи, и есть ваш Chat ID.
Если вы хотите, чтобы уведомления приходили не вам лично, а в групповой чат или канал (например, чтобы вся команда видела новые заявки), то сначала вам нужно добавить вашего бота в группу или канал. А потом узнать ID этой группы или канала. Добавьте в ту же группу бота про которого мы уже писали — @getmyid_bot. Как только вы добавите этого бота, он автоматически отправит сообщение в чат с техническими данными, среди которых будет ID группы или канала.
Важный момент: Chat ID для групп и каналов всегда начинается с минуса. Например, это может быть "-123456789" или "-100123456789". Обязательно скопируйте этот ID вместе с минусом в начале, иначе сообщения не будут доставляться в группу.
После того как вы получили ID группы, можете удалить бота @getmyid_bot из группы — он больше не нужен. Ваш основной бот должен остаться в группе, чтобы иметь возможность отправлять туда сообщения.
Шаг 3: Подготовьте Google Таблицу
Первый путь - сделайте копию нашего шаблона-таблицы с заявками. Второй путь откройте вашу Google Таблицу, где вы ведёте учёт заявок.
Далее мы создадим скрипт, который будет автоматически отслеживать изменения в таблице и отправлять уведомления в Telegram. В вашей Google Таблице откройте верхнее меню и найдите пункт "Расширения" (Extensions). В выпадающем списке выберите "Apps Script". Откроется новая вкладка браузера с редактором кода.
В редакторе вы увидите настройку с названием Code.gs в левой панели, а в центральной части экрана будет текстовое поле с каким-то начальным кодом. Выделите весь этот код и удалите. Теперь скопируйте и вставьте в пустой редактор следующий код.
// Константы с настройками - укажите здесь ваши реальные данные
const TELEGRAM_TOKEN = 'ВАШ ТОКЕН ИЗ TELEGRAM';
const CHAT_ID = 'ВАШ CHAT ID'; // Замените на реальный chat ID, который вы получили от бота
// Настройки листа и выбор колонки, при заполнении которой будут отправляться данные
const SHEET_NAME = 'Заказы'; // Название листа, где ведётся учёт заявок
const KEY_COLUMN = 7; // Номер колонки-триггера (У нас это 7 = седьмая колонка, то есть G)
// Измените KEY_COLUMN на номер вашей колонки, после заполнения которой данные отпарвятся в Telegram
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const range = e.range;
const row = range.getRow();
const col = range.getColumn();
if (sheet.getName() === SHEET_NAME &&
row > 1 &&
col === KEY_COLUMN &&
(!e.oldValue || e.oldValue === '')) {
Utilities.sleep(1000);
const rowData = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
if (rowData[0] && rowData[1]) {
// ЗДЕСЬ МОЖНО НАСТРОИТЬ ФОРМАТ СООБЩЕНИЯ
// Формируем красивое текстовое сообщение для Telegram
// Используем эмодзи для наглядности и переносы строк для читаемости
// ${rowData[0]} - таким образом указывается колонка из которой будут получены данные
// Вы можете изменить эмодзи или заменить текстовые названия полей прямо в этом коде
// Если вы хотите добавить еще колонку из которой нужно получать и отправлять данные,
// то просто добавьте перед последним полем строчку`Название поля: ${rowData[укажите тут номер колонки]}\n` +
const message = `🆕 Новая заявка!\n\n` +
`📅 Дата: ${rowData[0]}\n` +
`👤 Имя: ${rowData[1]}\n` +
`📧 Email: ${rowData[2] || 'не указан'}\n` +
`📱 Телефон: ${rowData[3] || 'не указан'}\n` +
`👤 Адрес: ${rowData[4]}\n` +
`👤 Заказ: ${rowData[5]}\n` +
`💬 Статус: ${rowData[6] || 'отсутствует'}`;
// Отправляем сформированное сообщение в Telegram
sendToTelegram(message);
// Опционально: можно добавить визуальную отметку в таблице
// Например, окрасить строку в зелёный цвет, показывая что уведомление отправлено
// range.getSheet().getRange(row, 1, 1, sheet.getLastColumn()).setBackground('#d9ead3');
}
}
}
// Функция для отправки сообщения в Telegram через Bot API
function sendToTelegram(text) {
// Формируем URL для обращения к Telegram Bot API
// Токен вашего бота встраивается прямо в URL
const url = 'https://api.telegram.org/bot' + TELEGRAM_TOKEN + '/sendMessage';
// Подготавливаем данные для отправки (payload - "полезная нагрузка")
const payload = {
chat_id: CHAT_ID, // Кому отправить сообщение
text: text, // Текст сообщения
parse_mode: 'HTML' // Режим форматирования (поддержка HTML-тегов)
};
// Настраиваем параметры HTTP-запроса
const options = {
method: 'post', // Используем POST-запрос (вебхук!)
contentType: 'application/json', // Отправляем данные в формате JSON
payload: JSON.stringify(payload) // Превращаем объект payload в JSON-строку
};
// Отправляем запрос к Telegram API
// try-catch нужен для обработки возможных ошибок (нет интернета, неверный токен и т.д.)
try {
UrlFetchApp.fetch(url, options);
Logger.log('Сообщение успешно отправлено в Telegram');
} catch (error) {
// Если что-то пошло не так, записываем ошибку в лог
// Лог можно посмотреть в разделе Executions редактора Apps Script
Logger.log('Ошибка отправки в Telegram: ' + error);
}
}
// Тестовая функция для проверки работоспособности
// Эту функцию можно запустить вручную через кнопку Run в редакторе
function testTelegram() {
sendToTelegram('🧪 Тестовое сообщение из Google Sheets!\n\nЕсли вы видите это сообщение, значит интеграция настроена правильно и готова к работе.');
}
После вставки кода сохраните его, нажав на иконку дискеты в верхней панели. Система может попросить вас дать название проекту.
Шаг 4: Подставьте ваши данные в код
Теперь нужно немного изменить код, подставив в него ваши данные.
Найдите строку const TELEGRAM_TOKEN = 'ВСТАВЬТЕ_СЮДА_ВАШ_ТОКЕН'; и замените текст между кавычками на реальный токен вашего бота, который вы получили от BotFather на первом шаге.
Далее, если вы используете нашу таблицу, не будете менять название колонок и структуру таблицы, то можно перейти сразу к следующему шагу инструкции.
Далее найдите строку const CHAT_ID = 'ВСТАВЬТЕ_СЮДА_ВАШ_CHAT_ID'; и замените текст между кавычками на ваш Chat ID, который вы также получили ранее. Если это группа, не забудьте включить минус в начале, например const CHAT_ID = '-123456789';. Chat ID тоже должен оставаться в кавычках.
Если же вы используете свою таблицу с заявками или меняете наш шаблон, то нужно также дополнительно подставить свои данные.
SHEET_NAME. Здесь нужно указать точное название листа в вашей Google Таблице. Если ваш лист называется не "Заявки", измените значение на правильное.
KEY_COLUMN. Здесь нужно указать номер той колонки, заполнение которой будет запускать отправку уведомления.
Далее в коде найдите раздел, где формируется переменная message. Там есть комментарий "ЗДЕСЬ МОЖНО НАСТРОИТЬ ФОРМАТ СООБЩЕНИЯ". Это та часть кода, которая определяет, какой текст попадёт в ваш Telegram. Первая колонка (A) обозначается как rowData[0], вторая колонка (B) — как rowData[1], третья (C) — как rowData[2] и так далее. Вы можете изменить названия полей, эмодзи, структуру сообщения — всё, что находится внутри кавычек в переменной message.
Если, например, у вас в таблице всего четыре колонки, то вам нужно удалить лишние строки rowData[ ] и изменить у них нумерацию колонок в квадратных скобках под вашу.
Пример: вот так выглядел кусок кода, для наших 7 колонок.
А вот мы изменили количество колонок на 4 (помните, нумерация колонок, всегда начинается с нуля [0]), удалив лишние и название колонок под другую свою таблицу. Так как нумерация изменилась, то в последней строке rowData[6], поменяли порядковый номер на rowData[3] так как теперь у нас 4 колонки.
После того как вы внесли все изменения, обязательно сохраните код ещё раз, нажав на иконку дискеты.
И наоборот, eсли, у вас в таблице больше колонок, то просто перед последней строкой (колонкой) добавтье нужное вам количество в формате: `👤 Адрес: ${rowData[4]}\n` +
Только незабудте изменить нумерацию, как объясняли выше. Вот пример:
const message = `🆕 Новая заявка!\n\n` +
`📅 Дата: ${rowData[0]}\n` +
`👤 Название компании: ${rowData[1]}\n` +
`📧 Новая колонка: ${rowData[2] || 'не указан'}\n` +
`📧 Еще колонка: ${rowData[3] || 'не указан'}\n` +
`📧 Еще одна колонка: ${rowData[4] || 'не указан'}\n` +
`📧 Еще колонка: ${rowData[5] || 'не указан'}\n` +
`💬 И еще одна колонка: ${rowData[6] || 'отсутствует'}`;
Эта часть скрипта отвечает за оформление сообщения которое придет в Telegram и за подстановку данных. Получится что-то вроде этого:
Не забудте опять нажать на дискетку чтобы сохранить изменения.
Шаг 5: Создайте триггер в Google Sheets
В редакторе Apps Script посмотрите на левую панель. Там вы увидите несколько иконок. Найдите иконку в виде часов с надписью "Triggers" (Триггеры) и кликните на неё. Вы увидите пустой список и кнопку "Add Trigger" (Добавить триггер) в правом нижнем углу. Нажмите на эту кнопку. Настройте все, как на скриншоте. Сохраните.
Готово
Если все сделано верно, то каждый раз, когда вы будете заполнять новую строку в таблице и заполняете ключевое поле, система мгновенно отправит уведомление в нужный чат Telegram.
Заключение
Мы разобрали три способа сделать вебхук — от самого простого с готовыми интеграциями до программирования через API. Выбор способа зависит от ваших технических навыков, бюджета и конкретной задачи. Если оба ваших сервиса поддерживают вебхуки из коробки — используйте готовые решения, это займёт буквально пару минут. Если один из сервисов не поддерживает нужную интеграцию — попробуйте сначала реализовать отправку через Альбато. А для тех, кто готов погрузиться в код, всегда есть вариант с программированием через API.
Начните с простого примера — настройте уведомления о новых заявках из таблицы в Telegram, как мы показали в статье. Это займёт не больше пятнадцати минут, но даст вам реальное понимание того, как работает отправка вебхуков на практике. А дальше — применяйте эти знания для решения более сложных задач автоматизации в вашем бизнесе.