วันอังคารที่ 30 มกราคม พ.ศ. 2561

สิ่งที่เกิดขึ้นกับร่างกายเมื่อเรานอนไม่พอ


          หลังจากเขียนบทความด้านการเขียนโปรแกรมไปหลายบทความแล้ว บทความนี้ขอเปลี่ยนแนวมาพักสมอง (?) กับบทความด้านสุขภาพกันบ้าง ในปีที่แล้วผมได้เขียนบทความเรื่อง การอดนอนเพิ่มความเสี่ยงที่จะเป็นโรคอ้วน และ การนอนดึกตื่นสายในวันหยุดสุดสัปดาห์เป็นอันตรายต่อหัวใจ แต่ดูเหมือนว่าการนอนไม่เพียงพอจะสร้างปัญหาให้กับร่างกายของเรามากกว่านั้น จากงานวิจัยที่ศึกษาตัวอย่างเลือดพบว่าการนอนหลับน้อยกว่า 6 ชั่วโมงต่อคืนติดต่อกัน 1 สัปดาห์ส่งผลให้เกิดการเปลี่ยนแปลงระดับยีนส์มากกว่า 700 จุด ซึ่งการเปลี่ยนแปลงนี้ส่งผลกระทบต่อสุขภาพและเป็นสาเหตุของโรคอ้วน โรคหัวใจและโรคเบาหวาน


          จาก Infographic แสดงให้เห็นถึงสิ่งที่เกิดขึ้นเมื่อร่างกายนอนหลับไม่เพียงพอ และผลกระทบจะรุนแรงขึ้นเรื่อย ๆ หากเรายังนอนไม่เพียงพอติดต่อกันเป็นเวลานาน ซึ่งอาการที่เกิดขึ้นหลังจากนอนไม่พอ 1 คืนประกอบด้วย

  • รู้สึกหิวและกินอาหารมากขึ้น: จากการศึกษาพบว่าการอดนอนทำให้เรารู้สึกอยากอาหารที่มีแคลอรี่สูง และมีแนวโน้มที่จะกินอาหารทำลายสุขภาพมากขึ้น
  • มีโอกาสเกิดอุบัติเหตุสูงขึ้น: การพักผ่อนไม่เพียงพอจะทำให้เราซุ่มซ่ามมากขึ้น และความง่วงก็จะทำให้เกิดอุบัติเหตุได้ง่าย
  • หน้าโทรม: ผู้ที่นอนน้อยจะมีสเน่ห์ลดลง ดูเหน็ดเหนื่อยและเศร้าหมอง ยิ่งเวลาผ่านไปก็ยิ่งส่งผลต่อผิว เช่น ก่อให้เกิดริ้วรอยบนใบหน้า (หรือที่เรียกกันง่าย ๆ ว่า "ตีนกา" นั่นเอง)
  • เป็นหวัดได้ง่ายขึ้น: ประสิทธิภาพการทำงานของระบบภูมิคุ้มกันน้อยลง เมื่อแอนติบอดีที่ต่อสู้กับการติดเชื้อลดลงก็ส่งผลให้เราเป็นหวัดได้ง่ายขึ้น
  • เนื้อเยื่อสมองลดลง
  • อารมณ์มาเต็ม: การอดนอนส่งผลให้ศูนย์อารมณ์ของสมองมีการปฏิกิริยามากกว่า 60 เปอร์เซ็นต์ทำให้เราหัวร้อนได้ง่ายเนื่องจากไม่สามารถควบคุมอารมณ์ได้นั่นเอง
  • สมาธิน้อยลงและมีปัญหาเกี่ยวกับหน่วยความจำ
และถ้ายังนอนไม่พอติดต่อกันไปเรื่อย ๆ ก็จะยิ่งปรากฏอาการเหล่านี้

  • เสี่ยงที่จะเป็นโรคหลอดเลือดสมอง: วัยกลางคนและผู้สูงอายุที่นอนน้อยกว่า 6 ชั่วโมงต่อคืนมีโอกาสเสี่ยงที่จะเป็นโรคหลอดเลือดสมองมากกว่าคนที่นอน 7-8 ชั่วโมงสูงถึง 4 เท่า
  • เสี่ยงที่จะเป็นโรคอ้วน: การนอนหลับน้อยกว่า 6 ชั่วโมงต่อคืนก่อให้เกิดการเปลี่ยนแปลงระดับฮอร์โมนความอยากอาหาร ทำให้มีความอยากอาหารมากขึ้น นอกจากนี้การนอนดึกทำให้เราต้องผจญกับความหิวที่ชอบมาตอนมืด ๆ ของว่างยามดึกก็อาจเป็นสาเหตุที่ทำให้เราอ้วนด้วย
  • เสี่ยงที่จะเป็นโรคมะเร็งบางชนิด: จากการศึกษาพบว่าผู้ที่นอนน้อยเสี่ยงที่จะเป็นมะเร็งลำไส้ใหญ่ มะเร็งต่อมลูกหมาก และมะเร็งเต้านม
  • เสี่ยงที่จะเป็นโรคเบาหวาน: การนอนหลับน้อยเกินไปจะลดการตอบสนองของอินซูลิน ซึ่งเป็นปัจจัยเสี่ยงของโรคเบาหวาน
  • เสี่ยงที่จะเป็นโรคหัวใจ: ผู้ที่นอนไม่เพียงพอเสี่ยงต่อการเสียชีวิตด้วยโรคหัวใจถึงร้อยละ 48 และมีโอกาสเป็นโรคหลอดเลือดสมองมากขึ้นถึงร้อยละ 15 นอกจากนี้ยังเสี่ยงที่จะเป็นโรคความดันโลหิตสูง คลอเรสเตอรอลอุดตันในหลอดเลือด ภาวะหัวใจล้มเหลวและหัวใจวาย
  • จำนวนอสุจิลดลง: จากการศึกษาวัยรุ่นหนุ่มในเดนมาร์กพบว่าคนที่นอนน้อยจะมีความเข้มข้นของอสุจิลดลง 29 เปอร์เซ็นต์ในน้ำอสุจิ
  • ความเสี่ยงที่จะเสียชีวิตสูงขึ้น: ในการศึกษาชายและหญิง 1,741 คน พบว่าคนที่หลับน้อยกว่า 6 ชั่วโมงมีความเสี่ยงต่อการเสียชีวิตเพิ่มขึ้นอย่างมากแม้ว่าจะตัดโรคเบาหวาน ความดันโลหิตสูง และปัจจัยอื่น ๆ ออกไปแล้ว 
          นอกจากอาการเหล่านี้แล้ว การอดนอนยังเป็นการขัดขวางความสามารถในการสร้างความทรงจำใหม่ ๆ และยังนำไปสู่การเพิ่มขึ้นของโปรตีนที่เป็นพิษในสมองที่เรียกว่า Beta-Amyloid ซึ่งเป็นสาเหตุที่ทำให้เกิดโรคอัลไซเมอร์อีกด้วย ซึ่งวิธีลดจำนวนเจ้าโปรตีนพิษนี้ก็คือการนอนให้เพียงพอนั่นเอง .....แต่นอนมากเกินไปก็ไม่ดีนะจ๊ะ 😁


