使用C#開發LineBot(10) - 取得用戶上傳給Linebot的照片
在用戶與你所設計的Linebot對談的過程中,我們常常會需要接收用戶傳遞過來的資料,除了文字之外,最重要的就是圖片(或照片)了。
用戶可以從手機或PC版的Line上面,輕易地上傳圖片給我們的linebot,這圖片來源可以是直接抓取相機拍照的照片,或是從手機上的相簿、圖庫裡面抓取,當然也可以從第三方的資料來源(像是Dropbox)把圖片傳遞給Line。
因此,圖片會有各種不同的格式,但慶幸的是,Line會幫我們把圖片做初步的處理(例如對太大的圖進行縮小、調整格式…等),我們想要抓取處理好的結果,只需要簡單的使用API即可。
透過我們的SDK,可以輕易的使用底下這個API來取得用戶上傳的圖片,回傳的結果是bytes[] 陣列。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//抓Line圖片 | |
var bytes = bot.GetUserUploadedContent(LineContentID); |
當然,從上面你不難發現,要取得圖片時,我們需要傳遞給API一個ContentID參數,這參數怎麼來呢?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//從ReceivedMessage 取得 文件ID | |
var LineContentID = ReceivedMessage.events.FirstOrDefault().message.id.ToString(); |
透過這樣的方式,就可以順利的取得用戶上傳的圖片資料囉。
補充一:
別忘記一件事情,我們並不能假設用戶上傳的一定就是圖片(搞不好是文字?或是GPS座標位置啊…),因此,採用上面那兩段程式前,你必須先判斷,用戶這次傳遞給我們的訊息是否為圖片:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//如果是圖片 | |
if ( | |
ReceivedMessage.events.FirstOrDefault().type == "message" && | |
ReceivedMessage.events.FirstOrDefault().message.type.Trim().ToLower() == "image") | |
{ | |
// 才做相關動作... | |
// | |
// | |
} |
補充二:
抓到圖片Bytes後,要怎麼辦?
一般來說,我們會在WebHook裡面抓取圖片,而WebHook在.net多半是以WebAPI的方式撰寫,因此,在你抓取到圖片Bytes之後,會有幾個考慮。
- 該圖片要不要讓其他系統使用?(例如azure影像辨識API,或是後端其他系統)
如果要,你多半需要把Bytes儲存為實體的檔案,這部分可以透過 System.IO.File.WriteAllBytes(路徑, bytes);
這樣的Method來完成,如果是圖檔,附檔名直接給png即可。 - 該圖片要不要讓用戶下載?
如果要讓用戶下載,則該圖檔不僅僅要儲存,還必須要有一個可公開的URL,這樣我們會建議你把圖檔存放到azure blob,或是在你的WebApi所屬網站上開一個folder,用上述WriteAllBytes指令存檔時,儲存到該公開folder中即可。當然,如果你要把圖檔放到資料庫中也行。
------------------
相關課程: http://www.studyhost.tw/NewCourses/LineBot
LineBotSDK : https://www.nuget.org/packages/LineBotSDK
如果需要即時取得更多相關訊息,可按這裡加入FB專頁。若這篇文章對您有所幫助,請幫我們分享出去,謝謝您的支持。
留言
感謝董老師分享許多有關Line bot 文章,受益良多,但有個疑問是,若是拿來運用在公司內部,除了限制50好友外,有侵權問題嗎 還是line bot本身就是開放大家用 不限個人與公司行號 謝謝
請教一下,如果BOT被真人加為好友,可以取得這個事件嗎?
另外,可以知道某BOT有被哪些人加為好友嗎?
謝謝
看官方文件,應該是用來知道誰封鎖了line bot
但我實際用起來卻不是
在我測試下,line用戶封鎖當下,line bot是不會收到unfollow事件的
而是在line用戶解封鎖時,先收到unfollow事件,再收follow事件
最多只能知到那個用戶曾經有封鎖過line bot
我將unfollow寫在webhook裡,並用郵件通知,如下圖
https://imgur.com/a/nboJ0
請問以下這串程式碼
bot.GetUserUploadedContent();
是怎麼運作的 想了很久還是想不到