0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

プリザンターには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の受け口を作成します。

  1. Teamsの通知先チャネルを開く
  2. チャネル名の右にある「」(その他のオプション)をクリック
  3. ワークフロー」を選択
  4. テンプレートの中から「Webhook 要求を受信するとチャネルに投稿する」を選択
  5. フローに名前をつけて「次へ」をクリック
  6. 投稿先のチームとチャネルを確認し「ワークフローを追加」をクリック

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を使ってリッチなメッセージを送りたい場合は、ワークフローの編集画面でアクションを変更します。

  1. Power Automateのフロー編集画面を開く
  2. チャットまたはチャネルでメッセージを投稿する」アクションを選択
  3. 必要に応じてAdaptive Card JSONを設定

1-4. プリザンターのHttpClient通知を有効化

プリザンターのHttpClient通知はデフォルトで無効になっています。まず有効化する必要があります。

Implem.Pleasanter/App_Data/Parameters/Notification.json を編集して HttpClienttrue に変更します。

Notification.json
{
    "Teams": true,
    "HttpClient": true
}

変更後、パラメータを再読み込みします。以下のいずれかの方法で実行できます。

URLから再読み込み

ブラウザで以下のURLにアクセスします(特権ユーザでログインが必要です)。

https://<your-pleasanter-url>/admins/reloadparameters

サービスの再起動

プリザンターのサービスを再起動します。

パラメータの再読み込みについて詳しくは「プリザンターでパラメータリロードを簡単に実現する方法」を参照してください。

1-5. テーブルの通知設定

通知画面からHttpClient通知を設定する方法です。

  1. 対象テーブルの「テーブルの管理」→「通知」タブで「新規作成
  2. 以下のように設定する
項目 設定値
通知種別 HttpClient
アドレス 手順1-2で取得したWorkflows Webhook URL
メソッド Post
Content-Type application/json
エンコード utf-8
  1. カスタムデザインを使う」にチェックを入れ、フォーマットに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.Titlecontext.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. チャネルのメールアドレスを取得

  1. Teamsの通知先チャネルを開く
  2. チャネル名の右にある「」(その他のオプション)をクリック
  3. メール アドレスを取得」を選択
  4. 表示されたメールアドレスをコピー

2-2. プリザンターの通知設定

  1. 対象テーブルの「テーブルの管理」を開く
  2. 通知」タブを選択
  3. 新規作成」をクリック
  4. 通知種別を「メール」にする
  5. アドレス欄にコピーしたチャネルのメールアドレスを設定

これだけで設定完了です。

メール投稿はメールサーバの設定(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. 代替策1または代替策2を選択
  2. 選択した方法に応じたセットアップを実施
  3. 既存のTeams通知設定を無効化
  4. 新しい通知設定を追加
  5. テスト送信で動作を確認
  6. 問題なければ旧設定を削除

既存の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の設定があればすぐ使える

用途に合わせて使い分けてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?