[USECASE] มาคุยผ่านบอท สองภาษา กับ Dialogflow ด้วย เทคนิคการดึง Language จาก User Profile มาใช้งาน

สวัสดีครับทุกท่าน จากการพัฒนา LINE Chatbot ทุกท่านคงเริ่มที่จะสร้างความหลากหลายให้กับ Chatbot ของท่าน ทำให้ฉลาดขึ้นก็ดี ทำให้สามารถแยกแยะผู้ใช้งานได้ก็ดี ในบทความนี้ ก็เป็น ตัวอย่างการประยุกต์ใช้ ที่จะทำให้ Chatbot ของเพื่อนๆ มีมิติมากขึ้นนั้นก็คือ แยกภาษา การโต้ตอบ แยกสองภาษา Thai และ English ด้วยการที่จะใช้ร่วมกับ API Get User Profile ซึ่งจะมี Object ตัวหนึ่งที่ชื่อ “language” ที่จะมาคัดการโต้ตอบกับผู้ใช้งาน Chatbot ของเพื่อนๆ ออกมาเป็น ภาษาของผู้ใช้งานเอง

และในบทความนี้เราจะมีของแถมสุดแจ่มที่จะช่วยชีวิตให้ เราได้หายใจสะดวกมากขึ้นลุยกันเลย (/ ^o^)/

มาเตรียมของเราให้ครบดังนี้

หมายเหตุ ในบทความนี้ผมจะใช้ภาษา Java Script และ Code ภาพรวมช่วงท้ายบทความครับ

1. สร้าง LINE Provider และ Channel Messaging API

สำหรับท่านที่กำลังจะเริ่มพัฒนาทาง LINE Community ก็มีหลายบทความที่ท่านจะได้เริ่มต้น แต่สำหรับผม แนะนำ บทความที่ดีที่สุดด้านล่างนี้ครับ

หรือสามารถอ่านบทความทั้งหมดของ LINE DEV ได้ที่

มาถึงตรงนี้เพื่อนๆ คงมีบอทที่ไม่ใช่บอทกันเรียบร้อยแล้วใช่มั้ยครับ ?

2. API GET User Profile

หลังจากที่มีการสร้าง LINE Chat Bot ของเราแล้วเพื่อนๆ ก็จะได้เริ่มต้นใช้ Messaging API ในโลกของ LINE Developer กันได้แล้ว แต่ในบทความนี้ผมจะพูด API ที่พิเศษสำหรับผมมากๆ คือ การดึงข้อมูล Profile ของผู้ใช้ LINE ที่ ADD Friend มาได้ครับ

ตัวอย่าง API

https://api.line.me/v2/bot/profile/{LINE ID}

ซึ่งการ Get Profile นี้เราจะได้ Property Object ต่อไปนี้

ซึ่งถ้าเพื่อนๆ ทุกท่านอยากรู้ลึกรู้จริงแบบละเอียดกว่าเม็ดทรายแนะนำบทความนี้เลย

รับรองว่าอ่านจบเรียบร้อยจะได้ทุกท่า ตีลังกา กลับหน้ากลับหลังกันเลยครับ แต่เรามาต่อของเรากันก่อน เมื่อได้ API มาแล้วเราก็ลองทดสอบสักหน่อยด้วย POSTMAN

POSTMAN — GET User Profile

ถ้ามาถึงตรงนี้แล้ว แปลว่าท่านเริ่ม อ๋อ กันแล้ว ตรงเราจะได้ตัว “language” นั้นเอง

*เพิ่มเติม Language ตรงนี้สามารถเปลี่ยนแปลงได้ ทั้ง PC และ Mobile

เปลี่ยนภาษา ผ่าน PC
เปลี่ยนภาษา Mobile

จากตรงนี้ไปเพื่อนๆ ก็จะได้ Chatbot และ API Get User Profile ที่จะเอาไป Dev กันต่อแล้วใช่มั้ยครับ คราวนี้ผมจะเอาไปประยุกต์กับ Chatbot ซึ่งเงื่อนไขของผมดังนี้

หมายเหตุ ขั้นตอนนี้เป็นตัวอย่างการใช้ เพื่อต่อยอด

*อย่าลืมแก้ xxxx- > Access Token

จะได้ดังภาพนี้ครับ

ซึ่งวิธีการนี้เพื่อเป็นการพิสูจน์ว่าในการพิมพ์หรือแชทใดๆ ต่อไปนี้เราก็สามารถ GET Profile เพื่อมาตรวจสอบหรือมาแสดงผลอื่นๆได้แล้วนั้นเองครับ

ในขั้นตอนต่อไปนี้ขอให้เพื่อนๆ พัก Chatbot ของเราก่อนเรามาสร้าง Dialogflow กันสักหน่อย

3.สร้าง Dialogflow 2 Agent

เชื่อว่า เพื่อนๆ หลายๆ ท่านที่พัฒนา LINE Chatbot มาสักระยะแล้วจะรู้จักเครื่องมือ AI Chatbot ที่จะมาช่วยเรื่องของ NLP (Natural Language Processing) อย่าง Dialogflow แน่นอนเลยหรือถ้าใครที่กำลังจะเริ่มที่บทความนี้แหละ ขอให้เพื่อนได้เริ่มเรียนจากด้านล่างนี้ได้เลย ที่สำคัญ ฟรี โดย Jirawatee ซึ่ง Course นี้ skooldio จัดมาให้เราแล้ว และยังมี ทักษะอื่นๆในเว็ปนี้อีกโคตรเยอะครับ แนะนำเลย

เนื่องจาก โจทย์ต่อไปนี้เราจะให้ Bot ของเราโต้ตอบได้สองภาษา เราต้องสร้าง Agent ของเราสองอันให้โต้ตอบกันคนละภาษา

