使用C#開發LineBot(6) - 不用申請Bot也能發訊息的Line Notify
前面我們討論到了很多跟Line Bot有關的機制,但有朋友提了一個問題,如果我單單只是要透過程式碼發訊息給用戶,一定要申請並建立一個Line Bot嗎? 其實不用。
一直以來,有一個比較不被重視的機制,叫做LINE Notify,其實它已經誕生很久,IFTTT的Line通訊整合,就是用LLINE Notify做的。
LINE在TectPulse中,對LINE Notify的定義是…
簡單的說就是,如果開發人員(或店家、或企業)只是想要發通知給用戶,或和用戶進行基本的互動,那倒也不一定需要自己申請一個Line Bot(因為未來用戶可能得要加入很多Line Bot,收到很多不同單位傳來的訊息,這樣用戶會很煩,最後把你的Bot封鎖,或是根本忘了它,而且,商家(開發人員)申請Line Bot來發Push訊息,如果量多的話,要付很貴的$$$),但若你用現成的LINE Notify,其實也可達成此功能(而且FREE,對,免費!!!)。
LINE Notify就是底下這個…
其實,它就跟一個Bot一樣,你根本可以把它想成一個商家共用的Bot(而非自己獨立建置的Bot)。它一樣可以發訊息給你的用戶,你只要能夠Access這個Line Notify Bot,就可以透過它來發送訊息。
怎麼做呢? 首先,你還是要申請一個Line Notify的服務,基本上就是取得Client_id與client_secret。申請網址在底下:
https://notify-bot.line.me/zh_TW/
Line把這個申請藏得很好,請拉到最下面,找到…『登錄服務』:
你看,這藏得多麼隱密啊。
點選後用你的Line帳號登入,會出現底下的表格:
請妥善填寫,然後按下『同意並往下一步』。填寫的重點只有兩個:
喔喔,等等,剛才上面出現了一個部分開發人員可能不很熟悉的『OAuth2』身分驗證機制。如果你對OAuth2不熟,讀到這邊可以就此放棄….好啦,也可以硬著頭皮看下去…
請特別留意該網頁中第19行的Button,按下去之後是一個URL轉址的動作,整個目的是用來取得一個authorize Code,你要用待會取得的這個Code再去換Token。(參考官方文件 https://notify-bot.line.me/doc/en/)
請特別注意上述程式碼的第9, 10行,其中第9行要換成你剛申請到的Client_id,第10行則是要填寫你寫在CallbackURL裡面相同的URL,因為我們要在用戶端測試,所以我填寫localhost網址,要這樣測試,這邊你必須能夠在用戶端Run一個模擬的Web伺服器(由於我很幸福的使用著Visual Studio,因此這是一塊蛋糕)。
當用戶點選上面這個按鈕,會被導引到類似底下這樣的畫面(在進到底下這個畫面前,用戶會被要求用他的Line帳號密碼登入,當然登入畫面是Line提供的,因此你不可能知道用戶的帳密,這就是OAuth2的用途,登入後就會看到底下畫面):
請留意上面標示的數字:
同時間你的網頁會被導回Callback URL,你可以從QueryString取得Code,像是底下這樣:
這個Code很重要,我們要用這個Code來換Token。
後面的動作我用Postman來示範,當你取得這個Code之後你可以透過以POST呼叫底下的URL來取得Token:
請注意要傳遞的參數包含固定的grant_type,你剛才取得的Code(上圖1),你的redirect_url,你一開始申請時取得的Client_id(上圖2)與Clind_secret(上圖3),然後就會取得用戶的token(上圖4)。
取得Token之後就好辦了,這時候你可以透過對https://notify-api.line.me/api/notify的POST,來向用戶傳遞訊息,訊息內容放在POST body中:
ㄟ,別忘了,你要在Headers傳遞剛才取得的Token:
OK,用戶收到訊息囉,格式是【LineNotify服務名稱】訊息內容,像是下圖最後一則訊息:
that's it.
坦白說,用Line Notify可能比LINE Bot還難一點,但如果你要大量的發送訊息,卻不想要申請一個自己的Bot(不想付貴桑桑的Line Bot費用),Line Notify卻是一個比較經濟的選擇。
demo source code : https://github.com/isdaviddong/Line_Notify_Example
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
相關課程:http://www.studyhost.tw/NewCourses/LineBot
線上課程:https://www.udemy.com/line-bot/
更多內容,請參考電子書:https://www.pubu.com.tw/ebook/103305
LINE Bot實體書籍:https://www.tenlong.com.tw/products/9789865020354
--------------------------------------------
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。
一直以來,有一個比較不被重視的機制,叫做LINE Notify,其實它已經誕生很久,IFTTT的Line通訊整合,就是用LLINE Notify做的。
LINE在TectPulse中,對LINE Notify的定義是…
第三方服務提供商可以利用 LINE Notify 套件開發通知型的應用,讓外部網站的服務和應用能透過 LINE Notify 官方帳號傳送純文字、貼圖或圖片式的服務通知給用戶,例如天氣預報、貨到超商請取貨、匯款成功、交易完成等。LINE Notify 就像一般的聊天機器人一樣可以加入一對一的對話視窗中,也能加入群組中。他這樣講你聽得懂? 聽得懂就好…ㄟ…不懂也沒關係,我稍微翻譯一下。
簡單的說就是,如果開發人員(或店家、或企業)只是想要發通知給用戶,或和用戶進行基本的互動,那倒也不一定需要自己申請一個Line Bot(因為未來用戶可能得要加入很多Line Bot,收到很多不同單位傳來的訊息,這樣用戶會很煩,最後把你的Bot封鎖,或是根本忘了它,而且,商家(開發人員)申請Line Bot來發Push訊息,如果量多的話,要付很貴的$$$),但若你用現成的LINE Notify,其實也可達成此功能(而且FREE,對,免費!!!)。
LINE Notify就是底下這個…
其實,它就跟一個Bot一樣,你根本可以把它想成一個商家共用的Bot(而非自己獨立建置的Bot)。它一樣可以發訊息給你的用戶,你只要能夠Access這個Line Notify Bot,就可以透過它來發送訊息。
怎麼做呢? 首先,你還是要申請一個Line Notify的服務,基本上就是取得Client_id與client_secret。申請網址在底下:
https://notify-bot.line.me/zh_TW/
Line把這個申請藏得很好,請拉到最下面,找到…『登錄服務』:
你看,這藏得多麼隱密啊。
點選後用你的Line帳號登入,會出現底下的表格:
請妥善填寫,然後按下『同意並往下一步』。填寫的重點只有兩個:
- 服務名稱和服務圖片,會出現在Line Notify用OAuth2機制跟你的用戶請求Access Token的時候出現。
- Callback URL會用來作為OAuth2授權後取回authorize code的返回網址。
喔喔,等等,剛才上面出現了一個部分開發人員可能不很熟悉的『OAuth2』身分驗證機制。如果你對OAuth2不熟,
背景說明 : 由於LineNotify需要讓你對特定用戶發訊息,但你沒有該用戶的Line Id,也沒有申請一個LineBot去取得該用戶的Line User Id,那怎麼發訊息呢? 答案是需要一個Token。當你得到這個Token,就可以透過該Token對用戶發訊息。你要跟用戶要Token,Line系統在產生Token時,就需要用戶登入他的帳號密碼,但用戶當然不能給你他的帳號密碼,因此LineNotify採用的就是OAuth2機制。(補充:後來我補寫了OAuth2與SSO介紹,請參考這裡)別怕,背景說完沒聽懂也沒關係,我們實際操作一下。首先,請先建立底下這個網頁:
請特別留意該網頁中第19行的Button,按下去之後是一個URL轉址的動作,整個目的是用來取得一個authorize Code,你要用待會取得的這個Code再去換Token。(參考官方文件 https://notify-bot.line.me/doc/en/)
請特別注意上述程式碼的第9, 10行,其中第9行要換成你剛申請到的Client_id,第10行則是要填寫你寫在CallbackURL裡面相同的URL,因為我們要在用戶端測試,所以我填寫localhost網址,要這樣測試,這邊你必須能夠在用戶端Run一個模擬的Web伺服器(由於我很幸福的使用著Visual Studio,因此這是一塊蛋糕)。
當用戶點選上面這個按鈕,會被導引到類似底下這樣的畫面(在進到底下這個畫面前,用戶會被要求用他的Line帳號密碼登入,當然登入畫面是Line提供的,因此你不可能知道用戶的帳密,這就是OAuth2的用途,登入後就會看到底下畫面):
請留意上面標示的數字:
- 就是你剛才申請時,上傳的Line Notify帳號圖示
- 就是你剛才申請時,填寫的Line Notify帳號名稱
- 你的開發帳號名稱
- 用戶帳號頭像
同時間你的網頁會被導回Callback URL,你可以從QueryString取得Code,像是底下這樣:
這個Code很重要,我們要用這個Code來換Token。
後面的動作我用Postman來示範,當你取得這個Code之後你可以透過以POST呼叫底下的URL來取得Token:
請注意要傳遞的參數包含固定的grant_type,你剛才取得的Code(上圖1),你的redirect_url,你一開始申請時取得的Client_id(上圖2)與Clind_secret(上圖3),然後就會取得用戶的token(上圖4)。
取得Token之後就好辦了,這時候你可以透過對https://notify-api.line.me/api/notify的POST,來向用戶傳遞訊息,訊息內容放在POST body中:
ㄟ,別忘了,你要在Headers傳遞剛才取得的Token:
OK,用戶收到訊息囉,格式是【LineNotify服務名稱】訊息內容,像是下圖最後一則訊息:
that's it.
坦白說,用Line Notify可能比LINE Bot還難一點,但如果你要大量的發送訊息,卻不想要申請一個自己的Bot
demo source code : https://github.com/isdaviddong/Line_Notify_Example
LineBotSDK:https://www.nuget.org/packages/LineBotSDK
相關課程:http://www.studyhost.tw/NewCourses/LineBot
線上課程:https://www.udemy.com/line-bot/
更多內容,請參考電子書:https://www.pubu.com.tw/ebook/103305
LINE Bot實體書籍:https://www.tenlong.com.tw/products/9789865020354
--------------------------------------------
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。
留言
這個line notify需不需要? 如何指定通知誰?
你的App對每一個用戶驗證後,都會拿到一個唯一的token,該Token發的訊息就是發給該用戶,因此你需要自行記錄用戶token與個人身分之間的關係。
Goigke到的資訊,都是1對1的聊天室。
不知是否為連動頁面那,選擇既有的群組??
若選了三個群組,而該次訊息只要丟到群組一,以LINE notify是否可達成?
大大請問一下,裡面第9行、第10行怎麼更改,要按哪裡才能做修改的動作
老師,請問他是每個token可用1000次嗎? 超過再重新取得token 1000次會重置嗎?
There is a limit to the number of times an API can be called on each service.
The default number is set to 1000.
The limit is per access token.
The API Rate Limit status, can be checked on the response header of the API.
{
"status": 400,
"message": "invalid code",
"access_token": null
}