in Blog

มาลองทำ Line Chat Bot กัน

Line เปิดให้บริการ Messaging API มาระยะนึงแล้วแต่ก็ยังไม่ได้ลองเขียน ChatBot สักที ครั้งนี้ก็เลยมาลองเขียนดูบ้าง

Messaging API สามารถส่งข้อความไปยังผู้ใช้ได้ ส่งข้อความโต้ตอบผู้ใช้ ซึี่งรูปแบบข้อความความสามารถอยู่ในรูปแบบ rich content ได้ เช่น image, audio, video, button, carousel เป็นต้น เราสามารถใช้ rich content โต้ตอบกับผู้ใช้ได้ เช่น สั่งซื้อสินค้า, แนะนำสถานที่โดยใช้ location ของผู้ใช้, บริการแปลภาษา ฯลฯ

สำหรับ LINE Bot SDK มีให้เลือกใช้หลายภาษา :) มาลองเล่นกัน อันดับแรกต้องมี LINE@ account จากนั้นสั่ง Enable Messanging API ให้เรียบร้อย

มาสร้างส่วน Webhook กัน LINE มีข้อกำหนดเรื่อง https เราใช้ PaaS อย่าง Heroku ที่มาพร้อมกับ https จะช่วยได้มาก

mkdir -p linebot/web

cd linebot

composer require php

composer require linecorp/line-bot-sdk

composer require monolog/monolog

echo "vendor/" > .gitignore

echo "web: vendor/bin/heroku-php-apache2 web/" > Procfile

echo "<?php phpinfo(); " > web/index.php

git init

git add . && git commit -am "init"

heroku create

git push heroku master

จากนั้นสั่ง

heroku open

จะพบว่า heroku เปิดหน้า phpinfo มาถูกต้อง ให้ copy url ไปใส่ใน Webhook URL ในหน้าตั้งค่า Messaging API ให้ถูกต้อง

สั่ง config heroku ให้บันทึก ACCESS_TOKEN และ CHANNEL_SECRET ลงใน ENV ดังนี้

heroku config:set LINEBOT_ACCESS_TOKEN=XXXXXXXXX

heroku config:set LINEBOT_CHANNEL_SECRET=XXXXXXXXX

แก้ไฟล์ index.php เพิ่มโค้ดลงไปดังนี้

แล้วสั่ง commit และ push ใหม่ โค้ดข้างต้นจะอ่าน Webhook Events ที่ได้รับมาจาก Line App เราจะอ่าน Events เหล่านี้มาสร้าง Bot กัน Events ที่เราจะเจอบ่อยๆ เช่น MessageEvent คือข้อความที่ส่งมาจากผู้ใช้ และ Postback Event คือ action ที่เกิดจากผู้ใช้ส่งกลับมาให้ Webhook เป็นต้น แนะนำให้เปิด Line Bot SDK กับ API Reference เอาไว้ดูตอนเขียนด้วยนะครับจะได้ไม่งง

เพิ่มโค้ดเพื่อตรวจสอบ Message Events ดังนี้

จากโค้ดจะแยก Postback, Location Message และ TextMessage เพื่อใช้ในการเขียนโค้ดในการตอบโต้กับข้อความที่ผู้ใช้ส่งมา ลองมาดูในส่วนของ TextMessage กันก่อน เราสามารถแยก message ที่ส่งมาจากผู้ใช้โดยใช้ method getText เราจะได้ text message เอาไว้ใช้วิเคราะห์ประโยคหรือส่งไปให้ conversation service หรือ machine learning service ได้ หรือจะเอามาทำ chat bot แบบถามมาตอบไปเป็น rule base ง่ายๆ ได้เช่นกัน เพื่อให้เข้าใจการส่ง message กลับไปยังผู้ใช้ เรามาตั้ง rule base ง่ายๆ กันก่อนดังนี้

  • พิมพ์ text จะส่งข้อความในรูปแบบ text กลับไปให้
  • พิมพ์ image จะส่ง image กลับไปให้
  • พิมพ์ location จะส่ง location message กลับไปให้
  • พิมพ์ confirm จะส่ง confirm dialog กลับไปให้
  • พิมพ์ button จะส่ง dialog พร้อมปุ่ม กลับไปให้
  • พิมพ์ carousel จะส่งข้อความแบบ carousel กลับไปให้

ตัวอย่างการส่ง Text Message

ตัวอย่างการส่ง Image

ตัวอย่างการส่ง Location

ตัวอย่างการส่ง Confirm

ตัวอย่างการส่ง Button

ตัวอย่างการส่ง Carousel

โค้ดทั้งหมด

ลองเอาไปประยุกต์ใช้กันดูครับ :)