การสร้าง Facebook Messenger ChatBot และ Python ตอนที่ 3

หมายเหตุ เนื่องจากความแตกต่างในรายละเอียดปลีกย่อยของการใช้คำสั่งบางคำสั่งระหว่างระบบปฏิบัติการ หากต้องให้รายละเอียดทุกระบบปฏิบัติการจะทำให้เนื้อหาเยิ่นเย้อเกินไป จึงขอใช้สภาพแวดล้อมของผู้เขียนคือ Linux
จากสองตอนที่ผ่านมาสิ่งที่เราได้ทำไปแล้วคือ
  1. การได้ความรู้จัก Heroku และการเตรียมสภาพแวดล้อมการทำงาน และ 
  2. การสร้าง Python Web Application ด้วย Flask และ Gunicorn เพื่อทำหน้าที่เป็น Chatbot ของเรา 
มาในตอนนี้จะว่าด้วยเรืื่องการนำเอาสิ่งที่เราสร้างไว้ไปวางไว้บน Heroku เพื่อให้ใช้งานได้จริง ดังนี้

1. กำหนดสิ่งที่ไม่ต้องใช้


cd fb-chatbot
 ใช้ VirtualEnv ตามขั้นตอนที่เรากล่าวไว้ในตอนที่ 2  แล้วสร้างไฟล์ชื่อ .gitignore  (ต้องมี dot หรือ . ข้างหน้าชื่อ) ขึ้นมา

sudo nano .gitirnore
แล้วพิมพ์รายชื่อโฟลเดอร์ที่อยู่ใน fb-chatbot ลงไป ภายในไฟล์ควรจะมีเนื้อหาตามนี้

bin
include
lib
local
รายชื่อที่อยู่ใน .gitignore คือสิ่งที่เราบอกให้ git ละทิ้ง เป็นรายการที่ Heroku ไม่จำเป็นต้องรับทราบ จะได้ไม่ต้องเปลืองเนื้อที่ (เราใช้ Free Account นะ ต้องประหยัด)

2. สร้างสิ่งที่ต้องใช้

ในการนำงานที่พัฒนาด้วย Python ไปวางบน Heroku เราต้องสร้างไฟล์ข้อความขึ้นมา 2 ไฟล์ คือ
  1. requirements.txt  เพื่อใช้บอก Heroku ให้ช่วยติดตั้ง Library ที่เราต้องใช้งานให้หน่อย
  2. Procfile (ห้ามใส่นามสกุลใดๆ) ใช้บอก Heroku ให้ start application ด้วยเงื่อนไขอะไรบ้าง
มาดู requirements.txt ก่อนว่าเราจะเอาข้อมูลมาจากไหนกัน เราก็เอามาจาก virtualenv นั่นแหล่ะ ครับ โดยใช้คำสั่ง

pip freeze 
เป็นการสั่งให้ pip แสดง libraries ที่เราใช้งานใน virtualenv ทั้งหมดออกมา (หากเราไม่ได้ทำงานผ่าน virtualenv เราก็จะได้ข้อมูลอันมหาศาลที่มีอยู่ในเครื่องทั้งหมดออกมาให้ดูแทน) คราวนี้เราต้องการให้ข้อมูลเหล่านี้เข้าไปอยู่ใน requirements.txt ก็ใช้คำสั่ง

pip freeze > requirements.txt
เปิดดูเนื้อหาของ requirements.txt อีกสักครั้งเพื่อตรวจสอบ มาดู Procfile กันบ้าง ก่อนจะทำอะไรต่อไป เราต้องอ้างอิงถึง Python ที่ทำไว้ในตอนที่ 2 ซึ่งจะต้องอยู่ใน virtualenv ของเราในขณะนี้ สมมุติว่าให้ชื่อว่า chatbot.py  พิมพ์ข้อความนี้ไปไว้ใน Procfile

web : gunicorn chatbot:app
มาถึงตรงนี้เรามีสิ่งที่จะต้องนำขึ้นไปไว้บน Heroku คือไฟล์ 3 ไฟล์คือ chatbot.py , requirements.txt และ Procfile นะครับ

