LoginSignup
10
9

More than 5 years have passed since last update.

slack経由でhubotからAWS SQSにキューを入れる

Last updated at Posted at 2014-11-26

例えばカスタマーサポートからメール配信停止を依頼されたとき、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
10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9