.NET6 C#, LineBot, Line Messaging API, C#, dotnet core
Hello 各位好,今天要介紹的訊息種類是
Video Message 由預覽圖片與影片內容組成,從文件內容可以得知,影片訊息有兩個圖層,在影片播放前只會顯示預覽圖片,當影片播放時就會將影片的圖層疊到預覽圖片前方,所以當預覽圖片與影片內容的長寬比不符合,並且預覽圖片比影片內容還大時,預覽圖片會在影片後方露出。(下方測試有實際例子)
如果還記得在介紹 Webhook Event 時有一個事件叫做 "VideoViewingComplete",也就是使用者看完影片的事件,這個事件要觸發需要在傳送影片訊息時將其 TrackingId 的屬性帶入,則 Line 就會將其綁上該事件,只要使用者看完影片,伺服器就能收到事件通知。
首先照著文件新增 Class
在 Dtos/Messages 資料夾內新增 VideoMessageDto.cs
using LineBotMessage.Enum;
namespace LineBotMessage.Dtos
{
public class VideoMessageDto : BaseMessageDto
{
public VideoMessageDto()
{
Type = MessageTypeEnum.Video;
}
public string OriginalContentUrl { get; set; }
public string PreviewImageUrl { get; set; }
public string? TrackingId { get; set; }
}
}
case MessageTypeEnum.Video:
messageRequest = _jsonProvider.Deserialize<BroadcastMessageRequestDto<VideoMessageDto>>(strBody);
break;
準備影片 & 預覽圖片
使用廣播功能測試 Video Message 有沒有正確宣告。
測試用 RequestBody
{
"Messages" : [
{
"Type":"video",
"OriginalContentUrl" : "your video url",
"PreviewImageUrl" : "your preview image url",
"TrackingId" : "Video-001"
}
]
}
影片播放前會先顯示 Preview Image
影片圖層會在播放時出現並蓋到 Preview Image 前面,但因為這邊準備的圖片長寬比與影片不同,甚至比影片大,導致影片沒辦法完全蓋住預覽圖片,所以上下藍色的區塊會露出來。
當使用者看完影片後(必須在手機上觀看)就會收到 video viewing complete 的事件。
可以在接收到 Webhook event 時,使用前幾篇接好的 Reply Message 功能回傳訊息給使用者
--> 修改 LineBotService ReceiveWebhook Function 中的 VideoPlayComplete case。
case WebhookEventTypeEnum.VideoPlayComplete:
replyMessage = new ReplyMessageRequestDto<TextMessageDto>()
{
ReplyToken = eventObject.ReplyToken,
Messages = new List<TextMessageDto>
{
new TextMessageDto(){Text = $"使用者您好,謝謝您收看我們的宣傳影片,祝您身體健康萬事如意 !"}
}
};
ReplyMessageHandler("text", replyMessage);
break;
語音訊息的屬性一樣非常少,一個 url 用來帶入語音檔案的絕對路徑,另一個 Duration 屬性是用來控制音源長度的顯示。
語音訊息的屬性也非常少,但要注意的是官方提到語音訊息支援的檔案只有 M4A 格式(雖然經過測試 MP4 也可以正常播放),所以先去準備一個 M4A 格式的音檔丟到 UploadFiles 資料夾裡面吧。
在 Dtos/Messages 資料夾下新增 AudioMessageDto.cs
using LineBotMessage.Enum;
namespace LineBotMessage.Dtos
{
public class AudioMessageDto : BaseMessageDto
{
public AudioMessageDto()
{
Type = MessageTypeEnum.Audio;
}
public string OriginalContentUrl { get; set; }
public int Duration { get; set; }
}
}
case MessageTypeEnum.Audio:
messageRequest = _jsonProvider.Deserialize<BroadcastMessageRequestDto<AudioMessageDto>>(strBody);
break;
檔案放入 UploadFiles 資料夾
使用廣播功能測試 Audio Message 有沒有正確宣告。
測試用 RequestBody
{
"Messages" : [
{
"Type":"audio",
"OriginalContentUrl" : "your audio url",
"Duration" : 72000
}
]
}
using LineBotMessage.Enum;
namespace LineBotMessage.Dtos
{
public class LocationMessageDto : BaseMessageDto
{
public LocationMessageDto()
{
Type = MessageTypeEnum.Location;
}
public string Title { get; set; }
public string Address { get; set; }
public double Latitude { get; set; } // 緯度
public double Longitude { get; set; } // 經度
}
}
case MessageTypeEnum.Location:
messageRequest = _jsonProvider.Deserialize<BroadcastMessageRequestDto<LocationMessageDto>>(strBody);
break;
使用 swagger 測試位置訊息能否正確傳送
測試用 RequestBody
{
"Messages" : [
{
"Type":"location",
"Title" : "Apps 時賦科技有限公司",
"Address" : "10491台北市中山區南京東路二段124號十樓",
"Latitude" : 25.05176950722628,
"Longitude" : 121.53334933801854
}
]
}
今天的介紹就到這邊了,下一篇要介紹的訊息是 Imagemap,Imagemap 在廣告行銷上是非常實用的訊息,他能夠對一張圖片自由的切割出最多50個不同區塊,並指定該區塊被點擊後要發生的事件,雖然事件只有傳送訊息以及開啟URL,不過這些應該能夠滿足大部份的情境,那各位就下一篇見吧!
如果想要參考今天範例程式碼的部份,下面是 Git Repo 連結,方便大家參考。
Day9_Video、Audio、Location Message