Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8916

Slackの特定投稿をメールで自動送信してみた

$
0
0

はじめに

社内コミュツールとしてSlackが導入され、社内のコミュニケーションが多少なりとも活性化してきました。
SlackのAppやワークフロービルダーを使って既存プロセスを楽にしようと考える人も出てきて、ツールが変われば人も変わるなーと実感しています。

そんな中でも依頼は「社内メール」という文化は残っており、最後は誰かがメールを送らないといけません。。。
なのでSlackで簡素化した申請プロセスの申請内容をSlackから社内メールに自動送信するようにしてみました。

環境

今回は以下の環境を利用しました。

Slack(Outgoing Webhook)
Sendgrid
Google Apps Script(Node.js)

順番に設定内容を記載します。

1.Slack

チャンネルで特定のキーワードに対して反応するOutgoing Webhookを設定します。
Outgoing WebhookはSlackのApp管理ページから「App ディレクトリを検索」で検索できます。

1-1.設定内容

チャンネル:Outgoing Webhookを動かすチャンネルを指定します。
プライベートチャンネルは指定できませんでした。

引き金となる言葉:トリガーとなるキーワードを指定します。

URL:あとで作るGoogle Apps ScriptのCurrent web app URL:を指定します。

スクリーンショット 2020-01-17 11.39.50.png

2.Sendgrid

メール配送はSendgridを使いました。
https://sendgrid.kke.co.jp/

詳細は割愛しますが、必要となるのはAPIキーです。
ダッシュボートの「Settings」-「API Keys」でKeyを作成してください。
注意:Keyは作成時しか表示されません。

3.Google Apps Script

Slackの投稿を受け取ってメールを送信するスクリプトはGoogle Apps Scriptに構築しました。

3-1.環境変数

環境変数は以下を設定します。
環境変数の設定はGoogle Apps Scriptの「ファイル」-「プロジェクトのプロパティ」-「スクリプトのプロパティ」から設定できます。

■VERIFY_TOKEN
検証用トークンです。自身で設定したOutgoing WebhookからのPOSTかどうか検証します。
これを設定しないとどこからでもPOSTできるようになってしまいます。
設定値はOutgoing Webhookの設定ページにあるTokenを指定します。

■SEND_GRID_ENDPOINT
SendgridのURLを指定します。
https://api.sendgrid.com/v3/mail/send

■SEND_GRID_API_KEY
Sendgridのダッシュボードで取得したAPIキーを指定します。

3-2.スクリプト

doPost(POST、Verify処理)と、sendMail(メール送信処理)の2つに分けています。
メールのto,subject,from_name,fromはご自身の環境に合わせて設定してください。

PropertiesService.getScriptProperties().getProperty('XXX')で環境変数を取得しています。

code.gs
functiondoPost(e){varverify_token=PropertiesService.getScriptProperties().getProperty('VERIFY_TOKEN');if(verify_token!=e.parameter.token){thrownewError("invalid token.");}varmessage=e.parameter.text;sendEmail(message);}functionsendEmail(message){varsendgrid_endpoint=PropertiesService.getScriptProperties().getProperty('SEND_GRID_ENDPOINT');varsendgrid_apikey=PropertiesService.getScriptProperties().getProperty('SEND_GRID_API_KEY');varto="送信先メールアドレス";varsubject="メールタイトル";varfrom_name="送信者名";varfrom="送信元メールアドレス";varbody={"personalizations":[{"to":[{"email":to}],"subject":subject}],"from":{"email":from,"name":from_name},"content":[{"type":"text/html","value":message}]}varpayload=JSON.stringify(body);UrlFetchApp.fetch(sendgrid_endpoint,{method:'POST',headers:{"Content-Type":'application/json',"Authorization":"Bearer "+sendgrid_apikey},payload:payload});}

3-3.有効化

Google Apps Scriptのメニューの「公開」-「ウェブ アプリケーションを導入…」からスクリプトを有効化します。
Who has access to the app:Anyone, even anonymousを選択してください。

スクリーンショット 2020-01-17 13.31.29.png

こちらに出力されるCurrent web app URL:を 1-1.のURLに指定します。
これで設定は完了です。

4.動作確認

Outgoing Webhookで設定したチャンネルで引き金となる言葉を投稿して、内容がメールで送信されるか確認します。
うまく送信されない場合は各設定値と、Google Apps Scriptのログを確認してみてください。

まとめ

Slack投稿をメールに自動送信してみました。
これで「メールでしか申請を受け付けない!」プロセスをSlackで実行することができるようになりました。

今後はもっとポジティブな使い方がしたいです。笑


Viewing all articles
Browse latest Browse all 8916

Trending Articles