ที่มา: Huffingtonpost.com


วันอาทิตย์ที่ 28 มกราคม พ.ศ. 2561

[PHP + Laravel] ติดตั้งและทำความเข้าใจโครงสร้างของ Laravel


          ในบทความที่แล้ว เราได้ทำความรู้จัก Laravel กันไปแล้ว สำหรับบทความนี้เราจะมาติดตั้ง Laravel กัน ซึ่งวิธีการติดตั้ง Laravel เนี่ยจะต้องติดตั้งผ่าน Composer..... อ้าว! แล้วไอ้เจ้า Composer มันคืออะไรกันล่ะ นักแต่งเพลงเหรอ?


          Composer คือเครื่องมือสำหรับติดตั้ง Package หรือ Library จากแหล่งต่าง ๆ ของภาษา PHP เนื่องจาก Package หรือ Library ของ PHP Framework ที่เป็น Open Source นั้นมีอยู่มากมาย ซึ่งแต่ละตัวก็เกิดจากการสร้างสรรค์ของเหล่าโปรแกรมเมอร์มือฉมัง และกระจัดกระจายไม่เป็นหมวดหมู่ ในกรณีที่เราต้องการดาวน์โหลด Package หรือ Library มาใช้ เราก็ไม่อาจรู้ได้เลยว่าจะมีของแถมจำพวกไวรัสหรือมัลแวร์ติดมาด้วยหรือเปล่า รวมไปถึงไฟล์นั้นรองรับกับเวอร์ชั่นของ php ที่เราใช้งานได้หรือไม่

          ด้วยเหตุนี้จึงมีการคิดค้น Composer ขึ้นมาเพื่อจัดระเบียบ Package และ Library ต่าง ๆ ให้มาอยู่ในแหล่งเดียวกัน ซึ่งจะสามารถติดตั้งไฟล์เหล่านี้ได้จากการใช้คำสั่ง Command โดย Composer จะทำการตรวจสอบและดาวน์โหลด Package นั้น ๆ มาติดตั้ง แต่ก่อนหน้าที่เราจะใช้ Composer ได้นั้น ก็ต้องติดตั้ง Composer กันก่อน เข้าไปที่ลิงค์ Download Composer

คลิกที่ "Composer-Setup.exe" แล้วคลิก Save File เล้ย

 
หลังจากดับเบิ้ลคลิกไฟล์ติดตั้งแล้วก็คลิก Next >

 
เลือก Path ของไฟล์ php.exe จากนั้นคลิก Next >

 
ถ้าเชื่อม Internet ต่อผ่าน Proxy ก็ให้กำหนด Proxy แล้วคลิก Next >

 
คลิก Install แล้วรอให้คอมพิวเตอร์ติดตั้ง.....

 คลิก Next > โล้ด

 
ติดตั้งเรียบร้อยแล้ว คลิก Finish ปิดหน้าต่างไปได้เลย

ทดสอบการทำงานโดยเปิดโปรแกรม Command Prompt ขึ้นมาแล้วพิมพ์คำสั่งว่า composer

          หลังการทดสอบเรียกใช้ composer เราก็จะเห็นว่าเจ้า composer สามารถทำงานได้แล้ว ถัดไปเราก็จะใช้คำสั่งของ composer ในการติดตั้ง Laravel ซึ่งคำสั่งที่ใช้คือ  composer create-project --prefer-dist laravel/laravel ชื่อโฟลเดอร์ที่จะสร้าง 

