ごあいさつ初投稿になります。見習いエンジニアの@andoshin11です。普段は旅行会社で働いているのでそちらのリンクも貼っときます(宣伝)http://meetuskyoto.comプログラミング初心者なので開発方面のメイン業務には貢献できないのですが、みんながいつも利用するSlackを活用して業務の効率化・潤滑化を図りたいなぁと思う次第です。Scriptを利用して実現したいと思います。Botを活用する意義としては業務の自動化そして何よりもBotは癒し!日夜の業務で枯れ果てた僕らの心を癒すオアシスのごとく、ときにBotの一声でチーム全体が活気を取り戻すこともあるのです。Scriptに焦点をあてたいと思います。(箇条書きですがNodeを利用したHubot生成方法はこちらのリンクから)スクショ多めでスクロール大変ですがよろしくです。Calendarの予定を取得、作成するといったことが簡単にできます。業務の自動化にぴったりですね。GASにSlackAppライブラリを導入するこちらで紹介されているライブラリを導入することでSlackへのPostが非常に簡単になります。Keyを入力することで目的のライブラリを導入できます。M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO任意のバージョンを選択し、「保存」をクリックし完了。Tokenが取得できますhttps://api.slack.com/web取得したトークンはプロジェクトのプロパティとして保存しておきましょう。メッセージの投稿ここから実際にコードを書いていきます。GASで使用する言語はJavascriptです。Tokenは、1つ前のステップで取得してプロパティに格納したものを呼び出しています。投稿先のチャンネルやメッセージ、名前、アイコンなどはすべてoptionsで指定できます。投稿に反応してメッセージを返すSlackにメッセージを送信できるようになりましたが、これだけでは一方通行の投稿しかできません。次はより実用的なBotになるようユーザーの投稿に対してレスポンスを返せるようにしたいと思います。ゴールは以下の特徴を備えたBotを作ることです。WebHooksというものがあります。簡単に言うとユーザーの投稿データを指定のURL(アプリケーション)にPOSTできるというものです。Wordsで始まる投稿に限りますが)これを利用してGASアプリケーションにSlackからPOSTがあったら適切なメッセージをレスポンスとして返すようなしくみを作りましょう。WebHooksを設定していきます。WebHooksを見つけてあげてください。Botへのメッセージを監視するチャンネルを指定します。「Any」を選択することでチーム内の全てのチャンネルが対象となります。このワードで始まるメッセージが外部のアプリケーションにPOSTされます。「(Bot名):」みたいな感じがわかりやすいかなと。Wordとして設定しました。POST先のURL(アプリケーション)を設定します。後ほど取得するGASアプリの公開URLをここに入力します。POSTされるデータに付随するTokenです。Bot側でちゃんと任意のSlackチームからの投稿か判別するための認証に使用するので、コピーしておいてください。ScriptにはdoPostというイベントハンドラが用意されています。アプリケーションに対してPOSTリクエストがあった際に自動で実行される関数です。WebHooksを利用してリクエストがあった際はこちらの関数が実行されるわけですね。今回はdoPost(e)とすることでユーザーからPOSTされた投稿データを引数として渡してやります。bot_icon});}こちらのGASアプリケーションにリクエストがあると「秘書子」から「#general」チャンネルに「はい、こんにちは」というメッセージが投稿されるシンプルなものです。アプリを公開する一般的にいうデプロイ的な作業です。Webhooksを設定してやります。メニューから「公開」→「ウェブアプリケーションとして導入」を選択Slackからは認証も特に行わないまま単純なリクエストが飛んでくるので、「アプリケーションにアクセスできるユーザー」の項目を「全員(匿名ユーザーを含む)」と設定しておいてください。※トークンによる認証は後ほどスクリプト内で実装します「導入」をクリックするとアプリケーションの公開URLが表示されます。WebHooks設定画面のURL(s)のところにコピペしましょう。これでSlackとGASアプリの連携は完了です。Wordsをつけることでメッセージがアプリに渡され、レスポンスが帰ってくるはず。秘書子かわいいよ秘書子これで目標の1つ目はクリアしました!名前(秘書子)が呼ばれたら反応する呼ばれたチャンネルに対してメッセージを投稿するユーザーの投稿内容によってメッセージが変わる投稿の認証機能しかしこのままではどのチャンネルでBotを呼び出しても、「#general」チャンネルにしか投稿が帰ってきません。投稿の取得まず知らなければいけないのがデータフォーマットです。WebHooksでPOSTされる個別の投稿データは以下のようなフォーマットの配列となっています。投稿があったチャンネルはchannel_idに、投稿文はtextに格納されているのが分かりますね。こちらのデータを読み出すカタチにコードを書き換えてやりましょう。