blastengineのwebhook機能でメール送信が失敗したらzapier経由でSlackに通知できるようにした。

こんにちは！[blastengine](https://qiita.com/organizations/blastengine)のPMMの牧野です。
今回はwebhook機能を使って、メールがバウンスされた場合に、バウンスされたということを任意のSlackチャンネルに通知する仕組みを作ってみたのでご紹介です。
blastengineのwebhookはそのままですとSlackのAPIに対応する形式ではないので、一度zapierを経由してSlackのメッセージの形式に変換することで、自動通知の仕組みを実現しております。
※追記：2023/08現在トランザクションAPIのみに対応

# そもそも何に使う仕組みなのか？
(実現方法だけ知りたい方は読み飛ばしてください。)

ざっくりとした結論から言うと、この仕組みを使うことで、本来はメールサーバーを管理している人以外にはアクセスしにくいけど、実は他の組織も必要としているメールのバウンス通知を、簡単に共有できるようになります。

↓↓に具体的に説明していきます。
例えば、あなたがECサイトの管理運用を任されているとします。
そうするとたまにサポート部門からこんな問い合わせがあると思います。

「ユーザーからメールが届かないというクレームが上がってきているから調査してくれ」
「迷惑メールも見てもらったし、受信許可もしてもらっている」
ECの会員登録や購入完了に関わるメールが届かないと、ユーザーによってはストレスを感じたり、入金ができなかったりといろいろと不都合がありますよね。

問い合わせを受けてあなたはメールサーバーの送信のログを確認したり、メールが弾かれていないかをチェックしたりすると思います。
ですが、だいたいの場合において、原因はそもそものアドレスが間違っていたなど、簡単なものだったりします。

原因自体は簡単だけど、サポート部門の対応工数やサイト管理者での調査が必要になるのってあんまり健全じゃないですよね。
今回紹介しているのはこの状態を解消するための仕組みです。

Slackのサポート部門が目にするチャンネルに対して、メールのバウンスがあったタイミングで通知を飛ばすことで、問い合わせの際にサイトの管理者に問い合わせせずとも、まずそこを見たらメールが届いていない原因がわかる状態にすることができるようになります。

# 使うもの
今回はzapierを使うことでノーコードで非常にライトに実現する方法をご紹介します。
私用するツールは3つです。
①Slack(チャットワークやメールなどのツールでも代替できると思います。)
②zapier
③blastengine(これを使ってメール配信やバウンス検知を行います。)

↓図にするとこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/746a55fd-7ec2-1c46-112f-932e6ab219f8.png)

# 準備するもの

- blastengineのメール送信環境
下記を参考に準備ができます。
[blastengineを使ってターミナルからメールを送信する](https://qiita.com/goofmint/items/b498e5a15be1641db227)
[各言語での送信方法](https://qiita.com/organizations/blastengine?page=2#:~:text=trending_up,%E4%BA%BA%E6%B0%97%E3%81%AE%E8%A8%98%E4%BA%8B)
- zapierアカウント
[こちら](https://zapier.com/sign-up)からアカウントを作成できます。
- Slackアカウント

# 設定手順①~zapを新規作成する。
まずは、zapier内にblastengineとSlackを繋ぐための自動化フロー"Zap"を作成します。

Zapierの管理画面から『Create Zap』を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/e3c6b934-63b7-8824-dd99-14172d54609f.png)

トリガーに『webhook』を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/d017fb0a-edfc-cc75-2e1c-81f4c763a1b9.png)

イベントは『Catch a Hook』を選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/10ce04af-099c-1296-90d2-db71eae2476c.png)

『Continue』を押して次に行きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/399f7645-2226-393d-7d30-d8a891ed7af4.png)

ここは何も入力せずに再度『Continue』を押して次に行きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/f1491eb3-6292-41c8-35cd-2b17d80b8716.png)


# 設定手順②~blastengineのwebhookをzapierに読み込ませる。
zapier内でwebhookを読み取れるようにするためにblastengineの設定を行い検証のために1度webhookを送ってみましょう。

### zapからwebhookの送り先となるエンドポイントURLを取得
『copy』を押して表示されたURLをコピーします。（このページは後でつかうので開いたままにしておいてください。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/0ccb1d5b-f486-8a37-131e-e4d845287be5.png)