composer create-project --prefer-dist laravel/laravel test_laravel

          พอเรียกใช้คำสั่งแล้ว composer ก็จะดาวน์โหลดและติดตั้ง Laravel ซึ่งขั้นตอนนี้อาจจะใช้เวลานานนิดหน่อย


          เมื่อติดตั้ง Laravel เสร็จแล้วเราสามารถเข้า URL http://localhost/test_laravel/public/ เพื่อเปิดหน้าเว็บที่เราเพิ่งสร้างขึ้นได้ นอกจากนี้ถ้าเราเข้าไปในโฟลเดอร์ที่ติดตั้ง Laravel ก็จะพบกับไฟล์และโฟลเดอร์เป็นจำนวนมาก สาเหตุที่มีหลากหลายโฟลเดอร์เป็นเพราะ Laravel ถูกออกแบบมาโดยใช้หลัก MVC จึงมีการแยกโฟลเดอร์ตามลักษณะการทำงานออกอย่างชัดเจน สิ่งที่เราต้องทำก็คือการเขียนโค้ดและเซฟเก็บไว้ในโฟลเดอร์ให้ถูกต้อง โดยโฟลเดอร์สำคัญ ๆ ที่ควรรู้ได้แก่

  • app: โฟลเดอร์ที่เก็บไฟล์โค้ดทั้งหมดของเว็บ
    • Controllers: เป็นโฟลเดอร์ที่อยู่ภายในโฟลเดอร์ app/Httpd เอาไว้เก็บไฟล์ Controller ทั้งหมดของเว็บ
  • bootstrap: โฟล์เดอร์ที่เก็บไฟล์ซึ่งจะถูกโหลดทันทีเมื่อเว็บเริ่มต้นทำงาน
  • config: โฟลเดอร์ที่เก็บไฟล์การตั้งค่าต่าง ๆ ของเว็บ
  • database: โฟล์เดอร์ที่เก็บไฟล์จัดการฐานข้อมูล เช่น สร้าง, เพิ่มเติม หรือแก้ไขฐานข้อมูล
  • public: โฟลเดอร์ที่เก็บไฟล์สาธารณะที่ทุกคนสามารถเข้าถึงได้ เช่นไฟล์ index.php, ไฟล์ css หรือไฟล์รูปภาพเป็นต้น เป็นจุดรับทุก request ที่เข้ามาในเว็บ
  • resources: โฟล์เดอร์ที่เก็บไฟล์สำหรับแสดงผล หรือไฟล์ที่ยังไม่ได้คอมไพล์
    • views: เป็นโฟลเดอร์ที่เก็บไฟล์ View สำหรับแสดงผลของเว็บ
  • routes: โฟลเดอร์ที่เก็บไฟล์ตั้งค่า route สำหรับการเข้าถึงเว็บ
  • vendor: โฟลเดอร์ที่เก็บ Library ต่าง ๆ ที่ดาวน์โหลดโดย composer
          ถึงตรงนี้ เราก็ได้ทำการติดตั้ง Laravel แล้วก็พอจะรู้จักโครงสร้างคร่าว ๆ ไปเป็นที่เรียบร้อย ซึ่งเมื่อเราเข้าใจหลักในการจัดเก็บไฟล์ทั้งหมดแล้ว เราก็จะสามารถพัฒนาเว็บได้อย่างง่ายและมีประสิทธิภาพมากขึ้น


วันพฤหัสบดีที่ 25 มกราคม พ.ศ. 2561

