3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SlackAdvent Calendar 2020

Day 8

GoogleAppScriptからSlackにグラフ画像をPostする自分用メモ

Last updated at Posted at 2020-12-07

目的など

  • 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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?