LINE Chatbot 開發手札
LINE, Chatbot, LINE Message API, webhook, Azure Bot Service, LUIS
//# 送出Flex Message
// String jsonMsg = @"[{
//""type"": ""flex"",
//""altText"": ""This is a Flex Message"",
//""contents"": {
// ""type"": ""bubble"",
// ""hero"": {
// ""type"": ""image"",
// ""url"": ""https://scdn.line-apps.com/n/channel_devcenter/img/fx/01_1_cafe.png"",
// ""size"": ""full"",
// ""aspectRatio"": ""2:1""
// },
// ""body"": {
// ""type"": ""box"",
// ""layout"": ""horizontal"",
// ""contents"": [
// {
// ""type"": ""text"",
// ""text"": ""Hello, World!"",
// ""wrap"": true
// }
// ]
// }
//}
//}]";
引言
用來進行LINE Chatbot 開發指引,預計實作相關技術有: LINE Message API
+ Azure Bot Service
+ Azure LUIS
+ Azure SQL
。
名詞解釋
因為大多Chatbot相關名詞,整理一下以減少混亂。
Chatbot, 為[應用面名詞],聊天室機器人。
webhook, 為[應用面名詞],讓一個網站能訂閱另一個網站的方法。
LINE Message API
, 為[LINE技術名詞]。實作LINE Chatbot的(聊天問答)主模組,可以用介面設定簡單的回應,進階的問答要另外實作webwook。Azuer Bot Servie
, 為[Azuer技術名詞],為webhook的實作之一。 可用來實作很多社交應用的Chatbot,包含LINE
,Facebook
,Skype
,Slack
等等其它。Azure LUIS
, 為[Azuer技術名詞],Language Understanding Intelligent Service,語意理解認知服務, 用簡易的關鍵字(Entities)、使用者意圖(Intents)設定,經由機器學習訓練出精確度更高的語意判斷。 相同的產品有Google Dialogflow
,Microsoft LUIS
,IBM Watson Assistant
。
第一個LINE bot (留參)
了解LINE bot(webhook)的組織為開發程序。
下面兩篇文章說明如何建立 Echo Bot,請依文章實作。(應該還會參考其它文章輔助不足,請自行拜訪google大神)
成果展示
若設定成功,在Azure Bot 服務可以看到設定好的 Chatbot。

若設定成功,一套Azure的 Web App Bot
會產生三項資源。

Azuer 的 Web App Bot 對 LINE bot 的支授很有限,只能滿足基本能力,評估後改用LINE bot專用SDK: LineBotSDK
。
第一個LINE bot - 重置
如下視頻:用LineBotSDK
開發 webhook
。
影片有點舊還是有參考價值。很懶啊,先留下關鍵字:
LINE Message API
, Webhook
, LIFF
, Azure LUIS
, Azure App Service
, ngrok
。
第二個LINE bot
加入Azuer SQL。 記錄LINE可以抓到的全部行為。
加入Azuer SQL。
已加入Azure SQL,基本上用去與 SQL Server 差異不大。
記錄LINE可以抓到的全部行為
LINE webhook 可以抓到的訊息只有使用者發出的聊天訊息。 其他非聊天的路徑,比如 PUSH_MESSAGE、REPLY_MESSAGE 是抓不到的,要自己想辦法紀。
第三個LINE bot
改用 LineBotSDK開發 webhook。原先使用的Azure Bot Service 只做出『通用型』的聊天機器人做不出專業型的機器人故不再使用。
LineBotSDK 是專為 LINE 設計的,可惜是野人版已落後一年半未更新。還是可以用用看。LINE 官方出的 Message API (webhook) SDK 沒有 C# 版本,很囧。
試 著由Chatbot回應訊息。應該可以搭配LINE Message API的圖文訊息設定等等。
已成功試送出圖文訊息。以下程式碼留參用:
// JSON Message 請參考:https://github.com/isdaviddong/HOL-LineBotSDK/blob/master/basic/Lab%2004:%20%E5%A6%82%E4%BD%95%E7%99%BC%E9%80%81Flex%20Message.md
//# 送出Flex Message
String jsonMsg = @"[{
""type"": ""flex"",
""altText"": ""This is a Flex Message"",
""contents"": {
""type"": ""bubble"",
""hero"": {
""type"": ""image"",
""url"": ""https://foo.web.server/image001.png"",
""size"": ""full"",
""aspectRatio"": ""2:1""
},
""body"": {
""type"": ""box"",
""layout"": ""horizontal"",
""contents"": [
{
""type"": ""text"",
""text"": ""Hello, World!"",
""wrap"": true
}
]
}
}
}]";
[HttpPost("[Action]")]
public IActionResult PushTextMessage(PushTextMessageArgs args)
{
try
{
// 送出文字訊息
isRock.LineBot.Utility.PushMessage(ADMIN_USERID, args.textMessage, CHANNEL_ACCESS_TOKEN);
//response OK
return Ok();
}
catch (Exception ex)
{
//回覆訊息
isRock.LineBot.Utility.PushMessage(ADMIN_USERID, "發生錯誤:\n" + ex.Message, CHANNEL_ACCESS_TOKEN);
//response OK
return Ok();
}
}
[HttpPost("[Action]")]
public ErrMsg PushTextMessage(PushTextMessageArgs args)
{
try
{
/// 送出圖文訊息
/// JSON Message 請參考:https://github.com/isdaviddong/HOL-LineBotSDK/blob/master/basic/Lab%2004:%20%E5%A6%82%E4%BD%95%E7%99%BC%E9%80%81Flex%20Message.md
var flexMsg = new object[] {
new {
type = "flex",
altText = "This is a 圖文訊息。",
contents = new {
type = "bubble",
hero = new {
type = "image",
url = "https://foo.web.server/image001.png",
size = "full",
aspectRatio = "2:1"
},
body = new {
type = "box",
layout = "horizontal",
contents = new [] {
new {
type = "text",
text = "哈囉, World!",
wrap = true
}
}
}
}
}
};
string jsonMsg = JsonConvert.SerializeObject(flexMsg);
isRock.LineBot.Utility.PushMessagesWithJSON(ADMIN_USERID, jsonMsg, CHANNEL_ACCESS_TOKEN);
return ErrMsg.Success;
}
catch (Exception ex)
{
//回覆訊息
isRock.LineBot.Utility.PushMessage(ADMIN_USERID, "發生錯誤:\n" + ex.Message, CHANNEL_ACCESS_TOKEN);
//response OK
return new ErrMsg(ex.Message, ErrTypeEnum.Exception, ex);
}
}
第四個LINE bot
再加入LUIS強化語意判斷。
尚未打算做進階的聊天機器人,先放著。
進一步參考
(先這樣)
Last updated