先日作ったslackグループにどんどん人が入ってきてくれて、若干引いています。
それはそれとして、書いてない人にリマインド飛ばせるようにしたいなと思ったので、lambda + cloudwatchで定期的に通知飛ばせるようにしました。
SlackにRSS登録してその通知を受け取って、通知がきていない = 書いていない人とみなして連絡するようにしました。
この手法のデメリットは毎回RSSを登録してもらう必要があるんですよね。。。
書いたコードが実際に動くのが来週なので、もしかしたらバグってる可能性ありますが、一旦公開しておきます。
実際動いてバグってたら修正します。
# coding: UTF-8 import os import sys sys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'vendor')) import urllib import requests import json import datetime import yaml def getMessageApi(): u""" Slackの特定チャンネルからメッセージを取得する 特定の投稿のみを抜き取るのが難しいので、1週間単位で取得するようにした @return array """ config_data = getConfigData(); latest = datetime.datetime.now() oldest = latest + datetime.timedelta(weeks=-1) params = urllib.parse.urlencode({ 'token' : config_data['slack_token'], 'channel' : config_data['slack_get_message_channel_id'], 'oldest' : oldest.timestamp(), 'latest' : latest.timestamp(), 'count' : 1000 }) results = [] response = requests.get(config_data['slack_get_message_api_url'] + '?' + params).json() for message_data in response['messages']: if 'username' in message_data: results.append(message_data['username']) return results def sendMessage(message_data): u""" Slackの特定チャンネルにメッセージを投稿する @param array message_data @return none """ config_data = getConfigData(); requests.post(config_data['slack_send_message_api_url'], data = json.dumps({ 'text' : makeSendText(message_data), 'channel' : config_data['slack_send_message_channel_name'], 'link_names' : 1 })) def makeSendText(message_data): u""" Slackへ送信するようのメッセージを作成する @param array message_data @return string """ config_data = getConfigData() target_users = [] for config in config_data['mapping_table']: if not config['blog_name'] in message_data: target_users.append("<@" + config['user_name'] + ">さん") text_data = "<!channel>\n今週ブログを書けていないユーザーがいます!\n今週中に書けるようみんなで煽りましょう!\n書けていないユーザー\n================\n" + "\n".join(target_users) return text_data def getConfigData(): u""" コンフィグデータを取得する @return array """ with open('./config.yml', 'r') as yml: config_data = yaml.load(yml) return config_data def lambda_handler(event, context): message_data = getMessageApi() sendMessage(message_data)