iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
0

第12 屆iT邦幫忙鐵人賽系列文章 (Day5)

我想 Line 豐富的貼圖,應該是很多人喜歡用它來做 Chatbot 的一個原因吧

接續上一篇,我們試著在歡迎詞後,傳送一個禮貌又不尷尬的貼圖

在 LineReplyMessageUtility.cs 擴充回傳貼圖

我們接續前一篇 LineReplyMessageUtility 這個類別再實作一個回覆貼圖的method

public async Task ReplyStickerMessageAsync(string replyToken, string packageId, string stickerId)
{
 using (var httpClient = new HttpClient())
 {
  using (var request = new HttpRequestMessage(new HttpMethod("POST"), $"{lineMessageApiBaseUrl}"))
  {
   request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {accessToken}");

LineMessageReq req = new LineMessageReq();
   req.ReplyToken = replyToken;

req.Messages.Add(new StickerMessage()
   {
    PackageId = packageId,
    StickerId = stickerId
   });

var postJson = JsonConvert.SerializeObject(req, new JsonSerializerSettings
   {
    ContractResolver = new DefaultContractResolver
    {
     NamingStrategy = new CamelCaseNamingStrategy()
    },
    Formatting = Formatting.Indented
   });
     
   request.Content = new StringContent(postJson);
   request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
   var response = await httpClient.SendAsync(request);
  }
 }
}

StickerMessage.cs

public class StickerMessage : IMessage

{

public LineMessageType Type => LineMessageType.sticker;

public string PackageId { get; set; }

public string StickerId { get; set; }

}

ReplyStickerMessageAsync 傳了兩個參數:packageId, stickerId

這個定義在這份文件裡頭,我們在 OnFollow 事件增加回傳貼圖

await lineMessageUtility.ReplyMessageAsync(ev.replyToken, $@"Hi {user.displayName}, 感謝您加入婚禮小助理!");
await lineMessageUtility.ReplyStickerMessageAsync(ev.replyToken, "1", "1");

(X) 結果發現沒作用,原因是 ReplyToken 只能用一次,且也要注意有30秒左右的時效性

做點調整

ReplyMessageAsync 改接 IMessage 的 List

修改歡迎詞的程式

protected virtual async Task OnFollowAsync(Event ev)
{
 // 取得使用者的資訊
 var user = await lineProfileUtility.GetUserProfile(ev.source.userId);
 // 回傳歡迎詞
 var welcome = new TextMessage() { Text =  $@"Hi {user.displayName}, 感謝您加入婚禮小助理!" };
 var sticker = new StickerMessage() { PackageId = "11539", StickerId = "52114136" };
 await lineMessageUtility.ReplyMessageAsync(ev.replyToken, new List<IMessage> { 
  welcome, 
  sticker 
 });
}

實際成果

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

本篇文章同步發佈於我的 Medium 如果這篇文章對你有幫助,就大力追蹤和拍手鼓掌下去吧 !!


上一篇
回覆第一個Line的訊息-歡迎詞
下一篇
環保愛地球,回傳電子喜帖
系列文
宅男的浪漫 - 用 .NET Core 打造 Line 婚禮聊天機器人經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言