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

More than 3 years have passed since last update.

Slackからメールに自動送信してみた

Last updated at Posted at 2020-01-17

はじめに

社内コミュツールとして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
function doPost(e) {
  var verify_token = PropertiesService.getScriptProperties().getProperty('VERIFY_TOKEN');
  if (verify_token != e.parameter.token) {
    throw new Error("invalid token.");
  }
  
  var message = e.parameter.text;  
  sendEmail(message);
}

function sendEmail(message){
  var sendgrid_endpoint = PropertiesService.getScriptProperties().getProperty('SEND_GRID_ENDPOINT');
  var sendgrid_apikey = PropertiesService.getScriptProperties().getProperty('SEND_GRID_API_KEY');
  var to = "送信先メールアドレス";
  var subject = "メールタイトル"; 
  var from_name = "送信者名";
  var from = "送信元メールアドレス";
  
  var body = {
    "personalizations": [
      {
        "to": [
          {
            "email": to
          }
        ],
        "subject": subject
      }
    ],
    "from": {
      "email": from,
      "name" : from_name
    },
    "content": [
      {
        "type": "text/html",
        "value": message
      }
    ]
  }
  var payload = 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投稿をメールに自動送信してみました。
今回はVerifyのためにtokenを使いましたが、Verifyすら不要であれば変数なしでもいけそうです。
セキュリティには十分注意して使いましょう。

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