🐴
GAS:Slackでemojiが押されたら対象のスレッドをスプレッドシートにコピーしてSlackに通知する-1/3
新たに書き始めたら意外と量のあるものになったので3日に分けて書くことにしました。
前置き
特定のemojiを押したら反応するBotを作りたかった。
参考にするリファレンス
Event reference: reaction_added event
conversations.replies Slack API Method
処理の流れ
- Slackでemoji追加を検知
- GASを作成
- GASで値を処理し、スレッドの内容を取得
- スプレッドシートに転記
- Slackに返す
今日は1~2について記載します。
SlackBotの追加、GASを公開する方法、SlackEvent SubscriptionsへのURL追加方法は以下のnoteに書いてあるのでこちらを参考にしてください(ステマ)
1. Slackでemoji追加を検知
Event Subscriptions を設定する
-
SlackBotを新規作成
-
Event Subscriptions をOnにする
※RequestURLには後ほど作成するGASのURLを記載しておく。 -
Subscribe to events on behalf of usersで[reaction_added]を追加
2. GASを作成
完成したソース
// SlackのOutgoingから来るメッセージ
function doPost(e) {
// Event API Verification 時のコード
try {
var json = JSON.parse(e.postData.getDataAsString());
if (json.type == "url_verification") {
return ContentService.createTextOutput(json.challenge);
}
}
catch (ex) {
Logger.log(ex);
}
try {
var json = JSON.parse(e.postData.getDataAsString());
var channel = json.event.item.channel;
var ts = json.event.item.ts;
var reaction = json.event.reaction;
if (reaction == "thinking_face") {
}
}
catch (e) {
Logger.log(e);
}
作成途中でハマった事象
Jsonから値が取れない
ハマったときのソース
// SlackのOutgoingから来るメッセージ
function doPost(e) {
SpreadsheetApp.getActiveSheet().getRange(1, 1).setValue("ok");
// Event API Verification 時のコード
try {
var json = JSON.parse(e.postData.getDataAsString());
if (json.type == "url_verification") {
return ContentService.createTextOutput(json.challenge);
}
}
catch (ex) {
Logger.log(ex);
}
SpreadsheetApp.getActiveSheet().getRange(1, 2).setValue("hogehoge");
try {
var json = JSON.parse(e.postData.getDataAsString());
var channel = json.event.item.channel;
var ts = json.item.ts;
var reaction = json.reaction;
SpreadsheetApp.getActiveSheet().getRange(1, 3).setValue("チャンネルID:"+ channel);
SpreadsheetApp.getActiveSheet().getRange(1, 4).setValue("押されたスタンプ:"+ reaction);
if (reaction == "thumbsup") {
}
}
catch (e) {
Logger.log(e);
SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue("hogehoge");
}
}
スプレッドシートの出力結果
考えたこと🤔
Jsonからの値が取得できていないのでは
→ いやいや、Slackのリファレンス通りに定義してるけどな
→ 百聞は一見にしかずで一旦json変数を取得してみる
SpreadsheetApp.getActiveSheet().getRange(3, 2).setValue(json);
結果
{type=event_callback,
event_context=1-reaction_added-TC8AAU5TR-C01JQSJFWCE,
event_time=1.615635036E9,
api_app_id=A01RJ6GGYUR,
event=
{item_user=UC75B2XXX,
event_ts=1615635036.001500,
reaction=eyes,
user=UC75B2XXX,
item={type=message,
channel=C01JQSJXXXE,
ts=1615635026.001400},
type=reaction_added
},
team_id=TC8AAUXXX,
is_ext_shared_channel=false,
token=3BUlZ5ng0fmsrfmDSBY957pF,
authorizations=[Ljava.lang.Object;@630401a0,
event_id=Ev01QQQMK6HM
}
違うやんw
変数定義を変更する
変更前
var json = JSON.parse(e.postData.getDataAsString());
var channel = json.item.channel;
var ts = json.item.ts;
var reaction = json.reaction;
変更後
var json = JSON.parse(e.postData.getDataAsString());
var channel = json.event.item.channel;
var ts = json.event.item.ts;
var reaction = json.event.reaction;
解決した
Discussion