Customers Mail Cloudでは、メール送信だけでなく、メールを受信する機能があります。受信したメールは、転送する他、Webhookで外部システムへの通知も可能です。
今回はこの機能を使って、サーバレスにメールでのお問い合わせをSlackに通知する機能を作ってみます。
仕組み
仕組みは次のようになります。まずユーザはメールを送信します。そのメールはCustomers Mail Cloudで受信します。そして設定されているURL宛(Google Apps Script)にWebhookを送信します。そしてGoogle Apps ScriptからSlackへ通知します。ここまでの流れはサーバレスに実装できます。
フォーマットはJSONとマルチパートフォームデータ
Customers Mail CloudでのWebhookの形式として、JSONとマルチパートフォームデータ(multipart/form-data)が選択できます。この二つの違いは、添付ファイルがあるかどうかです。今回は扱いやすさを重視し、JSON形式を選択しています。添付ファイルも想定される場合はJSON形式にしないでください。
Slackの準備
Slackではまずアプリを作成します。作成したアプリのOAuth&Permissionsで、 incoming-webhook
を有効にします。これで外部から投稿可能になります。
そしてインストールして、トークン文字列を得ます。
Google Apps Scriptの実装
WebhookはPOSTメソッドで送信されてきますので、Google Apps ScriptではdoPost関数を用意します。まずWebhookから送られてくる情報を基にメッセージを組み立てます。そしてsendToSlack関数でメッセージを投稿します。
function doPost(e) { // Customers Mail Cloudから送られてくる情報 const params = JSON.parse(e.postData.getDataAsString()); // メッセージを組み立てる const message = `メールが届きました: ${params.subject}\nFrom: ${params.headers.filter(o => o.name == 'From')[0].value}\n\n${params.text}\n`; // Slackに投稿 const res = sendToSlack(message); // Webhookに対するレスポンス const output = ContentService.createTextOutput(); output.setMimeType(ContentService.MimeType.JSON); output.setContent(JSON.stringify({ message: "success!" })); return output; } // Slackへの投稿処理 function sendToSlack(message){ // Slackに送信するのに必要な情報 const token = 'xoxb-...OpKj'; const postUrl = 'https://slack.com/api/chat.postMessage'; const postChannel = '#general'; const username = 'CustomersMailCloud'; const jsonData = { "channel" : postChannel, "username" : username, "icon_emoji": ":email:", "text" : message }; const payload = JSON.stringify(jsonData); const options = { "method" : "GET", "contentType" : "application/json; charset=UTF-8", "headers": { "Authorization" : "Bearer " + token }, "payload" : payload }; return UrlFetchApp.fetch(postUrl, options); }
作成したらWebアプリケーションとして公開します。後は実際にメールを送ってみてテストしてみましょう。
まとめ
お問い合わせフォームを用意して、そこからSlackへ通知する仕組みはよくありますが、サーバ側の実装が必要になります。今回の方法であればメールアプリケーションだけなのでサーバを立てる必要がありません。サーバレスで実装できます。
大量のメール配信だけでなく、メール受信を通じたインテグレーションを構築する場合にもCustomers Mail Cloudを役立ててください!