---
title: "Как написать текст оповещения и настроить вебхуки"
slug: "webhooks-and-messages"
kind: "HELP_ARTICLE"
category: "alerts"
locale: "ru"
canonical: "https://app.forecastcity.com/ru/help/alerts/webhooks-and-messages"
published: "2026-09-08T17:58:35.210Z"
updated: "2026-10-28T00:23:43.582Z"
description: "Узнайте, что пишется в сообщении оповещения, добавьте свой текст и переменные, а также настройте отправку вебхуков в свои программы, Discord и Slack."
---

# Как написать текст оповещения и настроить вебхуки

Каждое оповещение отправляет одно сообщение во все отмеченные вами каналы. Само по себе сообщение указывает, что произошло, какая цена была в этот момент и продолжает ли работать оповещение. Добавьте заметку о своём торговом плане, чтобы сразу вспомнить идею ещё до открытия графика. Настроить оповещение и его сообщение можно просто, быстро и точно: введите текст в редакторе либо скажите голосом или напишите в **AI Trading Assistant**.

Если вы используете собственную программу, Discord или Slack, вебхук отправит каждое оповещение и туда, без ручного копирования. В этом руководстве описаны оба инструмента.

Пример: оповещение по EURUSD, которое срабатывает, когда цена пересекает уровень 1.09 снизу вверх на графике 5m.

## Что содержит автоматическое сообщение

Если поле **Message** пустое, оповещение формирует сообщение автоматически в момент срабатывания. Для нашего примера текст выглядит так:

```
EURUSD crossed above 1.09
Price 1.0901.
This alert is now off. It was set to fire once.
```

Первая строка сообщает, что произошло, словами редактора оповещений. Во второй строке приводятся значения на момент срабатывания. Последняя строка указывает, продолжает ли работать оповещение. В примере выбран режим **Once only**, поэтому оповещение выключается. При других вариантах настройки Trigger последняя строка имеет вид «This alert stays on.» (оповещение остаётся включённым).

Остальные оповещения строятся в том же порядке. Вот несколько примеров первых строк и следующих за ними строк со значениями:

-   Линия: «GBPJPY touched 1h Resistance R1» и «Price 210.16, line at 210.20.»
    
-   Пробой линии: «GBPJPY broke above 1h Resistance R1» и «The 1h candle closed at 210.32, above the line at 210.20.»
    
-   Индикатор: «BTCUSD: 1h RSI(14) crossed above 70» и «RSI(14) was 71.4 when the 1h candle closed at 105240.50.»
    
-   Изменение прогноза: «GBPJPY: 1h forecast turned bearish» и «Before: bullish above 209.80. Now: bearish below 209.40.»
    

Оповещение с несколькими условиями сначала сообщает, сколько условий выполнилось, а затем выводит отдельную строку для каждого выполненного условия:

```
BTCUSD: both conditions met
• Price crossed above 105000: the 1h candle closed at 105240.50
• 1h RSI(14) is above 55 (now 58.2)
This alert stays on.
```

Если условий больше, первая строка имеет вид, например, «all 3 conditions met» (выполнены все 3 условия) или «2 of 3 conditions met» (выполнено 2 из 3 условий). Когда выполнилось только одно условие, например со связкой **or**, в первой строке указывается это условие, а ниже следуют его значения.

## Как написать собственное сообщение

1.  Откройте редактор оповещений и перейдите на вкладку **Options**.
    
2.  Нажмите на строку **Message**. Пока поле пустое, в строке отображается Auto. Под ней откроется текстовое поле.
    
3.  Введите текст сообщения. Поле вмещает до 400 символов.
    
4.  Чтобы подставить актуальное значение в момент срабатывания, откройте список **Available variables** под полем. Скопируйте переменную точно, вместе с двойными фигурными скобками.
    

