---
title: "独自のアラートメッセージとWebhookの設定"
slug: "webhooks-and-messages"
kind: "HELP_ARTICLE"
category: "alerts"
locale: "ja"
canonical: "https://app.forecastcity.com/ja/help/alerts/webhooks-and-messages"
published: "2026-09-08T17:58:35.210Z"
updated: "2026-10-27T23:57:01.145Z"
description: "アラートメッセージの内容を確認し、独自の文面や変数を追加する方法と、Webhookを使って自作のソフトウェアやDiscord、Slackにアラートを送信する方法を解説します。"
---

# 独自のアラートメッセージとWebhookの設定

すべてのアラートは、チェックを入れたすべての通知先に同じメッセージを送信します。初期状態では、何が起きたか、その時点の価格、アラートが稼働し続けるかどうかが記載されます。トレード計画のメモを追加しておけば、チャートを開く前に予定していた行動を確認できます。アラートとメッセージの設定はシンプルかつ迅速で正確です。エディターに直接入力するか、**AI Trading Assistant**に音声やテキストで伝えて設定できます。

自作のソフトウェアやDiscord、Slackを利用している場合は、Webhookを使って各アラートを自動送信できるため、手動でコピーする必要はありません。このガイドではメッセージとWebhookの両方を解説します。

例: 5mチャートで価格が1.09を上抜けたときにトリガーされるEURUSDのアラートを考えます。

## 自動メッセージの内容

**Message**の入力欄が空欄のとき、アラートがトリガーされると自動的にメッセージが作成されます。上記の例では次のように表示されます。

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

1行目には何が起きたかがアラートエディターの表現で示されます。2行目にはその瞬間の数値が入り、最後の行にはアラートが稼働し続けるかどうかが記載されます。この例では**Once only**を使用しているため、アラートは停止しています。他のTrigger設定では、最後の行は「This alert stays on.」（このアラートは稼働を継続します）となります。

他の種類のアラートも同じ順序で記載されます。1行目とその下の数値の行の例をいくつか挙げます。

-   ライン: 「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.」
    

複数の条件を持つアラートでは、いくつの条件が満たされたかが示された後、満たされた各条件が1行ずつ記載されます。

```
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.
```

さらに条件が多い場合、1行目は「all 3 conditions met」（3つすべての条件を満たした）や「2 of 3 conditions met」（3つのうち2つの条件を満たした）のようになります。**or**などで1つの条件だけが満たされた場合は、1行目にその条件が示され、続けてその数値が記載されます。

## メッセージの作成

1.  アラートエディターを開き、**Options**タブに移動します。
    
2.  **Message**の行をクリックします。空欄の間はAutoと表示されています。クリックするとその下にテキスト入力欄が開きます。
    
3.  メッセージを入力します。最大400文字まで入力できます。
    
4.  トリガー時の実際の値を差し込むには、入力欄の下にある**Available variables**を開きます。二重波括弧を含めて変数を正確にコピーします。
    

