Google Apps Scriptでとあるメッセージを元に選択肢を返し、その選択肢に応じて反応するbotみたいなものを簡易的に作成。
ChatOps目指してデプロイフローを構築するための前弾として
今回作るもの
- Slackのmessageに対し反応するアプリ
- アプリ設定
1. Slackでアプリ作成
-
https://api.slack.com/ から右上の
Your Apps
をクリック - 真ん中あたりの
Create New App
をクリック - アプリ名と適用するWorkSpaceを設定して作成
- アプリ一覧から先ほど作ったアプリ名をクリック
- サイドバーにある
Incoming Webhooks
を選択 -
Add new Webhook to Workspace
をクリックしチャンネルを指定し連携する。 - URLが発行される。(のちのコードで使う)
2. コードの作成
今回はこのコードで書きました。
エラーハンドリングとかまでは詳しくやっていないです。(簡易的なので)
SlackがこのアプリのURLを叩き、doPost
が作動するようになっています。
doPost.gs
function doPost(e) {
var params = JSON.parse(e.postData.getDataAsString());
var response = {};
if(params.type === 'url_verification') {
response = {'challenge':params.challenge};
} else if(params.type === 'event_callback'){
if(params.event.type == 'message') {
response = eventHandler(params.event);
}
}
return ContentService.createTextOutput(response).setMimeType(ContentService.MimeType.JSON);
}
function eventHandler(event){
if(event.text == 'dinner') {
return sendSlack();
}
return {};
}
if(params.type === 'url_verification') { response = {'challenge':params.challenge};
ここの表記は認証時のパラメーターにSlack側からchallenge
を送られてくるので、challengeで返すように書いています。
普段はelse if
部分を通ります。
今回はdinner
というチャットに対して反応するように作成しました。
SpreadSheetに記入した文字に対して反応するように追加改修する予定
slackでテキストを生成して送るところを別ファイル化
sendSlack.gs
function sendSlack() {
var url = "https://hooks.slack.com/services/YOUR_SLACK_HOOK_URL"
var payload = createPayload()
var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : JSON.stringify(payload)
};
return UrlFetchApp.fetch(url, options);
}
function createPayload() {
var attachments = [{
"text": "どっち食べたい?",
"fallback": "Sorry, no support for buttons.",
"callback_id": "ButtonResponse",
"color": "#3AA3E3",
"attachment_type": "default",
"actions": [
{
"name": "button",
"text": "お寿司:sushi:",
"style": "primary",
"type": "button",
"value": "お寿司"
},
{
"name": "button",
"text": "しゃぶしゃぶ:cut_of_meat:",
"style": "danger",
"type": "button",
"value": "しゃぶしゃぶ"
}
]
}];
return {
"attachments": attachments,
"username" : "InteractiveNotification",
"text": "todays dinner"
};
}
2. アプリの作成
- GASの上部メニューより、
公開
→ウェブアプリケーションとして公開
- 一番下の
アプリケーションにアクセスできるユーザー
を全員(匿名ユーザーを含む)
にする。 -
更新
を押す - URLが発行されるので残しておく。
3. Slackアプリの設定
- Slackアプリ設定ページのサイドバーに
Event Subscriptions
という項目があるので選択 - GASのアプリ作成時に発行されたURLに
Request URL
に貼り付ける -
Subscribe to Workspace Events
にあるAdd Workspace Event
をクリックして、message.channels
をセットし保存する。 -
dinner
とチャンネルに書き込みアプリから返答が来たら完成!