ショートリンクが午前3時に404を返し始めたとき、オンコールが既にいるチャットにアラートが届いてほしいはずです。多くのエンジニアリングチームにとってそれはDiscordであり、ヨーロッパのOpsや成長チームにとってはTelegramであることが多いです。Elidoは両方のBeta統合を提供しています。この記事では、何を貼り付けるか、どんなJSONが届くか、そして最初の1週間でチームが遭遇する3つの失敗パターンを解説します。
最初に2つの事実を確認します。第一に、どちらのコネクターもトークンの貼り付けのみで動作します。ベンダーのUIでウェブフックURLまたはボットトークンを生成し、Elidoに入力すると統合が有効になります。DiscordやTelegramのAPIがその機能を提供していないため、私たちは自動プロビジョニングを行いません。第二に、すべてのアラートはwebhooks機能を動かすのと同じイベントバスによって処理されるため、ペイロードの仕様は安定しており文書化されています。
この2つがBetaでLiveでない理由
Elidoの統合カタログは、1回のクリックで3つのことができるときに統合をLiveとしてマークします: ベンダーリソースの登録、適切なスコープの付与、切断時の削除です。Notion、Linear、Pipedrive はOAuthとリソースAPIを提供しているため該当します。
DiscordウェブフックとTelegramボットはそうではありません。DiscordのWebhooks API は特定のチャンネルでManage Webhooks権限を持つボットユーザーが必要で、私たちが操作できる同意フローがありません。Telegramはさらに難しく、BotFatherはマシンが読めるトークン発行機能のないチャットベースのUIです。そのため、ベンダー側で90秒のセットアップをお願いし、その後のすべてを私たちが担当します。トークンはエンベロープ暗号化されたストアに保存され、api-core webhook dispatcherの外には出ません。
Betaバッジは「動作する、ペイロードは安定している、ただし接続/切断のUXに1つ追加ステップがある」という意味です。今日自動プロビジョニングが必要なら、SlackはLiveで同じトランスフォーマーパイプライン上で動作しています。
セットアップ手順: まずDiscord
Discordでターゲットチャンネルを開き、歯車アイコンをクリックして連携サービス -> ウェブフック -> ウェブフックを作成する を選択します。elido-alertsのような名前を付け、必要に応じて/blog/coversからElidoのアバターをアップロードして、ウェブフックURLをコピーします。次のような形式です:
https://discord.com/api/webhooks/123456789012345678/AbCdEf-tokenstring
このURLは秘密情報です。これを持っている人は誰でもチャンネルに投稿できます。パスワードと同様に扱ってください。
Elidoに戻り、ワークスペース設定 -> 統合 -> Discord に移動します。URLを貼り付け、複数選択からイベントタイプを選んで(broken_link、click_threshold、scan_failure、redirect_chain_change、qr_scan_anomaly)保存します。フォームはまず合成テストイベントを実行します。Discordが204以外を返した場合、保存は失敗し、エラーがその場に表示されます。
Telegramは2ステップです。BotFatherとチャットを開いて/newbotを実行し、名前を付けてトークンをコピーします。7891234567:AAH-tokenstringのような形式です。次に、アラートを受け取りたいチャット(プライベートチャット、グループ、またはチャンネル)にボットを追加してメッセージを送ります。Elidoでトークンを貼り付け、「チャットを検索」をクリックし、ボットが見えるチャットのリストから選択して保存します。
「チャットを検索」ステップはTelegramのgetUpdatesを1回呼び出し、ボットが見たことのあるチャットIDを列挙します。リストが空の場合、ボットは追加されたがまだメッセージを受け取っていません - メッセージを送ってから再試行してください。
実際のペイロードの構造
ここが「チャットへのアラート」チュートリアルのほとんどが曖昧になる部分です。実際に届く内容はこれです。
Discordには従来のcontent文字列ではなく、イベントごとに1つのエンベッドを送信します。services/api-core/internal/webhooks/delivery/transformers.goのトランスフォーマーがこの構造を生成します:
{
"username": "Elido",
"embeds": [
{
"title": "Broken link detected",
"description": "https://elido.me/launch -> 404 Not Found",
"color": 15548997,
"timestamp": "2026-06-04T09:14:22.000Z",
"fields": [
{ "name": "Slug", "value": "launch", "inline": true },
{ "name": "Workspace", "value": "acme-prod", "inline": true },
{ "name": "Status", "value": "404", "inline": true },
{ "name": "First seen", "value": "2026-06-04 09:13:11 UTC" },
{ "name": "Last 5 redirects", "value": "blocked since 09:13:11" }
],
"footer": { "text": "Elido alerts - broken_link" },
"url": "https://elido.app/links/launch"
}
]
}
colorの整数値は16進数コードの10進数です。4つの重大度レベルを使用します: info 3447003(青)、success 2280516(緑)、warn 15844367(琥珀)、error 15548997(赤)。このマッピングについては後ほど詳しく説明します。
Telegramは異なります。Markdown V2は十数文字をエスケープする必要があってすぐ見づらくなるため、parse_mode: "HTML"を使用します。sendMessageの呼び出しは次のようになります:
{
"chat_id": -1001234567890,
"parse_mode": "HTML",
"disable_web_page_preview": true,
"text": "<b>Broken link detected</b>\n<code>elido.me/launch</code> -> 404\n\nSlug: <code>launch</code>\nWorkspace: <code>acme-prod</code>\nFirst seen: 2026-06-04 09:13:11 UTC\n\n<a href=\"https://elido.app/links/launch\">Open in Elido</a>"
}
アラートURLがリンクプレビューを展開しないようにdisable_web_page_previewをtrueに設定しています。オンコールのスレッドでインラインリンクプレビューは邪魔になります。
両方のトランスポートは同じバックオフで再試行します: 1秒、5秒、30秒、5分、30分。5回失敗した後、統合は自動的に一時停止されメールが送信されます。すべての試行をClickHouseにログとして記録し、observabilityガイドから照会できます。
重大度とカラーのマッピング
カラーはDiscordユーザーが一目で確認できる唯一のシグナルです。4つの重大度レベルを選択し、カラーをサポートするすべての統合で統一しています:
- info (#3B82F6、青) - APIを介して新しいリンクが作成された、最初の宛先スキャン、bioページが公開された。アクション不要、単なる情報提供。
- success (#22C55E、緑) - リンクチェッカーが復旧した、カスタムドメインの証明書が更新された、コンバージョン閾値に達した。
- warn (#F59E0B、琥珀) - クリック率が7日間のベースラインの3倍、リダイレクトチェーンが2ホップから4ホップに増えた、QRスキャン速度が80%低下。人間の確認が必要。
- error (#EF4444、赤) - broken_link、scan_failure(Google Safe Browsingが宛先にフラグを立てた)、カスタムドメインのTLS期限切れ、webhookディスパッチャーが5回試行後に諦めた。
Telegramはカラーをレンダリングしないため、代わりにメッセージの先頭に対応する絵文字を付加します: 青のダイヤモンド、緑のチェック、黄色の警告、赤のバツ。同じセマンティクス、異なるトランスポートです。クライアントで赤いイベントのみにTelegramアラートをフィルタリングしたい場合は、テスト内のバツ絵文字を検索してください。
よくある失敗パターン(と見分け方)
本番環境では3つのことがうまくいかなくなります。何を探すかわかれば簡単に修正できます。
トラフィックの多いウェブフックでのDiscordレートリミット。 Discordはウェブフック URLごとに毎秒50リクエスト、持続的に毎分約30リクエストを上限としています。バイラルキャンペーンの全click_thresholdにウェブフックを接続すると到達します。症状: アラートが30〜60秒の遅れを伴いバッチで届く、統合ログの429レスポンス。修正: イベントのスロットル(デフォルトはオフ)を有効にして、10秒間に発火したイベントを1つのエンベッドにまとめます。
Telegramボットのプライバシーモード。 プライバシーモードは新しいボットではデフォルトで有効で、ボットがグループ内で読めるメッセージにのみ影響します。送信sendMessageには影響しません。実際の落とし穴: ボットをグループに追加したとき、Telegramはそのchat_idがgetUpdatesに表示される前に、ボットが少なくとも1つのメッセージを受け取ることを要求します。「チャットを検索」が空を返す場合は、ボットにメッセージを送ってから再試行してください。チャンネル(グループでない)の場合は、投稿権限を持つ管理者としてボットを追加すれば、最初のメッセージは不要です。
トークンのローテーション。 両方のトランスポートはADR-0036のエンベロープ暗号化レイヤーを通じてシークレットを暗号化して保存します。平文はPostgresにもログにも保存されません。トークンが漏洩した場合(Slackでのスクリーンショット、あるべきでないDiscord監査ログエントリ)、ローテーションは2クリックです: ベンダーで失効させ、Elidoに新しい値を貼り付けます。統合行、イベントフィルター、ClickHouseの履歴はすべて統合UUIDに紐付いているためそのまま維持されます。
どちらをいつ選ぶか
チームがDiscordを使っているなら、Discordを使いましょう。エンベッド形式の方がリッチで、インラインフィールドはデスクトップとモバイルで予測通りに表示され、カラー重大度が無料で使えます。
チームがTelegramを使っているなら(ヨーロッパのOpsチーム、開発者チーム、東欧、暗号通貨関連製品でよく見られます)、Telegramを使いましょう。getUpdatesとsendMessage APIは非常にシンプルで、HTMLモードは95%のフォーマットニーズをカバーします。
両方必要なら、両方使いましょう。各統合は独自のイベントフィルターを持つ別の行なので、error重大度のイベントをDiscordにルーティングし、警告をTelegramの「バックグラウンドノイズ」グループに送ることができます。まさにそうしているユーザーもいます。
チャット以外のもの - CRM更新、マーケティング自動化、BIパイプライン - にはZapierとwebhooks APIが適切なツールです。チャットはイベントに反応する人間のためのものです。ウェブフックはイベントに反応するシステムのためのものです。
使うべきでないケース
Discordや Telegramを唯一のリンク腐敗モニターとして使わないでください。チャットは一時的なものです。アラートが忙しいローンチ中に流れてしまうと、後で見つけることができません。チャットは実際のオブザーバビリティスタックの上の高シグナルレイヤーとして使用してください: Elidoのリンクチェッカーで合成チェック、DatadogやSentryでトレース、人間が本当に見る必要があるイベントのためにチャットを使います。
アラートペイロードに個人情報を含めないでください。デフォルトのペイロードにはリンクのスラグとワークスペースIDが含まれ、クリックIPや訪問者識別子は絶対に含まれません。APIを通じてカスタムメタデータを添付し、そのメタデータに個人データが含まれている場合、それはDiscordまたはTelegramのチャット履歴に残ります。どちらのベンダーもほとんどの企業のDPAリストには入っていません。運用データのみに絞ってください。
ロードマップ
Discordの自動プロビジョニングは、ウェブフックコンシューマーではなくDiscordボットとして展開することで実現可能です。プロトタイプを作成しました。鍵は、ユーザーがOAuth風の同意フローでElido ボットにチャンネルへのアクセスを許可し、その後私たちがサーバー側でウェブフックを作成できるようにすることです。来四半期の計画にはありませんが、これによりDiscordがLiveに移行できます。
Telegramには明確な道がありません。BotFatherは人間専用のUIであるため、完全な自動プロビジョニングは不可能です。ロードマップの更新はchangelogにあります。
まだサポートしていないチャットプラットフォームが必要な場合(Mattermost? Microsoft Teams via Power Automate?)、/aboutでチームにお問い合わせください。プランとシート制限は価格ページに記載されています。DiscordとTelegramはProプラン以上で利用できます。
よくある質問
ElidoのショートリンクアラートをDiscordチャンネルに送信するにはどうすればよいですか?
Discordのチャンネル設定でウェブフックを作成し、URLをコピーしてElido の/integrations のフォームに貼り付けます。受け取りたいイベントタイプ(broken-link、click-threshold、scan-failure)を選択して保存します。最初のアラートは1分以内に届き、リンクのスラグ、イベントペイロード、Elido ダッシュボードへの直接リンクを含む色付きのエンベッドとしてフォーマットされます。
DiscordとTelegramが他のElido統合のほとんどがLiveなのにBetaとして表示されているのはなぜですか?
どちらのベンダーも、ウェブフックやボットを代わりに自動登録できるAPIを提供していません。トークンやURLを一度貼り付けるだけで、私たちはそれを暗号化して保存します - それが接続の全体です。NotionやLinearのようなLive統合では、ベンダー側でリソースのプロビジョニングと削除をAPI経由で行えます。DiscordとTelegramはまだそれができないため、UXが同等になるまでBetaのままにしています。
Discordウェブフックアラートのレートリミットはどのくらいですか?
Discordはウェブフック URLごとに毎秒50リクエストを許可しており、ボットトークンごとに別のグローバル上限があります。Elido は10秒以内に5件以上のイベントが発生した場合、連続したイベントを1つのエンベッドにまとめます。制限を超えた場合、Discordは429を返し、再送前にRetry-Afterヘッダーを尊重します。
Telegramボットのプライバシーモードはリンクアラートをブロックしますか?
プライバシーモードはグループ内の人間ユーザーのメッセージにのみ影響し、ボットからの送信sendMessage呼び出しには影響しません。Elido はセットアップ時に指定したchat_idにボットトークンを使ってアラートを送信するので、プライバシーモードは無関係です。覚えておくべき点は、最初のアラートが届く前に、ボットがチャットに追加されてメッセージ送信権限を持っている必要があることです。
漏洩したTelegramボットトークンをアラート履歴を失わずに切り替えることはできますか?
はい。BotFatherに/revokeを実行して新しいトークンを生成し、Elidoの同じ統合行に貼り付けます。chat_idとイベントフィルターは統合レコードに紐付けられているため、/docs/guides/observability の過去のアラートログは引き続き照会できます。古いトークンはBotFatherが切り替えた瞬間に機能しなくなるので、メンテナンスウィンドウ中に切り替えを行ってください。
Elidoを試す
URLを貼り付けて短縮リンクを取得
登録不要。リンクは30日間有効。永久に保存するには登録してください。
Free、登録不要 · 1日あたり2件