2016年12月26日 星期一

關於LineBot(5) - 透過程式碼讓Linebot發送圖片、貼圖

這幾天我們更新了Nuget Package LineBotSDK,加上了一組非靜態的bot類別,現在你可以透過底下這段程式碼,直接建立一個bot物件實體,來操作所有有關發送Line訊息、或是圖片、貼圖…等工作…

注意上面這段程式碼,其中的圖片URI必須是https,否則會發生錯誤,圖片支援.png的格式(估計其他也支援,但我沒試)。

透過物件實體(Object instance)來操作,省去了呼叫PushMessage的時候一直要傳遞AccessToken的不方便,同時在記憶體管理上也比較安全。

這組bot類別還提供了傳送貼圖的功能,例如:

上面這段程式碼可以發送出底下這樣的貼圖:

為何傳入packageId與StickerId參數 1 , 2 是出現上面這個貼圖呢? 目前LineBot可以用的貼圖就那幾組,請參考底下連結: https://devdocs.line.me/files/sticker_list.pdf 

上面這個連結顯示出了目前有可以用的PackagId與StickerId。

別忘了,使用上述的功能必須先在你的專案中加入最新版(0.3.9)的LineBotSDK喔:

OK,盡情的傳送貼圖吧,Have fun~

16 則留言:

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

可以教Imagemap的baseUrl的用法嗎?

lin beisien 提到...

有辦法傳txt或者PDF檔案嗎

isDavid 提到...

@Clone,
可以

@Lin Beisien,
沒有傳送檔案的API,但其實你直接把檔案上傳到某個位置,然後傳送該檔案的Hyper link就可以了...

Kevin 提到...

請問程式碼中的userId跟PushMessage與SDK中的ReplyMessage有什麼差異呢?
一定需要userId嗎? 謝謝。

isDavid 提到...

@Kevin,

reply原則上只需要replyToken。
Push Message則肯定需要UserId。

UserID可以透過你的用戶跟你的bot對談時,Receieved Message的source屬性取得。

bot的行為在接收到訊息時,可以直接回應,這時可以透過reply Message機制,以replyToken來回應。一旦回應過了,或超過一定時間沒有回應,就無法回應了。這時就只能主動發訊息給用戶,這個行為就是Push Message。

Lin 提到...

您好,有看到你說UserID可以透過你的用戶跟你的bot對談時,Receieved Message的source屬性取得。
請問有範例的程式嗎? 第一次做不太熟 感謝回應!!

isDavid 提到...

@Lin,

請參考:
https://github.com/isdaviddong/LineBotSdkExample/blob/master/LineBotSdkExample/Controllers/LineChatController.cs

User Id可以從ReceivedMessage.events[0].source.userId取得。

匿名 提到...

您好,請問該如何接收用戶傳遞過來的圖片或語音呢?

isDavid 提到...

to 匿名 ,
https://channel9.msdn.com/Shows/NET-Walker-5/bot03

匿名 提到...

老師謝謝,那再請教您,您的SDK中ImagemapMessage的作用又是什麼? 該如何使用?
isRock.LineBot.ImagemapMessage

匿名 提到...

請教如果要傳語音要如何實做?
我試過直接像圖片這樣傳網址,似乎不行。

Lin 提到...

您好,想請問能取得使用者的名稱嗎 還是說只能取得UserID而已
感謝回應!!!!

isDavid 提到...

@Lin,

可以取得用戶名稱,
LineBotSdk 有一個API是 GetUserProfile...可以參考看看。

steven 張 提到...

您好,
LineBot.PushMessage() 這裡是回傳字串嗎?

那這個字串要怎麼 丟給line處理?
我試過 isRock.LineBot.Utility.PushMessage(); 但是他會多傳一個訊息 {} <--這樣

steven 張 提到...

接續上面 解決方法
我好像是 PushMessage() 多傳了一次 自己的ID

目前程式是這樣
string Message;
isRock.LineBot.Bot LineBot = new isRock.LineBot.Bot(ChannelAccessToken);
Message = LineBot.PushMessage(userId, 1, 2);
isRock.LineBot.Utility.PushMessage("", Message, ChannelAccessToken);
return Ok();

簡單測試是沒問題 不知道 對不對