メールを使ったChatwork/Slackへの投稿をZapierを使って0円で実現する

現在チームでいくつかのSlackやChatworkといったChatツールを使っているのですが、いろんな事情でスマホアプリをインストールできないメンバーに向けて、Emailでも投稿できる仕組みを実現する必要が出てきました。
ChatworkとSlackで若干事情が違うのですが、APIマッシュアップツールである「Zapier」を使い、EmailからのChatwork/Slack投稿を実現してみました。

# Zapierとは？

IFTTTと同様の、いわゆるAPIマッシュアップWebサービスです。
コンセプトはIFTTTとまったく一緒で、「トリガー」と「アクション」を設定して処理をつないでいきます。


![zapier-logo.png](https://qiita-image-store.s3.amazonaws.com/0/110606/f01fac79-6c19-c445-1232-5d4362af4773.png)

↓The best apps. Better together. - Zapier
https://zapier.com/

有料版はいくつかあるのですが、フリー版では５つのZAP(処理の組み合わせ)まで作成できるので、今回はフリー版のまま使います。


IFTTTとの大きな違いは、トリガーの条件がフィルタという形で外に出されていることと、複数のアクションをチェインさせることができることです。

↓ZAPと呼ばれる一連の流れを作る画面の左ペイン。
![スクリーンショット 2016-03-04 8.57.34.png](https://qiita-image-store.s3.amazonaws.com/0/110606/f1687e6d-96fb-e5ad-5a39-2b6bfb8f1187.png)


今回はZapier独自のこの機能は使わないので説明は割愛します。


# なぜIFTTTを使わないの？

個人的にAPIマッシュアップにはIFTTTをメインで使っていたりもするんですが、なぜ今回Zapierを使ったのか？という理由は非常に単純で、

**「Chatworkのアクションチャネルがないから」**

です。日本初のChatツールだから分かりませんが、ChatworkはIFTTTからシカトされていて、トリガーチャネルもアクションチャネルもありません。単純に公開されているAPIの問題かもしれませんが、IFTTTと連携できないのはWebサービスとして結構致命的な問題かもしれません。


# 処理フロー

Gmailにメールを投稿されたものをすべてSlackに投げることも可能なのですが、そのアドレスに何のメールが送られてくるかわからない場合、スパムメールまでSlackに投げられてしまい非常に面倒なことになってしまいます。特に今回はチームでつかっているチャネルへの投稿なだけに、無駄な投稿は可能な限り回避したいところです。

なので今回はGmailのサブミッションアドレス（アカウント名の後ろに+でつないで拡張アドレスを作れる機能。通常のメールと同じように受信できる）とフィルタ機能を使い、たとえばusername+zapier@gmail.com宛に届いたメールにはすべてスターを付けるようにフィルタ設定を行っておき、Zapierからこの「スターが付けられたメールを見つけたら」というのをトリガーとして、メールで送られてきた内容をそのままSlackのチャネルに投稿するアクションを組んでいます。

![gmail_filteraction.png](https://qiita-image-store.s3.amazonaws.com/0/110606/995b0f81-f8a0-3778-4542-13bc94add72a.png)


Gmailのフィルタ機能についてはスコープが外れるのでここでは説明を省きます。
以降の処理は「サブミッションアドレス宛にメールが送られてきたらスターをつける」というGmailフィルタが設定され、スターがついているメールが１通以上あることを前提として進めます。

# Chatworkの場合

さて、ChatWorkの場合です。
ZapierのUIはIFTTTのそれよりもさらに単純なので非常にわかりやすいです。

## TRIGGERの作成

1. ログイン直後のダッシュボード画面で、左上の「Make a New ZAP」を押す
2. 「Choose a Trigger App」の検索窓に「Gmail」と入力
3. Gmailのトリガーが表示されるので選択してContinue
![スクリーンショット 2016-03-04 17.04.40.png](https://qiita-image-store.s3.amazonaws.com/0/110606/8e2e7805-046f-d990-d586-04ccafd359eb.png)
4. Select Gmail Triggerの画面で検索窓に「new email」と入力し、絞り込まれた結果の中から「New Email」を選択してSave+Continueを押す
![スクリーンショット 2016-03-04 17.04.40.png](https://qiita-image-store.s3.amazonaws.com/0/110606/6fd4ea00-136c-2a50-2f29-444f154ae87b.png)
5. Connect a New Accountを押し、接続したいGmailアカウントでログイン＆認証します
![スクリーンショット 2016-03-04 17.07.49.png](https://qiita-image-store.s3.amazonaws.com/0/110606/eb2f9834-50b4-ba05-df06-0aac904bc3f2.png)
6. 認証が終わるとこのような画面になるのでSave+Continueを押す
![スクリーンショット 2016-03-04 17.08.20.png](https://qiita-image-store.s3.amazonaws.com/0/110606/e01aa61c-3e17-8e7a-61b9-e941a34278fc.png)
7. Set up Gmail Emailの画面で、右端の矢印を押してプルダウンを表示し、その中から「STARRED」を選択してContinueを押す
![スクリーンショット 2016-03-04 17.10.51.png](https://qiita-image-store.s3.amazonaws.com/0/110606/39312828-1ad2-32ca-3b9e-2e53960fdfbe.png)
8. 最後にサマリー画面になるのでFetch&Continueを押し、この接続のテストを行います 
![スクリーンショット 2016-03-04 17.11.20.png](https://qiita-image-store.s3.amazonaws.com/0/110606/89a66719-e11d-0cf7-d77e-8dcc532c06be.png)
9. 前提条件でスターがついたメールが１通以上あるはずなので、テストは成功するはずです。
　　Continueを押します。
![スクリーンショット 2016-03-04 17.28.34.png](https://qiita-image-store.s3.amazonaws.com/0/110606/ab18afce-3b10-83f9-c9ba-7d5ac3fea02e.png)

## ACTIONの作成

1.  Choose an Action Appで「Chatwork」と入力し、表示されるチャネルを選択します。
![スクリーンショット 2016-03-04 17.30.34.png](https://qiita-image-store.s3.amazonaws.com/0/110606/04a0cd11-04ff-4294-3fac-2a84af5fc3c7.png)
2. Select Chatwork Actionで、Send Message を選択してSave+Continueを押す
![スクリーンショット 2016-03-04 17.32.54.png](https://qiita-image-store.s3.amazonaws.com/0/110606/6a14e2c5-13e8-66c4-a57d-83af1069414f.png)
3. Select Chatwork Accountの画面でConnect a New Accountを押す
![スクリーンショット 2016-03-04 17.35.40.png](https://qiita-image-store.s3.amazonaws.com/0/110606/355f1c01-8b94-898f-33d9-67bd8d413bd7.png)
4. ここでChatworkの代理投稿を行うユーザーのAPIキーを入力します。
![スクリーンショット 2016-03-04 17.41.37.png](https://qiita-image-store.s3.amazonaws.com/0/110606/36a62375-5f88-fef7-1e37-ba978dae07bb.png)

　Chatworkに投稿するためのAPIキーの取得は下記を参照して実施してください。
↓チャットワークAPIドキュメント
http://developer.chatwork.com/ja/index.html
5. アカウントを登録したらContinueを押します。
6. Set up Chatwork Messageの画面になるので、Roomで投稿先のルームを選び、Textで投稿するテキストを編集します。テキストにはTriggerで選んだメールの各フィールドが使えるので、これらを組み合わせてChatworkへの投稿内容を編集し、Continueを押します。
![スクリーンショット_2016-03-04_17_47_12_masked.jpg](https://qiita-image-store.s3.amazonaws.com/0/110606/d51d4637-7bc2-7360-9047-15e50778664c.jpeg)
7. 設定された内容で、Triggerで拾ったメールの内容を実際に投稿するテストを行います。ここでCreate&Continueを押すと実際にChatworkにこの内容が投稿されてしまうので注意してください。
![スクリーンショット_2016-03-04_17_52_13_masked.jpg](https://qiita-image-store.s3.amazonaws.com/0/110606/ab3ff46a-acbc-9478-f7c6-cfa7d2d13857.jpeg)
8. 投稿に成功するとこのような画面になるので、Finishを押します
![スクリーンショット 2016-03-04 17.55.54.png](https://qiita-image-store.s3.amazonaws.com/0/110606/170e498a-c702-af8e-e378-69b7f57423e8.png)
9. See it on your Dashboardを押して、ダッシュボードに戻ります
![スクリーンショット 2016-03-04 17.56.56.png](https://qiita-image-store.s3.amazonaws.com/0/110606/60f4dd32-653c-8d5c-170d-712035c0bee7.png)

ここまででテストが完了しています。Chatwork側でテスト投稿された内容を確認するとともに、念のためもういちどサブミッションアドレスにメールを送り、ちゃんとChatworkに投稿されることを確認します。

## 注意点

ちなみにZapierの実行間隔は15分だそうですので、メール送信からChatwork投稿まで最大で15分以上かかる可能性があります。辛抱強く待ちましょう。

# Slackの場合

SlackのEmail投稿についていろいろ調べていたら、今のSlackにはEmail integrationなるものがあり、こいつを使うとチャネルにユニークな投稿用アドレスが割り当てられ、そこにメールを投げることで投稿できるようです。

↓Sending emails to Slack – Slack Help Center
https://get.slack.help/hc/en-us/articles/206819278-Sending-emails-to-Slack

しかし上記のページにもありますが、これを利用するにはSlackのStandard以上の有料プランに契約している必要があり、現時点では導入が難しいと判断。結局SlackもZapierを使ってChatWorkと同様の方法でEmail投稿を実現しました。


## TRIGGERの作成

Chatwork側と同様なので割愛

## ACTIONの作成
1. Choose an Action Appで Slackと入力しSlackチャネルを選択します
![スクリーンショット 2016-03-04 18.08.03.png](https://qiita-image-store.s3.amazonaws.com/0/110606/80a1579f-9d95-7abb-1973-c41d7597fdb6.png)
2. Select Slack ActionでSend Channel Messageと入力し、絞り込まれたチャネルからSend Channel Messageを選択してContinueを押します
![スクリーンショット 2016-03-04 18.08.34.png](https://qiita-image-store.s3.amazonaws.com/0/110606/ecb4b531-3e35-1527-64c0-095d2a135121.png)
3. Set up Slack Channel Messageで、投稿先のチャネルとメッセージの内容を編集します。Chatworkと同じくTriggerで指定したメールのフィールドを挿入することができます。また細かいオプションもここで設定できるので必要に応じて設定します。
![スクリーンショット 2016-03-04 18.10.10.png](https://qiita-image-store.s3.amazonaws.com/0/110606/951eb0d7-88cf-0e39-856e-8ec42cdc1209.png)
4. Chatworkと同様にここで連携内容のテストが行われます。
![スクリーンショット 2016-03-04 18.10.33.png](https://qiita-image-store.s3.amazonaws.com/0/110606/fe8f3154-f123-4207-0f8c-4b0e92515cca.png)
5. あとはChatworkと同じです。

# まとめ

- メール経由でChatworkに投稿させるにはZapierが使える
- メール経由でSlack投稿する場合、純正Email Integrationもいいが無料でやりたいならZapierが使える
- どっちも更新間隔は15分なのでリアルタイム性は無いことを前提に利用すること