mail通知をslackに移行した話

 

 

おかもく?勉強会

林田

・アプリエラー通知

・zabbixとかmonitやらの監視通知

・問い合わせメール

全てのメール通知をslackに集約して幸せになりたい

はじめに

有料かよ

メール配信っぽいサービスで

API提供しているところで、うまくできないかな

https://www.mailgun.com/

https://zapier.com/zapbook/mailgun/slack/

即時じゃねえ

mailgunのメール転送機能で、URLを叩けそう

ということは、エンドポイントさえあれば・・・

てっとりばやくserverlessを使う

https://github.com/serverless/serverless

$ serverless create --template aws-nodejs
$ ls
app.js handler.js package.json serverless.yml
$ serverless deploy
service: serverless-mailgun-slack

provider:
  name: aws
  runtime: nodejs4.3

functions:
  slackPost:
    handler: handler.slackPost
    memorySize: 128
    events:
      - http:
          path: post
          method: post
"use strict";

// configuration
const MAILGUN_KEY = process.env.MAILGUN_KEY;
const SLACKHOOK_URL = process.env.SLACKHOOK_URL;

const superagent = require("superagent");
const mockreq = require("mock-req");
const multiparty = require("multiparty");
const crypto = require("crypto");
const hmac = crypto.createHmac("sha256", MAILGUN_KEY);
const qs = require('querystring');

module.exports.slackPost = (event, context, cb) => {
      const params = qs.parse(event.body);
      processMessage(
        params.timestamp,
        params.token,
        params.signature, 
        params.recipient, 
        params.From,
        params.Subject,
        params["body-plain"],
        cb
      );
};

function processMessage(timestamp, token, signature,
 recipient, from, subject, body, cb) {
  ~~略
}

serverless.yml

handler.js

エンドポイントとlambdaができた

転送時にAPIをたたいてもらう

うまくいったっぽい

Postパラメータの取得方法

mailgunのドキュメントに

転送した際のPOSTパラメータが書いてなさそうだったので、実際にエンドポイントから渡されたパラメータをデバッグした。

もっと手っ取り早い方法は、localhost:3000でrailsでサーバをたてて、ngrokで外部公開して、postアクションでbinding.pryして、取得できる。

Made with Slides.com