[PHP + Laravel] มาทำรู้จักกับ Laravel กัน


          ในการพัฒนาเว็บแอปพลิเคชัน เราสามารถเริ่มต้นพัฒนาจากศูนย์ก็ได้ แต่การทำแบบนั้นจะทำให้เสียเวลาในการพัฒนาเป็นอย่างมาก เนื่องจากเราต้องออกแบบโครงสร้างของเว็บเองตั้งแต่ต้น และถ้าเราออกแบบไม่ดีก็จะส่งผลให้การพัฒนาเป็นไปอย่างยากลำบาก แถมการปรับปรุงแก้ไขก็ทำได้ยากอีก นอกจากนี้แต่ละคนต่างก็มีความคิดไม่เหมือนกัน คงเป็นเรื่องยากที่มีจะใครออกแบบโครงสร้างโค้ดได้ตรงใจในแบบที่เราต้องการ ซึ่งจะส่งผลให้เวลาที่เราไปรับงานพัฒนาแอปพลิเคชันต่อจากคนอื่น เราต้องไปนั่งศึกษาโครงสร้างโค้ดแอปพลิเคชันนั้น ๆ ใหม่ ทำให้เสียเวลาเป็นอันมาก แต่โชคดีที่ปัจจุบันนี้มี Web Framework ออกมาให้นักพัฒนาเลือกใช้กันหลายตัว ช่วยให้ลดเวลาในการพัฒนาได้

          Framework คือโครงสร้างหรือรูปแบบที่ใช้ในการเขียนโปรแกรม มีการวางโค้ดไว้อย่างเป็นระบบและมีแบบแผนการเขียนโค้ดที่เป็นมาตรฐาน นอกจากนี้ยังมีการกำหนดโฟลเดอร์ที่เก็บไฟล์ไว้อย่างเป็นระเบียบ เหมาะกับการพัฒนาแอปพลิเคชันที่มีขนาดใหญ่ มีผู้พัฒนาหลายคน เพราะจะช่วยให้รูปแบบการเขียนโค้ดไม่สะเปะสะปะและเป็นไปในทิศทางเดียวกัน สามารถจัดการไฟล์ได้อย่างง่าย ซึ่งหนึ่งใน Framework ยอดนิยมที่มีผู้ใช้งานกันอย่างแพร่หลายก็คือ Laravel

          Laravel เป็น PHP Web Framework แบบโอเพนซอร์สที่สร้างขึ้นโดยคุณ Taylor Otwell ใช้สำหรับการพัฒนาเว็บแอปพลิเคชันตามรูปแบบ Model-View-Controller (MVC) มีฟีเจอร์ที่ช่วยให้การพัฒนาเว็บสามารถทำให้ได้ง่ายขึ้น เช่น การจัดการ Sessions, การตรวจสอบข้อมูล เป็นต้น ซึ่งในวันที่เขียนบทความอยู่นี้ Laravel ได้พัฒนามาถึงเวอร์ชันที่ 5.5 แล้ว โดยใน Laravel จะมี Artisan CLI (Artisan Command-Line Interface) หรือชุดคำสั่งที่ใช้เรียกงานผ่านทาง Command Line เพื่อช่วยในการพัฒนาเว็บติดมาด้วย นอกจากนี้ Laravel ยังเป็น Framework ที่มีคนนิยมใช้งานเป็นจำนวนมาก จึงเป็นเรื่องง่ายที่จะค้นหาข้อมูลจาก Google ในเวลาที่ติดปัญหาหรือมีข้อสงสัย

        สำหรับเพื่อน ๆ ที่สงสัยว่า MVC หรือ Model-View-Controller คืออะไร MVC ก็คือสถาปัตยกรรมซอฟต์แวร์ที่มีการแบ่งโค้ดของระบบออกเป็น 3 ส่วน ได้แก่ Model, View และ Controller ตามชื่อที่เรียกเลย ซึ่งแต่ละส่วนก็จะมีหน้าที่แตกต่างกันไป

  • Model คือ โค้ดส่วนที่ใช้สำหรับติดต่อกับฐานข้อมูล จัดการนำข้อมูลเข้าหรือออกจากฐานข้อมูล เพื่อนำไปประมวลผล
  • View คือ โค้ดส่วนที่ใช้แสดงผลออกทางหน้าจอ เพื่อติดต่อรับคำสั่งหรือข้อมูลจากผู้ใช้งาน
  • Controller คือ โค้ดส่วนที่ใช้ประมวลผลการทำงานตามที่ได้รับคำสั่งหรือข้อมูลจากผู้ใช้งาน (พูดง่าย ๆ ก็คือเป็นส่วนที่ควบคุมการทำงานของระบบ) เป็นตัวที่เชื่อมต่อทั้ง Model และ View ซึ่งเมื่อรับข้อมูลจากผู้ใช้งานเข้ามาแล้ว ก็จะดำเนินการตอบสนองต่อข้อมูลนั้นด้วย Model และส่งข้อมูลกลับไปยังส่วนแสดงผล View เพื่อแจ้งผลลัพธ์แก่ผู้ใช้งาน
          เมื่อผู้ใช้งานเปิดแอปพลิเคชันขึ้นมา Controller จะทำการส่ง View หน้าแรกของแอปพลิเคชันให้ผู้ใช้งาน เมื่อผู้ใช้คลิกคำสั่งหรือป้อนข้อมูลเข้ามา Controller จะทำการประมวลผลข้อมูลนั้น ๆ (ตรงจุดนี้ Controller อาจจะส่งต่อให้ Model เพื่อทำการบันทึกลงฐานข้อมูลก็ได้) แล้วจึงส่งผลลัพธ์การประมวลกลับไปแสดงที่ View เพื่อแจ้งผลลัพธ์แก่ผู้ใช้งาน

          ข้อดีของโครงสร้างระบบแบบ MVC นั่นคือ เราสามารถแก้ไขได้ระบบง่าย เช่น ถ้าเราต้องการแก้ไขการแสดงผลก็ให้ไปแก้ไขในโค้ดส่วนของ View โดยไม่ต้องยุ่งเกี่ยวกับโค้ดส่วนของ Model และ Controller เป็นต้น และเนื่องจากแบ่งโค้ดออกเป็นส่วน ๆ แบบนี้ ทำให้ข้อเสียที่ตามมาคือจำนวนไฟล์ในระบบก็จะมีมากขึ้น แต่กระนั้นก็ยังถือว่าโครงสร้างแบบ MVC ช่วยให้พัฒนาระบบได้ง่ายขึ้น

          บทความนี้เราได้ทำความรู้จัก Laravel กันอย่างคร่าว ๆ ไปแล้ว ในบทความถัดไปเราจะมาติดตั้ง Laravel เพื่อใช้งานกัน สำหรับบทความนี้ก็ขอจบเพียงเท่านี้ บ๊ายบายจ้าาาาา 😆


วันอาทิตย์ที่ 14 มกราคม พ.ศ. 2561

