PowerShellでLambdaを実装しよう!~SlackのBotを実装してみた~

記事タイトルとURLをコピーする

技術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 Configuration」をクリック。

ポストするチャンネルを聞かれるので、チャンネルを選びましょう。チャンネルを選んだら、「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でもサーバーレスできます、自信をもって「サーバーレスやってる」と言いましょう。