目的など
- Slackのスラッシュコマンドを打つと、スプレッドシートにある某センサーデータのグラフをSlackに返したい
- スラッシュコマンドからの呼び出しは、こちらが参考になった
- Slackに画像をPostする際に、FetchUrlを使ったり、incomingWebhookを使ったものはありましたが、SlackAppライブラリを使ったものが見つけられなかったので、、、(探し方が悪かったかも)
- 初アプリで試行錯誤した(最終的にはとてもシンプルだった)ので、未来の自分宛てのメモです
GetGraph()
- 特定のスプレッドシートから決めうちグラフを作成する
- チャートを返却
- この内容をそのまま
function getGraph(){
var sheet = SpreadsheetApp.openById(SPREADSHEET_KEY).getSheetByName(SPREADSHEET_SHEETNAME);
var range = sheet.getDataRange();
var chart = sheet.newChart().addRange(range).setPosition(1, 3, 0, 0).build();
sheet.insertChart(chart);
return chart
}
sendSlack(chart)
- Slackに画像を送ってレスポンスをログに保存
- 色々試行錯誤した(GoogleDriveに溜めてlinkのURLをメッセージPostしたけど展開されない等等、、、)けれど、SlackApp使ったらとてもシンプルでした、、、、
function sendSlack(chart) {
var slackApp = SlackApp.create(SLACK_ACCESS_TOKEN);
// 対象チャンネル
var channelId = "#sandbox";
var options = {
"channels" : channelId,
'text' :"グラフ",
'filename' :"chart.jpg"
};
var resp = slackApp.filesUpload(chart.getBlob(), options);
console.log(resp);
}
testSlackPost()
- GASからテスト実行をするためのMain文
function testSlackPost(){
var chart = getGraph()
sendSlack(chart);
}
デバッグのコツ
- いきなりGASから叩かずに、公式のAPIリファレンスのcurlでSlack側の権限設定が正しいかを確認してから投げるとより良いと思います。
curl -F file=@filename.png -F "initial_comment=Shakes the cat" -F channels=#sandbox -H "Authorization: Bearer xoxb-xxxxxxxxxxxxxxxxxxxxxx" https://slack.com/api/files.upload