#概要
プリザンターでレコードの作成忘れを防止するためにpowershellでサイトを監視して、slackに通知してみました。
たとえば・・・
こんな感じで毎日の作業報告をプリザンターで行っていて、当日中にかならず作成して報告する必要がある。
作成忘れを防止するためになにかしらの通知がほしい・・・
といったときを想定します
#前提条件
- OS:Windows
- プリザンター:.NetFrameWork版
#APIキー作成
あらかじめAPIキーを作成しておきます
https://pleasanter.net/fs/publishes/422358/edit
#準備
プリザンターは.NetFrameWork版を使っている人が多いと思うので
今回はPowerShellで作成してみました。
プログラム作成はWindows標準のISEが便利です
ファイル名を指定して実行で ISE と打つと実行できます
#サンプルソース
このソースではプリザンターの日付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
}
実行すると
#タスクスケジューラで監視
.ps1形式でソースを保存して、Windowsのタスクスケジューラで定時実行します・・・が、
ポリシーの設定などが面倒です。こちらを参考にさせていただきました。
https://qiita.com/happy_packet/items/bb952626aef7323f49b2
https://www.atmarkit.co.jp/ait/articles/1412/03/news125.html
Windowsタスクスケジューラから「タスクの作成」を選んで作成します
###全般タブ
###トリガータブ
16:00~17:00まで10分おきに監視する場合の設定例です
###操作タブ
以下のように設定するとうまくいくようです。
参考元の記事に感謝します。
項目 | 設定値 |
---|---|
プログラム/スクリプト | %SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe |
引数の追加 | -ExecutionPolicy RemoteSigned -File "[ps1のファイルフルパス]" |
開始 | 空白 |
###確認
これで 16:00~17:00 まで10分間隔でサイトを監視して
日付Aが当日のレコードが作成されていない場合にslackに通知が来ます。
#さいごに
いかがでしたでしょうか?
プリザンターにはリマインダーや通知といった素敵な機能が盛り込まれていますが
こうやってAPIを使って外から簡単に監視できるのも魅力の1つだと思います。