UWSCとSlackの連携

UWSC

UWSCでマクロを動かしていて特定の状況になった時にスマホに通知が来たら楽だなと思って調べていたら使えそうだったので作ってみました。
動作にはUWSC、Slack(Incoming Webhook)、PowerShellを使用します。

1.Incoming Webhookのインストール

Slackのアプリまたはブラウザから
workspace名 → 設定と管理 → アプリを管理する(ブラウザが開く) → Slack Appディレクトリ

画面上段の検索ブロックから「Incoming Webhook」を検索

出てきたリストから「Incoming Webhook」を選択

「Slackに追加」をクリック

Webhook URLに記載されているJSON送信する宛先を確認

2.UWSCとPowerShell

UWSC
実行ファイルは拡張子「ps1」のPowerShellファイル

引数
  -ExecutionPolicy RemoteSigned -> 実行権限付加
  送信先チャンネル -> #なしの文字列
  メンション -> 対象ユーザを絞りたい場合
         ※ここではメンションなしの場合「—–」を送っています。
  送信メッセージ -> 送信するメッセージ

POWERSHELL("powershell -ExecutionPolicy RemoteSigned 実行ファイルのフルパス " + 送信先チャンネル + " " + メンション + " " + 送信メッセージ)

テストの際は結果をPRINTすると確認出来ます。
問題なく成功すると「ok」が返ります。
エラーが発生した場合は、エラーメッセージが出力されます。

res = POWERSHELL("powershell -ExecutionPolicy RemoteSigned 実行ファイルのフルパス " + 送信先チャンネル + " " + メンション + " " + 送信メッセージ)
PRINT res

PowerShell
送信先チャンネル、メンション、送信メッセージはUWSCから引数として渡されます。
Webhook用URLはSlackから発行された固有の文字列
送信者(username)とチャンネル(channel)、アイコン(icon_emoji)はSlackAppで設定したものがあってもこちらで上書きします。

$enc = [System.Text.Encoding]::GetEncoding('ISO-8859-1')
$channel   = [System.Text.Encoding]::UTF8.GetBytes("送信チャンネル名")
$mension = $args[1]
if ($mension -ne "-----")
{
    $args = "<@" + $args[1] + "> " + $args[2..($args.Length-1)]
}
else
{
    $args = $args[2..($args.Length-1)]
}
$arg2 = $args -join " "
$utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($Arg2)

$notificationPayload = @{ 
    text = $enc.GetString($utf8Bytes);
    username = "送信者名";
    channel = "#" + $enc.GetString($channel);
    icon_emoji = ":ghost:"
}

Invoke-RestMethod -Uri "Webhook 用URL" -Method Post -Body (ConvertTo-Json $notificationPayload)

コメント

タイトルとURLをコピーしました