สร้าง LINE Bot ด้วย Messaging API


          สวัสดีปีใหม่ย้อนหลังครับผม!!! หลังจากเงียบหายไปประมาณเดือนนึงจากบทความล่าสุด วันนี้ถือเป็นฤกษ์งามยามดี (ตรงไหน?) ที่ทางลุงบันไดเปิดให้จอง Digimon Pendulum ver.20th ไปแล้ว เจ้าเครื่องนี้จะรวมสัตว์เลี้ยงดิจิตอลรุ่น Digimon Pendulum ทุกเวอร์ชันซึ่งบันไดทำออกมาฉลองครบรอบ 20 ปีของดิจิมอน และถ้ามีโอกาส ผมก็อาจจะเขียนบทความรีวิวเหมือนอย่างบทความ Digital Monster Ver.20th (Original)..... แต่นั่นก็เป็นเรื่องของอนาคต ไม่ใช่เรื่องที่ต้องสนใจตอนนี้ เพราะจริง ๆ แล้วบทความนี้เป็นบทความเกี่ยวกับการเขียนบอทต่างหาก (ฮา)

          หากพูดถึงบอทในภาษานักเล่นเกม เพื่อน ๆ ก็คงจะนึกถึงตัวละครในเกมที่สามารถเคลื่อนไหวได้เองโดยไม่ต้องมีผู้เล่นบังคับ แต่บอทในบทความนี้หมายถึง LINE Bot ซึ่งเป็น Line@ Account ที่ใช้ API ที่เรียกว่า Message API ร่วมกับโปรแกรมที่เราเขียนไว้เบื้องหลังเพื่อให้ LINE@ Account สามารถทำตามคำสั่งหรือตอบโต้การสนทนาได้โดยอัตโนมัติ โดยเจ้า Message API ก็คือ API ที่ทาง LINE สร้างขึ้นเพื่ออนุญาตให้ส่งข้อมูลจากโปรแกรมบน Server ของนักพัฒนาไปยังแพลตฟอร์มของ LINE .....ว่าแล้วเราก็มาเริ่มสร้าง LINE Bot กันเล้ยยยยย


สร้าง channel สำหรับ LINE Bot


          ในการจะใช้ Message API เพื่อสร้างบอทนั้น อันดับแรกให้เราเข้าไปที่ LINE Developers console เพื่อสร้าง channel หรือช่องทางที่จะเชื่อมต่อโปรแกรมของเรากับแพลตฟอร์มของ LINE

ใส่ username และ password บัญชีของ LINE เพื่อ Log in เข้าสู่ระบบ

คลิกที่ปุ่ม "Create provider"

ตั้งชื่อ Provider ใช้เป็นชื่อบริษัทก็ได้

เมื่อสร้าง Provider เสร็จแล้วให้คลิกที่ปุ่ม "Message API" เพื่อสร้าง channel

กรอกข้อมูลต่าง ๆ จากนั้นก็คลิกปุ่ม Create

แค่นี้ก็เป็นอันเสร็จสิ้นการสร้าง channel

          หลังจากทำการสร้าง channel เสร็จ ตอนนี้เราสามารถแอดเพื่อนกับบอทที่เราสร้างได้ไว้แล้ว แต่เนื่องจากเรายังไม่ได้สร้างโปรแกรมสำหรับประมวลผล บอทของเราจึงทำได้แค่ตอบกลับข้อความตามที่เราตั้งค่าไว้เท่านั้น


เพิ่มบอทเป็นเพื่อน


          วิธีเพิ่มบอทเป็นเพื่อนก็เหมือนกับการเพิ่มเพื่อนแบบปกตินั่นคือการเพิ่มจาก LINE ID หรือเพิ่มจาก QR Code


          วิธีดู QR Code ก็ให้คลิกตรงที่ channel bot นั้น ๆ เพื่อเข้าไปหน้า Configuration จากนั้นก็เลื่อนลงมาที่หัวข้อ "QR code of your bot" จากนั้นก็สแกน QR Code เพื่อเพิ่มเพื่อนโล้ดดดดด (ส่วนวิธีการเพิ่มเพื่อนด้วย LINE ID จะพูดถึงในลำดับถัดไป)

หลังจากทำการเพิ่มบอทเป็นเพื่อนแล้ว เราก็จะได้รับข้อความต้อนรับ (Greeting message)

และเมื่อพิมพ์อะไรไป เราก็จะได้รับข้อความตอบกลับอัตโนมัติ (Auto-reply messages)


          จะเห็นได้ว่า ถึงเรายังไม่ได้เขียนโปรแกรมอะไร ระบบก็มีการเซ็ตค่าตั้งต้นเพื่อให้ตอบกลับข้อความของเราอยู่แล้ว ซึ่งเราสามารถแก้ไขข้อความได้ทั้ง Greeting message และ Auto-reply messages ในหน้า Configuration ตรงหัวข้อ "Using LINE@ features"

เมื่อเราคลิกที่ Set message ของ Greeting message ก็จะแสดงหน้าให้แก้ไขข้อความต้อนรับ

เมื่อเราคลิกที่ Set message ของ Auto-reply messages ก็จะแสดงหน้าข้อความตอบกลับอัตโนมัติ
*แนะนำให้ลบข้อความ Auto-reply messages เนื่องจากเราจะเขียนโปรแกรมตอบกลับข้อความเอง*

หมายเหตุ: สังเกตตรงเมนูทางซ้ายจะมี LINE ID อยู่


เตรียม Server สำหรับเชื่อมต่อกับ LINE


          Server ที่จะทำ Webhook เชื่อมต่อกับ LINE นั้นจะต้องเป็น Server ที่สามารถใช้ https ได้ ซึ่งถ้าเรามีอยู่แล้วก็สามารถเอามาใช้ได้เลย แต่ถ้าเราไม่อยากเสียเงินเช่า Server ที่มี SSL (ซึ่งจะแพงกว่า Server ปกติ) เราก็สามารถไปใช้งาน Server แบบ SSL บน Heroku.com แทนได้โดยไม่เสียค่าใช้จ่าย ซึ่งแน่นอนว่าเราต้องสมัครสมาชิกก่อน

เข้าเว็บ Heroku.com เสร็จแล้วคลิก Sign up โลด

