Slackとzapierを使ってメール送信を自動化してみた
前置き
本記事は以下の条件を満たしている方向けです。
- Slackを使っている or 使う予定がある
- zapierが何だか知っている
- 自動化(Automation)を試してみたい
概要
現在私が努めている会社では、メールでの勤怠連絡申請(遅刻等)を行っています。
毎回メールの宛先を設定して、本文を打って…という作業は面倒。 そこで今回はSlackとzapierを使い、メール送信の作業を自動化してみようと思います。
使用するサービス
- Slack
- zapier
- 各種メールサービス(今回はOffice365を使用します)
それぞれのサービスについて、アカウントが必要になります。
作成の流れ
ざっくりと以下のような流れになります。
- Slackで特定の投稿を検知する
- Javascriptでメールのコンテンツを作成する
- メールを送信する
実装
1. Slackで特定の投稿を検知する
1.1. Slackでメール送信用のチャンネルを作成する
今回は#勤怠連絡チャンネルを作成しました。

1.2. zapierにログインし、MAKE A ZAP!を押す

1.3. トリガーとなるアプリケーションを選択する
今回は、Slackを選択します。

1.4. Slackでのトリガーとなるアクションを選択する
今回はチャンネルでの投稿がトリガーとなるので、New Message Posted to Channelを選択します。

1.5. Slackアカウントを連携する
ワークスペース名、メールアドレス、パスワード等を入力します。

1.6. 投稿を拾う対象のチャンネルを選択する。
#勤怠連絡チャンネルを選択します。
Trigger for Bot Messages?ですが、今回はnoを選択します。
yesを選択すると、botの投稿にも反応するようになります。

1.7. Slackとの連携をテストする
対象のチャンネルに1件も投稿がないと、テストに失敗するようです。
今後のステップでも投稿が必要なため、以下の投稿を#勤怠連絡チャンネルにしておきます。
kintai 午前休 私用 13時頃に出社予定

2. Javascriptでメールのコンテンツを作成する
2.1. コードアクションを作成する
Code by Zapierを選択する。

2.2. 動作する言語を選択する
Run Javascriptを選択する。Pythonも選択可能。

2.3. Slackから受け取る値を設定する
Input Data項目にて、以下のように設定する。
- data - Text (直前の投稿を選択出来る)
- name - User Real Name (Slackでのアカウント名)

2.4. Javascriptのコードを入力する
以下のコードをCode欄に入力します。
// Get input message
var inputMsg = inputData.data.split(' ');
var name = inputData.name;
// Set to addresas
var to_address = '送信対象のアドレス'
// Create subject
var date = new Date();
var today = date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate();
var subject = today + " _勤怠連絡_" + name;
// Create boby
var type = inputMsg[1] || "";
var reason = inputMsg[2] || "";
var notice = inputMsg[3] || "";
var content = `
各位
お疲れ様です、${name}です。
以下の通り、勤怠連絡致します。
========================
日時: ${today}
種別: ${type}
理由: ${reason}
連絡: ${notice}
========================
以上、宜しくお願い致します。
`
output = {to: to_address, subject: subject, body: content};
2.5. コードをテストする
テストを実行し、Slackから受け取った値が正常に取得できていればOK。

終了後にAdd a Stepを押下し、ステップを追加します。
3. メールを送信する
3.1. メールサービスを選択する
今回はOffice 365 を選択します。他にはGmail等が選択可能です。

3.2. アクションを選択する
メールを送信するので、Send Mailを選択する。

3.3. Office 365アカウントを連携する
ここで連携したアカウントからメールが送信されます。

3.4. メールの各要素を設定する
メールの各要素を設定していきます。
設定するのは、
- To Address (送信相手のアドレス)
- Subject (件名)
- Body Format (本文の形式)
- Body (本文)
の4つです。
Javascriptのコードで、outputにJSON形式で設定した値が取得可能になっている筈です。
もしリストアイコンを押しても出てこない場合は、コードを見直してみてください。

3.5. メールの送信テストをする
Send Test To Office 365を押下すると、連携したOffice 365のアカウントから、送信対象のメールアドレスへとメールが送信されます!
(このテストはスキップすることも出来ます。今回はスキップします。)

テストが終了したら、Finishを押下し作成を終了します。

3.6. ZAP名を入力し、ZAPを起動する
最後に名前を入力し(日本語可)、ZAPをONにします。
OFFにすれば、ZAPが動くことはありません。

4. トリガーとなる投稿に制限をかける
ここまでで、Slackの投稿をトリガーとして自動でメールを送信できるようになりました。
しかし、今のままだと誰がどんな投稿をしてもメールが送信されてしまいます。
それではマズいですよね。

そうならない為に、特定の投稿にしか反応しないようフィルターをかけましょう。
4.1. filterステップを追加する
トリガーとなるSlackと、アクションとなるコードとの間にfilterを追加します。

filterを追加することで、Slackの投稿が特定の条件を満たす場合のみ、メールを送信することが出来ます。

4.2. 条件を指定する
今回は
- 投稿が
kintaiを言う文字列を含んでいる - 投稿者の電話番号が、自分の電話番号と一致している(本人であることの確認)
以上の2点でフィルターをかけました。

4.3. フィルターをテストする
直前の投稿が条件を満たしている場合のみマッチすることを確認します。

まとめ
いかがでしたでしょうか。
自動化と言っても難しいことはなく、簡単に出来てしまうことがわかりました。
今後、送信メールの内容を柔軟に変えられるようにしたりと、カスタマイズしていきたいと思います。