protected void Page_Load(object sender, EventArgs e) { try { RequestInfoFromLine info = new RequestInfoFromLine(Request); if (!CheckSignature(info)) { //不正リクエストなので、即return Response.StatusCode = 200; return; } //postbackイベントの場合 if (info.EventType == CommonSettings.EventType.POSTBACK && info.Message == "ok") { SendLeaveRequest(info); return; } ReplyManager manager = ReplyManagerFactory.Create(info.EventType); byte[] replyBodyBytes = manager.CreateReplyBodyBytes(info); SendReply(replyBodyBytes); System.Diagnostics.Trace.WriteLine("Entry: " + info.FromId); }catch (Exception ex) { } }
public override byte[] CreateReplyBodyBytes(RequestInfoFromLine info) { //トークルームから除外する為に使われる。レスポンスは空を返す throw new NotImplementedException(); }
/// <summary> /// リクエストの署名をチェック /// </summary> /// <returns></returns> private bool CheckSignature(RequestInfoFromLine info) { string channelSercret = CommonSettings.ChannelSercret; byte[] key = Encoding.UTF8.GetBytes(channelSercret); HMACSHA256 hmac = new HMACSHA256(key); byte[] bs = hmac.ComputeHash(info.RequestBodyBytes); hmac.Clear(); string signature = Convert.ToBase64String(bs); return(signature == Request.Headers["X-Line-Signature"]); }
private void SendLeaveRequest(RequestInfoFromLine info) { string endPointUrl = CommonSettings.EndPointUrl.LEAVE_URL_TEMPLATE.Replace("${FromType}", info.FromType).Replace("${FromId}", info.FromId); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(endPointUrl); request.Method = "POST"; request.Headers["Authorization"] = "Bearer " + CommonSettings.ChannelAccessToken; using (Stream repStream = request.GetRequestStream()) { repStream.Write(new byte[] { }, 0, 0); } }
public override byte[] CreateReplyBodyBytes(RequestInfoFromLine info) { dynamic replyBody = new DynamicJson(); if (info.Message.Contains("グループID")) { replyBody.replyToken = info.ReplyToken; if (info.FromId != null) { replyBody.messages = new[] { new { type = "text", text = "このグループのURLは以下ですよ" }, new { type = "text", text = "https://script.google.com/macros/s/AKfycbz8izLdmSMTJZUGR6ZkY5UMdwAbYIXGx5THlukI61wZMQbUFN8/exec?gid=" + info.FromId// +"&version=2" } }; } } else if (info.Message.Contains("スタンプBotいらないよ")) { replyBody.replyToken = info.ReplyToken; replyBody.messages = new[] { new { type = "template", altText = "除外機能が使えないようです。管理画面URL下部のtwitterより連絡お願い致します。", template = new { type = "confirm", text = "MOB@MP M@STERをトークルームから除外しますか?", actions = new[] { new { type = "postback", label = "はい", data = "ok" }, new { type = "postback", label = "いいえ", data = "no" } } } } }; } return(Encoding.UTF8.GetBytes(replyBody.ToString())); }
public override byte[] CreateReplyBodyBytes(RequestInfoFromLine info) { //友だち追加の場合、以下の固定メッセージを返す。 dynamic replyBody = new DynamicJson(); replyBody.replyToken = info.ReplyToken; replyBody.messages = new[] { new { type = "text", text = "友だち追加ありがとうございます!\r\n このBotをグループに追加する事で、\r\n モバマスのスタンプを送る事が出来ますよ!" } }; return(Encoding.UTF8.GetBytes(replyBody.ToString())); }
public override byte[] CreateReplyBodyBytes(RequestInfoFromLine info) { //グループ追加の場合、以下の固定メッセージを返す。 dynamic replyBody = new DynamicJson(); replyBody.replyToken = info.ReplyToken; replyBody.messages = new[] { new { type = "text", text = "グループ追加ありがとうございます!!\r\n このグループのURLは以下です。" }, new { type = "text", text = "https://script.google.com/macros/s/AKfycbz8izLdmSMTJZUGR6ZkY5UMdwAbYIXGx5THlukI61wZMQbUFN8/exec?gid=" + info.FromId// +"&version=2" } }; return(Encoding.UTF8.GetBytes(replyBody.ToString())); }
/// <summary> /// リプライのボディのバイト配列を作成する /// </summary> /// <returns></returns> public abstract byte[] CreateReplyBodyBytes(RequestInfoFromLine info);