กรอกข้อมูลสมัครสมาชิกให้ครบถ้วน จากนั้นจะมีอีเมลส่งมาให้ตั้งพาสเวิร์ด

พอ Login เสร็จ ก็คลิก Create New App เพื่อทำการสร้าง Server (ในที่นี้จะเรียกว่า App) ได้เลย

ตั้งชื่อ App แล้วคลิก Create app โล้ดดดดด

เมื่อสร้างเสร็จแล้วจะได้ตามรูป สิ่งสำคัญคือชื่อ App ที่เราตั้งไว้ (ในกรอบสีแดง)

เราสามารถทดสอบ App ที่เพิ่งสร้างเมื่อสักครู่ได้โดยการเข้าไปที่ URL https://<ชื่อ app>.herokuapp.com
ตามตัวอย่างคือ https://javeb-app.herokuapp.com/ ซึ่งจะได้หน้าเว็บตามรูป



วิธี Deploy โค้ดไปยัง Heroku


          ในขั้นตอนที่แล้ว เราได้สร้าง App ที่ถือเป็นตัว Server เสร็จเรียบร้อยแล้ว สิ่งที่ต้องทำถัดไปคือการเขียนโค้ดแล้วส่งไปยัง App ที่เราได้สร้างขึ้น ส่วนโค้ดที่เราจะเขียนนั้นคือโค้ดภาษา PHP ซึ่งเป็นโค้ดที่สามารถอ่านทำความเข้าใจได้ง่าย โดยวิธีการส่งโค้ดขึ้นไปยัง App บน Heroku.com มีหลายวิธีดังต่อไปนี้
  1. Heroku CLI: เป็นเครื่องมือที่ใช้คำสั่งของ Git (บทความที่เกี่ยวกับ Git) ในการ Deploy โค้ดขึ้นไปยัง Heroku.com โดยตรง
  2. GitHub: เชื่อมต่อกับ GitHub เมื่อ Push โค้ดขึ้น GitHub แล้วก็จะ Deploy ไปยัง Heroku.com ให้อัตโนมัติ
  3. Dropbox: เชื่อมต่อกับ Dropbox และสั่ง Deploy ในเมนู Heroku Dashboard
          อันนี้แล้วแต่ว่าเพื่อน ๆ จะเลือกใช้เครื่องมือตัวไหนตามที่ตนเองถนัด อันที่จริงใช้ Dropbox ก็ง่ายดีนะ แต่ในบทความนี้จะขอใช้ Heroku CLI ในการ Deploy โค้ดไปยัง Heroku.com ละกัน ถ้าใครยังไม่รู้จักหรือใช้ Git ไม่เป็นก็กลับไปอ่านบทความที่เกี่ยวกับ Git ก่อน เอาล่ะเรามาติดตั้ง Heroku CLI กันเถอะ เริ่มจากเข้าไปยังลิงค์ Download Heroku CLI แล้วเลือกตัวติดตั้งตามระบบปฏิบัติการณ์ของเพื่อน ๆ

หลังจากคลิกตัวติดตั้งแล้วก็คลิก Next > ได้เลย

เลือก path ที่จะติดตั้งแล้วคลิก Install โลด

รอคอยสักนิดให้ระบบติดตั้งจนเสร็จ แล้วคลิก Close ปิดหน้าต่างนี้ไปได้เลย


          หลังจากติดตั้ง Heroku CLI เสร็จแล้ว เราก็สามารถเรียกใช้งานคำสั่งผ่าน Command Prompt ได้เลย ขั้นตอนต่อไปให้เราทำการทดสอบดูว่าสามารถ Deploy โค้ดไปยัง Heroku.com ได้หรือเปล่า เริ่มจากการสร้างไฟล์ index.php ที่มีโค้ดดังต่อไปนี้

<?php
echo "Hello LINE bot World!";
?>
กดปุ่ม Window + R แล้วพิมพ์ cmd จากนั้นก็คลิก OK เพื่อเปิด Command Prompt



          ใน Command Prompt ให้พิมพ์คำสั่ง  heroku login  แล้วให้เราพิมพ์ Email และ Password ที่ได้สมัครไว้ใน Heroku.com (**ต่อไปจะแยกวิธีใช้งานออกเป็น 2 วิธี สำหรับเพื่อน ๆ ที่ติดตั้ง Git ลงใน Command Prompt ก็สามารถใช้งานต่อได้เลย ส่วนเพื่อน ๆ ที่ติดตั้ง Git ตามในบทความนี้ให้เปิด Git Bash ขึ้นมาแทน**) จากนั้นให้ใช้คำสั่ง  cd <โฟลเดอร์ที่เก็บไฟล์ index.php> เพื่อย้าย path ไปยังโฟลเดอร์ของไฟล์ index.php

$ cd /C/Line_bot/
          ให้เราทำการสร้าง Git Repository ขึ้นมาด้วยคำสั่ง  git init 

$ git init
Initialized empty Git repository in C:/Line_bot/.git/
          จากนั้นให้ใช้คำสั่ง  heroku git:remote -a <ชื่อ App>  เพื่อกำหนดค่าให้ Git Repository เชื่อมต่อไปยัง Server ของ Heroku.com

$ heroku git:remote -a javeb-app
set git remote heroku to https://git.heroku.com/javeb-app.git
          ถัดไปให้ใช้คำสั่ง git add ตามด้วย git commit แล้วจึงใช้คำสั่ง  git push heroku master  เพื่อส่งไฟล์ไปยัง Heroku.com

