GASとslackでヘルプデスクフォームを作った話(Googleフォーム版 コード編)
GASとslackでヘルプデスクフォームを作った話(Googleフォーム版 準備編)の続きです。
コード全体
コメントアウトで説明を入れています。
function onFormSubmit(e){ FormApp.getActiveForm() //フォームを取得 //スクリプトのプロパティからトークンやIDを取得 var bot_token = PropertiesService.getScriptProperties().getProperty('bot_token') //slackアプリ OAuth & PermissionsのBot User OAuth Access Token var channel_id = PropertiesService.getScriptProperties().getProperty('channel_id') //#helpdeskのチャンネルID var gss_id = PropertiesService.getScriptProperties().getProperty('gss_id') //スプレッドシートのID var sup_mem1 = PropertiesService.getScriptProperties().getProperty('sup_mem1') //サポートメンバー1のslackUserID //メンバー数に応じて、必要があれば追加してください。(スクリプトプロパティも) //var sup_mem2 = PropertiesService.getScriptProperties().getProperty('sup_mem2'); //サポートメンバー2のslackUserID var time = e.response.getTimestamp() //投稿日時をフォームから取得 var email = e.response.getRespondentEmail() //メールアドレスの回答を取得 var form_items = e.response.getItemResponses() // 質問内容と回答が格納されています。 var q1 = form_items[0].getResponse() // 氏名の回答を取得 var q2 = form_items[1].getResponse() // 緊急度の回答を取得 var q3 = form_items[2].getResponse() // 詳細の回答を取得 //メールアドレスからslackUserIDを取得 var user_id = findUserByEmails(email,bot_token) //スプレッドシートへ記録 var sheet_name = "helplist" //スプレッドシートのシート名 var spread_sheet = SpreadsheetApp.openById(gss_id) var no = spread_sheet.getSheetByName(sheet_name).getLastRow() //最終行から管理Noを決定 spread_sheet.getSheetByName(sheet_name).appendRow( //最終行へ記入 [no,time,email,user_id,q1,q2,q3] ) //送信者のslackユーザーを招待、メンションの準備をする。居ない場合はメールアドレス if (user_id == "null"){ var applicant = email } else { var applicant = "<@" + user_id + ">" //送信者へメンションする書式 var created_invite = createInvite(user_id,bot_token,channel_id) //チャンネルへ招待 var response = UrlFetchApp.fetch("https://slack.com/api/conversations.invite", created_invite); } //チャンネルへ投稿 var message_data = "<@" + sup_mem1 + ">" // サポートメンバー増があれば必要に応じて追加<@" + sup_mem2 + ">" + "\n" + applicant + " から問い合わせがありました。" + "\n\n*No*\n" + no + "\n\n*氏名*\n" + q1 + "\n\n*緊急度*\n" + q2 + "\n\n*問い合わせ内容*\n" + q3 var created_message = createMessage(message_data,bot_token,channel_id) var response = UrlFetchApp.fetch("https://slack.com/api/chat.postMessage", created_message); } //---------------------------------------メールアドレスからslackIDを取得 function findUserByEmails(email,bot_token){ var url="https://slack.com/api/users.lookupByEmail" var payload = { "token" : bot_token, "email" : email } var options = { "method" : "GET", "payload" : payload, "headers": { "contentType": "x-www-form-urlencoded", } } var json_data = UrlFetchApp.fetch(url, options); json_data = JSON.parse(json_data) if (json_data["ok"]){ var user_id = String(json_data["user"]["id"]) } else { var user_id = "null" } return user_id } //---------------------------------------postMessage作成 function createMessage(message_data,bot_token,channel_id){ var payload = { "token" : bot_token, "channel" : channel_id, "text" : message_data } var options = { "method" : "POST", "payload" : payload, "headers": { "contentType": "x-www-form-urlencoded", } } return options; } //---------------------------------------invite作成 function createInvite(user_id,bot_token,channel_id){ var payload = { "token" : bot_token, "channel" : channel_id, "users" : user_id } var options = { "method" : "POST", "payload" : payload, "headers": { "contentType": "x-www-form-urlencoded", } } return options; }
スクリプトプロパティの設定
「ファイル」→「プロジェクトプロパティ」
「スクリプトのプロパティ」に準備編で作成したトークンやIDをセットします。
sup_mem1
サポートメンバーのslackユーザーID(メンション通知用)
※ユーザーIDの調べ方は別途ググってくださいm(_ _)m
gss_id
スプレッドシートのID
bot_token
slackアプリのOAuth & Permissions → Bot User OAuth Access Token
channel_id
slackのヘルプデスク用チャンネルのID
権限のチェック
GASの権限をチェックしたいので、一度実行します。
この画面が出た場合、権限が不足している場合があるので許可します。
フォームからpostされるはずのデータが無いので、許可後は必ずエラーが出ます。
終わりに
GASもslackアプリもまだまだ初心者なので、解釈が間違っている部分や効率化できる部分があると思います。
ここが間違っている、こうした方がもっと良い、といった点があればコメントいただけると嬉しいです!