1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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から呼び出すとかすれば緊急コールの完成です

最後に

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

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?