สร้าง Flex Message แบบต่างๆ ใน LINE Bot ด้วย Spring Boot

Phayao Boonon
4 min readAug 25, 2018

--

Photo by Katie Smith on Unsplash

สวัสดี!!!!!! หลังจากที่สร้าง LINE Bot ง่ายๆ ด้วย Spring Boot และ สร้าง Rich Menu แบบว่าไม่ได้ออกแบบอะไรไปแล้ว ต่อไปทำอะไรดีล่ะ ผมก็เลยคิดว่า Flex Message นี่น่าสนใจดีเพราะว่าเราสามารถปรับอะไรได้เยอะมาก เลยลองคิดว่าเราจะ implement Flex Message แต่ล่ะแบบใน Spring Boot อย่างไร เลยลองทำกันเลยดีกว่า

Flex Message คืออะไร

มันก็คือข้อความที่ Bot ตอบกลับให้กับ user ที่เราสามารถปรับแต่ง layout ได้ ว่าจะให้มีหน้าตาแบบไหนแล้วแต่สถานการณ์ โดยที่สามารถรวมหลายๆ element ให้อยู่ใน message เดียวกัน

คุณสมบัติ

  • เราสามารถสร้างโครงสร้าง message ที่ซับซ้อนได้ โดยรวมโครงสร้างแนวตั้งและแนวนอนด้วยระบบ box-layout
  • เราสามารถแสดง message ในแบบ carousel (ข้อความแบบหมุน) โดยที่ user สามารถเลื่อนดูหลายๆ message ได้
  • เราสามารถตั้งทิศทางของข้อความเลื่อนได้ จากซ้ายไปขวา หรือ จากขวามาซ้าย
  • และก่อนที่เราจะ develop สมารถทดลอง Flex message ได้ด้วย simulator

JSON Schema

เหมือนกับหลาย message ของ LINE bot ก็จะใช้ JSON format เป็นตัวแสดงข้อความ ดังนั้นเราสามารถใช้สร้าง JSON เพื่อแสดงข้อความที่เราต้องการได้ ดังนี้

{  
"type": "flex",
"altText": "this is a flex message",
"contents": {
"type": "bubble",
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "text",
"text": "hello"
},
{
"type": "text",
"text": "world"
}
]
}
}
}

องค์ประกอบ

Flex message ประกอบไปด้วยโครงสร้างข้อมูล 3 แบบ คือ Container, Block และ Component ดังรูปนี้ จะเห็นได้ว่า container จะเป็นส่วนนอกสุดของ message และข้างในจะมี block ในแบบต่างๆ เช่น Header, Hero, Body และ Footer และส่วนในสุดจะประกอบไปด้วย component หลายๆ แบบ เช่น Text, Image, Icon และ Button

Container

เป็นส่วนนอกสุดของ message มี 2 แบบด้วยกัน คือ

  • Bubble — เป็นการแสดง message เดียว
  • Carousel — เป็นการแสดงหลายๆ message และสามารถเลื่อนได้

Block

เป็นส่วนข้างใน Container โดยมีองค์ประกอบต่างๆ ดังนี้

  • Header — เป็น block ที่แสดงสวนหัวของ message
  • Hero — เป็น block ที่แสดง image หลัก
  • Body — เป็น block ที่แสดง ข้อความหลัก
  • Footer — เป็น block ที่แสดงส่วนด้านล่างของ message

Component

เป็นส่วนข้างในของแต่ล่ะ block มี 8 แบบ คือ

  • Button — เป็น component ที่แสดงปุ่มบน message
  • Icon — เป็น component ที่แสดงไอคอนบน message
  • Image — เป็น component ที่แสดงรูปภาพบน message
  • Text — เป็น component ที่แสดงข้อความบน message
  • Box — เป็น component ที่ระบุโครงสร้างของ component ลูก
  • Filler — เป็น component ที่มองไม่เห็นที่มีความกว้างและความสูงเท่านั้น
  • Separator —เป็น component ที่สร้างตัว separator
  • Spacer — เป็น component ที่มองไม่เห็นที่สร้างส่วนว่างๆ

ในบทความนี้จะมาสร้าง Flex message ในแต่ละแบบตามที่ LINE Message API PLAYGROUND ทั้งหมด 6 แบบ คือ Restaurant, Menu, Receipt, News, Tickets, Catalogue ด้วย Spring Boot (Java)

​โดยใช้ต้นแบบของ project sample-spring-boot-kitchensink ส่วนของ Flex messageใน SDK กับ ตัวอย่าง JSON ของ Flex Message Simulator

