ครั้งแรกกับงาน MEET THE EXPERT #1 ของ LINE Developers Thailand
ครั้งแรกกับการไลฟ์ของพี่ตี๋พี่แทน และพี่ๆ LAE ทั้ง 5 ท่าน มาแบบสดๆ ให้เราดูถึงที่บ้านเลย เริ่มไลฟ์ตอนเย็นหกโมง หลังเราเลิกงานจาก work from home พอดีเลย เย้ๆ
Agenda จะมี 2 เรื่อง คือ
- What happened in LINE API in Q1 2020
- Meet the expert - LIVE Q&A
มาเริ่มกันเลยดีกว่า ส่วนไลฟ์สามารถดูย้อนหลังได้ที่นี่จ้า
What happened in LINE API in Q1 2020
ก่อนอื่นเลย ในเพจเขามีคนกดไลค์ 7000 คนแล้ว และกลุ่มก็มีประชากรมากกว่า 15,000 คนแล้วน้าาา
และมีของอัพเดต 12 อย่างด้วยกัน
LINE Messaging API
- LINE emoji : เมื่อก่อนต้องหาวิธีแปลงแล้วเอาไปใส่ ตอนนี้ใส่ได้ง่ายขึ้นแล้วนะ สามารถใส่ใน text ได้เลย โดยเราสามารถ set index ตำแหน่งที่เราจะใส่ emoji ด้วย Regular Expression น้าาา
พบว่า เอ้อออ emoji เยอะจริงๆตามที่พี่ๆบอกเลย ตั้ง 60 หน้าอ่ะ เยอะกว่าสติ๊กเกอร์อีกกก
- Icon & Display : สามารถเปลี่ยนชื่อและ icon ของน้องบอทแบบ real-time ได้แล้ว ไม่ต้องรอกันเป็นอาทิตย์เหมือนเดิมหล่ะจ้า และมีบอกด้วยว่าเป็นของ OA ตัวไหน
อ่านต่อตรงนี้จ้า
- Narrowcast : ส่งให้ถูกคน ถูกใจ ใน LINE Chatbot แตกต่างจาก broadcast ปกติคือ ส่งเป็นกลุ่มแบบเฉพาะเจาะจงได้เลย เช่น เพศ, อายุ, OS ของมือถือ (iOS/Android), เป็นเพื่อนกับ OA นี้นานแค่ไหน, เคยเห็นหรือคลิกข้อความที่ broadcast หรือไม่
อ่านต่อที่นี่เลยจ้า
- Audience Sharing : ส่งจากผู้ใช้จาก OA Manager หรือให้หลังบ้านสร้างจาก userId แล้วให้ฝั่ง marketing เลือกเอา
- Multicast : ส่งแบบ 1-to-many ตอนแรก limit ไว้ที่ 150 คน ตอนนี้ขยายเป็น 500 คน ซึ่ง use case ก็คือการสร้างกลุ่ม id ของ user ทำให้คนส่งวนลูปส่งออกไปน้อยลง
- เพิ่ม field language ใน get profile : คือภาษาที่ user ใช้ใน LINE มี use case คือสร้าง Rich Menu เป็นภาษานั้นๆ ทำให้ UX ดีขึ้น
- Channel Access Token v2.1 :
จริงๆ Channel Access มี 3 แบบด้วยกัน คือ
1) Long-Life : อันนี้จะแอบบาปๆกันทุกคนเนอะ เนื่องจากมันสะดวก สร้างเสร็จได้เลย ใช้ง่าย ใช้ยาวๆ สะดวกเรา แล้วยังสะดวก hacker อีก แงงงงงงง
2) Short-Life : ลดความบาปลงด้วย token ที่ใช้ Channel Secret ไป issue มาได้ Access Token ซึ่งมีอายุ 30 วัน
3) Channel Access Token v2.1 : เอา key จาก console เพื่อเอาไปสร้าง JWT กำหนดอายุเลยว่าจะมีอายุเท่าไหร่ ซึ่งสูงสุด 15 นาที และไป issue มาได้ Access Token ได้ ซึ่งเขาแนะนำให้ลงทุนในเรื่องนี้
ถ้าอยากอ่านเพิ่มเติม อ่านบล็อกด้านล่างนี้เลย ละเอียดสุดๆ
- Content Domain เปลี่ยนภายใน 30 เมษายน 2563 สำหรับ 3 API นี้ เท่ากับว่า คนที่อ่านบล็อกในอย่าลืมเปลี่ยนนะ ไม่งั้นจะได้ 404 กลับไป
Bot Mode + Chat Mode เราจะทำงานร่วมกันได้ไหมนะ?
ทำได้ด้วย MyShop เป็นระบบช่วยซื้อขายขิงให้สะดวกมากขึ้น จัดการที่หลังบ้านได้ และมีทั้ง bot mode และให้ admin ตอบ แน่นอนว่ายังไม่เห็นข้อความที่น้องบอทตอบนะ ซึ่งอดใจรอ อาจจะมี feature เพิ่มเติมเนอะ
สัมผัสความเทพของเจ้าตัวนี้กัน
LIFF: LINE Front-end Framework
- Share Target Picker : ส่งกลับเฉพาะห้องที่เปิด LIFF เท่านั้น เราสามารถเลือกเพื่อนและเลือกกลุ่มได้ และส่งกลับไปได้หลายรูปแบบ เช่น Flex Message ในนามของเรา use case ก็น่าจะเป็นตั๋วคอนเสิร์ต
liff.ready
: การันตีว่าทำงานได้แน่หลังจากทำliff.init
สำเร็จ ทำงานแบบ asynchronous เอาตัวนี้ไปครอบและทำงานได้เลย ไม่มีแคลชมากวนใจ
- Universal Link : เอาไปโปรโมตตามช่องทางต่างๆ เป็น https เนอะ ตัว default API เป็น liff.line.me
สุดท้าย คอร์สเรียนฟรีกับ Skooldio มาใหม่ล้าวววว สร้าง LIFF จาก zero-to-hero เลยน้าา มีโบนัสส่งท้าย เรียนหมดทั้งสองคอร์สเตรียมไหเก็บเงินได้เลย เพราะเราทำพื้นฐานของ LINE API ได้ล้าวววว
คอร์สแรกสามารถเรียนได้ที่นี่
ส่วนอันนี้คือสรุปที่เรียนจ้า
และจริงๆก็มีใน podcast ด้วยนะ ทั้งหมดนี้
ส่วนสไลด์ย้อนหลังอยู่ที่นี่จ้า
https://drive.google.com/file/d/1KKOgTFMatMVsixNpe9Yyg1gYjrRclMn8/view
Meet the expert - LIVE Q&A
มาพบกับ LAE ทั้ง 5 ท่านเลยจ้า แต่ละท่านก็แนะนำตัวกันไป
จากนั้นจะเป็นการตอบคำถามจากทางบ้าน อาจจะจดทันบ้างไม่ทันบ้างอาจจะมีความงงๆบ้างก็ขออภัยตรงนี้เลยแล้วกันเนอะ
คำถามจากทางบ้าน
ขอประหยัดเวลาโดยการแปะรูปคำถามและพิมพ์คำตอบแทนเน้อ
ใช้ LINE userId เป็น key โดยให้ user พิมพ์อะไรสักอย่างมา เพื่อเอา username ไป map กับ userId แล้วลงถัง database หรือใช้การยืนยันตัวตนว่าเป็นคนนั้นๆจริงๆ
ความหมายของคำถามคืออยากได้หมดยกชุดหรือไม่ได้หมดยกชุด
ใช้ Narrowcast มี property เตรียม userId เป็น audience group แล้วส่งให้ send ที่เดียว และสามารถดู stat ได้ด้วย แล้วมี method ให้ get insight ว่าคนเปิดหรือคลิกเท่าไหร่
มีการ resolve ก่อนเสร็จเลยทำให้ดักไม่ได้ เดี๋ยวเขาจะเปลี่ยนการ resolve หลังจากเรา share เสร็จแล้ว และดูได้ว่าแชร์เป็น message ประเภทไหน
ทั้งสองภาษานี้มีข้อดีและข้อเสียต่างกัน
PHP : อยู่มานาน, library เยอะ, ต่อ social ได้ด้วย, เรียนง่าย ฝึกง่าย
node.js : สะดวกตรงต่อ Firebase และ DialogFlow ได้
สรุป กระบี่อยู่ที่ใจ
สำหรับเรา ตอนแรกเลยที่ตัว LINE Messaging API ออกมาใหม่ๆ แล้วตอนนั้นไม่มี python ที่ตอนนั้นถนัดไง เลยอ่ะเขียน php ดูก่อนตามบล็อกพี่เนย จนมาทำน้องหมีตัวแตกเลยใช้ node.js นี่แหละ แต่ตัว js ก็ทำได้หลายๆอย่างแหละพวกเขียนเว็บ และ framework ต่างๆ
บอทเรียนรู้ด้วยตัวเอง เรียนรู้แบบไหน? Technology ตอนนี้ยังไม่ได้เป็น true AI ที่ทำให้สามารถเรียนรู้ด้วยตัวเอง อย่างเช่น Simsimi บอทจำว่า user คุยอะไรกัน และมีการ random การส่ง message มาให้ user ยังไม่มีการ control พวกคำหยาบคายอะไรพวกนี้
เดี๋ยวเราลองแปะแบบที่เราเคยเล่นเมื่อก่อนดูแล้วกันเนอะสำหรับเจ้า Simsimi มีเว็บนึงเอาคลิปเราไปแชร์ทำให้คนดูคลิปประมาณเจ็ดแปดหมื่นคนได้แบบงงๆ
ตัวบอทน้อยมีการ filter คำหยาาบหรือคำที่ไม่ดี และเอาไป learning และสามารถเอาไปใช้ในงาน cooperate สกัด patturn ว่าเป็น pro หรือเรียงอักษร ว่าอันนี้เป็น promotion นะ และมีการเก็บ track data ด้วย
เป็นคำถามที่เฉียบมาก เป็นเรื่องของ UX intension ให้ user นั้น input เป็น message ทำให้ตอบบอทได้ง่ายขึ้น
ถ้า input เป็น url link มันจะแปลกๆ
คำถามยอดฮิตเลยจ้า นอกจาก MyShop แล้ว developer เอาที่ user พิมพ์มาไปเก็บไว้ที่ webhook และเอา data ไปลง database ไปทำ chat เอง ใช้ effort ในการทำด้วยนิดนึง
เผยวิธีทำให้ LINE ใช้ Bot กับ Chat พร้อมกันได้ (ghost ไม่ยอม render ให้ ;_;)
set auto reply ก็ยังเข้า webhook อยู่ -> เอา message ที่ set ไปใส่ไว้ใน database แล้ว check ก่อนว่าตรงไหม ถ้าตรงก็ไม่ต้อง reply
การ get user profile ใน liff
1) getIdToken()
เป็น JWT Token ยิงจาก server ไปขอตัว profile
2) getAccessToken()
ตรงๆ ส่งไป server ขอจาก server ส่งแล้ว reload ทันที
3) getDecodedIDToken()
ได้ profile ไปใช้จาก front-end ไม่ควรส่งไป back-end เพราะจะมีคนยิงหลอกได้
หรือถ้าได้แบบเรื่อยๆ ใช้ LINE Mssaging API แทน
ก่อนทำ A/B Testing นั้น มี metric ก่อนว่าจะเอาแบบไหน ปกติจะใช้อันไหนที่คนคลิกเยอะกว่าชนะ ซึ่งสามารถเปลี่ยนได้ง่ายกว่าบน web ทำได้ไม่ยากและมีประโยชน์
support query string แยู่แล้ว โดยถูกเก็บไว้ใน liff.state
สามารถอ่านบล็อกพี่ตี๋ได้ด้านล่างนี้จ้า
เทคนิคการสร้าง Universal Link ให้เปิดได้ทั้ง LIFF URL และ Web URL โดยไม่ต้องพึ่งเครื่องมือ (ghost ไม่ยอม render ให้)
อันนี้จะแบ่งในแต่ละประเด็นที่แต่ละท่านได้แชร์มา
- ได้รับความดีใจ เพราะมีการประกาศเป็น global เลย, ได้เรียนรู้ข้อมูลและอัพเดตก่อนใคร, ได้ไป event แบบฟรีๆ (อาจจะรอโควิทหมดก่อนในช่วงนี้), ได้รับการยอมรับจากสังคมว่าเรามีความ expert จริงๆนะ
- การเตรียมตัว : contribute ในกลุ่มเยอะๆ, พัฒนาบอทให้คนอื่นเล่นและเป็นที่รู้จัก (เราจะได้ skill), ถ้าเข้าตากรรมการแล้ว จะมีอัศวินเจไดมาทักเราเอง ซึ่งเป็นไปตาม process ของทางเขาอยู่แล้ว
- trick ในการเตรียมสอบ : ไล่อ่าน document ของ LINE, ทำ bot ที่ตัวเองอยากทำขึ้นมา แล้วไปดู document และ stackoverflow ซึ่งทำให้เราเรียนรู้และพัฒนาได้มากขึ้น
อ่านบล็อกอย่างละเอียดจากคุณหนึ่งและคุณเอกได้ด้านล่างนี้จ้า
ส่วนตัวเราทำ chatbot เป็น part-time ดังนั้นห่างไกลความ LAE ไปมากเลย ;____;
คำถามจากไลฟ์สด
คำถามแรก หาไม่เจออ่ะ แต่คำตอบคือ ตอนนี้ LINE MyShop ยังไม่มี API แต่อนาคตมีไหม ก็ยังไม่รู้เหมือนกัน แต่หวังว่าจะมี ในระหว่างนี้เราสามารถ download ไฟล์ .csv เพื่อดู data ของ order ไปก่อน
API Narrowcast สามารถฟีลเตอร์ได้ลึกถึงขนาดความชอบของผู้คนแต่ละกลุ่มได้หรือไม่คะ เช่นกลุ่มคนรักหมา กลุ่มคนรักแมว กลุ่มคนชอบออกกำลังกาย
Narrowcast ไม่สามารถ filter ได้ถึง interest ดูได้แต่ข้อมูลทั่วไปของ user โดยตัว interest นั้น สามารถทำได้โดยดูว่ายิง campeign ต่างๆแล้วเขาสนใจอันไหน และเอาไปทำเองได้
เคสกรณีที่ดึงค่า uid จากกลุ่มแล้วค่าไม่มาครับ แก้ไขอย่างไรบ้างครับ ได้มาแค่ค่าว่างเปล่า ทำจาก dialogflow+googsheet+appscript จะมีวิธีการ debug อย่างไรครับ
เช่น ลากบอทเข้ากลุ่ม ถ้าไม่ได้เป็นเพื่อนกับบอทก็จะได้แค่ userId ดังนั้นอาจจะให้เข้า add เพื่อนกับบอทมาก่อน
API Getting user profiles ทำไม pictureUrl ตอนอัพเดต รูปไลน์ในโปรไฟล์ไลน์ ถึงไม่ใช้ url เดิม จะได้ไม่ต้องยิง api ไปบ่อยๆสามารถเก็บถาวรได้ที่ ฐานข้อมูล โดยที่ไม่ต้อง get pictureUrl บ่อยๆ
เกิดจาก user เปลี่ยนรูป profile ตัวอย่าง use case เช่นของ ThaiPBS จะมีการเก็บ data ของ user ไปตอนแรก พอ user เปลี่ยนรูป link เดิมที่เก็บไว้มันจะเปิดรูปนั้นไม่ได้อีกแล้ว ทางแก้คือ ยิงไป get pictureUrl ไปเก็บไว้วันละครั้งพอ เวลาตีสอง เพราะคนใช้งานน้อย + server ไม่ต้องโหลดเยอะ และอาจจะดูเรื่อง cache ด้วย
เราสามารถกำหนดสิทธิ์ user ในเข้าถึง chat ที่ผูกกับ line myshop ได้มั้ยคะ
หน้า chat เราไม่สามารถ block ในตัว OA ได้ แต่ทำได้เพียงอย่าไปคุยกับเขา ส่วน admin เป็นสิทธิเดียวกับใน OA ปกติเลย
สมมุติว่าผมต้องการบอทที่ตรวจเช็คคนในกลุ่มที่พิมพ์คำหยาบแล้วให้บอทเตะคนที่พิมพ์คนหยาบออกจากกลุ่มได้มั้ยครับ
การตรวจสอบคำหยาบ ทำได้โดยรวบรวมประโยคมาเยอะๆ และใช้คน track ว่าอันนี้หยาบไหม และเอาไป train data การเตะออกจากกลุ่มไม่น่าจะทำได้ อาจจะเปลี่ยนมาเป็นไม่ตอบคนพิมพ์คำหยาบ เตือนเขา หรือกระซิบไปบอกเจ้าของกลุ่มให้เตะเขาออก
สุดท้าย feedback จ้า สแกน QR Code ไปตอบได้ที่นี่จ้า
ขอบคุณกิจกรรมดีๆแบบนี้นะคะ ไลฟ์แบบนี้ก็สะดวกกับทุกคนน้าาาา
ปล. เขียนจบแล้ว เหนื่อยจริงๆ และกดคอร์สเรียนเมื่อวานไปหล่ะ เดี๋ยวเรียนแล้วสรุปให้ฟังเนอะ