$ git add .

$ git commit -m "Create index.php"
[master (root-commit) e38b346] Create index.php
 1 file changed, 5 insertions(+)
 create mode 100644 index.php

$ git push heroku master
Counting objects: 3, done.
Writing objects: 100% (3/3), 259 bytes | 259.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> PHP app detected
remote:
remote:  !     WARNING: No 'composer.json' found.
remote:        Using 'index.php' to declare app type as PHP is considered legacy
remote:        functionality and may lead to unexpected behavior.
remote:
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
remote:        NOTICE: No runtime required in composer.lock; using PHP ^5.5.17
remote:        - apache (2.4.29)
remote:        - nginx (1.8.1)
remote:        - php (5.6.33)
remote: -----> Installing dependencies...
remote:        Composer version 1.6.2 2018-01-05 15:28:41
remote: -----> Preparing runtime environment...
remote:        NOTICE: No Procfile, using 'web: heroku-php-apache2'.
remote: -----> Checking for additional extensions to install...
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 13.8M
remote: -----> Launching...
remote:        Released v3
remote:        https://javeb-app.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy.... done.
To https://git.heroku.com/javeb-app.git
 * [new branch]      master -> master

          หลังจาก Deploy เสร็จแล้ว ให้ลองเข้าไปยัง URL เดิม (ตามตัวอย่างคือ https://javeb-app.herokuapp.com/) ก็จะพบว่าหน้าเว็บได้เปลี่ยนไปแล้ว อันดับถัดไปเราจะต้องเขียนโปรแกรมบอทจากนั้นก็ Deploy โค้ดขึ้นไปยัง Heroku.com ซึ่งโค้ดตัวนี้จะเป็นตัวที่รับข้อความมาจาก LINE แล้วทำการประมวลผล ดังนั้นเราจำเป็นต้องเอา URL ที่เก็บโค้ดดังกล่าวไปตั้งค่าใน LINE งั้นเราก็มาสร้างโค้ดบอทที่ว่าแบบคร่าว ๆ เพื่อเอา URL ไปตั้งค่ากันเถอะ

          ปล. ที่ผลลัพธ์จากการ push ยาว ๆ แบบนั้นเป็นเพราะไฟล์ที่เรา Deploy ยังขาดไฟล์บางไฟล์ไป ระบบเลยแจ้งเตือนขึ้นมา แต่เราไม่ต้องสนใจก็ได้ เพราะเราไม่ได้ต้องการสร้างเว็บขนาดใหญ่


สร้างไฟล์ javeb_bot.php


          ตามที่เกริ่นไว้แล้ว เราจะมาสร้างไฟล์บอทที่ชื่อว่า javeb_bot.php กัน แต่ว่าเราจะยังไม่เขียนให้ไฟล์นี้ทำการประมวลผลอะไรมากนัก เพราะเราต้องการนำไฟล์นี้ไป Deploy เพื่อให้ได้ URL สำหรับรับข้อความจาก LINE เท่านั้น ซึ่งเราจะกลับมาแก้ไขไฟล์นี้ภายหลัง .....งั้นเรามาสร้างไฟล์ javeb_bot.php กันเลย

<?php

echo "Hi! I'm your bot.";

?>
          ให้ก็อปปี้โค้ดข้างบนแล้วเซฟไฟล์ในชื่อ javeb_bot.php จากนั้นก็ add ไฟล์ commit แล้ว push ขึ้น Heroku.com ได้เลย

$ git add javeb_bot.php

$ git commit -m "Add file javeb_bot.php"
[master 8e26fa7] Add file javeb_bot.php
 1 file changed, 5 insertions(+)
 create mode 100644 javeb_bot.php

$ git push heroku master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 323 bytes | 161.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> PHP app detected
remote:
remote:  !     WARNING: No 'composer.json' found.
remote:        Using 'index.php' to declare app type as PHP is considered legacy
remote:        functionality and may lead to unexpected behavior.
remote:
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
remote:        NOTICE: No runtime required in composer.lock; using PHP ^5.5.17
remote:        - apache (2.4.29)
remote:        - nginx (1.8.1)
remote:        - php (5.6.33)
remote: -----> Installing dependencies...
remote:        Composer version 1.6.2 2018-01-05 15:28:41
remote: -----> Preparing runtime environment...
remote:        NOTICE: No Procfile, using 'web: heroku-php-apache2'.
remote: -----> Checking for additional extensions to install...
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 13.8M
remote: -----> Launching...
remote:        Released v4
remote:        https://javeb-app.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/javeb-app.git
   e38b346..8e26fa7  master -> master

          ทดสอบผลลัพธ์ด้วยการเข้าไปที่ https://<ชื่อ App>.herokuapp.com/javeb_bot.php (ตามตัวอย่างคือ https://javeb-app.herokuapp.com/javeb_bot.php) เมื่อได้ผลลัพธ์ถูกต้องตามที่ต้องการแล้ว ต่อไปเราไปตั้งค่าใน LINE Developers console กันต่อ


ตั้งค่าเชื่อมต่อ Message API กับ Server


          ขั้นตอนนี้เราจะต้องเข้าไปที่ LINE Developers console เพื่อตั้งค่าให้ LINE Bot ส่งข้อความที่ได้รับจากผู้ใช้งานไปยัง URL โปรแกรมบอทของเรา

คลิกเลือก channel บอทที่เราสร้าง

เลื่อนลงมาล่าง ๆ ตรง Messaging settings

ตรง Channel access token (long-lived) ให้คลิกปุ่ม Issue จะแสดงดั่งรูปข้างบน
เลือกจำนวนชั่วโมงหรือ 0 เพื่อไม่กำหนดอายุของ Access Token แล้วคลิก Issue เพื่อสร้าง Access Token
(Access Token จะนำไปใช้ตอนส่งข้อความตอบกลับ ให้จดเอาไว้ด้วย)

ตรง Use webhooks ให้เลือกเป็น Enabled

ตรง Webhook URL ให้ใส่ URL ที่เราได้สร้างไว้เมื่อสักครู่

ส่วน Allow bot to join group chats เป็นตัวเลือกว่าจะยอมให้บอทเข้ากลุ่มแชทหรือเปล่า
ถ้ายอมให้เข้ากลุ่มได้ ให้เลือก Enabled


          หลังจากที่เราตั้งค่าใน LINE Developers console เสร็จเรียบร้อยแล้ว ถัดไปเราจะมาเขียนโค้ดเพื่อตอบกลับข้อความที่ได้รับจากผู้ใช้งานกัน


เขียนโค้ดบอทตอบข้อความกลับอัตโนมัติ


          เมื่อสักครู่เราได้ตั้งค่าให้ LINE Bot ส่งข้อความไปยัง URL ของเราเรียบร้อยแล้ว ทีนี้เราก็มาแก้ไขไฟล์ javeb_bot.php เพื่อให้ตอบข้อความกลับโดยอัตโนมัติ แต่ก่อนอื่นเรามาดูกันก่อนว่า LINE ส่งอะไรมาที่ไฟล์ javeb_bot.php บ้าง สิ่งที่ LINE ส่งมาคือ JSON ที่มีหน้าตาประมาณนี้

{
  "events": [
    {
      "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
      "type": "message",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      },
      "message": {
        "id": "325708",
        "type": "text",
        "text": "Hello, world"
      }
    }
  ]
}
          เมื่อเราได้รับ JSON แล้ว ก็ให้ประมวลผลสิ่งที่ได้รับก่อนจากนั้นค่อยส่งข้อความตอบกลับ โดยการสร้าง Request JSON ที่มีหน้าตาตามข้างล่างนี้และแนบค่า replyToken (ที่ได้รับมา) ส่งไปที่ Message API https://api.line.me/v2/bot/message/reply