3. Deploy งานไปที่ Heroku

ในขั้นตอนนี้จะต้องนำเอา git และ heroku cli ที่เราได้ติดตั้งไว้ในตอนที่ 1  มาใช้งานกัน และต้องทำการเชื่อมต่อ internet 3.1)  สร้างพื้นที่บน Heroku ด้วยคำสั่ง

heroku create my-fbot
heroku create คือคำสั่งบอกให้ Heroku สร้างพื้นที่สำหรับ application ของเรา ครับ my-fbot คือชื่อที่เรากำหนดไว้ใช้อ้างอิงของ application ของเรา  หากเราไม่กำหนดชื่อไว้ ทาง Heroku จะสร้างให้เราเอง โดยใช้การสุ่มขึ้นมา ซึ่งบางครั้งอาจจะได้ชื่อที่จำได้ยาก ดังนั้นผมแนะนำให้กำหนดเองไว้จะง่ายต่อการทำงาน ครับ หลังจากการทำงานจบสิ้นลงเราจะได้ Web URL ไว้ใช้สำหรับเรียก application ของเราผ่านเว็บ และ git URL สำหรับทำงานผ่าน git ในกรณีตัวอย่างคือ https://my-fbot.herokuapp.com/ และ https://git.heroku.com/my-fbot.git ตามลำดับ
หากเรา login เข้าไปใน Heroku แล้วดูที่ Dashboard ก็จะพบว่ามี my-fbot อยู่ในรายชื่อ Personal apps
3.2) สร้างพื้นที่สำหรับ git

git init

git add . 
3.3) login เข้าสู่ Heroku

heroku login
3.4) ผูก git เข้ากับพื้นที่ของ application บน Heroku

heroku git:remote -a my-fbot
หมายเหตุ ท่านต้องเปลี่ยนชื่อ my-fbot ให้ตรงกับชื่อ application ของท่านเอง
3.5)  Commit

git commit -am "commit to my-fbot"
ท่านสามารถเปลี่ยนข้อความ "commit to my-fbot" ไปเป็นข้อความอื่นได้ เพื่อให้ไม่ซ้ำกัน 3.6) Deploy application ของเรา

git push heroku master
คำสั่งนี้จะใช้เวลาพอสมควร รอจนกระทั่งเราได้เห็นข้อความดังภาพแสดงบนหน้าจอ มาถึงขั้นตอนนี้ สิ่งที่ได้ทำลงไปคือการนำเอา application ของเราไปวางไว้บน Heroku เรียบร้อยแล้ว หากท่านทำตามขั้นตอนทั้งหมดแล้วพบกับข้อผิดพลาดอะไรก็ตาม ขอให้ย้อนดูขั้นตอนที่ผ่านมาโดยละเอียดแล้วทำการแก้ไข 3.7) Start web worker

heroku ps:scale web=1

ทดสอบการทำงาน

เพื่อให้สามารถทดสอบได้ ผมจะทำการเพิ่มชุดคำสั่งเข้าไปใน chatbot.py ดังนี้


@app.route("/test",methods=['GET'])
def do_test():
     return "Hello"

ด้วยชุดคำสั่งนี้จะทำให้เมื่อใช้ https://my-fbot.herokuapp.com/test  กับ Web Browser แล้วเห็นข้อความ "Hello" ก็แสดงว่าทั้งหมดที่ทำมาสามารถใช้งานได้ โดยเราต้องย้อนกลับไปทำงานในขั้นตอน 3.5 - 3.6 อีกครั้งเพื่อให้มีผลในการทำงาน
ทำมาได้ขนาดนี้แล้ว สิ่งที่เราได้มาแล้ว Chatbot อย่างง่ายที่ทำงานโดยการส่งข้อความกลับไปหาผู้ส่ง และ Web URL ของ Chatbot ของเราเพื่อนำไปใช้อ้างอิง Webhook Endpoint  แล้วก็เหลืออีกขั้นตอนเดียวคือ การสมัครเข้าให้ Facebook Messenger Chatbot กัน ครับ
[ตอนที่ 1] [ตอนที่ 2] [ตอนที่ 4]

ความคิดเห็น