ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。エンジニアの日々の開発などの記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

GASでSlackにメッセージを投稿するボットを作ってみよう!

この記事は GAS道場 Advent Calendar 2019 の13日目の記事です。 Google Apps Script(GAS)をこれから使おうという方向けのアドベントカレンダーになります。

このアドベントカレンダーを順番に見ていただけている方は13日目ということもあり、とうとう外部のAPIがたたけるようになったかと思います。 ということで、今回はSlackのAPIを叩いて、指定したメッセージをチャンネルに投稿するプログラミングをしてみたいと思います。

Slack Appを作ろう

まずは、以下のURLにアクセスします。

https://api.slack.com/apps

Create an Appをクリックします。

f:id:ponkotsu0605:20191212000924p:plain

App Nameにボットの名前を入力しCreate Appをクリックします。

f:id:ponkotsu0605:20191212000957p:plain

サイドメニューのOAuth & Permissionsをクリックします。

f:id:ponkotsu0605:20191212001029p:plain

ちょっと下の方にあるScopesのOAuth Scopeの項目までスクロールし、Send messages as [ボット名]を選択します。

f:id:ponkotsu0605:20191212001226p:plain

少し上にスクロールしてInstall App to Workspaceをクリックします。

f:id:ponkotsu0605:20191212001318p:plain

確認画面が表示されるので、許可するを選択します。

f:id:ponkotsu0605:20191212001346p:plain

すると、上記スクショのようにxoxp-から始まるトークンが取得できますので、こちらをメモしておきましょう。

以上で、Slack Appの準備が完了です。

スクリプトを書こう

では、GASのプログラミングをしましょう。

function myFunction() {
  postSlack('Hello World.')
}
function postSlack(message) {
  var url = 'https://slack.com/api/chat.postMessage'
  var postData = {
    'channel': 'チャンネルをここで指定',
    'token': 'xoxp-XXXXXXXXXXXXXXXXXXXXXXXX',
    'text': message
  }
  var options = {
    "method" : "POST",
    "payload" : postData,
  }
  var response = UrlFetchApp.fetch(url, options);
}

tokenのところに先程メモしたトークンを入力します。 channelのところは、チャンネル名かidを入力します。ちなみにチャンネルのIDはブラウザでslackを開いたときのhttps://app.slack.com/client/[アカウント]/[チャンネルID]のチャンネルIDのところがidになります。

これのmyFunction()を実行してみましょう。 f:id:ponkotsu0605:20191212001535p:plain 実行すると、Slackボットが投稿してくれます。

天気情報を投稿してみよう

ちょうど昨日の記事で外部のサービスを利用して天気の情報を取得するスクリプトを作成しました。

www.pnkts.net

それと組み合わせて、今回のボットに投稿させてみましょう。

function myFunction() {
  postSlack(getWeather())
}
function postSlack(message) {
  var url = 'https://slack.com/api/chat.postMessage'
  var postData = {
    'channel': 'チャンネルをここで指定',
    'token': 'xoxp-XXXXXXXXXXXXXXXXXXXXXXXX',
    'text': message
  }
  var options = {
    "method" : "POST",
    "payload" : postData,
  }
  var response = UrlFetchApp.fetch(url, options);
}

function getWeather() {
  var url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010';
  var response = UrlFetchApp.fetch(url).getContentText();
  var json = JSON.parse(response);
  
  return json.description.text;
}

これでmyFunction()を実行してみましょう。

f:id:ponkotsu0605:20191212002030p:plain

このように、天気の情報をslackに投稿してくれます。 また、以下の6日目に書いた記事のように、毎朝実行するように設定してあげると、毎朝slackで天気の確認ができたりもします。

www.pnkts.net

さいごに

このようにslackに投稿できるようになりました。もちろんChatworkやLINEなどもそれぞれに合わせたリクエストを投げることで投稿することができます。ちなみにLINEはこちらの記事に書いてあります。

www.pnkts.net

また、今回の記事でも過去の記事をいくつか紹介していますが。このようにいろんな組み合わせをすることで、あらゆることが実現できるようになります。みなさんも、いろんな組み合わせを実施してみてはいかがでしょうか!