{
  "replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
  "messages": [
    {
      "type": "text",
      "text": "Hi! This is auto reply message."
    }
  ]
}
          ถึงตรงนี้ เราก็พอจะรู้คร่าว ๆ แล้วว่าต้องส่งข้อมูลอะไรบ้าง ถัดไปให้เปิดไฟล์ javeb_bot.php แล้วแก้ไขไฟล์ตามโค้ดข้างล่าง เพื่อให้บอทตอบกลับข้อความโดยอัตโนมัติ

<?php

$API_URL = 'https://api.line.me/v2/bot/message/reply';
$ACCESS_TOKEN = 'xxxxxxxxxx'; // Access Token ค่าที่เราสร้างขึ้น
$POST_HEADER = array('Content-Type: application/json', 'Authorization: Bearer ' . $ACCESS_TOKEN);

$request = file_get_contents('php://input');   // Get request content
$request_array = json_decode($request, true);   // Decode JSON to Array

if ( sizeof($request_array['events']) > 0 )
{

 foreach ($request_array['events'] as $event)
 {
  $reply_message = '';
  $reply_token = $event['replyToken'];

  if ( $event['type'] == 'message' ) 
  {
   if( $event['message']['type'] == 'text' )
   {
    $text = $event['message']['text'];
    $reply_message = 'ระบบได้รับข้อความ ('.$text.') ของคุณแล้ว';
   }
   else
    $reply_message = 'ระบบได้รับ '.ucfirst($event['message']['type']).' ของคุณแล้ว';
  
  }
  else
   $reply_message = 'ระบบได้รับ Event '.ucfirst($event['type']).' ของคุณแล้ว';
 
  if( strlen($reply_message) > 0 )
  {
   //$reply_message = iconv("tis-620","utf-8",$reply_message);
   $data = [
    'replyToken' => $reply_token,
    'messages' => [['type' => 'text', 'text' => $reply_message]]
   ];
   $post_body = json_encode($data, JSON_UNESCAPED_UNICODE);

   $send_result = send_reply_message($API_URL, $POST_HEADER, $post_body);
   echo "Result: ".$send_result."\r\n";
  }
 }
}

echo "OK";

function send_reply_message($url, $post_header, $post_body)
{
 $ch = curl_init($url);
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_HTTPHEADER, $post_header);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $post_body);
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 $result = curl_exec($ch);
 curl_close($ch);

 return $result;
}

?>

          ผลลัพธ์ที่ได้ก็คือ เมื่อเราพิมพ์อะไรไป บอทก็จะตอบกลับมาว่า "ระบบได้รับข้อความ (xxx) ของคุณแล้ว" ก็เป็นอันเสร็จเรียบร้อย หวังว่าบทความนี้จะช่วยให้เพื่อน ๆ เข้าใจวิธีเขียน LINE Bot อย่างคร่าว ๆ ซึ่งเป็นพื้นฐานที่จะนำไปต่อยอดพัฒนาเป็นบอทที่เก่ง ๆ ได้ สำหรับบทความนี้ก็ขอจบลงเท่านี้ ไว้พบกันใหม่บทความหน้า บ๊ายบายจ้า 😆