Google Apps ScirptからSlackに投稿する

Page content

前提条件の確認

Slackにアプリを追加する為に管理者の承認が必要な設定になって居るとして話を進めます。 見分け方は https://自分の使うワークスペース.slack.com/apps/new/A0F7XDUAZ にアクセスした時に 申し訳ありません! という画面になるかどうかです。ならずに設定出来そうな画面が出るワークスペースでは少し画面が異なります(個人のワークスペースの場合は承認不要の設定にして居るかも)

また、Google Apps Script(以下GAS)を既に利用して居て、Google Spread SheetならGASで色々操作できてるんだけどなぁ…という人を対象にして居ます。

SlackのWebhook URLの発行

Slackに投稿を行う為のWebhook URLを発行します https://自分の使うワークスペース.slack.com/apps/A0F7XDUAZ にアクセスします 設定をリクエストするという緑のボタンを押して下さい 管理者に何の為にWebhook URLを発行したいのか伝えるメッセージを書きます。

○○のスプレッドシートが更新された事をチャンネルに通知します

という感じです。どういう情報がこのURLから投稿されるかがわかると管理者も承認しやすいと思います。ワークスペース内でルールが個別にある場合はそちらにしたがってください。 image

リクエストを送信ボタンを押すと管理者にリクエストが送信されるので、待つか管理者を探して承認して欲しいです!とつついてみましょう。

ちなみに管理者にはこのようなメッセージとしてリクエストが届きます image

承認された後

リクエストが承認された後 https://自分の使うワークスペース.slack.com/apps/A0F7XDUAZ にアクセスすると 設定をリクエストする というボタンだった部分がSlackに追加になるので押します

どのチャンネルに投稿したいか選びます。

ここで指定するチャンネルは後から変えられるので、最初は自分用のbotテストチャンネルみたいなところを作ってそこを指定すると良いです image

Incoming Webhook integrationの追加のボタンを押すと次の画面になります

Incoming Webhookの設定画面

URLが https://自分のワークスペース.slack.com/services/Bなんとかかんとか?added=1 という画面に移動します このURLは後から設定を変えるときに必要になるのでメモしておきます。(?added=1 の部分は要りません)

このURLはSlackにアプリを追加する為に管理者の承認が必要な設定になって居る場合Slackの管理者とIncoming Webhookを追加した人以外見る事は出来ません。

インテグレーションの設定

チャンネルへの投稿

ここで投稿するチャンネルを変更することが出来ます

Webhook URL

このURLをGASで使うとSlackに投稿を行う事が出来ます。 このURLが他人に知られるとあなたの権限でSlackに投稿し放題になるので厳重に取り扱ってください

説明ラベル アイコンをカスタマイズする メッセージをプレビューする

投稿出来るようになってから設定しても問題無いので飛ばします。

ここまで確認したら 設定を保存するボタンを押します。

GASプロジェクトにSlackに投稿する仕組みをコピペする

https://raw.githubusercontent.com/nyomo/slack_gas/master/WebHook.js の内容をコピペしてGASのスクリプトエディタに貼り付けます。

ファイル→Newからスクリプトを選んで自分が編集している物とは別のタブに貼り付けられるようにすると後からの管理に便利だと思います。

post2slack という名前のスクリプトファイルを追加してコピペした姿 image

このコピペしたコードを含むスクリプトを実行するとGoogleアカウントへのアクセス権限として 外部サービスへの接続 の許可を求められます。許可するまでGASでSlackに投稿を行う事は出来ません。 image

SlackのWebhook URLをGASのプロジェクトに登録する

  1. GASのスクリプトエディタのファイル→プロジェクトのプロパティを選び、スクリプトのプロパティタブを選択します。
  2. +行を追加のリンクを押してプロパティに WebhookURL 値にSlackのWebhook URLを入力します
  3. 保存ボタンを押します

image

サンプルコード

以下のコードでSlackに投稿を行う事が出来ます

単純にメッセージを送信するunisanを利用する場合

function unisan_sample(){
  unisan("hogehoge"); //メッセージをWebhook URLの発行で指定したチャンネルに送る事が出来ます
  //チャンネル名とアイコンとアプリの名前を指定して送る事も出来ます
  unisan("送りたいメッセージ","#チャンネル名",":アイコン:","アプリのユーザ名");
  unisan("ハローワールド","#test","☺️","うにさん");
}
  unisan("hogehoge","#test"); //Incoming Webhookの設定を特にいじっていない場合
  unisan("ハローワールド","#test","☺️","うにさん");

この例だと以下の様にSlackに投稿されます

image

ちょっと凝ったメッセージを送信する場合

ここから ここまで の間に Slackの Block Kit Builderで作ったメッセージを貼り付ける事が出来ます(行頭の { と行末の }はコピペする際に除いてください)

function post2slack_sample(){
  const options = {
  "icon_emoji": "😭",
  "username": "Slack太郎",
  "attachments": [{
  "color" : "#4169e1",
  //ここから
	"blocks": [
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": "This is a header block",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "*マークダウンで太字*  _イタリック_.\n<https://example.com|リンク>"
			}
		},
		{
			"type": "divider"
		}
	]
  //ここまで
  }]};
  Logger.log(post2slack(options));
}

↑のサンプルは以下の様に投稿されます

image

会社で使われてるたこさん が動いて居るサーバが滅ぼされる予定があってGAS勢が困らない様に書いた

いかちゃん→たこさん という流れでNyaHaXだなぁと思ったので安直にうにさんにした