2016年10月4日 星期二

關於Linebot(2) - 新版Line@ Messaging API使用心得 (Line Bot v2)

注意,本篇部分內容已過時,新版Line bot申請流程,請參考這篇

不廢話,直接切入主題,如果你想看前情提要,請看這裡這裡
如果你對開發Line Bot有興趣,你得先知道原本的Line bot API改版了,最近很奇怪,微軟的bot framework也拼命改版,大家都很隨便敏捷…

新版叫做Messaging API,原則上和舊版的Line bot在概念上很像,但它和Line@整合在一起了。這改版有何影響? 首先,你如果原本有寫好的Line Bot可以暫時不要動它,因為新版v2的Messaging API和舊版並不相容。

其次,新版的bot之所以稱為Line@ Messaging API,是因為,它是透過申請一個Line@帳號開始的,和以前申請一個Line bot帳號不同,這次Line bot的功能被Line@併了。你可以從底下網址直接申請一個"具有Messaging API功能的Line@帳號":
https://business.line.me/zh-hant/services/bot

留意該頁面最下方:

這是三個不同的按鈕。

  1. 開始使用Messaging API
  2. 開始使用Developer Trial
  3. 若要透過現有Line@帳號開始使用Messaging API….

如果你選擇1,2,其實是先建立一個Line@帳號,然後頁面會引導你把該Line@帳號轉成支援Messaging API,如果你選擇3,則是把以前舊的Line@帳號改為支援Messaging API。

但請注意,當你的Line@改為支援Messaging API之後,你就不能用你的Line@ App直接回覆用戶的訊息了(而且這動作不可逆,也就是轉過去轉不回來),用戶的訊息也只會被轉傳到你的Line@ WebHook URL,讓你透過bot程式碼來回覆訊息。
(我覺得這設計…我直說了…糟透了,既然要廢掉Lint bot改用Line@,還不能用Line@ app回訊息,只能在Line@ app和Messaging API中間二選一,那又何必把原本的line bot廢了跟Line@整合在一起呢? 不理解…)

如果你原本的Line@帳號有在用,建議你申請新的Line@去玩這個Messaging API,別用舊的帳號。

接著,你要選擇上面的1還是2呢?請參考底下:

讓我來翻譯一下。

如果你只想要回覆用戶的訊息,那申請哪一個方案都行,但如果你想要主動發訊息給用戶,那只能是developer trial和進階版(月費1888)以上的方案。

developer trial不用錢,但上限50個用戶,你不能把deveeloper trial方案轉換為其他方案。

因此,如果你想要有一個主動傳送訊息的功能,用在production,那你必須付月費1888。好消息是,他說2017年三月前免費。而且付錢很容易,用Line Pay就可以。

你申請好了之後,可以從底下網址到管理後台:
https://admin-official.line.me/ 

當你選擇了某一個Line@帳號,會看到類似底下的管理畫面,下圖(1)的部分,是你正式啟用了支援Messaging API的Line@之後,會出現的選項,如果沒出現這個選項,表示你的Line@帳號尚未支援Messaging API,這時候,你可以去 https://business.line.me/accounts 這個網址把該Line@帳號轉為支援Messaging API
(再次提醒,這個轉換無法回頭,且一旦轉為支援API,則無法用Line@ App回覆用戶訊息,請謹慎為之)

另外,下圖(2)的部分就是你的Line@支援哪一種Message方式,Push就是主動傳訊息給用戶, Reply就是回覆用戶的訊息。如果你只看到Reply,表示你的Line@目前是免費版本,要嘛你升級到進階版($1888),要嘛你申請一個Developer trial帳號(有50個好友限制)

接著你可做些設定,當你允許WebHook傳訊,就表示你可以設定一個WebAPI來接收用戶傳遞給該Line@(就是bot)的訊息。該WebHook在哪設定?

點選Line Developers之後,出現底下畫面:

你可以在上圖(1)的部分設定WebHook URL,在(2)的部分可以取得call API的時候需要的Access Token,而API的document在:
https://devdocs.line.me/en/

後面有機會再介紹怎麼透過程式碼呼叫新版API。

happy coding,各位保重。

相關課程: http://www.studyhost.tw/NewCourses

24 則留言:

好奇 提到...

這個可以先免費要錢在轉方案嗎哈哈哈

好奇 提到...

然後詢問一下這個名字圖片決定申請後能否更改,感恩

Unknown 提到...

這個可以先免費要錢在轉方案嗎哈哈哈 <--- NO
然後詢問一下這個名字圖片決定申請後能否更改,感恩 <--- yes

Eric 提到...

請問董大大:
我建一個空的web api 專案,然後從nuget抓最新的 LineBotSDK 0.2.9 , 放到專案裡.

直接用source code 掛到iis下run 沒有問題,

