ServiceNow の Slack Spoke でスラッシュコマンドを作ってみる
ServiceNow の Automation Engine に含まれる Integration Hub を利用すると ServiceNow のアプリケーションから対応したさまざまなサービスと容易に連携することができます。容易に連携できるサービスとしては、Teams や Slack といったメッセージングアプリや、BOX や OneDrive といったオンラインストレージ、SAP や Oracle といった ERP サービスなどがあげられます。その容易な連携を実現する為に各サービスに対応した Spoke と呼ばれるモジュールを提供しており、ServiceNow の開発者は Spoke を利用するとノーコードでシステム間連携が実現できてしまいます。例えば、Slack と連携するための Spoke を利用すると、ServiceNow のアプリケーションから容易に Slack にメッセージを投稿したりチャンネルを作成したりアーカイブしたりすることができます。また、ServiceNow 上で発生した承認依頼を Slack に通知をして Slack 上で承認・否認するような機能も Spoke の中には含まれています。
基本的に Spoke は ServiceNow 上のイベントをトリガーにして外部サービスと連携するための機能が提供されているのですが、Slack Spoke には Slack 上のイベント、例えば上記の承認の例だと Approve ボタンが押されたイベントをトリガーに ServiceNow 上のロジックを実行する事も可能にしています。これを利用して Slack のスラッシュコマンドを作成することも可能になります。
スラッシュコマンドを作るには、まず Slack 上にスラッシュコマンドの設定を行います。今回は /now というコマンドを追加してみます。
スラッシュコマンドのリクエスト先は以下のようにします。
https://<インスタンス URL>/api/sn_slack_ah_v2/command_service/<アプリ名>
これでこのアプリが追加されている Slack のチャンネル上でスラッシュコマンドが利用できるようになります。
次に、ServiceNow のインスタンス側の設定です。Slack からのリクエストを受けた際にどのように処理をするかは Decision Table (sys_decision_question)で定義します。Slack Spoke を導入すると Slack からのリクエストの処理を定義した Decision Table のレコードをのみを表示する Inbound Decision というモジュールが用意されるので、そこから新たなにレコードを作成します。今回は command が /now で最初パラメータが text で送られてきたメッセージをハンドリングするので下図のように設定します。
これで、指定されたスラッシュコマンドが送られてくると Answer に指定された Flow (Sub Flow)が実行されるようになります。Flow には Slack にレスポンスするための WebHook URL や送られたコマンドの情報を含む payload とユーザー情報が渡ってくるので下図のようにインプットデータを指定してそれらのデータを Flow 内で利用できるようにします。
今回は渡ってきたスラッシュコマンドのメッセージをそのままオウム返ししたいのでアクションは下図のように設定します。
var obj = fd_data.subflow_inputs.payload;
var str = obj.text.toString();
var str2 = str.slice(5);
return "[ECHO] " + str2;
Response Message は payload から text パラメータの値だけを抜き出したかったので上記のようなコードを書きます。
これで設定がすべて整ったので実際にスラッシュコマンドを実行してみます。試しに "/now text note.com 用のデモですよ!"とメッセージしてみます。
すると、以下のようにオウム返しされたメッセージを受信します。
いかがでしょうか?ServiceNow を操作するさまざまなスラッシュコマンドが用意できるかと思いますので活用を検討してみてください!