2024-04-26|閱讀時間 ‧ 約 29 分鐘

LINE主動發出排班訊息

1. 作業說明                      

1.1 先取得排班表 CSV檔,由csv 排班表取得本次要通知的數列"          

判斷通知日是否=今日,若是今日,則記取csv排班表之數列  

 若找無通知日=今日,則跳離,表示本次不傳送LINE通知   

          

1.2藉由上述csv 排班表取得之數列,再取得該數列所對應之訊息內容       

     將該訊息內容再出力至LINE傳送用參數檔(txt file),以便後續LINE訊息傳出之依據 

          

1.3  LINE 傳出作業                

 依據 上述1.2 取得傳送訊息內容, 傳出訊息至事先設定好之LINE群組,

 如此該群組成員便可收到LINE自動傳來之訊息

 

1.4  bat 設計與Windows自動排成設定

上述作業內容作成bat,以便可以按照排程,自動執行bat檔。

本次執行完後,

若判定需傳出訊息,則程式將會自動推播訊息給LINE群組內的所有成員;

若本次不須傳出訊息,則程式不會傳出LINE訊息。


2. 實例說明                    

2.1 csv 檔內之排班表預先排出2024年4月起三個月之計畫表,其各數列之內容如下  

2.2 由上述數列,一一尋找通知日是否 = 今日

若是的話,將等於今日之通知日之數列值記取,以便以此數列取出相對應之訊息內容

本例今日 20240426 = 通知日,故判斷LINE需自動傳出訊息

本次要傳出之訊息內容為

4/29~5/11

李政杰

陳美軒

2.3 LINE 通知處理:

* 利用 python program : LINE_send_notify.exe

* LINE依據參數檔內所存之資料內容,傳出訊息至LINE群組

*上述參數檔內所存之資料內容,由執行bat檔後出力取得

本例 LINE參數檔內容取得如下:

M,

M,區公所值勤通知

M,期間: 4/29~5/11

M,早班: 李政杰

M,午班: 陳美軒

T,----------after executing bat job, decided the token Id -------


2.4 bat執行後,判斷本次是否需要傳出LINE 訊息

若需傳出LINE訊息,則由LINE_send_notify.exe 程式負責將內容傳至LINE官網機器,以便 LINE 能夠推播訊息給群組成員,群組成員收到LINE訊息內容,本例如下圖:

bat檔執行後,取得的訊息內容,由LINE官網自動傳出


2.5 當排班表有更新時

排班內容是可異動的,當有需更新時, 直接更新追加Csv 檔即可,其餘程式與bat不必修改。


3. 改善前後

3.1 改善前 :

(1)主管或擔當人員欲查看下回排班值勤由誰負責,須找出紙張,或打開電腦檔案,才能查看

(2)值勤人員若無留意,容易忘記自己何日需值勤,耽誤值勤工作且無法事先準備

3.2 改善後: 

(1)事前LINE主動發出通知,無論何處,所有人均可掌握值勤排班內容 

(2) 換班前幾天收到通知,可事先安排交代事務給下回值勤人員,讓值勤業務能順利實施

4 bat 內容 :

bat name : LINESend_Shift.bat

@ECHO OFF
rem ---入力檔: (排班表)(IT).csv which you want to send message
REM ---出力檔: LINE_send_notify_par.txt which Python pg using parameters
d:
rem cd D:\LINCT_material\PC\cmd-bat\bat\LINE_Notify\IT_shift
cd D:\lin_PC\cmd-bat\bat\LINE_Notify\IT_shift
set /a var_indx=0
rem set T_md=%DATE:~5,2%%DATE:~8,2%
set T_ymd=%DATE:~,10%
set T_ymd=%T_ymd:/=%
set brk=N

rem ***STEP1 ---read csv for getting LINE 通知日
For /f " delims=" %%V in ('findstr "通知" "排班表.csv" ') do ( CALL :RCSV_D "%%V" )
:RD_Brake
rem echo %errorlevel% %var_indx% %LINE_F% %brk%
rem pause ---112 !var[%n%]! , n=%n% indx=%var_indx% ; %brk% ?

if %brk% NEQ Y ( echo ***** Do not LINE send this time & goto EOJ )

echo M,> LINE_send_notify_par.txt
echo M,區公所值勤通知>> LINE_send_notify_par.txt

rem ***STEP2 ---read csv for getting (: 期間: /早班 /午班) ": 班"
For /f " delims=" %%V in ('findstr ": " "排班表.csv" ') do (CALL :RCSV_M "%%V")

rem ---get LINE send token No. -------
rem ---test P-l echo T,iq3DuxNuFXOgoWRPQqEal>> LINE_send_notify_par.txt

echo T,iEPXCVYGWis0cjLLl2zoQnwq3DuxNuFXOgoWRPQqEal>> LINE_send_notify_par.txt
CALL D:\lin_PC\cmd-bat\bat\LINE_Notify\LINE_send_notify.exe

:EOJ %errorlevel% %var_indx% %brk%
rem pause job end-----
EXIT

:RCSV_D
rem --- getting LINE 通知日 --------
set full_str=%1
set full_str=%full_str:"=%
rem echo %full_str%

set /a n=0
rem set brk=N
:: Full str 內,不必全部執行DO,以條件判斷,中途可跳走,保留變數值 -----
for %%a in ( %full_str% ) do ( CALL :SETDate %%a )

rem pause ---111 n=%n% indx=%var_indx% ; %brk% ?
exit /b %errorlevel% %var_indx% %LINE_F% %brk%

:SETDate
if %1==%T_ymd% (
set brk=Y
set /a var_indx=%n%
goto RD_Brake )

set /a n=n+1
exit /b

:RCSV_M
set /a n=0
:: --- NOTED: for %%a in ( %full_str% ) --in 內 不可有雙引號" ",空白及() 均不可---
set full_str=%1
set full_str=%full_str:"=%
set full_str=%full_str: =%
set full_str=%full_str:(={%
set full_str=%full_str:)=}%

:: Full str 內,不必全部執行DO!brk! 以條件判斷,得到第2次exit /b,就中途跳走 -----
set brk=N
for %%a in ( %full_str% ) do (
CALL :SETM %%a
setlocal enabledelayedexpansion
if !brk!==Y exit /b )
exit /b

:SETM
if %n%==0 ( set var[0]=%1
) else (
if %n%==%var_indx% (
set brk=Y
echo M,%var[0]% %1>> LINE_send_notify_par.txt ))
set /a n=n+1
rem pause ---222 %var[0]% brk=%brk% n=%n% ind=%var_indx%?
exit /b

---------recorded by linct---------

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.