เหตุเกิด เมื่อขี้เกียจทำบันทึกรายรับรายจ่าย
technical
เหตุเกิด เมื่อขี้เกียจทำบันทึกรายรับรายจ่าย
บทความนี้ไม่ได้เป็น how to แต่อย่างไร แต่เป็นการมาลองเขียนโปรแกรมให้ได้ความสามารถอย่างที่ต้องการ
ด้วยความที่ว่าพฤติกรรมของตัวเอง ใช้บัญชีเดียวในการใช้เงินในชีวิตประจำวันอยู่แล้ว และบัญชีนั้นได้ผูก Account กับ SCB Connect เอาไว้ นี่ทำให้รู้ว่าเงินเข้า เงินออกจากบัญชีนี้ ผ่าน line หรือการรับข้อมูลทางการเงินผ่าน Email
แล้วถ้าหากเราจะบันทึกเงินเข้าออกพวกนี้ละ? เพราะยังไงเราก็แค่อยากจะรู้ว่าเดือนๆนึงใช้เงินไปเท่าไร ทำอย่างไรได้บ้าง บทความนี้จึงเกิดขึ้น
อ่านก่อนเดี๋ยวจะงงเอา
SCB Connect คืออะไร? บางคนอาจจะไม่รู้ SCB Connect เป็นบริหารโดยตรงจาก SCB เอง ซึ่งเป็น Account Line Official เมื่อเราขอเป็นเพื่อนบัญชี SCB Connect เราจะได้เราข่าวสารผ่าน Line ของเรา นั่นรวมไปถึงการรับรู้เงินเข้าออก ของบัญชีที่เราเลือกไว้
Line bot เป็นบริหาร Line Official ที่สามารถให้ นักพัฒนามาสร้าง เพื่อให้โต้ตอบกับลูกค้าหรือทำบริการต่างๆ เช่น การทำสะสมแต้ม การจองตั๋วผ่าน line และหนึ่งตัวอย่างที่ชัดเจน ก็คือ SCB Connect นั่นเอง
Firebase Functions เป็นบริการ server จาก firebase ที่จะยอมให้เราเขียนโปรแกรมเข้าไปได้ในการจัดการ การร้องขอต่างๆของ Client
Google Sheet API บริการจาก Google ที่จะทำให้เราสามารถเขียนโปรแกรมไปบันทึกข้อมูลลง Sheet (ประมาณ Excel) ของ Google ได้
Gmail API บริการจาก Google ที่จะทำให้เราสามารถเขียนโปรแกรมให้สามารถอ่านข้อมูล Email ของเราได้
Automate App เป็นแอปพลิเคชันของ Andriod ที่จะยอมให้เราเขียนโปรแกรมเพื่อให้สามารถทำอะไรต่างๆจากโทรศัพท์ของเราได้
เอาละหากเราได้รู้จักบริการต่างๆ แล้วมาเริ่มความพยายามกัน
วิธีที่ 1: ลอง Connect ผ่าน Line bot
เริ่มแรกจะลองวิธี
- รับข้อมูลจาก SCB Connect
- หาวิธีให้ Line bot รับข้อความจาก SCB Connect
และผลลัพธ์คือ SCB Connect ไม่ยอมเป็นเพื่อนกับ Line bot (TT)
เพราะ Line Official มี function หนึ่งที่ปิดเอาไว้ นั่นคือ ความสามารถยอมให้ bot สามารถอยู่ chat group ได้
แต่ดูเหมือน SCB Connect เขาจะไม่ได้เปิด (ก็คงในแง่ความปลอดภัยของข้อมูลแหละ เข้าใจได้)
นั่นจึงสามารถทำได้เพียงแค่เราต้องกด copy ข้อความที่ได้จาก SCB Connect มาวางใน line bot ของเรา ถึงจะสามารถส่งมอบให้ Firebase Functions ไปใช้งานต่อได้
วิธีที่ 2: ลองอ่านจาก Gmail API
ในเมื่อ SCB Connect ไม่ยอม เราจะลองอ่านผ่าน Gmail API
แต่เดี๋ยวก่อน เราต้องไปรีวิว Email ที่ได้จากการทำรายการของ SCB ซะก่อน ผลก็คือ Email ที่ได้ มีการทำรายการไม่ครบหมายความว่า Email ที่ได้จาก SCB นั้น ได้จากการเข้าออกเงินผ่าน SCB Easy (เป็นบริการของ SCB ที่ทำธุรกรรมผ่านอินเตอร์เน็ต) แต่ยังไม่รวมการใช้บัตร Debit ที่เราใช้ วิธีนี้จึงตัดออกไป
วิธีที่ 3: กลับมาง้อ SCB Connect
สุดท้ายคงต้องกลับมาง้อ SCB Connect กันหน่อย ลองปรึกษาพี่ๆ จึงได้คำตอบว่ามีวิธีอีกอย่างหนึ่งนั้นคือ IFTTT หรือการทำ Automate หรือ Tasker ของแอปของ Android โดย App ที่ใช้ จะใช้ Automate App
มาดูขั้นตอนกัน
- รับข้อมูลจาก SCB Connect
- เขียนโปรแกรมใน Automate App รับข้อความจาก Notification ผ่าน line และ เรียก HTTP Request ไปที่ Server ของ Firebase Functions เราก็จะได้บล็อคโปรแกรมประมาณนี้มา
-
ทำให้ Firebase Functions ประมวณผลข้อความที่อยู่ในรูป text เป็นข้อมูลที่สามารถไปบันทึกที่อยู่ใน cell ของ Google Sheet ได้
ในส่วนนี้ความยากอย่างหนึ่งคือจะทำยังไงให้ โปรแกรมรับรู้ว่าข้อความนี้เป็นรายรับ หรือรายจ่าย วิธีทำในตอนนี้นั้นตรงไปตรงมา เพราะจากการอ่านข้อความทั้งหมดที่เคยได้รับ ก็จะเห็น pattern ที่คล้ายๆกัน เราจึงหาเคสเท่าที่เป็นไปได้และ ทำ TDD (Test-Driven Development) เพื่อทำให้ได้มาซึ่งความสามารถรับรู้ว่า message นี้เป็นรายรับหรือรายจ่าย และมีค่าเท่าไร
-
นำข้อมูลที่ Server ประมวณผลไปบันทึกใน Google Sheet
ถึงแม้ ยังมีบัคบางอย่างของ Automate App ที่ไม่ยอมรับ message จาก notification แต่สุดท้าย เราก็สามารถสร้างโปรแกรมที่สามารถบันทึกรายรับ รายจ่ายได้ :D
หากไปใช้จริงก็ต้องคิดถึงในแง่ security เพิ่มอีกหน่อย และคนทั่วไปก็ยังยากที่ใช้งานอย่างที่เราทำได้ use case กระบวนการทั้งหมดจึงยังไม่ตอบโจทย์คนทั่วไป
เอาจริง SCB ก็อาจมีบริการที่เปิดให้ API มาอยู่แล้วแต่ (แต่คงเสียตัง) อย่างที่ Money Lover (แอปบันทึกรายรับ รายจ่าย) มีให้ subscribe จากธนาคาร
สิ่งที่ได้เรียนรู้คงเป็นเทคนิคต่างๆ ที่พูดถึงในตอนต้นของบทความ และมันจะไม่เกิดขึ้น หากเราไม่ชอบและไม่อยากเรียนรู้มัน
จงสนุกไปกับการเขียนโปรแกรม