![Optionsタブで開かれたMessageの行。空の入力欄、その下の説明文、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**: メッセージに差し込めるリアルタイムの変数一覧です。
    

入力した文面が1行目になり、その下に自動テキストが続きます。たとえば、次のメッセージを入力したとします。

```
{{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>1行目が太字で表示され、その下に数値が続きます。</td></tr><tr><td><strong>Notify my devices</strong></td><td>1行目がタイトルになり、その下に残りの行が続きます。</td></tr><tr><td><strong>Send to MetaTrader</strong></td><td>1行目がタイトルになり、その下に残りの行が続きます。メッセージの横に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」のように記載されます。タイムゾーンが異なる場合は、**Your profile**ページの**Timezone**設定で自分のタイムゾーンを選択します。タイムゾーンが未設定の場合は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>Webアドレス</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}}`はアラートが再セットされて監視を再開するたびに1つ増えるカウンターです。`{{forecast_summary}}`を含むメッセージには、サマリー自体に何が起きたかが含まれているため、下に自動テキストは追加されません。

ほとんどの4CM-AIアラートには単一の価格がないため、`{{price}}`と`{{close}}`は空になります。`{{time_iso}}`はUTCを使用するため、画面上の時計と異なる場合があります。存在しない変数は入力した文字列のまま残ります。たとえば`{{prices}}`と誤って入力すると、そのまま`{{prices}}`として届きます。

## Webhookへのアラート送信

Webhookを使うと、各アラートを指定したWebアドレスに送信し、自作のソフトウェアやDiscordのチャンネル、Slackのチャンネルで受信できます。ご利用中のプランにWebhookが含まれている必要があります。

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にチェックを入れ、アドレスを入力してFormatをRaw JSONに設定した状態。ボディ入力欄を空欄にするとデフォルトのデータが送信されます。

1.  受信側が待ち受けているアドレスです。標準ポート（80または443）を使用します。
    
2.  **Format**: 自作のソフトウェアにはRaw JSON、DiscordやSlackにはそれぞれのサービスを選択します。
    

ボディの入力欄を空欄にしておくと、上記の表のすべての変数に`alertId`と`triggerId`を加えたJSONオブジェクトが受信側に届きます。この2つはアラート自体と今回のトリガーを識別するIDです。各フィールドに依存する処理を作る前に、実際の送信データを1度確認してください。

入力欄の下には、リクエストの送信元となるサーバーアドレスが表示されます。受信側で既知のアドレスのみを受け付ける設定にしている場合は、このアドレスを許可リストに追加します。

### アドレスの要件

-   標準ポート（httpは80、httpsは443）の公開アドレスであること。他のポート、localhost、プライベートネットワークのアドレスには送信されません。
    
-   アドレス内にユーザー名やパスワードを含めないこと。
    
-   そのアドレス自体から3秒以内に応答があること。別のアドレスへのリダイレクトは失敗とみなされます。
    

エディターがチェックするのは、アドレスが`http://`または`https://`で始まっているかどうかだけです。その他の要件はメッセージの送信時に確認されるため、実際のアラートでアドレスをテストしてください。価格アラートおよびテクニカルアラートでは、受信側で一時的なエラーが発生した場合、最大2回まで再試行されます。4CM-AIアラートのメッセージは、受信側ですでに処理が実行されている可能性があるため、タイムアウトやサーバーエラーの後に再送されません。

## 独自のWebhookボディの作成

ボディの入力欄には、メッセージと同じ変数を使ったテンプレートを記述できます。上限は2000文字です。入力欄にはそれ以上入力できますが、2000文字を超えると保存時に拒否されます。

**Raw JSON**で、受信側が小さなオブジェクトを想定している場合は、次のようなボディを指定できます。

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

変数はプレーンテキストとして展開されます。値に引用符や改行が含まれていると、JSONの形式が崩れることがあります。有効なJSONではないボディは、プレーンテキストとして送信されます。

Discordのチャンネルに送る場合は、**Format**設定を**Discord**にし、そのチャンネルのWebhookアドレスを使用します。そしてボディの入力欄に短い文を入力します。例:

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

Slackの場合は**Slack**を選択し、同じように記述します。ForecastCityが各サービスに応じた形式にテキストを変換して送信します。入力欄を空欄にした場合は、どちらのサービスにも上記のアラートメッセージが届き、最終行にUTCの時刻が付きます。

## 送信結果の確認

1.  アラートがトリガーされるのを待ち、Alertsパネルの**Log**タブを開きます。
    
2.  受信側に届いた内容と、Logの記録（起きた内容、シンボル、時刻）を照らし合わせます。
    

Logにはアラートがトリガーされたことが記録されますが、受信側がメッセージを受け付けたかどうかまでは表示されないため、受信側のログもあわせて確認します。`{{prices}}`のように波括弧がそのまま残っている場合は、変数名の綴りが間違っています。受信側がボディを拒否した場合は、JSONの形式を確認します。

## 知っておきたいポイント

-   メッセージはチェックを入れたすべての通知先に送られます。WebhookのボディはWebhookにのみ送られます。
    
-   Discordは最大1900文字、Slackは最大3000文字まで表示されます。それを超えるテキストは切り詰められます。
    

## 関連ガイド

-   [アラートの通知先の設定](<https://app.forecastcity.com/ja/help/alerts/notification-delivery>)
    
-   [アラートが届かない原因の確認](<https://app.forecastcity.com/ja/help/alerts/trigger-log-and-troubleshooting>)
    
-   [最初の価格アラートの作成](<https://app.forecastcity.com/ja/help/alerts/first-price-alert>)
