2021/07/061※ 本内容は個人的な見解であり、所属する組織と関係ありません。Google Apps Scriptを実演で学ぶ~ GAS × Slack ~Block Kit Builderを使おう
View Slide
自己紹介あぱchan@ApachanHonpo埼玉県戸田市宮城県仙台市業務効率化のお仕事22021年11月WinActorトーク6ヵ月20kg減
執筆書籍3徹底解説 RPAツールWinActor導入・応用 完全ガイド絶対失敗しない!ロボット1000体導入してわかったRPA成功の秘訣Google Apps Script目的別リファレンス実践サンプルコード付き需要のある技術を中心に出版社に提案第3版2021/3発売第1版2020/5発売第1版2020/8発売Google Apps Script目的別リファレンス実践サンプルコード付き第2版2022/5新発売
主なイベント登壇4RPA CommunityGoogle Apps Script の特徴・利用のきっかけ必要な情報をメールから取得する方法TechStreetvol.1 2021/07vol.2 2021/11vol.3 2022/042022/7/6Google Apps Scriptを実演で学ぶ~「GAS×Slack」&「GAS×Notion」~
テーマ5Block Kit Builderを使おう
6Block Kitクリーンで一貫性のあるUIフレームワークhttps://api.slack.com/block-kit
7Block Kit Builder画面操作でUIを作成UI選択 UI反映 編集※ ワークスペースへのサインイン必須
8今回のデモ① Slackチャンネルに通知GASプロジェクトSlackチャンネル② Slackチャンネルからの通信(参考)
9ワークフロー① 難易度:易Slackチャンネルに通知GASプロジェクトSlackチャンネル
10Incoming Webhookパターン 利用可能プラン 説明カスタムインテグレーション全プラン かんたんに設定できますが、現在Slack社より非推奨とされています。SlackApp 全プラン やや複雑ですが手順がわかれば利用自体は難しくありません。ワークフロービルダー スタンダード以上※ フリープラン不可かんたんに設定できますが、フリープランでは利用できません。テキストにメンションやハイパーリンク文字列など入れることができません。※ レスポンスが必要な場合はAPI利用
11Slack Apphttps://api.slack.com/appsWebhook URLの取得※ 無償版のアプリ作成は10個迄
12Let’s Try
13前提function sendSlackMessage_(url, data) {const params = {method: 'post',contentType: 'application/json',payload: JSON.stringify(data)};const res = UrlFetchApp.fetch(url, params);return res;}スクリプトプロパティの活用 Slack通知処理の分割
14コーディングconst PROPS = PropertiesService.getScriptProperties();function gasToSlack() {const webhook = PROPS.getProperty('webhook');console.log(webhook);const data = {// Bloclk Kit コード 貼り付け};const response = sendSlackMessage_(webhook, data);Logger.log(response);}スクリプトプロパティSlack通知処理の分割
Slackチャンネル15ワークフロー➁ 難易度:中~高Slackチャンネルからの通信GASプロジェクトデプロイなど各種設定、doPost()、GCP...など
Block Kit16勤怠アプリ
17GAS側 WebアプリHTTPリクエストの取得発動する関数doPost(e)
18Slack側 エンドポイントSlackからGASの通信設定
Code Slackからのリクエスト取得19function doPost(e) {console.log(e);Logger.log(e);// 意図的にエラー 宣言してない変数name}
ログの比較20GASGCP何もなしログ参照
Code シートへの書き出し21function doPost(e) {const payload = JSON.parse(e['parameter']['payload']);const ssId = PROPS.getProperty('SSID');const sh = SpreadsheetApp.openById(ssId).getSheets()[0];sh.appendRow([payload]);}
Demo22
課題のまとめ23① doPost(e)GASのプロジェクトからログが参照できませんGCPに連携してロギングを参照するか、スプレッドシートなどに書き出す必要あり② JSON解析階層が深い...リファレンスを見た方が良いのかも...③ デプロイSlackからの通信のため「テストのデプロイ」が利用できませんコードが変わる度にデプロイの必要あり④ 非同期通信UI入力毎に通信が走るおそらく同期処理にできるはず...⑤ 例外処理の設定想定外のリクエストの処理
① doPost(e) GCPのロギング24ログの参照
② JSON解析 e['parameter']['payload']25登録ボタンの判定ユーザーの取得入力内容の取得
Appendix26
27Google Slides
End Of File28