11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pleasanter(プリザンター)Advent Calendar 2020

Day 12

プリザンターをPowerShellで監視してslackに通知してみる

Last updated at Posted at 2020-12-11

#概要
プリザンターでレコードの作成忘れを防止するためにpowershellでサイトを監視して、slackに通知してみました。

たとえば・・・
2020-12-11_22h34_25.png
こんな感じで毎日の作業報告をプリザンターで行っていて、当日中にかならず作成して報告する必要がある。

作成忘れを防止するためになにかしらの通知がほしい・・・
といったときを想定します

#前提条件

  • OS:Windows
  • プリザンター:.NetFrameWork版

#APIキー作成

あらかじめAPIキーを作成しておきます
https://pleasanter.net/fs/publishes/422358/edit

#準備

プリザンターは.NetFrameWork版を使っている人が多いと思うので
今回はPowerShellで作成してみました。

プログラム作成はWindows標準のISEが便利です
ファイル名を指定して実行で ISE と打つと実行できます
2020-12-11_22h59_12.png

#サンプルソース

このソースではプリザンターの日付A(DateA)が当日のものをAPIで検索しています

PowerShellからslackの投稿についてはこちらを参考にさせていただきました。
https://qiita.com/suo-takefumi/items/738793e2e426f52d7d42


#リクエストURL
$requestUrl = "http://[プリザンターのサイトアドレス]/api/items/[チェックしたいサイトID]/get"
$apiKey = "[作成したAPIキー]"

#現在の日付を取得
$ndate = Get-Date -Format "yyyy/MM/dd"

#日付の検索条件(当日0:00:00~23:59:59)
$datehash = "[`"" + $ndate + " 0:00:00," + $ndate + " 23:59:59.997" + "`"]"

#プリザンターAPIでサイトのレコードを検索
trap [Net.WebException] { continue; }
try
{   
    $json = @{
        ApiKey = $apiKey
        View = @{
        ColumnFilterHash = @{
            DateA = $datehash
            }
        }
    }

    $requestBody = $json | ConvertTo-Json -Depth 3
    $res = Invoke-RestMethod -Uri $requestUrl -ContentType "application/json" -Method POST -Body ${requestBody}
}
catch
{
    Write-Output $_.Exception
}

#レコードが作成されていたらここで終了
if ($res.Response.TotalCount -gt 0 ) {
    exit
}

#投稿したいメッセージ
$postmsg = "http://[プリザンターのサイトアドレス]/pleasanter/items/[チェックしたいサイトID]/index" + "
作業報告がおわっていません!";

#slackへメッセージ投稿
trap [Net.WebException] { continue; }
try
{   
    $webhook = "[slackのwebhookURL]"
    $slackmsg = @{ 
        channel = "[slackのチャンネル]"
        text = $postmsg
    }
    $json = ConvertTo-Json $slackmsg
    $requesttBody = [System.Text.Encoding]::UTF8.GetBytes($json)
    $res = Invoke-RestMethod -Uri $webhook -Method Post -Body ${requestBody}
}
catch
{
    Write-Output $_.Exception
}

実行すると

2020-12-12_00h58_49.png
といった形で通知がとどきます

#タスクスケジューラで監視

.ps1形式でソースを保存して、Windowsのタスクスケジューラで定時実行します・・・が、
ポリシーの設定などが面倒です。こちらを参考にさせていただきました。
https://qiita.com/happy_packet/items/bb952626aef7323f49b2
https://www.atmarkit.co.jp/ait/articles/1412/03/news125.html

Windowsタスクスケジューラから「タスクの作成」を選んで作成します
2020-12-12_00h46_35.png

###全般タブ

タスクに適当な名前をつけます
2020-12-12_00h45_03.png

###トリガータブ

16:00~17:00まで10分おきに監視する場合の設定例です
2020-12-12_00h42_41.png

###操作タブ

以下のように設定するとうまくいくようです。
参考元の記事に感謝します。

2020-12-12_00h41_59.png

項目 設定値
プログラム/スクリプト %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe
引数の追加 -ExecutionPolicy RemoteSigned -File "[ps1のファイルフルパス]"
開始 空白

###確認

タスクが作成されているか確認
2020-12-12_00h49_35.png

これで 16:00~17:00 まで10分間隔でサイトを監視して
日付Aが当日のレコードが作成されていない場合にslackに通知が来ます。

#さいごに

いかがでしたでしょうか?

プリザンターにはリマインダーや通知といった素敵な機能が盛り込まれていますが
こうやってAPIを使って外から簡単に監視できるのも魅力の1つだと思います。

11
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?