はじめに
社内コミュツールとして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:
を指定します。
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')
で環境変数を取得しています。
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
を選択してください。
こちらに出力されるCurrent web app URL:
を 1-1.のURLに指定します。
これで設定は完了です。
4.動作確認
Outgoing Webhookで設定したチャンネルで引き金となる言葉
を投稿して、内容がメールで送信されるか確認します。
うまく送信されない場合は各設定値と、Google Apps Scriptのログを確認してみてください。
まとめ
Slack投稿をメールに自動送信してみました。
これで「メールでしか申請を受け付けない!」プロセスをSlackで実行することができるようになりました。
今後はもっとポジティブな使い方がしたいです。笑