Home > Windows にまつわる e.t.c.

PowerShell で Slack にメッセージを送信する


自作スクリプトで、エラーとかのイベントログをメールで通知していたのですが、メールサーバーのダウン対策で Slack にもメッセージ送信するようにしました

その際の設定についてまとめました

 

今回は、「message-test」チャンネルに PowerShell でメッセージを送信してみます

 

トークンの生成は Web UI で操作するので、まずは Web ブラウザで Slack にログインします

参考までに、Windows デスクトップアプリメインでを使用していて Web 版 Slack を使っていない方向けに Web 版 Slack の URL 取得方法です
URL は「右肩のハンバーガーメニュー > コピー > リンクをコピー」で URL がコピーできますので、こちらから Web 版の Slack にアクセスしてください
(スマデ アプリからの URL は調べていません)

 

アプリケーションの作成

Web ブラウザで Slack にログインしたら、Slack API にアクセスし、Slack にアプリケーションを作成します

Slack API: Applications
https://api.slack.com/apps

 

Create New App でアプリケーションを作成

 

From scratch を選択

 

アプリケーション名と、メッセージを送信するワークスペースを指定し Create App

 

トークンの生成

アプリケーションが作成出来たら、トークンの生成をします

OAuth & Permissions を開き...

 

スクロールダウンして Scopes セクションを開き Bot Token Scopes の Add an OAuth Scope

 

chat:write の権限を付与

 

スクロールアップして、先頭にある Advanced token security via token rotation でワークスペースにインストールします

 

許可するとトークンが生成されます

 

生成されたトークンを Copy

 

アプリケーションをチャンネルに登録

作成されたアプリケーションをチャンネルに登録して、メッセージを送信を許可します

アプリを右クリックしてアプリの詳細を表示する

 

チャンネルにこのアプリを追加する

 

チャンネルを選択し追加

 

チャンネルにアプリが追加された

 

■ PowerShell でメッセージを送信する

PowerShell でメッセージ送信するには以下のようにします

# リクエストボディの作成
$body = @{
    token = 'Youre token'
    channel = '#message-test'
    text = 'Hello world !!'
}

# メッセージ送信
Invoke-RestMethod -Method Post -Uri 'https://slack.com/api/chat.postMessage' -Body $body

 

メッセージが送信できました

 

関数にする

関数にすると、こんな感じになります

トークンファイル「TokenFile.txt」をスクリプトディレクトに作成し、1行目にトークン、2行目にチャンネルを書いてください

必要であれば、エラー処理とかチューニングすると良いと思います

####################################
# Slack にメッセージを送る
####################################
function SendSlackMessage([string]$Message){

    # トークンファイル
    $TokenFileName = "TokenFile.txt"

    # API URI
    $ApiUri = "https://slack.com/api/chat.postMessage"

    # トークンファイルの取得
    $TokenFileFullPath = Join-Path $PSScriptRoot $TokenFileName
    if( -not (Test-Path $TokenFileFullPath)){
        return
    }

    # トークンファイルの読み込み
    try{
        [array]$TokenData = Get-Content -Path $TokenFileFullPath
    }
    catch{
        return
    }

    # トークンとチャンネルの取得
    $Token = $TokenData[0]
    $Channel = $TokenData[1]
    if(( $Token -eq $null ) -or ( $Channel -eq $null )){
        Write-Output "[ERROR] !!!!!!!! $TokenFileFullPath format error. !!!!!!!!"
        return
    }

    # リクエストボディの作成
    $body = @{
        token = $Token
        channel = $Channel
        text = $Message
    }

    # メッセージ送信
    Invoke-RestMethod -Method Post -Uri $ApiUri -Body $body
}

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.