![Открытая строка Message на вкладке Options с пустым текстовым полем, подсказкой под ним и разделом Available variables.](https://m.forecastcity.com/t/tnt_forecastcity/media/b4/b480142e20ce43cec05e3313cedc9941ceea0b334c3b3dda3ae8680099c0f69b.png)

Открытое пустое поле Message: в таком виде оповещение отправляет автоматическое сообщение.

1.  **Automatic message**: пустое текстовое поле. Введите сюда свой текст или оставьте поле пустым.
    
2.  Строка под полем: «Leave it blank and the alert says what happened and at what price. A message of your own is sent first, with that under it.» (если оставить поле пустым, оповещение само напишет, что произошло и по какой цене; ваш собственный текст отправляется первой строкой, а автоматический добавляется ниже).
    
3.  **Available variables**: переменные с актуальными значениями, которые можно вставить в сообщение.
    

Ваш текст становится первой строкой, а следом за ним идёт автоматический текст. Например, такое сообщение:

```
{{symbol}} on {{timeframe}}: check the 1h trend before entering.
```

приходит в следующем виде:

```
EURUSD on 5m: check the 1h trend before entering.
EURUSD crossed above 1.09. Price 1.0901.
This alert is now off. It was set to fire once.
```

Цена и сработавшее условие уже содержатся в строках под вашим текстом. Используйте собственное сообщение для того, чего нет в автоматических строках, например для напоминания о вашем торговом плане.

Введённое сообщение также становится названием оповещения в списке Alerts. Если сообщение не задано, в списке отображается название, составленное из условия. Для ценового уровня оно короткое, например «EURUSD crossing up 1.09». Для линии или нескольких условий оно записывается так же, как в редакторе, например «GBPJPY: 1h Price touches 1h Resistance R1». Если вы измените условие, это название обновится вместе с ним. При повторном открытии оповещения поле **Message** остаётся пустым. Оповещения, сохранённые ранее без текста сообщения, также отображаются в списке с такими названиями.

## Как выглядит сообщение в разных каналах

Во все каналы приходит одно и то же сообщение, оформленное под конкретный канал:

<table><thead><tr><th>Канал</th><th>Что отображается</th></tr></thead><tbody><tr><td>Уведомление в приложении</td><td>Первая строка полужирным шрифтом, а под ней строки со значениями.</td></tr><tr><td><strong>Notify my devices</strong></td><td>Первая строка в качестве заголовка, остальные строки под ней.</td></tr><tr><td><strong>Send to MetaTrader</strong></td><td>Первая строка в качестве заголовка, остальные строки под ней. Рядом с сообщением MetaTrader показывает собственное время.</td></tr><tr><td><strong>Telegram</strong></td><td>Текст сообщения, время в вашем часовом поясе и ссылка на график.</td></tr><tr><td><strong>Send email</strong></td><td>Текст сообщения с датой и временем в вашем часовом поясе.</td></tr><tr><td><strong>Webhook URL</strong></td><td>В Discord и Slack приходит сообщение со временем в UTC. В режиме <strong>Raw JSON</strong> ваша программа получает описанные ниже переменные.</td></tr></tbody></table>

В Telegram время записывается так: «24 Sep, 11:02 London time». Если часовой пояс указан неверно, выберите свой в настройке **Timezone** на странице **Your profile**. Если ваш часовой пояс не задан в ForecastCity, время выводится в UTC.

Ссылка в сообщении Telegram, письме по электронной почте, уведомлении на телефоне или всплывающем окне MetaTrader открывает график этого инструмента вместе с панелью Alerts. Для большинства оповещений 4CM-AI она открывает график в режиме просмотра срабатывания (**Alert observation**).

## Как добавить актуальные значения с помощью переменных

В момент срабатывания оповещения каждая переменная заменяется своим значением. Вот список переменных из раздела **Available variables**:

<table><thead><tr><th>Переменная</th><th>Что подставляется</th><th>Пример</th></tr></thead><tbody><tr><td><code>{{symbol}}</code></td><td>Тикер инструмента</td><td>EURUSD</td></tr><tr><td><code>{{price}}</code> и <code>{{close}}</code></td><td>Цена в момент срабатывания оповещения</td><td>1.0901</td></tr><tr><td><code>{{condition_text}}</code></td><td>Что произошло, без указания тикера</td><td>Price crossed above 1.09</td></tr><tr><td><code>{{condition}}</code></td><td>Краткий код условия</td><td>CROSSING_UP 1.09</td></tr><tr><td><code>{{timeframe}}</code></td><td>Таймфрейм оповещения</td><td>5m</td></tr><tr><td><code>{{time_iso}}</code></td><td>Дата и время в UTC</td><td>2026-09-24 10:02 UTC</td></tr><tr><td><code>{{time}}</code></td><td>То же время в секундах (для программ)</td><td>1790244120</td></tr><tr><td><code>{{time_now}}</code></td><td>Момент отправки сообщения в виде числа</td><td>1790244121</td></tr><tr><td><code>{{exchange}}</code></td><td>Источник котировок</td><td>TwelveData</td></tr><tr><td><code>{{status}}</code></td><td>Продолжает ли работать оповещение</td><td>This alert stays on.</td></tr><tr><td><code>{{alert_url}}</code></td><td>Ссылка на график инструмента с вашими оповещениями</td><td>веб-адрес</td></tr><tr><td><code>{{name}}</code></td><td>Ваше сообщение с подставленными значениями переменных или название из списка Alerts</td><td>EURUSD crossing up 1.09</td></tr></tbody></table>

Для линии переменная `{{condition_text}}` принимает вид «Price touched 1h Resistance R1». Если условий несколько, выполненные условия соединяются словом and. После срабатывания оповещения с режимом **Once only** переменная `{{status}}` содержит строку «This alert is now off. It was set to fire once.». Для оповещения с несколькими условиями, линией или индикатором переменная `{{condition}}` возвращает значение `TREE`. Эта переменная служит кодом для программ.

В оповещениях 4CM-AI переменная `{{forecast_summary}}` кратко описывает изменение прогноза, а `{{forecast_symbol}}` возвращает тикер прогноза. Переменная `{{forecast_cycle}}` представляет собой счётчик, который увеличивается каждый раз, когда оповещение начинает новый цикл наблюдения. Если в сообщении есть переменная `{{forecast_summary}}`, автоматические строки снизу не добавляются, так как сводка уже описывает произошедшее.

В большинстве оповещений 4CM-AI переменные `{{price}}` и `{{close}}` остаются пустыми, поскольку у них нет одной конкретной цены срабатывания. Переменная `{{time_iso}}` использует время UTC, поэтому оно может отличаться от часов на вашем экране. Несуществующая переменная остаётся в тексте как есть: написанная с опечаткой `{{prices}}` придёт как `{{prices}}`.

## Как отправлять оповещения на вебхук

Вебхук отправляет каждое оповещение на веб-адрес (endpoint), где его принимает ваша программа, канал Discord или канал Slack. Поддержка вебхуков должна входить в ваш тариф подписки.

1.  На вкладке Options в разделе Notifications установите флажок **Webhook URL**. Появятся поле адреса, выбор формата Format и поле тела запроса.
    
2.  Вставьте адрес вашего получателя. Он должен начинаться с `http://` или `https://`.
    
3.  Задайте для настройки **Format** значение **Raw JSON** и оставьте поле тела запроса пустым.
    
4.  Нажмите кнопку **Create** (или **Save**, если редактируете существующее оповещение).
    

![Отмеченный флажок Webhook URL с введённым адресом, форматом Raw JSON и пустым полем тела запроса.](https://m.forecastcity.com/t/tnt_forecastcity/media/9e/9e711afc65b24ebfe70a8e091cc4006b5f9d7d57d50d61b67e5ee920f8ab4877.png)

Включённый параметр Webhook URL с адресом и форматом Raw JSON. При пустом поле тела запроса отправляются данные по умолчанию.

1.  Адрес, который слушает ваш получатель. Используйте стандартные порты: 80 или 443.
    
2.  **Format**: выберите Raw JSON для собственной программы либо Discord или Slack для соответствующих сервисов.
    

Если оставить поле тела запроса пустым, получатель примет объект JSON со всеми переменными из таблицы выше, а также полями `alertId` и `triggerId`. Эти два поля идентифицируют само оповещение и конкретное срабатывание. Прежде чем настраивать логику обработки полей на своей стороне, проверьте один реальный запрос.

Под полем редактор показывает IP-адрес сервера, с которого приходят наши запросы. Добавьте его в список разрешённых (allowlist), если ваш получатель принимает запросы только с известных адресов.

### Требования к адресу

-   Публичный адрес со стандартным портом: 80 для http, 443 для https. Сообщения на другие порты, на localhost или на адреса в частных сетях не отправляются.
    
-   Внутри адреса не должно быть имени пользователя или пароля.
    
-   Ответ должен прийти в течение 3 секунд с самого указанного адреса. Перенаправление (redirect) на другой адрес считается ошибкой доставки.
    

Редактор проверяет только то, что адрес начинается с `http://` или `https://`. Остальные требования проверяются в момент отправки сообщения, поэтому протестируйте свой адрес на реальном оповещении. Для ценовых и технических оповещений при временной ошибке на стороне получателя отправка повторяется ещё до двух раз. Для оповещений 4CM-AI после таймаута или ошибки сервера сообщение повторно не отправляется, поскольку ваш получатель уже мог выполнить действие по первому запросу.

## Как написать собственное тело запроса для вебхука

В поле тела запроса можно вписать шаблон с теми же переменными, что и в обычном сообщении. Максимальная длина составляет 2000 символов. В само поле можно ввести и больше текста, но при сохранении слишком длинное тело запроса не пройдёт проверку.

В режиме **Raw JSON** для получателя, который ждёт компактный объект, тело запроса может выглядеть так:

```
{"symbol":"{{symbol}}","condition":"{{condition_text}}","time":"{{time_iso}}","source":"ForecastCity"}
```

Значения переменных подставляются как обычный текст. Если в значении встретятся кавычки или перенос строки, это может нарушить синтаксис JSON. Тело запроса, которое не является корректным JSON, отправляется как обычный текст.

Для канала Discord задайте для настройки **Format** значение **Discord** и укажите URL вебхука этого канала. Затем напишите короткую строку в поле тела запроса, например:

```
{{symbol}}: {{condition_text}}. Open your alerts: {{alert_url}}
```

Для Slack выберите вариант **Slack** и заполните поле таким же образом. ForecastCity автоматически обернёт ваш текст в формат, который ожидает выбранный сервис. Если оставить поле пустым, в оба сервиса придёт обычное сообщение оповещения, как показано выше, со временем в UTC в последней строке.

## Как проверить результат

1.  Дождитесь срабатывания оповещения и откройте вкладку **Log** на панели Alerts.
    
2.  Сравните данные, которые пришли вашему получателю, с записью на вкладке Log: что произошло, по какому инструменту и в какое время.
    

Вкладка Log показывает сам факт срабатывания оповещения. Она не показывает, принял ли сообщение ваш получатель, поэтому проверьте также журнал на стороне получателя. Если в тексте остались фигурные скобки, например `{{prices}}`, значит, в имени переменной допущена опечатка. Если получатель отклоняет тело запроса, проверьте корректность JSON.

## Полезно знать

-   Текст из поля сообщения отправляется во все отмеченные каналы. Текст из поля тела запроса вебхука отправляется только на вебхук.
    
-   Discord отображает до 1900 символов, а Slack до 3000 символов. Более длинный текст обрезается.
    

## Связанные руководства

-   [Как выбрать, куда приходит оповещение](<https://app.forecastcity.com/ru/help/alerts/notification-delivery>)
    
-   [Как выяснить, почему оповещение не пришло](<https://app.forecastcity.com/ru/help/alerts/trigger-log-and-troubleshooting>)
    
-   [Как создать первое ценовое оповещение](<https://app.forecastcity.com/ru/help/alerts/first-price-alert>)
