# LineBot 服務: 串接Flask + PostgreSQL ## 介紹 * 教會的服事繁雜,雖然有季表,但項目眾多,日期橫跨三個月,有時候會忘記自己的負責時間,另外,因人手不足常有一人負責多個服事的情況 * 為解決以上問題 * 開發一個LineBot每周一固定提醒下周的服事人選 * 額外提供季表工作分配的偵錯功能:使用者只要上傳季表檔案,就會立即回報是否有問題 ## 使用工具、版本 * Python * flask * Line-API * 詳見[Requirement](https://github.com/kuochuwon/LineBot/blob/master/requirements.txt) ## 程式架構 * Draw.io * 待補 * [Github原始碼](https://github.com/kuochuwon/LineBot) * 範例影片 * [手機端程式預覽](https://imgur.com/7ZGbQfq) * [桌面端程式預覽](https://imgur.com/NavCByD) ## 原理概述 這個Line機器人以Flask服務為基礎,使用者傳送訊息,Line API根據機器人設定的webhook傳送訊息到指定的URL,並根據訊息觸發以下服務 * **將使用者資料加入DB,使Line Notify能發送給對方** * 使用者key關鍵字: 服事提醒 \<name> * 由於使用者傳訊會夾帶對應的user_id,因此可將其作為Notify的對象依據,透過user_id將Line機器人帳號與Line Notify綁定一起 * Line Notify是一個免費服務,只要使用者點選連結,Line會產生一組Access token,後台可根據token傳訊給使用者,缺點是比起專屬帳號,識別度較低 * **提供使用指引** * 使用者點選圖文選單的**導覽** * 當後臺接收到此關鍵字,會將預先設定好的image url發送到Line API * Line會將對應url的image轉存後傳送到對話群組 * 此image就是教學截圖 * **教會主頁** * 使用者點選圖文選單的**教會主頁** * 當後臺接收到此關鍵字,會將預先設定好的json檔發送到Line API * Line會將此json檔渲染為Flex message * 提供各項教會基本資訊 * **每日一句** * 使用者點選圖文選單的**每日一句** * 後臺接收到後隨機從資料庫撈出一個金句,加入json檔發送到Line API * Line會將此json檔渲染為Flex message * **服事提醒** * 使用者輸入: 服事提醒 <使用者名稱> * 後臺接收到會將<使用者名稱>輸入到資料庫 * 每周一會比對一次季表負責人選與資料庫的<使用者名稱>是否重複 * 有的話就會透過Line推播通知 * **季表檢查** * 使用者上傳季表文件檔 * 後臺接收到會掃描整個文件,比對同一時間段,單一負責人是否從事兩項以上工作 * 若有: 透過Line提醒使用者該問題 * 若無: 透過Line回報檢查無誤 * Flex message應用範例 (陸續更新...) * 產生能讓使用者打電話的超連結 ```json! { "type": "button", "style": "link", "height": "sm", "action": { "type": "uri", "label": "CALL", "uri": "tel:0229118765" // telephone }, "offsetTop": "none", "offsetBottom": "none" } ``` * ## 參考資料、連結 * [Flex message相關文件](https://developers.line.biz/en/reference/messaging-api/#flex-message) * [Flex message simulator](https://developers.line.biz/flex-simulator/?status=success&status=success) * [Will的Line Notify教學](https://blog.miniasp.com/post/2020/02/17/Go-Through-LINE-Notify-Without-Any-Code) * [卡米狗的LineBot教學](https://ithelp.ithome.com.tw/users/20107309/ironman/1253) ###### tags: `Backend` `python` `Cloud`