### blastengine側の設定
管理画面のトップページ右上の歯車マークを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/433979b7-be06-9447-b3b6-7e73e9d218fc.png)
webhookの設定箇所で『確認・変更』を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/6a550ebf-f7ed-4774-5f10-599fcda4232f.png)

『変更』を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/225c849a-348e-787e-47bd-056ad22ff8c9.png)

画像のように設定します。先ほどzapierでコピーしたURLを『エンドポイントURL』に貼り付けます。
設定できたら『確認』を押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/323f243e-8c7e-c364-9b70-1c2b9e042859.png)

『変更』を押して内容を確定させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/bd01679a-a88c-6702-a76b-97cda1dbcb8d.png)

### 検証用のwebhookを送る。
先ほど設定したエンドポイントに対して検証用の通知を送ります。
blastengineではhoge@example.comのようにexample.comへの送信をブロックする機能があるので、このドメインに対して送信をしてみてください。
そうすると下記のように配信がドロップされ、zapierにwebhookが飛びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/b0d7bfe8-f4e1-fa7b-4094-c95bc6bfb596.png)
### 読み取り結果を確認する
zapier側で読み取り結果を確認するために『test trigger』を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/bcebfd67-2d60-f483-d655-38d6dbf3bdbf.png)


zapierが読み取ってくれた結果が表示されるので、確認して『contine』を押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/14cd672c-03ed-435c-dccb-00d723a6760e.png)

# 設定手順③~送信されたwebhookをもとにSlackに送るメッセージサンプルを作成する。
ここまでの手順で受け取り口の設定は完了したのでここからはSlackへの送信部分を作っていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/1a6408de-ac52-0377-2051-28cfe63d289a.png)
SlackのEventには『Send Channel Message』を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/2e8552ed-b980-cc74-bc12-2fff261bb88f.png)
『continue』で先に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/2eb4aea4-99d9-5f73-c56c-80cb00593054.png)

Slackのメッセージの投稿先のアカウントを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/f45cef64-cda9-6f59-b63d-d793184962c6.png)

Slackの認証画面が出るので『許可する』を押してください。認証ができたら再度『continue』で先に進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/8c23725d-ec4d-ba00-3ed7-6a805d7ac806.png)

ようやくメッセージサンプルの作成に入ります。
テキストエリアを選択すると、メッセージが作成でき、先ほど読み込んだデータを挿入することが可能です。
valueの部分が灰色になってますが、ここは動的に変わる部分になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/e8169f9f-36fd-c479-00d9-305934921918.png)

その他の部分は↓の画像のように設定していますが、やりたいことに応じて任意で選択していってください。
***一枚目***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/d9513b61-08fd-7dd8-edfe-307b3ce36e1d.png)
***二枚目***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/171ad75f-30bc-c50a-b69b-b3a8c8b72dfd.png)

次の画面で実際のメッセージのサンプルが確認できるので、内容を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/532c8005-3b88-d1b6-2680-f2d89ebc0152.png)

問題がなければ『Test action』で一度内容を送信します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/d8c74a1e-4cf5-1536-8401-e920418aa6e3.png)
テストがうまくいっていたら『Publish Zap』でZapを発行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/e658cf83-6455-6d9f-e278-590f47d8dc74.png)
『Publish & Turn On』
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/13cce9ff-1209-38ba-b33b-45c374f6f8ec.png)

# 完成！！！

この画面が出たら完成です！お疲れ様でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/86e25ba9-a2a8-4b99-a807-4576c36a5214.png)

実際に送ってテストしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982596/3cd23e1d-2b90-46d2-fc6b-fb9087e17a3b.png)

こんな感じでメッセージが届いていました。
これで他部署からの問い合わせがいくらか減らすことができるのではないでしょうか。



# おわりに
今回はノーコードでライトに作成することにこだわったので、使っていく上で不都合が出たりすると思います。
GASやHerokuなどを使ってより業務フローにフィットした使い方もできると思いますので、いずれ紹介できればと思います。
また、IFTTTの無料プランの範囲内でも同じようなことができたので少し難易度が高そうですが試してみてください。

最後まで読んでいただきありがとうございます！ありがとうございました。