例えばカスタマーサポートからメール配信停止を依頼されたとき、WEB UIとして準備してないと手作業でフラグを立てたりと何かと日々の運用で面倒なことがある。
slackに「このアドレスですがメール配信停止処理お願いしますー」なんて言う言葉を拾ってメール配信停止できたら素敵かもと思いhubotに頑張ってもらうことにした。
AWSのSQSにキューをぶち込んで後はバッチスクリプトがフラグを立ててくれるようにした。
先ずはaws-sdkをインストールしてから
npm install aws-sdk --save
scripts/unsubscriber.coffee
- coffeescriptは素人なので汚いです
- AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY は環境変数で設定する
- slack上でメールアドレスを打つと「mailto:xxx@xxx.jp|xxx@xxx.jp」という形式で渡ってくるのでそこはよしなにする
AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-1'
sqs = new AWS.SQS();
queue_name = 'queue-xxx'
module.exports = (robot) ->
enqueue = (queue_url, email, code, room) ->
params = {MessageBody: "{\"email\":\"#{email}\",\"code\":\"#{code}\"}", QueueUrl: queue_url, DelaySeconds: 30}
sqs.sendMessage(params, (err, data) ->
if err
robot.send {room: room}, "error!"
else
robot.send {room: room}, "#{email} のメール配信停止します"
)
robot.respond /停止よろしく (.+)/i, (msg) ->
email = msg.match[1]
if not /([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+/.test(email)
msg.send("[syntax error] #{msg.message}")
return
sqs.listQueues({QueueNamePrefix: queue_name}, (err, data) ->
if err
msg.send("error!")
return
if data.QueueUrls
enqueue(data.QueueUrls[0], email, 9, msg.message.user.room)
else
sqs.createQueue({QueueName: queue_name}, (err, data) ->
if err or not data.QueueUrl
msg.send("error!")
return
else
enqueue(data.QueueUrl, email, 9, msg.message.user.room)
)
)
slack
以下を打てばSQSにメールアドレスが溜まる
ボット名 停止よろしく xxx@xxx.jp