LoginSignup
1

More than 1 year has passed since last update.

はじめに

こんにちは。
エンジニアの卵のなりかけです。

緊急コールとかやめて欲しいですよね(夜勤するから夜勤手当てください)。
「実装しようとしたんですが、工数めちゃくちゃかかるので無理です!」って言いたかったのに、簡単に作れちゃった....

注)
ここでの緊急コールは「エラー通知飛んでるから携帯見ろや」的なものを指します。
要するに、この電話がかかってきたら夜間だろうが休暇中だろうが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から呼び出すとかすれば緊急コールの完成です

最後に

なぜ悪夢を現実化してしまったのか...

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
What you can do with signing up
1