메일편 잊어버린 방지 버튼을 AWS IoT 버튼으로 만들어 보았다

젊은이 특유의 메일 서비스 담당



나의 회사에서는 젊은이의 일로서 「메일편」이라고 하는 것이 있습니다.
회사로부터의 송부·수취를 매주 9시·11시·15시에 실시하는 것으로, 이것이 또 상당히 책임 중대.
밧비에 잊어 버린 우편물을 보내지 못했습니다! 무슨 일이 있으면 보통 선배에게 폐가 걸립니다.

나 자신도 몇번 메일편을 잊은 실적이 있어, 리마인더를 붙여도 알람을 지워 그대로 잊는 것도(끔찍하다).
어떻게 든 메일 서비스를 잊어 버리는 것을 방지하는 메커니즘을 만들고 싶었고 AWS IoT 버튼을 사용하여 구현했습니다.


이 녀석입니다.

완성 데모



메일편 처리 후 버튼을 누른다



송부하고 싶은 우편물을 위해 두는 메일편 박스 같은 것이 있어, 거기에 설치합니다.
메일 서비스 담당은 제대로 메일 서비스를 처리했습니다! 라고 하는 때에 버튼을 패치와 누르는, 라고 하는 운용으로 합니다.

왠지 카코이

버튼을 누르지 않으면 경고가 상승합니다.



메일편 담당만이 참가하고 있는 Teams가 있어, 메일편을 잊으면 소정의 시간에 경보 통지가 올라갑니다.
이것을 보고 「떡볶이 녀석 메일편 잊어버렸잖아 가지 말라고」같이 다른 사람이 알아차려 주는 것도.

메일편 처리를 해도 버튼을 눌러 잊으면 경고 통지가 오르므로, 버튼의 누르는 것을 잊는 것만 요주의입니다.
나는 이것으로 여러 번 동기화에 잠겼다.



더블 클릭으로 "처리했다"



메일편 미처리의 경고를 보고, 누군가가 제대로 처리해 주었는지 모르겠네요.
거기서 버튼을 타블 클릭하면 「처리했어」 통지가 가도록(듯이) 하고 있습니다.

「아아아 언제나 엉망이구나」라고 하고 버튼을 더블 클릭하지 않고 메일편 대타를 하면, 다른 사람이 「에···이것 누군가 제대로 처리했다···?아무도 하지 않는다···?」 같은 불안한 공기가됩니다.
나는 이것으로 여러 번 동기화에 잠겼다.



구현 코마고마



버튼을 누르면 플래그를 세우십시오.



AWS IoT 버튼을 누르면 AWS Lambda를 통해 GoogleAppsScript에서 구현한 작업이 수행됩니다.
스프레드시트에 '처리했어요 플래그'가 서 있습니다.
Lambda의 구현은 이쪽.
import json
import boto3
from logging import getLogger, INFO, DEBUG
import urllib.request


logger = getLogger(__name__)
logger.setLevel(DEBUG)


def lambda_handler(event, context):

    #ダブルクリックした場合
    click_type = event['deviceEvent']['buttonClicked']['clickType']
    if click_type == "DOUBLE":
        url = 'Power AutomateのURL'
        data = {
            'message': "【自動連絡】誰かがメール便を確認しました。"
        }
        headers = {
            'Content-Type': 'application/json',
        }
        #PowerAutomateへ送信
        req = urllib.request.Request(url, json.dumps(data).encode(), headers)
        with urllib.request.urlopen(req) as res:
            body = res.read()

    #フラグを立てる
    url = 'GoogleAppsScriptのURL'
    data = {
            'message': "doPost"
        }
    headers = {
            'Content-Type': 'application/json',
        }

    req = urllib.request.Request(url, json.dumps(data).encode(), headers)
    with urllib.request.urlopen(req) as res:
        body = res.read()    
    return


GoogleAppsScript측은 이쪽.
//ボタンが押されたら値をchecked!に変える
function doPost(e) {
  var spreadsheet = SpreadsheetApp.openById('スプレッドシートのID');
  var sheet = spreadsheet.getSheetByName('mailcheck');
  sheet.getRange("B2").setValue("checked!");
}



시간이 오면 플래그 확인



메일편의 시간이 되었을 때에 플래그의 확인을 합니다.
시간 단위로 실행하는 것을 GoogleAppsScript로 할 수 있는지 확실히 cloud scheduler를 사용했습니다.
cloud scheduler에서 cloud function과 Pub/Sub 연동을 하고 GAS를 통해 스프레드시트의 플래그를 확인합니다.
cloud function내에서 플래그를 확인해, 통지가 필요하면 Power Automate에 Post된다는 구조로 되어 있습니다.



import urllib.request, json

def doPost(self,request):
    url = "GoogleAppsScriptのURL"

    #スプレッドシートのメールフラグチェック
    request = urllib.request.Request(url)
    with urllib.request.urlopen(request) as response:
        response_binary = response.read().decode("utf-8")
        response_dict = json.loads(response_binary)

    #メール未処理の場合
    if response_dict["mailcheck"] == "none": 
        url = "Power Automate側のURL"
        obj = {"message":"【自動連絡】メール便が未処理です!"}
        method = "POST"
        headers = {"Content-Type" : "application/json"}
        json_data = json.dumps(obj).encode("utf-8")

        #TeamsにPOST
        request = urllib.request.Request(url, data=json_data, method=method, headers=headers)
        with urllib.request.urlopen(request) as response:
            response_body = response.read().decode("utf-8")

    #メール処理済の場合
    elif response_dict["mailcheck"] == "checked!":
        print("mailcheck completed")

    #不具合
    else:
        print("something is wrong")

    return "処理完了"


플래그 청소



이대로라면 플래그가 갇힌 채로 돌아가지 않게 되어 버리므로, 플래그 클리닝을 실시합니다.
마찬가지로 cloud scheduler를 사용하여 gas를 실행하는 사양입니다.
//時間が来たら値をnoneにcleaningする
function doGet(e){
  var spreadsheet = SpreadsheetApp.openById('スプレッドシートのID');
  var sheet = spreadsheet.getSheetByName('mailcheck');
  sheet.getRange("B2").setValue("none");
}

사이고에게



이런 것을 만들어 보면 IoT 버튼은 상당히 무한한 가능성이 있구나라는 감각.
특히 더블 클릭으로 처리가 바뀌는 것은 재미있군요.
더 뭔가 만들어보고 싶은 곳입니다.

끝까지 봐 주셔서 감사합니다!
LGTM 받으면 엄청 격려가됩니다! 아무쪼록 잘 부탁드립니다! !

좋은 웹페이지 즐겨찾기