Slackのダイレクトメッセージを保管したい

PowerShellの情報って少ないよね~Windows10だと標準で動作するのでもっと情報が増えても良いと思うんだけど。

今日は,ダイレクトメッセージを保存しておきたいな~とふと思ったときに使えるスクリプトを招待するよ。チャンネルの取得も同じなので色々と使いまわしが出来るので覚えておこう。この記事の売りはもちろん,Pythonやcurlコマンドではないのですぐ使えるよ。

初めてWeb APIを触ったときはPython勉強しないとダメ?とかcurlコマンドで動くことは分かったけど次はどうすれば?って困ったんだけど,curlコマンドをPowerShellで記述できれば開発環境はWindows10標準のPowerShell ISEで十分なので困ることも少ないよね


https://api.slack.com/apps を開いてSlack appを作るけど,必要なUser Token Scopesは「im:read」と「im:history」と「mpim:read」と「mpim:history」だね。

添付ファイルも取得するなら「file:read」が必要。

アプリをインストールしたらOAuthトークンが手に入るので変数「$OAuthToken」に入れておこう。

$OAuthToken = "xoxp-XXXXXXXX"

ダイレクトメッセージを取得する準備としてチャネルIDを取得しないといけないので,次のスクリプトを実行する。今回は1対1のみを指定したよ。
3人以上のダイレクトメッセージならUriのtypes=をmpimに変更しよう。
成功したら ok : true,~って感じに表示されるよ。

$param = @{
    Uri = "https://slack.com/api/conversations.list?types=im"
    headers = @{
        Authorization = "Bearer " + $OAuthToken
    }
    Method = "GET"
}
Invoke-RestMethod @param | ConvertTo-Json

メッセージを取得する時は,下のスクリプトを実行するよ。
大切なのはさっき得られた結果の「id:」の部分を「channel=XXXXXXXX」のXX部分を変更すること。どの会話を取得するか指定しないとダメなので忘れないようにしようね。

$param = @{
    Uri = "https://slack.com/api/conversations.history?channel=XXXXXXXX"
    headers = @{
        Authorization = "Bearer " + $OAuthToken
    }
    Method = "GET"
}
Invoke-RestMethod @param | ConvertTo-Json

さて,うまくいったかな?

ファイルに保存したいときはこんな感じにするとよいね。
「Invoke-RestMethod @param -OutFile ファイル名」
変数に代入してごにょごにょするのもありだね。

私にはメッセージ送信したい要望はないけど,PowerShellで動作するメンテナンス用スクリプトの完了通知とかをSlackに送るとちょっとかっこいいよね。

ところで,今回は Invoke-RestMethod を使ったけど Invoke-WebRequest でも良いっぽい。前者はコンテンツだけ,後者はヘッダーなども含まれるのはわかるんだけど,これの使い分けって何だろうね~ってかんじ。

0 件のコメント:

コメントを投稿

Microsoft Entra Connect Cloud同期のお勧め属性マッピング

ハイブリッドID構成の設定で必須設定じゃないかな~というやつを備忘録的に投稿しておきます。個人的な推奨値なので実際に設定する際は十分な理解と検証を心掛けてください。そのまま利用して不具合が発生しても責任はとれません。 Microsoft Entra Connect によって同期さ...