Microsoft TeamsのIncoming Webhookが2025年末に廃止へ 、Workflowsへの移行方法を解説
目次
はじめに
こんにちは。今回は、Microsoft Teamsの「Incoming Webhook」機能が2025年末に廃止されることと、それに伴う「Workflows」への移行についてお話しします。
まず簡単にMicrosoft Teamsについてご説明します。TeamsはMicrosoftが提供するコミュニケーションツールで、チャットや通話、複数人での会議ができるサービスです。APIを使って様々な拡張も可能で、多くの企業で利用されています。実はTeamsは2017年3月に一般提供を開始した比較的新しいサービスですが、急速に普及しています。2022年1月の時点で月間アクティブユーザー数は2億7,000万人を超え、多くの人に利用されています。私自身も社外の方と話す際、「Teamsって何?」と聞かれることは減り、今では広く知られたサービスになったと感じています。
さて、Teamsには「Incoming Webhook」というAPI機能があります。ご利用中の方は以下のようなアイコンや通知画面を見たことがあるかもしれません。


この機能は、外部のシステムやサービスからTeamsのチャネルへ簡単にメッセージを送信できる仕組みです。設定したURLを叩くだけで、Teamsのチャネルにメッセージが届きます。
しかし、この「Incoming Webhook」機能は2025年末に廃止されることが公式に発表されました。これは確定している情報です。そこで今回は、Webhook廃止に伴い、どのように「Workflows」へ移行する方法についてご説明します。
なぜ「Incoming Webhook」機能機能を廃止するのか
Microsoftが「Incoming Webhook」機能を廃止する理由は、大きく分けてセキュリティの強化とサービスの将来に向けた拡張性の向上にあります。
具体的には、Microsoftは「Secure Future Initiative」という全社的なセキュリティ強化の取り組みを進めています。この流れに合わせて、Teamsの基盤もより安全で柔軟に進化させようとしているのです。これまでの「Incoming Webhook」やOffice 365 Connectorsの仕組みは、WebhookのURLの形式やメッセージの送信形式に制約があり、これからの高度なセキュリティ要件や多様な連携ニーズには対応が難しい状況でした。
簡単に言えば、セキュリティをより強化するために、旧来のWebhook機能を廃止し、新しい仕組みへ移行する必要があるということです。
「Workflows」へ移行する方法
正直なところ、「Incoming Webhook」機能の廃止は残念に思います。しかし、Microsoftが公式に発表した方針である以上、私たちユーザーとしてはそれに対応していく必要があります。そこでこの章では、Workflowsを使ってTeamsのチャンネルにメッセージを送る方法を、ゼロから丁寧に解説していきます。
初心者の方でもわかるように、画面操作を交えながら順を追って説明します。最後には、実際に動作するソースコードも紹介しますので、実務での参考にもしていただければと思います。
準備編
1.まずはMicrosoft Teams上からのWorkflowsアプリに移動してください

2.次に少し下にスクロールして、「Webhook 要求を受信するとチャネルに投稿する」をクリックしてください。

3.次に「フロー名」を入力して、「次へ」ボタンをクリックしてください

4.「Microsoft Teams チーム」と「Microsoft Teams チャネル」のアイテムを選択してください。そのあとは「フローの作成」ボタンを押下してください

この際、選択できるチャンネルは「標準 -チームの全員がアクセスできます」に設定した物しか選択できません。

5.フロー作成完了後、以下のようにURLが表示されるのでコピーします。