หมายเหตุ ส่วนตัวการแยก Agent เป็นวิธีหนึ่งที่ผมคิดเห็นว่า จัดการได้ดีกว่าครับเผื่อ ทีมเรา ทำฝั่ง EN หรือ อีกทีมฝั่ง TH แต่ล้วนแล้วแต่ความสะดวก

หมายเหตุสอง ผมทำรวมกันไม่เป็นด้วยนั้นเองครับ 5555+ ใครมีวิธี เขียนส่งมาได้เลยนะครับ

Agent ที่หนึ่งจะประกอบด้วยดังนี้

Agent ที่สองจะประกอบด้วยดังนี้

เมื่อท่านสร้างมาแล้วก็สามารถตรวจสอบที่เมนูด้านซ้ายจะพบกับ Agent ที่ท่านสร้างขึ้น

ขั้นตอนต่อมาก็เป็นการ “Integrations” เพื่อเชื่อมต่อกับ LINE นั้นเองครับ

Integrations

เมื่อเปิดขึ้นมาท่านต้องเตรียม 3 สิ่งต่อไปนี้ครับ

ซึ่งทั้งสามสิ่งนี้สามารถหาได้จาก LINE Developer Console -> Messaging API ของเราได้นั้นเอง

เมื่อกรอกครบแล้วให้กด “Start” และให้ทำวิธีเดียวกันทั้งสอง Agent เลยนะครับ

เมื่อกรอกครบเรียบร้อยแล้วให้เพื่อน เก็บ Webhook URL ไว้ใน Note หรือไว้ไหนก็ได้ที่สะดวกเก็บนะครับ ก็จะจบขั้นตอนไปยุ่งเกี่ยวกับ Dialogflow แล้วครับ

โจทย์

จากข้อแรก และ ข้อสองนี้ ผมจะทำแบบเร็วๆ ได้ Code นี้ครับ

*อย่าลืมแก้ xxxx- > Access Token

อธิบาย Code นิดหนึ่งครับ

มาถึงตรงนี้แล้ว ทุกคนก็ใช้ได้แล้วใช่มั้ยครับ

แต่เดี๋ยวก่อน…..ถ้ามันเล่นเชคทุกครั้งมันจะช้าใช่มั้ย

เรื่องนี้ผมก็ได้รับคำปรึกษาจากอาจารย์หนึ่ง Sitthi Thiammekha ว่าจัดใส่ redis เลยครับจะได้เก็บข้อมูลใน cache แทนไม่ต้องเชคใหม่ทุกรอบเร็วแน่นวล ก็จัดไปครับ

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

สรุปตรงนี้สั้นๆว่า เจ้า redis นี้มันก็คือ Database ประเภทหนึ่งนั้นเองแต่มันเป็นการเก็บข้อมูลเข้า Memory RAM ครับ ซึ่งจะเก็บแบบ Key Value (NoSQL) ซึ่งตามชื่อการเก็บแบบ In memory แน่นอนว่ามันไม่อยู่ถาวร มันเก็บเหมือน RAM ปิดเปิดใหม่ก็หายครับ ซึ่ง มันก็แปลกๆใช่มะ เกิดหายไปทำไงดี

แต่อย่างกรณีนี้มันก็ตอบโจทย์เลยนะ เก็บสั้นๆ เอามาทำเป็น Caching นั้นแหละครับจบมาต่อกันครับ

ประกอบร่าง

เมื่อท่านทำตามขั้นตอนใน ลิ้งค์ด้านบนแล้ว ก็จะได้ Code หน้าตาประมาณนี้

อธิบาย Code กันสักนิดครับ

จาก Code นี้จุดที่เราเพิ่มเข้ามาคือเอา Lib redis มาใช้โดยการเพิ่มส่วน import เข้าไป

const redis = require('redis')
const redisClient = redis.createClient()

ซึ่งส่วน redisClient เพื่อนๆก็จะใช้คำสั่ง SET GET SETEX ได้แล้วครับ

redisClient.set('key', 'value')redisClient.get('key')// set แบบ expire time
// 360 วิ
redisClient.setex('key', 360, 'value')

โดยผมจะยกตัวอย่างมาที่ function : reply

3. ถ้ามีก็เอาข้อมูลจาก Key นั้นส่งค่าไปเลยไม่ต้องไป GET API แล้ว (เร็วแน่นวล)

4. ถ้าไม่มีก็ไป GET มาก่อนเลยครับ โดยกำหนด key value ยัดใส่ redisClient.setex(key,expire time,value) แบบนี้ครับ

5.ยัด Object language ที่ได้จาก GET User Profile เข้าไปโลดและให้ส่งไปที่ function : dialogFlow

เราก็ได้จะได้แบบนี้ครับ

เรียบร้อยแล้ว….. ( -3-) ที่นี้เพื่อนๆก็จะได้บอทสองสัญชาติเท่ๆไปใช้งาน

บทความนี้ท่านก็จะได้สร้างมิติการคุยแชทบอทแบบสองภาษา แถมยังได้เทคนิคการจัดการ Performance แบบเท่ๆอย่าง redis ไปใช้ด้วยครับ

หวังเป็นอย่างยิ่งว่าจะทำให้เพื่อนๆได้นำไปต่อยอด ประยุกต์และพัฒนา LINE Chatbot ให้ดีมากยิ่งขึ้นครับขอให้สนุกกับการพัฒนาระบบและค่อยพบกันใหม่บทความหน้าครับ

ขอบคุณครับ

--

--

Closing the distance. Our mission is to bring people, information and services closer together

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store