10
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ServiceNowからTeamsに通知を飛ばす

Posted at

概要

ServiceNowではIntegrationHub にSlack Spoke, Microsoft Teams Spoke その他メッセージ送信するアクションがありますが、
別のサブスクリプションが必要なので、RESTメッセージを使用して実装できないか調べてみました。

プラットフォーム

Paris

サンプルケース

変更要求のステータスが実装になるとTeamsに通知するというケースを想定
変更要求の更新をトリガーでビジネスルールでTeamsのWebhookにメッセージを送信します。

手順

Webhookの設定

Webhookの設定は他の記事を参考にして
Microsoft Teams API (Incoming Webhook) で投稿

エンドポイントをコピーしておく

RESTメッセージの設定

System Web Services > Outbound > REST Message から[New] ボタンを押してREST Messageを登録

コピーしたエンドポイントをここにペースト

登録後RESTメッセージ関数(HTTP Methods)を作成
今回はDefault GETを編集しました。

HTTPメソッドをPOSTにして更新

テスト送信

Script - Backgroundで実行してみます。

bg_script.js
var restMessage = new sn_ws.RESTMessageV2("Teams通知", "メッセージ送信");
var message = "メッセージテスト"; 
var body = createBody(message);
restMessage.setRequestBody(body);
var response = restMessage.executeAsync();
 	
 function createBody(message) {
 	var body = {
  		type : "message",
  		text : message
  	};
  return new JSON().encode(body);
 }

飛びました

ビジネスルールを設定

変更要求の更新をトリガーにしてメッセージを送信するビジネスルールを作成
実行タイミングは非同期にしています。
ChangesやChangesToは変更前が無いから非同期では使えないと思っていたのですが、コンディションビルダーで使用する場合には使えるらしいです。知らなかった。
https://docs.servicenow.com/bundle/paris-application-development/page/script/business-rules/reference/r_HowBusinessRulesWork.html

コードはこんな感じで書いてみる

send_change_implementation.js
(function executeRule(current, previous /*null when async*/) {
	var restMessage = new sn_ws.RESTMessageV2("Teams通知", "メッセージ送信");
	var message = createMessage(current);
	var body = createBody(current, message);
	restMessage.setRequestBody(body);
	var response = restMessage.executeAsync();
})(current, previous);

function createMessage(current) {
	var url = gs.getProperty('glide.servlet.uri')+'/change_request.do?sys_id=' + current.sys_id;
	var message = '【お知らせ】以下の変更を実装します!<br/>' +
			'番号:<a href="' + url + '">' + current.number + '</a><br/>';
	message += '作業名: ' + current.short_description + '<br/>';
	message += '終了予定時刻: ' + current.end_date.getDisplayValue();
	
	return message;
}

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

結果がこちら

10
14
3

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
10
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?