8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ateam LifeDesignAdvent Calendar 2023

Day 4

Incoming WebhookをつかってGASからSlackにメッセージを送信する方法

Last updated at Posted at 2023-12-03

はじめに

この記事は「Ateam LifeDesign Advent Calendar 2023」で完走賞を狙って25記事書いているうちの4日目の記事です。今年も完走目指して頑張るぞ!

GASとSlackの連携

弊社は社内のコミュニケーションツールとしてSlackを使っているので、GASでなにかしたものをSlackに通知させたいっていうケースは多いはず。なので今日はIncoming WebhookをつかってGASからSlackへ通知を飛ばす方法を紹介します。

作るもの

GASを実行するとSlackに通知するようにします。

準備

webhook URL の取得

今回はwebhookをつかうのでまずはじめにwebhook URLを取得しておきます。まずこのページにアクセスしてください。
Incoming Webhookを「Slackに追加」します。

スクリーンショット 2023-11-21 9.10.53.png

そして通知したいチャンネルを選択したあと、「Incoming Webhookインテグレーションの追加」を押します。

スクリーンショット 2023-11-21 9.17.07.png

追加が完了するとこんな画面がでてくるのでWebhook URLを控えておきます。後ほどGASからこのURLに対してPOSTすることでSlackへのメッセージ配信を行います。

スクリーンショット 2023-11-21 9.27.32.png

Webhook URLをスクリプトプロパティに登録する

スクリプトプロパティはキーバリュー型で文字列を保存できる機能で、主にコードにベタ書きしたくないパスワードやAPIキー等の管理に使います。

まずプロジェクトの設定をクリック。

スクリーンショット 2023-11-24 20.12.37.png

スクリプトプロパティを追加を押すと追加画面が現れるので

スクリーンショット 2023-11-24 20.13.25.png

先程発行したWebhook URLをTEST_URLという名前で登録します。

スクリーンショット 2023-11-24 20.14.17.png

ここで設定した値はGASの中で以下のようにすることで呼び出すことが出来ます。

const test = PropertiesService.getScriptProperties().getProperty("TEST_URL");
Logger.log(test); // 登録したWebhook URLが出力される

GASを書いていく

function myFunction() {
  const url = PropertiesService.getScriptProperties().getProperty("TEST_URL");
  
  const payload = {
      "text": "testです",
  };
 
  const options = {
      "method" : "post",
      "contentType" : "application/json",
      "payload" : JSON.stringify(payload)
  };
 
  // HTTP リクエストでPOST送信
  UrlFetchApp.fetch(url, options);
}

これだけです。あれ?なにも説明することがないくらい簡単だ。
スクリプトプロパティに登録したURLを呼び出して、そこに対してoptionsをPOSTするだけ。これを実行すると無事にSlackにメッセージを送ることが出来ました。
スクリーンショット 2023-11-24 20.28.22.png

せっかくなんでメンションくらいつけてみましょう。Incoming Webhookでは以下のようにしてメンションをつけることが出来ます。

const here    = "<!here>"     // @hereのメンション
const channel = "<!channel>"  // @channelのメンション
const user    = "<@user_id>"  // @ユーザー名のメンション

user_idはここから取得することが出来ます。

先程送ったtextにチャンネルメンションを含めてみました。これを実行すると

  const payload = {
      "text": "<!channel> testです",
  };

スクリーンショット 2023-11-24 20.42.40.png

無事に@channelメンションがついたことが確認できます。

最後に

今回はIncoming WebhookをつかってSlackにメッセージを送信する方法についてまとめました。これまた思ったより簡単にできましたね!明日はワークフローを呼び出すかたちでSlackにメッセージを送信する方法についてまとめていきます。

8
2
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
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?