技術4課のPowerShellおじさんこと、鎌田です。社内でPowerShellを実装できる人が増えてきたので、ちょっと焦りも感じつつ。
先のブログで、LambdaをPowerShellで実装しデプロイまでを解説しました。 せっかくLambdaをPowerShellで実装できる準備をしたので、SlackのBotを実装してみることにしました。
PowerShellがSlackに投稿するための準備
Slackに対してPowerShellが投稿するためには、Slack側でIncoming WebHooksのURLの用意が必要です。
SlackのWorkSpaces名をクリックし、メニューから「Customize Slack」をクリック。
左のメニューから「Configure apps」をクリック。
左のメニューから「Custom Ontegraions」をクリックし、Incomming WebHooks」をクリック。
ポストするチャンネルを聞かれるので、チャンネルを選びましょう。チャンネルを選んだら、「Add Incoming WebHooks integration」をクリック
Webhook用のURLが生成されます。Webhook URLをコピーして、後ほどのコードに埋め込みます。
ここまで出来たら、準備完了です。
実際に実装してみた
「もう定時だよ、帰らないの?」と通知してくれるBotのコードはこんな感じです。
function convert_text($before_text) { $enc = [System.Text.Encoding]::GetEncoding('ISO-8859-1') $utf8Bytes = [System.Text.Encoding]::UTF8.GetBytes($before_text) return $enc.GetString($utf8Bytes) } $slack_hook_url = "先程取得したIncoming WebHooksのURL" $payload_array = @{ text = convert_text("もう定時だよ、帰らないの?"); username = convert_text("定時お知らせくん"); channel = "投稿したいSlackチャンネル" } Invoke-WebRequest -Method Post -Uri $slack_hook_url -Body (ConvertTo-Json $payload_array)
IncommingWebHookに対してJsonでパラメタを渡しますが、渡すパラメタを配列で作って、PowerShellからInvokeでURLをリクエストする時に、ConvertoTo-JsonでJsonに変換をかけています。 PowerShellではそのまま日本語をJSONで送ってはエラーになるため、変換処理を挟んでいます。 少し処理を変えることで、botを改変できるので、投稿するテキストやユーザー名などは、色々と調整してみてください!
実際にPowerShellを実行してみた
Lambdaでデプロイ後、実際に起動してみると、以下のようにSlackへ投稿されます。
意外と簡単に作れますね。
終わりに
SlackBotをPowerShellで実装したものをご紹介しました。 PowerShellでもサーバーレスできます、自信をもって「サーバーレスやってる」と言いましょう。