👥

Teamsに通知を送信したい[ServiceNow]

2023/03/19に公開

TL;DR

Teams側はIncoming Webhook、ServiceNow側はREST MessageとBusiness Ruleを使用。

Situation

要件

  • Teams側
    • Teams Incoming Webhookを使用
  • ServiceNow
    • スクリプトから通知を送信したい。
    • 通知の文言を動的に変更したい。
    • あわよくば通知の送信先も動的に変更したい。

Solution

1.Teams側の設定

コネクタの設定をする必要があります。
Teamsを開き、通知を送信したいチャネルの右にある・・・からコネクタを開きます。
Incoming Webhookを検索し、セットアップします。セットアップで表示されるURLを控えておきます。

2.REST Messageの作成

AllからREST Messageと検索し、レコードを作成します。Endpointには先ほど控えたURLを入力します。作業はStudioでも可能です。

3.HTTP Methodの作成

REST Messageの関連リストにHTTP Methodsがあります。Newを選択して新規作成します。HTTP methodはPOSTを指定してください。Endpointには先ほどと同様に入力してください。

Point

Endpointに指定できるURLは最大200文字のようです。TeamsからコピーしたURLをそのまま張り付けるとURLが途中で切れてしまって動作しないことがあります。HTTP Methods Endpointをhttps://example.com/${hoge} のようにすると呼出の際、${hoge} 部分を動的に指定可能です。送信先を動的に変更したい場合やURLが200文字を超える場合、別テーブルへURLの動的部分を保存しておき${hoge}を置換します。また、そもそも${hoge}しか入力せずに全置換することも可能です。管理者以外がドメインを含めた完全なURLを指定できる場合、意図しないURLへ通知を送信することがないように適切な対策を施してください。

推奨
REST Message Endpoint https://example.com/xxx/
HTTP Methods Endpoint https://example.com/xxx/${hoge}
(https://example.webhook.office.com/webhookb2/${hoge} など)

4.Script Includeの作成

function createBody(message) {
    var body = {
        type: "message",
        text: message
    };
    return JSON.stringify(body);
}

function _sendNotification(message, teamsIncomingWebhookUrlParam) {
    var restMessage = new sn_ws.RESTMessageV2('<x_xxx_xxx.REST Message Name>', '<HTTP Method Name>');
    restMessage.setStringParameter("hoge", teamsIncomingWebhookUrlParam);
    var body = createBody(message);
    restMessage.setRequestBody(body);
    var response = restMessage.executeAsync();
}

var TeamsNotification = Class.create();
TeamsNotification.prototype = {
    initialize: function() {},
    send: function(message) {
		var teamsIncomingWebhookUrlParam = <いい感じに取ってくる>;
		_sendNotification(message, teamsIncomingWebhookUrlParam);
	},
    type: 'TeamsNotification'
};

5.Business Ruleの作成

(function executeRule(current, previous) {
	var teamsNotification = new TeamsNotification();
	try{
		var message = <お好みで>;
		teamsNotification.send(message);
	}catch(e){
		//お好みで
	}
})(current, previous);

Summary

意外と簡単に実装できました。
間違いなどがあればご指摘ください。

↓偉大なる参考記事
https://qiita.com/ngm_777/items/2f9e7fd9443160d282c5#restメッセージの設定

↓ドキュメント
https://docs.servicenow.com/ja-JP/bundle/tokyo-application-development/page/app-store/dev_portal/API_reference/RESTMessageV2/concept/c_RESTMessageV2API.html

フォロー、Twitterフォローもよろしくお願いいたします。
https://twitter.com/kouki__ito

Discussion