在visual studio 裡使用"發行"的功能到本地或到Azure ,就會出現下面的錯誤.

-------------------------------------------------
'/LineBotTest' 應用程式中發生伺服器錯誤。

剖析器錯誤

描述: 當剖析服務此要求所需的資源時發生錯誤。請檢閱下列的特定剖析錯誤詳細資訊,並且適當地修改您的原始程式檔。

剖析器錯誤訊息: 無法載入型別 'LineBot.Global'。

原始程式錯誤:

行 1: <%@ Application Codebehind="Global.asax.cs" Inherits="LineBot.Global" Language="C#" %>
---------------------------------
把在沒有修改程式的情況下,把LineBotSDK 移除就又好了

請董大大指點迷津..

謝謝

Wu David 提到...

請問一下 我要取得聯絡人資訊 有個參數是

這個ID 要去哪邊才可以查的到阿 找了 developer 的頁面一直都查不到....

Unknown 提到...

Eric,

請留意Runtime的.net版本,只能聯想到跟這個有關。
lineBotSdk用的是.net 4.5

Wu David,
抓特定的用戶資訊可以用GetUserInfo這個Method,其中的uid就是UserID,你可以從用戶加你的機器人成為好友,或是用戶發訊息給你的時候,透過ReceievedMessage物件取得。

匿名 提到...

JSON格式如下
{"to":"要傳送的line ID","messages":[{"type":"text","text":"Hello,world1"}] }

David358 提到...

最近拜讀這篇大作,內容很新穎,等待續集中!

匿名 提到...

請問一下

我傳送出去時 API 一直回復

{
"message": "The property, 'to', in the request body is invalid (line: -, column: -)"
}

不知道是什麼問題

拜託大大了

JerryLiu 提到...

hi 樓上應該是to的內容--ID打錯 , ID不是你的line id
可參考老師的這篇~
http://studyhost.blogspot.tw/2016/11/lintbot-3-linebotsdkline.html

Mark Li 提到...
作者已經移除這則留言。
claud Lin 提到...
作者已經移除這則留言。
claud Lin 提到...

請問to只能user id?如果要推給所有人呢?

isDavid 提到...

API裡面沒有push給『所有人』的功能,你可以要寫一個loop自己做...

李巧虎 提到...

請問一下前輩,我在Web上按測試將訊息傳送到我Server是OK的 但是我收不到用戶傳來的訊息 這是怎麼一回事= =

困擾我很久了 請前輩幫我解答 感恩~~

isDavid 提到...

@李巧虎,

接收用戶的訊息必須要透過WebHook, 請參考這系列關於Line WebHook的那篇...
http://studyhost.blogspot.tw/2016/12/linebot4-aspnetlinewebhook.html

李巧虎 提到...

@David

我後來發現是憑證問題 以解決 謝謝!!

Steve Tsai 提到...

請教一下 1)如果知道user的line id(加入帳號的那個) 可以如何查詢他的mid? 2)我使用rest api 去call https://api.line.me/v1/friends 要列出目前加入好友的list ,可是一直出現{"error":"427","error_desciption":"Channel has not proper permissions. channelId : 1505291358, required permissions : [ FRIEND ]"} ,而這個"required permissions : [ FRIEND ]"" 在api說明文件裡沒有出現這個錯誤如何解決? 有辦法去抓目前好友的所有mid嗎?tks

兩津 提到...

讀了老師的文章,自己寫了一支只Reply message,只做純文字回音,Webhook URL驗證卻發生錯誤「Read timeout」(有https也有CA憑證)
,程式碼Post不曉的哪裡錯了。附上不才的程式碼
不才的程式碼

卓秉弘 提到...

我也有這問題,請問有有解了嗎?謝謝

isDavid 提到...

Webhook URL驗證發生錯誤「Read timeout」是因為你在WebHook裡面沒有回OK...
可以參考底下影片,會發現驗證的時候Success:
https://channel9.msdn.com/Shows/NET-Walker-5/Azure-Web-AppLineBot-Webhook

source code:
https://github.com/isdaviddong/20170317LineBotExample/blob/master/WebApplication1/Controllers/LineChatController.cs

注意29和33行...

陳家正 提到...

請問您
https://www.slideshare.net/linecorp/a-2-new-world-by-the-line-bot
第43張投影片 在選單按下可以彈出圖示 使用者按下可寫訊息 該如何實作與設定

SOLEWA 提到...
作者已經移除這則留言。
SOLEWA 提到...

我很想試 Beacon event 的功能,
但一直不了解是
可以自行買beacon就都可以接受得到其訊號及hwid的值嗎?
beacon有那麼多的產品,
是說只要號稱符ibeacon的規格就可以被LINE讀到beacon event所要的相關資訊?
還是所有beacon都可被LINE讀到beacon event所要的資訊?
或是要看怎樣的規格才是beacon event可以讀得到?