これで準備完了です。
ソースコード(VBA)
VBAでチャンネルにメッセージを送るコードは以下の通りです。
Dim xhr As Object
Dim jsonBody As String
Dim flowUrl As String
Dim message As String
flowUrl = "[[「Workflows」へ移行する方法の準備編で取得したURL]]"
message = "メッセージ本文"
' JSONデータを作成 (Adaptive Card のフォーマット)
jsonBody = "{""type"":""message"",""attachments"":[" & _
"{" & _
"""contentType"":""application/vnd.microsoft.card.adaptive""," & _
"""contentUrl"":null," & _
"""content"":{" & _
"""$schema"":""http://adaptivecards.io/schemas/adaptive-card.json""," & _
"""type"":""AdaptiveCard""," & _
"""version"":""1.4""," & _
"""body"":[" & _
"{" & _
"""type"":""TextBlock""," & _
"""text"":""" & message & """" & _
"}" & _
"]" & _
"}" & _
"}" & _
"]}"
' XMLHTTPオブジェクトの作成
Set xhr = CreateObject("MSXML2.XMLHTTP")
' HTTPリクエストを実行
With xhr
.Open "POST", flowUrl, False
.SetRequestHeader "Content-Type", "application/json"
.Send jsonBody
End With
' 応答を確認
If xhr.status = 200 Then
MsgBox "メッセージ送信の通知送信失敗: " & xhr.status & " - " & xhr.StatusText, vbCritical
End If
' オブジェクトの解放
Set xhr = Nothing
上記のコードを実行して、チャンネルに以下のように送信されれば成功です。

ソースコード(Laravel)
Laravelでチャンネルにメッセージを送るコードは以下の通りです。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
class MessageController extends Controller
{
/**
* Workflowsにメッセージを送信するAPIエンドポイント。
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function sendMessage(Request $request)
{
$flowUrl = "[[「Workflows」へ移行する方法の準備編で取得したURL]]"
$message = "メッセージ本文";
// URLが設定されていない場合はエラーを返します。
if (!$flowUrl) {
return response()->json(['success' => false, 'message' => 'Flow URLが設定されていません。'], 500);
}
// Adaptive CardのJSONペイロードを構築します。
$jsonBody = [
"type" => "message",
"attachments" => [
[
"contentType" => "application/vnd.microsoft.card.adaptive",
"contentUrl" => null,
"content" => [
'$schema' => "http://adaptivecards.io/schemas/adaptive-card.json",
"type" => "AdaptiveCard",
"version" => "1.4",
"body" => [
[
"type" => "TextBlock",
"text" => $message
]
]
]
]
]
];
try {
// LaravelのHTTPクライアントを使ってPOSTリクエストを送信します。
$response = Http::withoutVerifying()->post($flowUrl, $jsonBody);
// Workflowsからの応答ステータスを確認します。
if ($response->successful()) {
return response()->json(['success' => true, 'message' => 'メッセージ送信に成功しました。']);
} else {
$errorMsg = 'Workflowsへのリクエストが失敗しました: ' . $response->status();
return response()->json(['success' => false, 'message' => $errorMsg], $response->status());
}
} catch (\Exception $e) {
// ネットワークエラーなど、例外が発生した場合
return response()->json(['success' => false, 'message' => 'リクエスト中にエラーが発生しました: ' . $e->getMessage()], 500);
}
}
}
上記のコードを実行して、チャンネルに以下のように送信されれば成功です。

まとめ
いかがでしたでしょうか?「Incoming Webhook」機能は2025年末で廃止予定となっており、残された期間はあと約4か月です。
すでに移行がお済みの方は、この記事を復習として活用していただければと思います。まだ切り替えの準備ができていない方は、できるだけ早めの対応をおすすめします。期限ギリギリになって慌てる前に、余裕をもってWorkflowsなどの新しい仕組みに慣れておくと安心です。
「Incoming Webhook」は、URLを叩くだけで簡単にTeamsへメッセージを送れるという手軽さから、社内外問わず多くの現場で使われてきた便利な機能でした。特にMicrosoft Teams自体がMicrosoft 365との高い親和性を持つことから、多くの企業で導入されており、この機能の廃止は思った以上にインパクトがあると感じています。正直、「今のままでもう少しなんとかならなかったのか…」という思いもありますが、公式が示した方針には従わざるを得ません。
今回たまたまこの廃止のアナウンスに気づいたのは運がよかったのですが、これをきっかけに「今使っているサービスの変更や終了情報を定期的にチェックすることの大切さ」も強く実感しました。ソフトウェアの仕様変更は、ハードウェアに比べて頻繁かつ柔軟に行われる分、知らないうちに影響を受けていることも少なくありません。
なお、「Incoming Webhook」機能は利用者が多かったこともあり、今回の件についてはMicrosoftの公式情報だけでなく、多くの技術系ブログでも取り上げられているようです。気になる方はぜひそちらも参考にしてみてください。今回の件は、技術的にも運用的にも大きな学びとなりました。今後も、こうした情報をキャッチアップしながら、安定した運用を目指していきたいと思います。
それでは、また次回の記事でお会いしましょう!
参考文献
【2025年版】Microsoft Teamsの最新統計データ:ユーザー数・収益・成長トレンドまとめ
「Microsoft Teams」が登場5周年–飛躍的な成長を遂げた共同作業ツールの今後 – ZDNET Japan
Retirement of Office 365 connectors within Microsoft Teams
Microsoft Teams 内の Office 365 コネクタの廃止(Incoming Webhookの移行) #PowerAutomate – Qiita
Laravel+Xamppローカル環境作成-ハンズオン:①Xampp・Composer・Vscodeインストール編 #初心者 – Qiita
Installation – Laravel 12.x – The PHP Framework For Web Artisans
このカテゴリの最新記事
2023.07.03
2025.07.10
2024.06.14
2024.02.14