ทดลองสร้าง Line @ Bot แบบมั่วๆ
Line ได้ออก API สำหรับ Line @ และ Line Official มาได้สักพักนึงแล้วโดยใช้ชื่อว่า Messaging Api ซึ่งวันนี้เพิ่งมีโอกาสได้ลองเล่น API แบบจริงจังเลยมาเขียนบล็อกแชร์ประสบการณ์การใช้งาน API ของ Line ในการสร้าง Chat Bot แบบขำๆขึ้นมาสิ่งที่ต้องการในการสร้าง Bot
- Server 1 ตัว (ใช้ Ubuntu 14.04)
- Nginx (ใช้อะไรก็ได้แล้วแต่ถนัด)
- HTTPS ที่ valid cert อันนี้ต้องมีไม่งั้นใช้ไม่ได้ ในที่นี้ใช้ Let's Encrypt (ลองใช้ Cloudflare ที่ใช้ค่า - Default แล้วโดนบล็อกข้อมูลที่ส่งมาจาก Line เลยขี้เกียจหาวิธีแก้)
- PHP 5
- Python 3
- ChatterBot (เอาไว้สร้าง Bot Chat)
- MongoDB (เอาไว้เก็บข้อมูลของ ChatterBot)
- Sample-Line-Bot (https://github.com/kittinan/Sample-Line-Bot)
ติดตั้ง Nginx, php และ config https ไว้ให้พร้อมใช้งาน
Line Messaging API Architecture
ขออนุญาติก็อบรูปใน Line Developer มาให้ดู ซึ่งการทำงานก็ไม่มีไรมาก
เมื่อผู้ใช้ส่งข้อความมาที่ Line @ เรา Line ก็จะส่งข้อความนั้นมายัง Server ที่เราเซตเอาไว้
สมัครใช้งาน Line Messaging API
ตาม Link นี้เลย https://developers.line.me/messaging-api/getting-started ค่อยๆอ่าน แล้วทำตามอย่าข้ามขั้นตอนเด็ดขาด ไม่งั้นปวดหัวสุดๆ
สร้าง Chat Bot ด้วย ChatterBot
Install MongoDB
วิธีการตาม Link นี้เลย https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-14-04
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
sudo echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
เสร็จสิ้นการลง MongoDB
Install Python 3
ใน Ubuntu 14.04 นั้นลง Python 3 มาไว้อยู่แล้ว โดยแค่ลงเพิ่มอีก 2 package คือ python pip กับ python levenshtein
sudo apt-get install python3-pip python3-levenshtein python3-nltk python3-setuptools
Install ChatterBot ผ่าน python pip
sudo pip3 install chatterbot
sudo python3 -m nltk.downloader -d /usr/local/share/nltk_data brown movie_reviews conll2000 punkt averaged_perceptron_tagger
เมื่อลง Package ที่ต้องการต่างๆเรียบร้อยแล้วให้ clone https://github.com/kittinan/Sample-Line-Bot มายังเครื่อง เพื่อที่เราจะเริ่มทำการ train bot ให้ตอบแชทได้
เมื่อ clone มาเสร็จแล้วให้ไปยัง folder python แล้วรัน
python3 trainer.py sample_conversation.json
โดย sample_conversation.json นั้นเป็นตัวอย่างข้อมูลการสนทนา ถาม-ตอบ ซึ่งอยู่ใน format json array โดยส่วนตัวผมใช้ข้อมูลการ Chat กับเพื่อนใน Facebook ในการ train model ของ chat bot
เมื่อ train model เสร็จแล้วให้ทดสอบว่า chat bot ทำงานได้ถูกต้องโดยการรัน
python3 chat.py "ดีครับ"
python3 chat.py "ชื่อไร"
Bot ก็จะตอบมาดังภาพ
ดูรายละเอียด ChatterBot เพิ่มเติม ได้ที่ http://chatterbot.readthedocs.io/en/stable/
ประกอบร่าง Line API กับ ChatterBot
เข้าไป Line Business Center แล้วเข้า Messaging API Developer
ตั้งค่า Webhook URL ให้ชี้มายัง Domain Server ของเรา (Line บังคับให้ใช้ได้เฉพาะ https ที่ valid เท่านั้น) ดังภาพ
แล้ว Copy Channel Access Token มาใส่ในไฟล์ config.yml
แล้ว Install Dependencies ของ code php ให้เรียบร้อย ผ่านทาง composer
composer install
ลองไปคุยกับ bot ใน Line bot ก็จะตอบข้อความเราตาม model ที่ train ไว้ดังภาพ
ปล.
- กราบขออภัยที่ไม่ได้ลงลึกในรายละเอียดการติดตั้งในส่วนต่างๆ
- คราวหน้าเราจะมาสร้าง model ของ chatbot จาก ข้อความที่เราเคย chat กับเพื่อนใน facebook กัน
พี่ค่ะอยากสอบถามอ่ะค่ะ มีช่องทางติดต่อไหมค่ะ
ReplyDeleteสามารถสอบถามได้ในนี้เลยครับ
Deleteสอบถามครับ นอกจากโต้ตอบด้วยข้อความ สามารถ เตะ ดึง คนได้ไหมครับ หรือสั่งปิดลิ้งถ้ามีคนเปิดประมาณนี้นะครับ
ReplyDeleteตอนนี้ Line API ทำได้แค่ ตอบข้อความ (Text, Sticker, Image, Video, Audio, ...) เท่านั้นครับ
DeleteThis comment has been removed by the author.
ReplyDeleteมีวิธีการตอบกลับของbotเป็นรูปภาพจาก HDDไหมครับ
ReplyDeleteตาม API ของ LINE ตอนนี้ ยังไม่สามารถอัพโหลดรูปจากเครื่องได้นะครับ
Deleteต้องระบุเป็น URL ของรูปภาพนั้นแทนครับ
https://devdocs.line.me/en/#send-message-object
พอมีโค้ดตัวอย่างไหมครับ เรื่อง image ไหมครับ ตอนนี้ผมพัฒนาโดย php อยู่อะครับ
ReplyDeleteผมได้เพิ่มตัวอย่างเข้าไปใน https://github.com/kittinan/Sample-Line-Bot แล้วนะครับ ไฟล์
Deletehttps://github.com/kittinan/Sample-Line-Bot/blob/master/hook_reply_image.php
ดู Document API ของ Line ได้ที่ https://devdocs.line.me/en/#send-message-object
สำหรับรูปภาพ
- รูปที่ต้องการส่งต้องอยู่บน https://.... เป็นไฟล์ JPEG ขนาดภาพไม่เกิน 1024 x 1024 ขนาดไฟล์ไม่เกิน 1 MB
- ต้องมีรูป Preview อยู่บน https://.... เป็นไฟล์ JPEG ขนาดภาพไม่เกิน 240 x 240 ขนาดไฟล์ไม่เกิน 1 MB
ขอบคุณมากครับ ทำลงเยอะๆ นะครับ ผมติดตามอยู่ <3
Deleteพอมีcode ตัวอย่างเรื่องการ push message ไหมครับ เเล้ว ตรง ต้องหาค่ามาอย่างไงครับ PHP นะครับ
ReplyDeleteเเล้ว จะหาค่ามาใส่ ใน "to" อย่างไงครับ
Deleteค่า to ใน API Push คือค่า userId ที่ได้จากตอน User ส่งข้อความมาอ่ะครับ
Deleteตัวอย่าง hook ที่ Line ส่งข้อมูลมายัง Server เรา
https://gist.github.com/kittinan/ad63e7dc5b52bd157c361fe2f1bdc302
This comment has been removed by the author.
ReplyDeleteผิดตรง userId ครับต้องเป็น
Delete$userid = $event['source']['userId'];
ลองสังเกตุจาก hook ที่ Line ส่งมาให้ครับ https://gist.github.com/kittinan/ad63e7dc5b52bd157c361fe2f1bdc302
ปล. access_token ไม่ควรเปิดเผยนะครับ
ปล2. ถ้าจะให้บอทตอบข้อความเลยควรใช้ API Reply Message (https://devdocs.line.me/en/#reply-message) ครับ ถ้าเราใช้ API Push เดี๋ยวอาจจะเจอปัญหา API Rate Limit ได้
ได้เเล้วครับ พี่ ขอบคุณมากๆๆ ครับ
ReplyDeleteพี่ครับ เเล้วจะสั่งให้bot join group อะครับ พอมีตัวอย่างไหมครับ
ReplyDeleteเราต้องเป็นคนกด Invite Bot เข้ามาใน Group เองครับ
Deleteผม Invite Bot เเล้วครับ เเต่ว่าฝั่งบอทไม่มีที่กดรับอะครับ
ReplyDeleteของผมแค่กด Invite Bot เข้ามาใน Group มันก็เข้ามาเลยนะครับ ไม่ต้องกดรับอะไร
ReplyDeleteปล. ใน 1 Group จะมี Bot ได้แค่ 1 ตัวเท่านั้น
สอบถามหน่อยคะ ถ้าอยากให้ Reply message เป็น Sticker ต้องทำอย่างไรอะคะ
ReplyDeletehttps://devdocs.line.me/en/#sticker
Deleteสามารถดู Sticker List ไดที่ https://devdocs.line.me/files/sticker_list.pdf
ตัวอย่าง
['type' => 'sticker', 'packageId' => 1, 'stickerId' => 1]
สอบถาม Let's Encrypt มันใช้กับ iis ใน window 2012 server ได้หรือไม่ครับ
ReplyDeleteลองอันนี้ดูครับ
Deletehttps://www.youtube.com/watch?v=r9PB94oWz34
https://letsencrypt.org/docs/client-options/#windows
ไม่ได้รับครับผม ต้องขอโทษด้วยนะครับ
ReplyDeleteจากหน้านี้ครับ https://business.line.me/en/services/bot
ReplyDeleteตอนที่จะสร้าง messaging มันให้เลือก Start using messaging API กับ Start using Developer Trial
ในหน้านี้มันบอกว่า ถ้าเป็น Start using Developer Trial จะ limit แอดเพื่อนได้ 50 คน
พี่พอทราบไหมครับว่า ถ้าเลือก Start using messaging API จะ limit แอดเพื่อนได้เท่าไหร่ ผมกะจะศึกษาไปใช้จริงๆ แต่กลัวมันจะ limit แอดเพื่อนครับ
อันนี้ไม่ทราบเหมือนกันครับ
Deleteตอนลองใน terminal นี่ได้นะครับ แต่พอเชื่อมต่อกับ LINE แล้วได้ error แบบนี้ครับ
ReplyDeleteTraceback (most recent call last):
File "./python/chat.py", line 3, in
from chatterbot import ChatBot
ImportError: No module named 'chatterbot'
จาก Error มันหา Module chatterbot ไม่เจอครับ ถ้าลง chatterbot แล้วอาจจะเป็นเพราะ Path Environment Variable ครับ
Deleteอยากทราบกว่าคุณ Tun ใช้ heroku รึเปล่าครับ เพราะผมดีพลอยลง heroku ละมันก็ขึ้น error แบบที่บอกไปอ่ะครับ ก็แบบที่คุณ Tun บอกแหละครับ มันไม่น่ามี module chatterbot ให้ แต่ผมก็ไม่รู้จะลงมันยังไงอ่ะครับ พอจะไกด์ได้มั้ยครับ ขอบคุณครับ
ReplyDeleteผมไม่ได้ใช้ Heroku อ่าครับ ส่วนตัวผมใช้ Digitalocean ครับ
Deleteพี่ ครับ เคยเขียน แนว Multicast ที่ให้เวลาข้อมูลมันเปลียนแปลงแล้วให้แจ้งเตื่อนไหมคีรับ พอดีเขียนเป็น php แต่ทำไงก็ไม่ออก อะ
ReplyDeleteนอกจาก https แล้วมีช่องทางอื่นอีกมั้ยครับ กรณี server ไม่ได้ติดตั้ง ssl
ReplyDeleteไม่มีครับ Line บังคับให้ใช้ https ครับ
Deleteต่อไปเขาจะเก็บเงินเราไหมครับ
ReplyDeleteอันนี้ไม่ทราบเหมือนกันครับ
Deleteสอบถามครับ ถ้ามีการเพิ่มข้อมูลใหม่เข้ามาแล้วให้แจ้งเตือนไลน์กลุ่ม เขียน php+mysql มีตัวอย่างไหม คับ
ReplyDeleteถ้าเป็นการแจ้งเตือนเฉยๆ ใช้ Line Notify จะง่ายกว่าครับ
Deletehttps://kittinanx.blogspot.com/2017/01/line-notify-php.html
แต่ถ้าอยากใช้เป็น Line@ แล้วส่งเข้าไปในกลุ่ม สามารถใช้ API Push message ส่งเข้าไปได้ครับ
https://devdocs.line.me/en/#push-message
อยากทราบวิธีทำให้ไลน์บอท ตอบกลับมาเป็น template message ขอตัวอย่างคร่าวๆก็ได้ครับ
ReplyDeleteโทษทีครับที่ตอบช้า พอดีเพิ่งเห็น comment ครับ
Deleteถ้าเกี่ยวกับ template message ลอง mustache ดูครับเอาไว้ Render Template ได้ยอดเยี่ยม
https://mustache.github.io/
สอบถามครับ คือผมอยากจะเก็บค่าที่ User พิมพ์ คุยกับบอท เข้า DB พอจะมีวิธีใหมครับ
ReplyDeleteเขียน code ต่อ database แล้ว insert เข้าไปได้เลยครับ
DeleteThis comment has been removed by the author.
ReplyDeleteอยากจะสอบถามครับคือผมได้สร้าง app เพื่อการศึกษา แล้วอยากดึง bot chat ของline เข้าไปเป็นส่วนหนึ่งของ app แล้วมีการเชื่อมต่อ databaseของMicrosoft azure เพื่อทำการ Machine learning พอจะเป็นไปได้ไหมครับ
ReplyDeleteผมไม่เคยใช้งาน Microsoft Azure แต่คิดว่าทำได้ครับ
Deleteแต่ถ้าดึง apiของline bot chat มาใช้ในappที่ผมกำลังพัฒนาได้ใช่ไหมคร้บ ขอบคุณสำหรับการตอบกลับนะครับช่วยได้เยอะเลย :)
Deleteเราต้องเข้าใจก่อนว่า Line Messaging API มันทำได้ไรบ้าง ซึ่งความสามารถที่ทำได้ก็คือ รับ / ส่ง ข้อความ เราก็จะนำความสามารถตรงนี้ไปเชื่อมต่อกับระบบอะไรก็ได้ตามแต่เราจะจินตนาการได้โดยผ่าน API Line Messaging อย่างผมก็เอาไปเชื่อมต่อกับระบบ Home automation ในบ้าน ใช้สั่ง เปิด-ปิดแอร์ในบ้านได้
DeleteBot สามารถ block บางคนได้ไหมคะ ถ้าได้ต้องทำยังไงเหรอคะ
ReplyDeleteเท่าที่ตรวจสอบ Line Messaging API ไม่พบ API ในการ Block ครับ
Deletehttps://developers.line.me/en/docs/messaging-api/reference/
ขอบคุณมากค่ะ
Deleteอยากทราบว่า Bot สามารถ Forward message ที่ได้รับมา ไปให้ อีกกลุ่ม หรืออีกคนได้รึป่าวครับ
ReplyDeleteขอบคุณมากครับ
Line Messaging API ไม่มี API สำหรับการ Forward Message โดยตรงครับ แต่เราสามารถทำได้เองไม่ยากโดยใช้ API Send push message ครับ
Deletehttps://developers.line.me/en/docs/messaging-api/reference/#send-push-message
โดย Send push message API นั้นเราสามารถส่งข้อความไปหาใครก็ได้ที่เคยส่งข้อความมายังบอทของเรา โดยใช้ userId หรือ groupId ที่บอทได้รับมาตอนรับข้อความครับ
https://developers.line.me/en/docs/messaging-api/reference/#source-user
This comment has been removed by the author.
ReplyDeleteสวัสดีครับ จะขอรายละเอียดวิธีทำ ในส่วนนี้ "Install Dependencies ของ code php ให้เรียบร้อย ผ่านทาง composer" ได้มั้ยครับ เทรนบอทเรียบร้อยร้อย เหลือแค่ส่วนนี้ที่ไม่เข้าใจ
ReplyDeleteเบื้องต้นลอง Google ดูก่อนนะครับ น่าจะมีคนเขียนวิธีการติดตั้งและการใช้งาน Composer อยู่พอสมควร พอดีช่วงนี้ผมยุ่งๆยังไม่มีเวลาเขียน Blog ครับ ต้องขออภัยด้วยนะครับ
Deleteหรือจะลองศึกษาจากเวปหลักดูครับ https://getcomposer.org/doc/00-intro.md
อยากสอบถามว่า สามารถเอา ภาพจากเว็ปที่อัพเดท real time มาตอบคำถามใน lineยังไงครับ
ReplyDelete- Download รูปจากเวปที่เราต้องการมาเก็บที่ Server เราเองก่อน
Delete- เอา Link รูปจาก Server เรา ไปตอบครับ