はじめに
プリザンターにはTeamsへの通知機能が標準で搭載されていますが、これはMicrosoft TeamsのIncoming Webhookコネクタを利用していました。しかし、2025年にIncoming Webhookコネクタが廃止されたことで、この機能が利用できなくなっています。
今回はその代替手段として2つの方法を紹介します。
背景:なぜTeams通知が使えなくなったのか
プリザンターのTeams通知(通知タイプ: Teams)は、Incoming Webhook URLに対して以下のようなJSONペイロードをPOSTすることで動作していました。
{ "text": "通知メッセージ" }
Microsoft Teams側のIncoming Webhookコネクタが廃止されたことにより、このURLが無効となり通知が届かなくなりました。
既存のIncoming Webhook URLは段階的に廃止されています。まだ動作している場合でも、早めの移行をおすすめします。
代替策の比較
代替手段は大きく2つあります。
| 比較項目 | 代替策1: Workflows + HttpClient | 代替策2: メール投稿 |
|---|---|---|
| 準備 | Workflows作成 + パラメータ変更 | SMTPの設定のみ |
| 通知の見た目 | Adaptive Cardでリッチな表示が可能 | メール形式(プレーンテキスト) |
| 柔軟性 | サーバスクリプトで高度な制御も可能 | 標準のメール通知の範囲 |
| 難易度 | やや高い | 低い |
手軽さ優先なら 代替策2(メール投稿) 、リッチな通知や柔軟な制御が必要なら 代替策1(Workflows + HttpClient) がおすすめです。
代替策1:Workflows(Power Automate)+ HttpClient通知
Incoming Webhookの代わりにTeamsのWorkflows(Power Automate)でWebhookエンドポイントを作成し、プリザンターのHttpClient通知からPOSTリクエストを送信する方法です。
1-1. Teamsでワークフローを追加
Teams側でWebhookの受け口を作成します。
- Teamsの通知先チャネルを開く
- チャネル名の右にある「…」(その他のオプション)をクリック
- 「ワークフロー」を選択
- テンプレートの中から「Webhook 要求を受信するとチャネルに投稿する」を選択
- フローに名前をつけて「次へ」をクリック
- 投稿先のチームとチャネルを確認し「ワークフローを追加」をクリック
1-2. Webhook URLを取得
ワークフローが作成されるとWebhook URLが表示されます。このURLをコピーしてください。
https://<region>.logic.azure.com:443/workflows/<id>/triggers/manual/paths/invoke?api-version=...&sp=...&sv=...&sig=...
このURLには認証情報が含まれています。外部に公開しないように管理してください。
1-3. (任意)Adaptive Cardで送信する場合
デフォルトのテンプレートではプレーンテキストの投稿になります。Adaptive Cardを使ってリッチなメッセージを送りたい場合は、ワークフローの編集画面でアクションを変更します。
- Power Automateのフロー編集画面を開く
- 「チャットまたはチャネルでメッセージを投稿する」アクションを選択
- 必要に応じてAdaptive Card JSONを設定
1-4. プリザンターのHttpClient通知を有効化
プリザンターのHttpClient通知はデフォルトで無効になっています。まず有効化する必要があります。
Implem.Pleasanter/App_Data/Parameters/Notification.json を編集して HttpClient を true に変更します。
{
"Teams": true,
"HttpClient": true
}
変更後、パラメータを再読み込みします。以下のいずれかの方法で実行できます。
URLから再読み込み
ブラウザで以下のURLにアクセスします(特権ユーザでログインが必要です)。
https://<your-pleasanter-url>/admins/reloadparameters
サービスの再起動
プリザンターのサービスを再起動します。
パラメータの再読み込みについて詳しくは「プリザンターでパラメータリロードを簡単に実現する方法」を参照してください。
1-5. テーブルの通知設定
通知画面からHttpClient通知を設定する方法です。
- 対象テーブルの「テーブルの管理」→「通知」タブで「新規作成」
- 以下のように設定する
| 項目 | 設定値 |
|---|---|
| 通知種別 | HttpClient |
| アドレス | 手順1-2で取得したWorkflows Webhook URL |
| メソッド | Post |
| Content-Type | application/json |
| エンコード | utf-8 |
- 「カスタムデザインを使う」にチェックを入れ、フォーマットにJSONを設定
{"type":"message","attachments":[{"contentType":"application/vnd.microsoft.card.adaptive","contentUrl":null,"content":{"$schema":"http://adaptivecards.io/schemas/adaptive-card.json","type":"AdaptiveCard","version":"1.2","body":[{"type":"TextBlock","text":"レコードが更新されました","weight":"Bolder","size":"Medium"},{"type":"TextBlock","text":"更新者: {UserName}","wrap":true},{"type":"TextBlock","text":"{Url}","wrap":true}]}}]}
カスタムフォーマットの本文は行ごとに処理されるため、JSONは改行なしの1行で記述する必要があります。改行を含む複数行のJSONを設定すると、各行の末尾に改行文字が付与されて不正なJSONになります。
カスタムフォーマットで使えるプレースホルダは {Url}・{UserName}・{MailAddress}・{LoginId} の4種類のみです。{Title} や {Status} のようなカラム値はカスタムフォーマット内では置換されません。カラム値を含めた通知を送りたい場合は、次の手順1-6のサーバスクリプトを使う方法がおすすめです。
1-6. サーバスクリプトから通知する方法
通知設定では1行JSONの制約やプレースホルダの制限がありますが、サーバスクリプトのhttpClientを使えばこれらの制約なく自由にAdaptive Card JSONを構築できます。model.Title や context.UserName などのカラム値も自在に埋め込めるので、実用的にはこちらがおすすめです。
// Workflows Webhook URL
const webhookUrl = 'https://<region>.logic.azure.com:443/workflows/<id>/triggers/manual/paths/invoke?api-version=...&sp=...&sv=...&sig=...';
// 通知本文の組み立て
const payload = JSON.stringify({
type: 'message',
attachments: [{
contentType: 'application/vnd.microsoft.card.adaptive',
contentUrl: null,
content: {
'$schema': 'http://adaptivecards.io/schemas/adaptive-card.json',
type: 'AdaptiveCard',
version: '1.2',
body: [
{
type: 'TextBlock',
text: '[プリザンター] ' + model.Title + 'が更新されました',
weight: 'Bolder',
size: 'Medium'
},
{
type: 'TextBlock',
text: '更新者: ' + context.UserName,
wrap: true
}
],
actions: [
{
type: 'Action.OpenUrl',
title: 'レコードを開く',
url: context.AbsoluteUri
}
]
}
}]
});
// HTTPリクエストの組み立てと送信
httpClient.RequestUri = webhookUrl;
httpClient.Content = payload;
httpClient.MediaType = 'application/json';
httpClient.Post();
サーバスクリプトでhttpClientを複数回使う場合は、リクエスト前にhttpClient.ResponseHeaders.Clear()を呼び出してください。詳しくは「プリザンターのサーバスクリプトでhttpClientを使うときのお約束」を参照してください。
代替策2:メール投稿で通知
Teamsのチャネルにはメールアドレスを割り当てることができます。この機能を使えば、プリザンター標準の メール通知 でTeamsに投稿することが可能です。WorkflowsやHttpClientの設定が不要なため、もっとも手軽な方法です。
2-1. チャネルのメールアドレスを取得
- Teamsの通知先チャネルを開く
- チャネル名の右にある「…」(その他のオプション)をクリック
- 「メール アドレスを取得」を選択
- 表示されたメールアドレスをコピー
2-2. プリザンターの通知設定
- 対象テーブルの「テーブルの管理」を開く
- 「通知」タブを選択
- 「新規作成」をクリック
- 通知種別を「メール」にする
- アドレス欄にコピーしたチャネルのメールアドレスを設定
これだけで設定完了です。
メール投稿はメールサーバの設定(SMTP)が必要です。また、投稿されるメッセージはメール形式のためAdaptive Cardのようなリッチな表示はできません。
組織のセキュリティポリシーによっては外部からのメール受信がブロックされている場合があります。Teams管理センターでチャネルメールの設定を確認してください。
2-3. サーバスクリプトからメール送信する場合
サーバスクリプトのnotificationsオブジェクトを使ってメールを送信することもできます。ただし、通知設定で設定するほうがシンプルなので、特別な理由がなければ通知設定の利用をおすすめします。
const notification = notifications.New();
notification.Type = 1; // 1 = Mail
notification.Address = '<channel-email>@<tenant>.teams.ms';
notification.Title = '[プリザンター] ' + model.Title + 'が更新されました';
notification.Body = '更新者: ' + context.UserName;
notification.Send();
サーバスクリプトからのメール送信は通知設定側の実行条件(作成後・更新後など)による制御が効きません。スクリプトの実行タイミングで条件を管理する必要があるため、運用が煩雑になりがちです。
既存のTeams通知からの移行
すでにプリザンターのTeams通知(タイプ: Teams)を使っている場合の移行手順です。
- 代替策1または代替策2を選択
- 選択した方法に応じたセットアップを実施
- 既存のTeams通知設定を無効化
- 新しい通知設定を追加
- テスト送信で動作を確認
- 問題なければ旧設定を削除
既存のTeams通知設定がどのサイトに存在するかを確認するには、通知設定をSQLで抽出すると便利です。詳しくは「プリザンターで通知設定を抜き出してみる」を参照してください。
SELECT [SiteId], [Title]
FROM [Sites]
CROSS APPLY OPENJSON([SiteSettings], '$.Notifications')
WHERE JSON_VALUE(value, '$.Type') = '6'
まとめ
今回はIncoming Webhook廃止後のTeams通知の代替手段を2つ紹介しました。
- 代替策1: Workflows + HttpClient — Adaptive Cardでリッチな通知が可能。サーバスクリプトで高度な制御もできる
- 代替策2: メール投稿 — 設定が最も簡単。SMTPの設定があればすぐ使える
用途に合わせて使い分けてみてください。