Restaurant Flex Message

Flex message แบบนี้จะเหมือนกับตัวอย่างที่มีใน LINE-BOT-SDK เลย สร้าง class ขึ้นมาชื่อว่า RestaurantFlexMessageSupplier ที่ implements interface Supplier ซึ่งจะสร้าง Flex message ด้วย implement method get ที่สร้าง Bubble container ประกอบด้วย Hero block, Body block และ Footer block ใช้ method createHero Block, createBodyBlock และ createFooterBlock ตามลำดับ ซึ่งจะไม่ใช้ Header และจะ return เป็น FlexMessage ของ bubbleContainer ดังนี้

จะเห็นได้ว่าแต่ละ Flex component จะใช้ builder pattern และ decorator pattern เพื่อสร้าง JSON element

เมื่อรันแล้วส่ง Flex message กลับมาจะได้ดังนี้

Menu Flex Message

Flex message แบบนี้จะคล้ายกับแบบที่แล้วที่จะสร้าง Flex message ที่ประกอบด้วย Hero, Body และ Footer แต่จะแตกต่างใน layout ของ Body ที่มีรายการของอาหาร และ Footer สร้างด้วย createMenuBox และ createRecipeBox ตามลำดับ ที่จะมีเพียงปุ่มเดียวโค้ดดังนี้

เมื่อรันแล้วส่ง Flex message กลับมาจะได้ดังนี้

Receipt Flex Message

Flex message แบบนี้จะใช้เพียง ​ฺBody block เท่านั้น และใช้ Text component ในการแสดงรายละเอียดของใบเสร็จ และใช้ Separator component แสดงเส้นคั่น โดยที่ไม่ใช้ block แบบอื่นเลย ดังนี้

เมื่อรันแล้วส่ง Flex message กลับมาจะได้ดังนี้

News Flex Message

Flex message แบบนี้จะคล้ายกับ 2 อันที่แล้วแต่ว่าจะมี ส่วนของ Header block เพื่อแสดงหัวข้อของข้อความ ด้วย ​method createHeaderBlock ซึ่งเป็นแบบที่ใช้งาน block ของ LINE Message API ได้ครบ ดังนี้

เมื่อรันแล้วส่ง Flex message กลับมาจะได้ดังนี้

Ticket Flex Message

Flex message แบบนี้จะคล้ายกับแบบ Restaurant ซึ่งรายละเอียดต่างๆ ของข้อความอยู่ใน Body block แต่จะไม่ใช้ Footer block ดังนั้นแบบนี้จึงใช้ Hero block และ Body block ดังนี้

เมื่อรันแล้วส่ง Flex message กลับมาจะได้ดังนี้

Catalogue Flex Message

แบบสุดท้ายที่ไม่เหมือนกับแบบก่อน นั้นคือแบบนี้จะเป็นแบบ Carousel container ที่ข้างในมีหลายๆ Bubble container ซึ่งสามารถเลื่อนได้จากซ้ายไปขวาเพื่อแสดงในหน้าจอของ LINE messager

ข้างใน Carousel container ก็คือ Bubble container เหมือน Flex messager แบบอื่น

เมื่อรันแล้วส่ง Flex message กลับมาจะได้ดังนี้

หลังจากที่เราได้สร้าง Flex Message แต่ละแบบเรียบร้อยแล้วก็ลองให้สร้าง message ตามข้อความที่ส่งมาให้ Bot ดังนี้

GitHub Repo ของ Project นี้ในนี้น่ะครับ

สรุป

จากที่เราได้สร้าง Flex message ในแต่ล่ะแบบตามตัวอย่างของ LINE Messaging API document ด้วย Spring Boot จะเห็นได้ว่าสุดท้ายแล้ว เราก็จะสร้าง JSON เพื่อแสดงใน LINE Messager โดยสร้าง Bubble container ที่มี block ของ Header, Hero, Body หรือ Footer ประกอบกับ Flex component ต่างๆ ทำให้ได้ message ที่มีลักษณะต่างๆ กัน เหมือนเราสร้างเว็บ ซึ่งก็ง่ายไม่ยาก

รูปภาพต่างๆ เป็นลิขสิทธิ์ของ Flex Message Simulator

--

--

Phayao Boonon
Phayao Boonon

Written by Phayao Boonon

Software Engineer 👨🏻‍💻 Stay Hungry Stay Foolish

Responses (3)