はじめに
こんにちは。
エンジニアの卵のなりかけです。
緊急コールとかやめて欲しいですよね(夜勤するから夜勤手当てください)。
「実装しようとしたんですが、工数めちゃくちゃかかるので無理です!」って言いたかったのに、簡単に作れちゃった....
注)
ここでの緊急コールは「エラー通知飛んでるから携帯見ろや」的なものを指します。
要するに、この電話がかかってきたら夜間だろうが休暇中だろうがSlackのエラー関連スレッド開いてねってことです。
作り方
設定ファイルを作る
setting.json
{
"on":[0, 1, 2, 3, 4],
"from":22,
"end":7,
"to":"XXXXXXXXXX"
}
-
on
:緊急コールを行う曜日(0から月曜日で、6が日曜日) -
from
:緊急コール機能開始時刻(午後10時からであれば22) -
end
:緊急コール機能終了時刻(午前7時までであれば7) -
to
:電話かける先(e.164フォーマット)
定数を設定する
const.py
"""定数記述ファイル"""
ACCOUNT_SID = "XXXXXXXXXX"
AUTH_TOKEN = "YYYYYYYYYY"
FROM_NUMBER = "+00000000000"
関数を作る
main.py
"""緊急コールを仕込む"""
# 定数ファイル読み込み
import const
from datetime import datetime, timedelta, timezone
import json
from twilio.rest import Client
setting_file_path = "./setting.json"
def isOnToday(day_number, on_days_list):
"""
動作する日か確認
"""
if day_number in on_days_list:
return True
return False
def isWorkignHour(current_hour, start_hour, end_hour):
"""稼働時間か確認"""
if current_hour >= start_hour or current_hour <= end_hour:
return True
return False
def emergecyCall(setting_file_path):
"""緊急時にコールする"""
with open(setting_file_path) as f:
settings = json.load(f)
JST = timezone(timedelta(hours=+9), 'JST')
dt_now = datetime.now(JST)
if not isOnToday(dt_now.weekday(), settings['on']):
return
if not isWorkignHour(dt_now.hour, settings['from'], settings['end']):
return
account_sid = const.ACCOUNT_SID # Your Account SID from www.twilio.com/console
auth_token = const.AUTH_TOKEN# Your Auth Token from www.twilio.com/console
client = Client(account_sid, auth_token)
client.calls.create(
to=settings['to'],
from_=const.FROM_NUMBER,
url="http://demo.twilio.com/docs/voice.xml"
)
return
if __name__ == "__main__":
emergecyCall(setting_file_path)
このemergecyCall
関数をトライキャッチ文に仕込むとか、監視Botから呼び出すとかすれば緊急コールの完成です
最後に
なぜ悪夢を現実化してしまったのか...