みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者ノンプログラマー向けとして「GASを使ってSlackにメッセージを送る」を目標に連載をお送りしております。
前回の記事はこちら。
Incoming WebhooksでSlackアプリにWebhook URLを追加する方法をお伝えしました。
これで、リクエスト先のURLが決まりましたので、後はGASを使ってそこにリクエストを送るだけ…
今回は、SlackアプリのIncoming Webhooksを使ってメッセージを投稿する方法です。
では、行ってみましょう!
HTTPリクエストとは
そもそもHTTPリクエストとは何か、から説明しましょう。
例えば、私たちがブラウザでWebページを閲覧するときに、その目的のページのURLをアドレスバーに入力してEnterしますね。
すると、ブラウザがそのWebページを持っているWebサーバーに「このページのデータをください」とお願いをします。
これがHTTPリクエストです。
リクエストを受け取ったWebサーバーは、Webページのデータをブラウザに返します。
これをHTTPレスポンスといいます。
- HTTPリクエストを送る
- HTTPレスポンスを受け取って取り出す
この二つの処理を行う機能が、GASでも用意されているということですね。
HTTP通信については以下の記事により詳しく書いていますので、ご参考くださいませ。
Webhook URLへのリクエストの方法
Webhook URLへのリクエストの方法を確認するために、Slack APIの「Your Apps」のページを開きましょう。
ここで、これまで作成した「天気予報さん」を選択し、「Incoming Webhooks」を開きます。
そこに、Slackアプリに追加したWebhook URLにリクエストを送るときのルールが記載されているので見てみましょう。
この部分です。
To dispatch messages with your webhook URL, send your message in JSON as the body of an application/json POST request.
Google翻訳サンにお手伝いいただいて、訳するとこんな感じになります。
WebhookのURLを使ってメッセージを送信するには、メッセージを「application / json」 POSTリクエストの本文としてJSONで送信します。
わからない言葉いっぱい出てきますね。
参考にcurlコマンドもありましたので、見てみましょう。
curlコマンドとは、LinuxのコマンドでWebサーバーへデータ転送するものです。これと同じ命令をGASで実現できれば良いということになります。
GASでHTTPリクエストを行うUrlFetchメソッド
GASでHTTPリクエストを行うのは、UrlFetchAppクラスのfetchメソッドです。
書式はこちらです。
ここで、引数urlはWebhook URLですね。文字列で指定します。
引数paramsには、必要なパラメータを含むオブジェクトで渡します。
関係あるパラメータを以下にまとめますね。
パラメータ名 | データ型 | 説明 | 指定する内容 |
---|---|---|---|
contentType | 文字列 | 送るコンテンツの種類 | ‘application/json’ |
method | 文字列 | HTTPメソッド | ‘post’ |
payload | 文字列 | ペイロード=POSTリクエストで送る本体 | ‘{“text”:”Hello, World!”}” |
…おや、なんとなく先ほどのWebhook URLの説明やcurlコマンドの内容が網羅された気もしなくないですね。
ちなみに、Incoming Webhooksによるメッセージ投稿の場合、パラメータcontentTypeおよびmethodの指定する内容は常に固定なので、引数urlとパラメータpayloadだけ気にすればOKです。意外と簡単なのです。
GASからSlackアプリのWebhook URLにリクエストする
では、SlackアプリのWebhook URLにリクエストするGASのスクリプトを紹介します。
こちらです。
function test() { var url = '*****Webhook URL*****'; //皆さんのWebhook URLを入力ください var params = { method: 'post', contentType: 'application/json', payload: '{"text":"Hello, World!"}' }; UrlFetchApp.fetch(url, params); }
先ほどの表の通りにパラメータを指定してあげればOKですね。
Webhook URLは皆さんが取得したURLを指定してください。
Slackへの投稿を確認する
ではSlackへの投稿を確認しましょう。
スクリプトエディタで上記スクリプトを入力、実行します。
すると、初回は以下のように「承認が必要です」というダイアログが開きます。
「許可を確認」からいくつかのウィンドウが開いて「許可」の作業を進めてください。
特に、無料のgmailアカウントを使っている場合は、「このアプリは確認されていません」という危険っぽいウィンドウが出てくるので、びっくりせずに以下の記事を参考に進めてください。
許可の手順が完了すると、Slackの指定したワークスペースのチャンネルに以下のようなメッセージが送られているはずです。
バッチリですね!
まとめ
以上、SlackアプリのIncoming Webhooksを使ってメッセージを投稿する方法をお伝えしました。
HTTPリクエストの仕組み、また、GASからWebhook URLへHTTPリクエストを送るためのfetchメソッドの使い方について確認しました。
難しそうに見えますが、メッセージ投稿の場合、fetchメソッドのパラメータは固定のものも多いので、それほどでもありません。
さて、次回は固定メッセージではなくて、天気予報の結果についてメッセージを送れるようにしていきます。
どうぞお楽しみに!