今天要來做電子喜帖功能,節能減碳,環保愛地球

主要傳送是用 Line 的 ImageMessage

這部分跟程式無關 XD 只是分享 template 網站,設計苦手的工程師其實可以考慮一些素材網站,或 template 網站,付點錢就能拿到質感極佳的設計

https://www.greetingsisland.com/

將圖片傳到圖床 (imgur)

Line 發送圖片時候是以 URL,通常我會傳到 imgur 平台產生一個 https 的連結,從上面網站製作好範例喜帖如下:

OnMessageAsync

在前幾篇我們有介紹的OnMessageAsync,我們在這實作接收到文字訊息時候要回傳的訊息,考量到再來使用者的意圖 (intent) 可能會越來越多,我們用一個簡單的 Dictionary 來做處理

使用者的意圖 (intent) 是在做chatbot NLP 或使用 chatbot 一些服務時很常看見的名詞,簡單來講就是當使用者打出這句話時,是想做什麼事

定義一個介面,包含 ReplyAsync 方法,需要傳入回覆所需 replyToken

public interface IReplyIntent
{
  Task ReplyAsync(string replyToken);
}

接收文字

protected virtual async Task OnMessageAsync(Event ev)
{
	if (ev.message.Type.Equals(LineMessageType.text))
	{
		// 完整比對使用者輸入的訊息,決定要回傳什麼
		var msg = ev.message.Text;
		var intents = new Dictionary<string, IReplyIntent>()
		{
			{ "電子喜帖" ,new WeddingInvitation(lineMessageUtility,lineProfileUtility)},
			{ "Default" ,new DefaultIntent(lineMessageUtility,lineProfileUtility)},
		};
		var intent = intents.ContainsKey(ev.message.Text) ? intents[msg] : intents["Default"];
		await intent.ReplyAsync(ev.replyToken);
	}
}

定義 ImageMessage.cs

public class ImageMessage : IMessage
{
    public LineMessageType Type => LineMessageType.image;
   
    public string OriginalContentUrl { get; set; }
    
    public string PreviewImageUrl { get; set; }
}

新增 WeddingInvitation.cs 並實作

    public class WeddingInvitation: IReplyIntent

  {

    private readonly LineReplyMessageUtility lineMessageUtility;

    private readonly LineProfileUtility lineProfileUtility;

    public WeddingInvitation(LineReplyMessageUtility _lineMessageUtility, LineProfileUtility _lineProfileUtility)

    {

      lineMessageUtility = _lineMessageUtility;

      lineProfileUtility = _lineProfileUtility;

    }

    public async Task ReplyAsync(string replyToken)

    {

      var imageMessage = new ImageMessage()

      {

        OriginalContentUrl = "https://i.imgur.com/Li0UUul.png",

          PreviewImageUrl = "https://i.imgur.com/Li0UUul.png"

      };

      await lineMessageUtility.ReplyMessageAsync(replyToken, new List < IMessage > {

        imageMessage

      });

    }

  }

實作效果

有啥限制嗎?

ImageMessage 在傳送的時候要注意有以下限制

  • URL 最大 1000 字元
  • 一定要是 HTTPS 且加密規範 TLS 1.2 以上
  • 檔案大小上限 200 MB
  • 圖片需為 JPEG or PNG

懶人包,本次學到了什麼?