前言

大家好,我是 LINE Taiwan 的 Technology Evangelist – Evan Lin。  LINE Emoji 是指在 LINE App 中可以使用的 LINE 表情集,其中有分為通用的(免費)與付費的表情集。 使用 LINE Emoji 在訊息當中可以讓使用者閱讀的時候更有感覺。 但是身為開發者該如何正確地發送與接受處理這些 LINE Emoji 呢?

這一篇文章將透過 Golang 的範例程式碼,指引該如何正確地發送與接受 LINE 表情集 (LINE Emoji) 。

投影片

範例程式碼

實際跑一個範例 (demo)

  • 加入這個官方帳號:
img
  • 隨便傳送一個表情符號,會看到聊天機器人用三種方式回覆你。 分別是:
    • 舊的 Emoji 傳遞方式來發送
    • 新的 Emoji 傳遞方式來發送
    • 加上使用者的 Emoji 並且透過新的 Emoji 來發送

新的 API 說明:

Use LINE emoji in messages (2020/April)

現在開始要在文字訊息裡面發送 LINE emoji 不需要自行做 unicode 轉換。可以直接在 API 中加上相關的 LINE emoji 編號就可以達成了,開發上變得更方便,也更有彈性。

可以參考新的 API : Text message 或是參考新的公告:[Updated] Messaging API update for April 2020

Getting LINE emoji information from the text object of a webhook event (2020/May)

emojis

可以參考新的 API : Text message webhook 或是參考新的公告:Messaging API update for May 2020。

使用 Golang 開發一個 LINE Emoji Echo Bot:

接下來的會使用 Golang ,根據 https://github.com/line/line-bot-sdk-go 提供的功能來開發 Echo Bot 。也就是一個會依照使用者講的文字來回覆的聊天機器人。 但是不同於一般 Echo Chatbot ,這個 Echo Bot 將會回傳使用者傳過來的 LINE Emoji ,所以需要具有以下幾個功能:

emojis(xxx)$emojiindexemoji可發送的表情清單(sendable LINE Emoji list)

接下來將透過原始碼的說明來解釋相關的流程:

emojis
msg.Emojis

根據以上收到的資料可以發現以下資訊:

textHello, world! (love)(love)emojisindexlengthindexlength()

根據以上的資訊,如果你需要將表情符號去掉來做 Language Understanding (語意分析)的話。需要透過以下步驟:

Hello, world! (love)Emojis(love)Hello, world!

透過新的 LINE Emoji API 來發送表情符號:

根據以上的範例程式碼,可以知道要發送的資料格式如下:

text"$%s 你好  , 這是新的傳送 Emoji 的方式。"$%sAddEmojiProductIDEmojiIDProdctID=5ac1bfd5040ab15980c9b435EmojiID=086
(love)(heart)

完整回傳使用者傳來的 LINE Emoji 訊息

那麼要如何完整的回傳呢? 需要透過以下三個大步驟:

(brown)$Emojisindex index

接下來,會稍微分享一下相關的轉換方式:

$Hello, world! (love)Hello, world! $string(msgArray[:index]), "$", string(msgArray[index+v.Length:]

撰寫相關文字轉換的測試案例:

hi_(brown)_yo (love) (love)

本段測試程式碼,僅僅對於整段文字裡面出現一個或是沒有的測試案例。 透過撰寫足夠完善的測試案例,可以讓整個 chatbot 的穩定度更好,也不需要透過部署就能夠把一些預先可見的錯誤找出來。

檢查是否是“可傳送的表情服務”:

由於某一些表情包是需要付費的,只有免費且是 LINE 官方提供使用的可以透過聊天機器人來傳送。 詳情請看: LINE Sendable LINE Emoji List 。

如果傳送非免費的 LINE Emoji 資料給伺服器,則會收到錯誤訊息。所以這段是透過整理出來的資料來做檢查。

完整的轉換與檢查流程:

快速講解一下,相關應用程式碼:

workMsg := ReplaceEmoji(msg.Text, msg.Emojis)$lastLength = lastLength + v.Length$$index

總結與展望未來 (Summary and Future Work):

透過 LINE Emoji 的 API ,讓開發者在傳送表情符號的處理上變得更加的直覺與簡單。也讓聊天機器人跟使用者之之間的互動變得更沒有距離。 不過如果需要將使用者傳過來的文字(加上表情符號)回傳回去的話,就需要有許多額外的處理。

之後可能針對這些部分可以有以下的相關處理:

  • 自然語言前處理: 如果想要針對使用者回覆的文字來做語意分析(Language Understanding) 那麼勢必要定義對於 LINE Emoji 的處理方式。開發者可以選擇全部忽略,或是將其放入分析器中。
  • 針對表情符號來互動: 使用者會使用表情符號,都會是有相對意義的。某些狀況下,可以透過表情符號(emoji) 來判斷使用者的情緒。 這也是一門相當大的學問才是。

參考 (Reference):