การใช้ RSS feed ส่งข้อมูลแจ้งเตือนผ่าน Teams Bot และ LINE Bot (free tier) ด้วย Power Automate
Content difficulty — Technical
ในตอนนี้เราจะมาลองใช้ Power Automate ดูว่าเราจะติดตามข่าวสารจาก web, blog หรือ service ที่เราชื่นชอบได้อย่างไร ซึ่งใช้เทคโนโลยีที่มีมานานแล้วอย่าง RSS Feed มาทำเป็น message ง่ายๆแจ้งเตือนเราผ่าน Microsoft Teams หรือ LINE
Power Automate เป็นระบบ low code workflow automation ตาม event basedที่สามารถต่อ connector ที่หลากหลาย เช่น Outlook, Gmail, Twitter, SQL Server, GitHub, SendGrid และอื่นๆ ใช้ในมุมตั้งแต่ service automation จนถึง document approval
สำหรับขั้นตอนที่ใช้ส่งหา LINE ตัว Power Automate จะใช้ Premium Connector ซึ่งจะมี License เพิ่มเติมอย่าง Plan ชื่อ Power Automate per user ($15/month ซึ่งเอาไปสร้างใน flow อิ่นๆได้) โดย user ขององค์กรก็สามารถ Trial ได้ https://powerautomate.microsoft.com/en-us/#home-signup
ที่มาของ Flow นี้
สืบเนื่องมาจากมีลูกค้าที่ได้ไป Consult ต้องการจะได้รับการแจ้งเตือนเมื่อมี Power BI Gateway (On-premise data gateway) version ใหม่มา ซึ่งถ้าใครที่ใช้ Power BI ระดับองค์กรจะต้องมีการตั้ง Window Server เพื่อลง Software ตัวนี้เพื่อช่วยให้ Power BI Report ที่เรา Publish ขึ้น cloud ไปแล้วสามารถทำ Schedule Refresh กับ SQL Server หรือ Data source อื่นๆ บน On-premise เราได้
ปัญหาคือเราต้องเข้าไปที่ server นั้นแล้วเปิด Software มาดูถึงจะรู้ว่ามี version ใหม่ให้ update ซึ่งทางทีมอยากจะรู้ให้เร็วกว่านี้ เลยต้องใช้วิธีดึง RSS Feed จาก Blog ของ Power BI เพื่อให้รู้ว่ามีข่าวสารอะไรบ้างรวมถึง Power BI Gateway version ใหม่ออกมาแล้วหรือยัง
Cloud service product อื่นของ Microsoft ก็จะมี blog แจ้งการ update features แก่ผู้สนใจเช่นกัน
ซึ่ง RSS Feed ของ Power BI ก็เป็น URL นี้
https://powerbi.microsoft.com/en-us/blog/feed/
โดยปกติแล้วก็สามารถ Add Connector ตรงจาก Channel ของ team นั้นๆ ใน Microsoft Teams ได้เลย หรือถ้าจะส่งไป service อื่นๆก็จะใช้ Power Automate ส่งเป็น flow bot เข้ามา และอาจจะส่งไปที่ Outlook เป็นการแจ้ง mail อีกอันก็ตามแต่
การสร้าง Flow
เข้าไปที่ https://make.powerautomate.com/ แล้วก็สร้าง + New flow ได้เลยแบบ Automated cloud flow
จากนั้นใส่ RSS Feed URL ตามต้องการแล้วก็ให้ Trigger ตาม PublishDate จากนั้น Action ก็ใช้ Post a message as the Flow bot to a user (หรือถ้าใครยิงเข้า Teams Channel ก็เป็น Post a message as the Flow bot to a channel) ในกรณีของ to a user ใส่ email ผู้รับที่ต้องการพร้อมทั้ง Dynamic content ที่เป็น parameter จาก RSS Feed เช่น
Primary feed Link: Link ของ Feed เรื่องนั้นๆ
Feed title: หัวข้อของ feed
Feed summary: รายละเอียดใจความของ feed เรื่องนั้นๆโดยย่อ
โดยใน Action Flow bot ของ ถ้าใส่ Primary feed link เราจะได้รับ link ของ feed นั้นๆแต่เป็น plain text แบบคลิกเป็น Hyperlink ไม่ได้ ทางแก้คือใส่ HTML syntax
[ข้อความของ Hyperlink](URL ของ Hyperlink)
จากนั้นก็รอจนใน web หรือ blog เจ้าของเขา upload content เข้ามาที่ blog หรือ web ของเขาแล้วเราก็จะได้แจ้งเตือน ก็จะมี Flow bot มาบอกเราใน MS Teams
ทดลองการใช้กับ LINE Bot
สำหรับคนที่อยากจะแค่ยิง Message เข้า Line Group ใน Account ของตัวเองให้ข้ามไปดู Part ของ LINE Notify ซึ่ง setup ง่ายกว่า ดูได้ที่ตอนนี้ครับ https://link.medium.com/1Nq0WMG5Vpb
เราจะส่งในรูปแบบ Bot ง่ายๆผ่าน Official LINE Account ซึ่งผมไปสมัครฟรีใน
ซึ่งก็จะผูกกับ LINE Account ID ผมและก็ต้อง Sign up อีก username/password นึงเป็น account ที่เราสามารถเข้าไปที่ Developer console เพื่อสร้างและดึง Message API ได้ ซึ่งใช้เป็นแบบ Free ก็อาจจะมี limitation บางอย่างแต่สำหรับการ Test เบื้องต้นก็ถือว่าโอเค
ถ้าไปหน้า Sign up ให้มาที่ https://account.line.biz/signup แล้วก็ลองสมัครแบบฟรี
หลังจากมี account ที่ Log In เข้าไป Developer console แล้วก็ให้ไปสร้าง Provider ซึ่งทำหน้าที่คล้ายๆ Workspace ของ LINE developer console นั้นๆ เราจะได้เป็น Admin role ซึ่งสามารถ invite คนในทีมมาเป็น member ใน Provider นี้เช่นกัน
ที่ Provider นั้น เราก็ไปสร้าง Channel ที่เป็น Message API เพื่อส่ง Bot
อันนี้สามารถให้ทีมของเรา add ตัวนี้ไปเพื่อรับข่าวสารแบบ Broadcast
ในกรณีการให้ bot ส่ง message ก็มีหลายแบบ เช่น ส่งเป็น Reply message ตอบ user คนนั้นๆ (ตาม user Id) หรือ Broadcast เป็น Push message ไปให้ทุกคนที่ Add เราเป็นต้น ซึ่งรูปแบบการส่งข้อความของ LINE มีทั้งการส่งเป็น text ธรรมดา, flex (message ที่สามารถปรับแต่ง style สีได้), stickers, emoji, audio, video, location, image หรือ เป็น template ปุ่มให้ user กด เป็นต้น
ดูรายละเอียดได้ที่ https://developers.line.biz/en/docs/messaging-api/message-types/
ก่อนอื่นเราต้องหา Channel Message Token ซึ่งเป็น Bearer Token ของ Bot เราก่อนเพื่อให้เรายิง Message ใน Power Automate (หรือ Postman, cURL ได้) ซึ่งของ LINE มีทั้งแบบ token ชั่วคราว 30 วัน (short-live) เมื่อหมดต้องยิง API ไปขอใหม่, แบบตั้งวันหมดอายุได้ และแบบไม่หมดอายุ (long-lived) เพื่อความง่ายในการทดสอบจะขอใช้แบบ long-lived เพราะได้มาง่ายสุดสามารถเข้าไป generate ได้ที่ Message API channel เลยหน้าเดียวกับที่เราไปเอา QR Code และจะอยู่ด้านล่างสุด
คราวนี้จะใช้ลอง RSS Feed ของ Medium บ้างซึ่ง user account ทุกคนจะมี RSS feed ตัวเองรวมไปถึง Publication ด้วยซึ่งระบบสร้างมาให้อยู่แล้ว
RSS Feed ของ user (เช่น ของ user ชื่อ narismadz)
https://medium.com/feed/@narismadz
RSS Feed ของ user (เช่น ของ Publication ชื่อ EchoO365)
https://medium.com/feed/echoo365
เราก็สามารถสร้าง RSS Feed Trigger มาได้โดยใส่ URL ไป และขอ action สร้างตัวแปร หรือที่เรียกว่า Initialize variable เพื่อเก็บ long-lived access token ที่ได้จาก Message API channel มา
จากนั้นสร้าง Action ชื่อ HTTP ขึ้นมาเพื่อยิง Message API ไปหา LINE Bot
HTTP เป็น Premium connector ซึ่งต้องมี paid license
ลองใส่ค่าดังนี้
Method: เป็นชนิด POST
URL: เนื่องจากเราจะ Broadcast ให้ user ที่ Add เราทุกคนของ LINE Message API ที่ใช้อยู่ V2 จะเป็น https://api.line.me/v2/bot/message/broadcast
Header 1: เป็น Content-Type และ application/json
Header 2: เป็น Authorization และ Bearer เว้นวรรคตามด้วย Token ที่เราใส่ใน Initialize variable (ในตัวอย่างนี้คือ ChannelAccessToken)
ส่วนของ Body ในตัวอย่างนี้ ผมจะส่ง chat ไป 3 ข้อ (ประเภท text) ความพร้อมกันคือ
- Feed title: ใช้ Dynamic content ของ RSS ชื่อ Feed title
- Publish On: เนื่องจาก Dynamic content ของ RSS ที่ชื่อ Feed publish on จะเป็น TimeStamp แบบ UTC จึงใช้ Expression เป็น format และ Timezone เป็น UTC+7 ซะโดยบ้านเราจะเป็น SE Asia Standard Time ซึ่งจะได้เป็น Expression ตามนี้ convertTimeZone(triggerOutputs()?[‘body/publishDate’],’UTC’,’SE Asia Standard Time’,’dd/MM/yyyy HH:mm’)
ตัว single quote ต้องเปนฟันหนูตรงนะครับ - Feed link: ใช้ Dynamic content ของ RSS ชื่อ Primary feed link
รายอะเอียดของ Body ในที่เป็นประเภท Text ใน Message APIอ้างอิงได้ที่ https://developers.line.biz/en/reference/messaging-api/#text-message
จากนั้นผมลอง Publish ตัว blog เรื่องใหม่ใน Medium ดูและก็รอซักครู่ (ขึ้นอยู่กับ Update interval ของ RSS feed เจ้านั้นๆ ของผมรอประมาณ 15 นาที) ก็จะเห็น Flow ทำงานส่งไปที่ LINE ได้สำเร็จ
ซึ่งพอเป็นระบบ workflow เราก็สามารถทำ action ต่อจาก HTTP ได้อีกเพื่อเชื่อมต่อไปยัง Service ต่างๆก็แล้วแต่เราออกแบบเลยครับทั้ง sequential หรือ parallel