Пример #1
0
        public async Task <IList <IRequestMessage> > GetReplyMessagesAsync()
        {
            var columns = new List <CarouselColumnMultipleAction>();

            // column A
            var columna_actions = new List <IAction>()
            {
                new MessageAction("button A")
            };

            columns.Add(new CarouselColumnMultipleAction("column A", columna_actions)
            {
                ThumbnailImageUrl = "https://via.placeholder.com/200x150/333.png/fff"
            });

            // column B
            var columnb_actions = new List <IAction>()
            {
                new MessageAction("button B")
            };

            columns.Add(new CarouselColumnMultipleAction("column B", columnb_actions)
            {
                ThumbnailImageUrl = "https://via.placeholder.com/200x150/333.png/fff"
            });

            var msg = new CarouselTemplate(columns);

            await Task.CompletedTask;

            return(new List <IRequestMessage>
            {
                msg
            });
        }
        public void Convert_TemplateMessageWithCustomICarouselTemplate_ConvertedToCarouselTemplate()
        {
            TestTemplateMessage message = new TestTemplateMessage()
            {
                Template = new TestCarouselTemplate()
            };

            ISendMessage[] messages = MessageConverter.Convert(new ISendMessage[] { message });

            Assert.AreEqual(1, messages.Length);
            Assert.AreNotEqual(message, messages[0]);

            TemplateMessage templateMessage = messages[0] as TemplateMessage;

            Assert.AreEqual("AlternativeText", templateMessage.AlternativeText);

            CarouselTemplate template = templateMessage.Template as CarouselTemplate;

            CarouselColumn column = template.Columns.First() as CarouselColumn;

            Assert.AreEqual(new Uri("https://carousel.url"), column.ThumbnailUrl);
            Assert.AreEqual("CarouselTitle", column.Title);
            Assert.AreEqual("CarouselText", column.Text);

            ITemplateAction[] actions = column.Actions.ToArray();

            MessageAction action = actions[0] as MessageAction;

            Assert.AreEqual("MessageLabel", action.Label);
            Assert.AreEqual("MessageText", action.Text);
        }
Пример #3
0
        public async Task ReplyTemplateMessageAsync(string replyToken, CarouselTemplate template)
        {
            using (var httpClient = new HttpClient())
            {
                using (var request = new HttpRequestMessage(new HttpMethod("POST"), $"{lineMessageReplyApiBaseUrl}"))
                {
                    request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {accessToken}");

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

                    req.Messages.Add(new TemplateMessageBase()
                    {
                        Template = template
                    });

                    var postJson = JsonConvert.SerializeObject(req, new JsonSerializerSettings
                    {
                        NullValueHandling = NullValueHandling.Ignore,
                        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);

                    var result = await response.Content.ReadAsStringAsync();
                }
            }
        }
Пример #4
0
            public void ShouldPreserveInstanceWhenValueIsCarouselTemplate()
            {
                var template = new CarouselTemplate()
                {
                    Columns = new ICarouselColumn[]
                    {
                        new CarouselColumn()
                        {
                            ThumbnailUrl = new Uri("https://foo.bar"),
                            Title        = "CarouselTitle",
                            Text         = "CarouselText",
                            Actions      = new ITemplateAction[]
                            {
                                new MessageAction()
                                {
                                    Label = "PostbackLabel",
                                    Text  = "PostbackText"
                                }
                            }
                        }
                    }
                };

                var carouselTemplate = CarouselTemplate.Convert(template);

                Assert.AreSame(template, carouselTemplate);

                var column = carouselTemplate.Columns.First();

                Assert.AreSame(column, carouselTemplate.Columns.First());
            }
        public void Constructor_SerializedCorrectly()
        {
            CarouselTemplate template = new CarouselTemplate();

            string serialized = JsonConvert.SerializeObject(template);

            Assert.AreEqual(@"{""type"":""carousel"",""columns"":null}", serialized);
        }
            public void ShouldCreateSerializeableObject()
            {
                var template = new CarouselTemplate();

                string serialized = JsonConvert.SerializeObject(template);

                Assert.AreEqual(@"{""type"":""carousel"",""columns"":null,""imageAspectRatio"":""rectangle"",""imageSize"":""cover""}", serialized);
            }
Пример #7
0
            public void ShouldThrowExceptionWhenColumnsIsNull()
            {
                var template = new CarouselTemplate();

                ExceptionAssert.Throws <InvalidOperationException>("The columns cannot be null.", () =>
                {
                    CarouselTemplate.Convert(template);
                });
            }
Пример #8
0
            public void ShouldThrowExceptionWhenValueIsEmpty()
            {
                CarouselTemplate template = new CarouselTemplate();

                ExceptionAssert.Throws <InvalidOperationException>("The minimum number of columns is 1.", () =>
                {
                    template.Columns = new CarouselColumn[] { };
                });
            }
Пример #9
0
            public void ShouldThrowExceptionWhenValueIsNull()
            {
                CarouselTemplate template = new CarouselTemplate();

                ExceptionAssert.Throws <InvalidOperationException>("The columns cannot be null.", () =>
                {
                    template.Columns = null;
                });
            }
        public void Columns_LessThan1_ThrowsException()
        {
            CarouselTemplate template = new CarouselTemplate();

            ExceptionAssert.Throws <InvalidOperationException>("The minimum number of columns is 1.", () =>
            {
                template.Columns = new ICarouselColumn[] { };
            });
        }
        public void Columns_Null_ThrowsException()
        {
            CarouselTemplate template = new CarouselTemplate();

            ExceptionAssert.Throws <InvalidOperationException>("The columns cannot be null.", () =>
            {
                template.Columns = null;
            });
        }
Пример #12
0
        public async Task HandleTextMessage()
        {
            var     textMessage  = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString());
            Message replyMessage = null;

            if (textMessage.Text.ToLower() == "buttons")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));
                ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions);

                replyMessage = new TemplateMessage("Buttons", buttonsTemplate);
            }
            else if (textMessage.Text.ToLower() == "confirm")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Yes", "yes"));
                actions.Add(new MessageTemplateAction("No", "no"));
                ConfirmTemplate confirmTemplate = new ConfirmTemplate("Confirm Test", actions);
                replyMessage = new TemplateMessage("Confirm", confirmTemplate);
            }
            else if (textMessage.Text.ToLower() == "carousel")
            {
                List <TemplateColumn> columns = new List <TemplateColumn>();
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));
                columns.Add(new TemplateColumn()
                {
                    Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions
                });
                columns.Add(new TemplateColumn()
                {
                    Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions
                });
                CarouselTemplate carouselTemplate = new CarouselTemplate(columns);
                replyMessage = new TemplateMessage("Carousel", carouselTemplate);
            }
            else if (textMessage.Text.ToLower() == "imagemap")
            {
                var url      = HttpContext.Current.Request.Url;
                var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon";
                List <ImageMapAction> actions = new List <ImageMapAction>();
                actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040)));
                actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040)));
                replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions);
            }
            else
            {
                replyMessage = new TextMessage(textMessage.Text);
            }
            await Reply(replyMessage);
        }
            public void ShouldThrowExceptionWhenColumnsContainsNull()
            {
                ITemplate template = new CarouselTemplate()
                {
                    Columns = new CarouselColumn[] { null }
                };

                ExceptionAssert.Throws <InvalidOperationException>("The column should not be null.", () =>
                {
                    template.Validate();
                });
            }
            public void ShouldThrowExceptionWhenColumnsIsInvalid()
            {
                ITemplate template = new CarouselTemplate()
                {
                    Columns = new[] { new CarouselColumn() }
                };

                ExceptionAssert.Throws <InvalidOperationException>("The text cannot be null.", () =>
                {
                    template.Validate();
                });
            }
 public void ShouldNotThrowExceptionWhenValueContains10Items()
 {
     CarouselTemplate template = new CarouselTemplate()
     {
         Columns = new ICarouselColumn[]
         {
             new CarouselColumn(),
             new CarouselColumn(),
             new CarouselColumn(),
             new CarouselColumn(),
             new CarouselColumn()
         }
     };
 }
 public void Columns_5_ThrowsNoException()
 {
     CarouselTemplate template = new CarouselTemplate()
     {
         Columns = new ICarouselColumn[]
         {
             new CarouselColumn(),
             new CarouselColumn(),
             new CarouselColumn(),
             new CarouselColumn(),
             new CarouselColumn()
         }
     };
 }
Пример #17
0
        public async Task HandleTextMessage()
        {
            var     textMessage  = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString());
            Message replyMessage = null;



            if (textMessage.Text.ToLower() == "buttons")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions.Add(new PostbackTemplateAction("Postback Label", "sample data"));
                actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));
                ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions);

                replyMessage = new TemplateMessage("Buttons", buttonsTemplate);
            }
            else if (textMessage.Text.ToLower() == "confirm")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Yes", "yes"));
                actions.Add(new MessageTemplateAction("No", "no"));
                ConfirmTemplate confirmTemplate = new ConfirmTemplate("Confirm Test", actions);
                replyMessage = new TemplateMessage("Confirm", confirmTemplate);
            }
            else if (textMessage.Text.ToLower() == "carousel")
            {
                List <TemplateColumn> columns = new List <TemplateColumn>();
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions.Add(new PostbackTemplateAction("Postback Label", "sample data"));
                actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));
                columns.Add(new TemplateColumn()
                {
                    Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions
                });
                columns.Add(new TemplateColumn()
                {
                    Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions
                });
                CarouselTemplate carouselTemplate = new CarouselTemplate(columns);
                replyMessage = new TemplateMessage("Carousel", carouselTemplate);
            }
            else
            {
                replyMessage = new TextMessage(textMessage.Text);
            }
            await Reply(replyMessage);
        }
        public void Columns_MoreThan5_ThrowsException()
        {
            CarouselTemplate template = new CarouselTemplate();

            ExceptionAssert.Throws <InvalidOperationException>("The maximum number of columns is 5.", () =>
            {
                template.Columns = new ICarouselColumn[]
                {
                    new CarouselColumn(),
                    new CarouselColumn(),
                    new CarouselColumn(),
                    new CarouselColumn(),
                    new CarouselColumn(),
                    new CarouselColumn()
                };
            });
        }
        public async Task <IHttpActionResult> Post()
        {
            try
            {
                //Get Message
                string postData = Request.Content.ReadAsStringAsync().Result;
                db.InsertRequestLog(postData);
                var    RequestBody        = isRock.LineBot.Utility.Parsing(postData);
                string Message            = RequestBody.events[0].message.text;
                string ChannelAccessToken = db.GetBotToken("Line");
                //取得LUIS的相關設定值
                NLPInfo LUISInfo = db.GetNLPInfo("LineBotNLP");

                //Send to Analysis
                Microsoft.Cognitive.LUIS.LuisClient lc
                    = new Microsoft.Cognitive.LUIS.LuisClient(LUISInfo.appid, LUISInfo.appKey, true);
                var AnalysisResult = await lc.Predict(Message);

                string replyMessage;
                //Get Reply Message
                bool isGreeting = db.GetResult(AnalysisResult, out replyMessage);

                if (isGreeting)
                {
                    CarouselTemplate ct = LineRepository.GetButtonTemplateMessage("Carousel") as CarouselTemplate;
                    var result          = Utility.PushTemplateMessage(RequestBody.events[0].source.userId
                                                                      , ct
                                                                      , ChannelAccessToken);
                }
                else
                {
                    //Response Message
                    isRock.LineBot.Utility.ReplyMessage(RequestBody.events[0].replyToken, replyMessage, ChannelAccessToken);
                }
                return(Ok());
            }
            catch (Exception ex)
            {
                string errorMessage = string.Format("ErrorMessage:{0},ErrorStack:{1},InnerExcepton:",
                                                    ex.Message,
                                                    ex.StackTrace,
                                                    ex.InnerException);
                db.InsertRequestLog(errorMessage);
                return(Ok(errorMessage));
            }
        }
Пример #20
0
        internal static CarouselTemplate GenCarouselTemplate()
        {
            var TemplateMessages = db.Database.SqlQuery <BotTemplateMessage>(@"
SELECT A.*
  FROM dbo.BotTemplateMessage A
 INNER JOIN dbo.BotData B 
    ON A.BotSeq = B.BotSeq
 WHERE B.BotName = 'LINE' 
   AND A.Type = 'Menu'", "");

            CarouselTemplate ct = new CarouselTemplate();

            ct.altText = "RBot的CarouselMenu";
            ct.columns = new List <Column>();
            foreach (var message in TemplateMessages)
            {
                Column c = new Column();
                c.text              = message.Text;
                c.title             = message.Title;
                c.thumbnailImageUrl = new Uri(message.TemplateURL);
                var actionData = db.BotTemplateAction.AsQueryable()
                                 .Where(o => o.TemplateSeq == message.Seq);

                foreach (var action in actionData)
                {
                    if (action.type == "postback")
                    {
                        PostbackActon postbackAction = new PostbackActon();
                        postbackAction.data  = action.data;
                        postbackAction.label = action.label;
                        postbackAction.text  = action.text;
                        c.actions.Add(postbackAction);
                    }
                    else if (action.type == "uri")
                    {
                        UriActon uriAction = new UriActon();
                        uriAction.label = action.label;
                        uriAction.uri   = new Uri(action.url);
                        c.actions.Add(uriAction);
                    }
                }
                ct.columns.Add(c);
            }
            return(ct);
        }
Пример #21
0
        private CarouselTemplate GetCarouselTemplate(List <CarouselItem> carouselItems)
        {
            CarouselTemplate      carouselTemplate = null;
            List <CarouselColumn> carouselColumns  = new List <CarouselColumn>();

            foreach (CarouselItem item in carouselItems)
            {
                //
                carouselColumns.Add(new CarouselColumn(
                                        item.Text,
                                        item.ImageUrl,
                                        item.Title,
                                        item.Actions));
            }
            carouselTemplate = new CarouselTemplate(carouselColumns);

            return(carouselTemplate);
        }
            public void ShouldNotThrowExceptionWhenValid()
            {
                ITemplate template = new CarouselTemplate()
                {
                    Columns = new[]
                    {
                        new CarouselColumn()
                        {
                            Text    = "Foo",
                            Actions = new[] { new MessageAction()
                                              {
                                                  Label = "Foo", Text = "Bar"
                                              } }
                        }
                    }
                };

                template.Validate();
            }
Пример #23
0
            public void ShouldConvertCustomICarouselTemplateToCarouselTemplate()
            {
                var template = new TestCarouselTemplate();

                var carouselTemplate = CarouselTemplate.Convert(template);

                Assert.AreNotEqual(template, carouselTemplate);

                var column = carouselTemplate.Columns.First() as CarouselColumn;

                Assert.AreEqual(new Uri("https://carousel.url"), column.ThumbnailUrl);
                Assert.AreEqual("CarouselTitle", column.Title);
                Assert.AreEqual("CarouselText", column.Text);

                var actions = column.Actions.ToArray();

                var action = actions[0] as MessageAction;

                Assert.AreEqual("MessageLabel", action.Label);
                Assert.AreEqual("MessageText", action.Text);
            }
Пример #24
0
            public void ShouldThrowExceptionWhenValueContainsMoreThan10Items()
            {
                CarouselTemplate template = new CarouselTemplate();

                ExceptionAssert.Throws <InvalidOperationException>("The maximum number of columns is 10.", () =>
                {
                    template.Columns = new CarouselColumn[]
                    {
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn(),
                        new CarouselColumn()
                    };
                });
            }
Пример #25
0
        public ActionResult DispatchTemplate3()
        {
            var actions = new List <TemplateActionBase>();

            actions.Add(new MessageAction()
            {
                label = "標題 - 文字回復", text = "回復文字"
            });
            actions.Add(new UriAction()
            {
                label = "標題 - Google", uri = new Uri("http://www.google.com")
            });
            actions.Add(new PostbackAction()
            {
                label = "標題 - 發生Postback", data = "abc=aaa&def=111"
            });

            var column = new Column {
                text              = "ButtonTemplate文字訊息",
                title             = "ButtonTemplate標題",
                thumbnailImageUrl = new Uri("https://upload.wikimedia.org/wikipedia/commons/thumb/4/41/LINE_logo.svg/200px-LINE_logo.svg.png"),
                actions           = actions
            };

            var tmpl = new CarouselTemplate()
            {
                altText = "快快樂樂發送了一個詢問,"
            };

            tmpl.columns.Add(column);
            tmpl.columns.Add(column);
            tmpl.columns.Add(column);

            bot.PushMessage(toUserID, tmpl);

            return(View("Index"));
        }
        /// <summary>
        /// Get all messages from DirectLine and reply back to Line
        /// </summary>
        private async Task GetAndReplyMessages()
        {
            dl.MessageSet result = string.IsNullOrEmpty(watermark) ?
                                   await dlClient.Conversations.GetMessagesAsync(conversationId) :
                                   await dlClient.Conversations.GetMessagesAsync(conversationId, watermark);

            userParams["Watermark"] = (Int64.Parse(result.Watermark)).ToString();

            foreach (var message in result.Messages)
            {
                if (message.FromProperty == lineEvent.Source.UserId)
                {
                    continue;
                }

                Message replyMessage = new Message();

                if (message.Attachments != null && message.Attachments.Count != 0)
                {
                    foreach (var attachment in message.Attachments)
                    {
                        if (attachment.ContentType.Contains("image"))
                        {
                            var originalContentUrl = "";
                            var previewImageUrl    = "";
                            if (!string.IsNullOrEmpty(attachment.Url))
                            {
                                originalContentUrl =
                                    attachment.Url.Contains("http") ? attachment.Url :
                                    "https://directline.botframework.com/" + attachment.Url;
                            }
                            else
                            {
                                // Have to create Uri accessible to Line
                            }

                            replyMessage = new ImageMessage(originalContentUrl, previewImageUrl);
                        }
                        else if (attachment.ContentType.Contains("audio"))
                        {
                            var originalContentUrl     = "";
                            var durationInMilliseconds = 0;
                            if (!string.IsNullOrEmpty(attachment.Url))
                            {
                                originalContentUrl =
                                    attachment.Url.Contains("http") ? attachment.Url :
                                    "https://directline.botframework.com/" + attachment.Url;
                            }
                            else
                            {
                                // Have to create Uri accessible to Line
                            }

                            replyMessage = new AudioMessage(originalContentUrl, durationInMilliseconds);
                        }
                        else if (attachment.ContentType.Contains("video"))
                        {
                            var originalContentUrl = "";
                            var previewImageUrl    = "";

                            if (!string.IsNullOrEmpty(attachment.Url))
                            {
                                originalContentUrl =
                                    attachment.Url.Contains("http") ? attachment.Url :
                                    "https://directline.botframework.com/" + attachment.Url;
                            }
                            else
                            {
                                // Have to create Uri accessible to Line
                            }

                            replyMessage = new VideoMessage(originalContentUrl, previewImageUrl);
                        }
                    }
                }
                else if (message.ChannelData != null)
                {
                    Entity entity = JsonConvert.DeserializeObject <Entity>(message.ChannelData.ToString());
                    switch (entity.Type)
                    {
                    case "GeoCoordinates":
                        GeoCoordinates geoCoordinates = JsonConvert.DeserializeObject <GeoCoordinates>(entity.Properties.ToString());
                        replyMessage = new LocationMessage(message.Text, geoCoordinates.Name, geoCoordinates.Latitude, geoCoordinates.Longitude);
                        break;

                    case "Place":
                        Place          place = JsonConvert.DeserializeObject <Place>(entity.Properties.ToString());
                        GeoCoordinates geo   = JsonConvert.DeserializeObject <GeoCoordinates>(place.Geo.ToString());
                        replyMessage = new LocationMessage(place.Name, place.Address, geo.Latitude, geo.Longitude);
                        break;

                    case "Confirm":
                        string          title           = entity.Properties.ToString();
                        ConfirmTemplate confirmTemplate = new ConfirmTemplate(title, new List <TemplateAction>()
                        {
                            new MessageTemplateAction("Yes", "Yes"), new MessageTemplateAction("No", "No")
                        });
                        replyMessage = new TemplateMessage("Confirm template", confirmTemplate);
                        break;

                    case "Rich":
                        List <Attachment> attachments =
                            JsonConvert.DeserializeObject <List <Attachment> >(entity.Properties["Attachments"].ToString());

                        if (attachments.Count == 1)
                        {
                            var attachment = attachments.First();

                            HeroCard hcard = null;

                            if (attachment.ContentType == "application/vnd.microsoft.card.hero")
                            {
                                hcard = JsonConvert.DeserializeObject <HeroCard>(attachment.Content.ToString());
                            }
                            else if (attachment.ContentType == "application/vnd.microsoft.card.thumbnail")
                            {
                                ThumbnailCard tCard = JsonConvert.DeserializeObject <ThumbnailCard>(attachment.Content.ToString());
                                hcard = new HeroCard(tCard.Title, tCard.Subtitle, tCard.Text, tCard.Images, tCard.Buttons, null);
                            }
                            else
                            {
                                break;
                            }

                            ButtonsTemplate buttonsTemplate = new ButtonsTemplate(hcard.Images.First().Url, hcard.Title, hcard.Subtitle);

                            foreach (var button in hcard.Buttons)
                            {
                                switch (button.Type)
                                {
                                case "openUrl":
                                    buttonsTemplate.Actions.Add(new UriTemplateAction(button.Title, button.Value));
                                    break;

                                case "imBack":
                                    buttonsTemplate.Actions.Add(new MessageTemplateAction(button.Title, button.Value));
                                    break;

                                case "postBack":
                                    buttonsTemplate.Actions.Add(new PostbackTemplateAction(button.Title, button.Value));
                                    break;
                                }
                            }

                            replyMessage = new TemplateMessage("Buttons template", buttonsTemplate);
                        }
                        else
                        {
                            CarouselTemplate carouselTemplate = new CarouselTemplate();

                            foreach (var attachment in attachments)
                            {
                                TemplateColumn tColumn = new TemplateColumn();
                                HeroCard       hcard   = null;

                                if (attachment.ContentType == "application/vnd.microsoft.card.hero")
                                {
                                    hcard = JsonConvert.DeserializeObject <HeroCard>(attachment.Content.ToString());
                                }
                                else if (attachment.ContentType == "application/vnd.microsoft.card.thumbnail")
                                {
                                    ThumbnailCard tCard = JsonConvert.DeserializeObject <ThumbnailCard>(attachment.Content.ToString());
                                    hcard = new HeroCard(tCard.Title, tCard.Subtitle, tCard.Text, tCard.Images, tCard.Buttons, null);
                                }
                                else
                                {
                                    continue;
                                }

                                foreach (var button in hcard.Buttons)
                                {
                                    switch (button.Type)
                                    {
                                    case "openUrl":
                                        tColumn.Actions.Add(new UriTemplateAction(button.Title, button.Value));
                                        break;

                                    case "imBack":
                                        tColumn.Actions.Add(new MessageTemplateAction(button.Title, button.Value));
                                        break;

                                    case "postBack":
                                        tColumn.Actions.Add(new PostbackTemplateAction(button.Title, button.Value));
                                        break;
                                    }
                                }

                                tColumn.ThumbnailImageUrl = string.IsNullOrEmpty(hcard.Images.First().Url) ? null : hcard.Images.First().Url;
                                tColumn.Text  = hcard.Subtitle;
                                tColumn.Title = hcard.Title;

                                carouselTemplate.Columns.Add(tColumn);
                            }

                            replyMessage = new TemplateMessage("Carousel template", carouselTemplate);
                        }
                        break;
                    }
                }
                else if (!string.IsNullOrEmpty(message.Text))
                {
                    if (message.Text.Contains("\n\n*"))
                    {
                        var             lines           = message.Text.Split(new[] { "\n\n" }, StringSplitOptions.RemoveEmptyEntries);
                        ButtonsTemplate buttonsTemplate = new ButtonsTemplate(text: lines[0]);

                        foreach (var line in lines.Skip(1))
                        {
                            buttonsTemplate.Actions.Add(new PostbackTemplateAction(line, line.Replace("* ", "")));
                        }

                        replyMessage = new TemplateMessage("Buttons template", buttonsTemplate);
                    }
                    else
                    {
                        replyMessage = new TextMessage(message.Text);
                    }
                }

                await Reply(replyMessage);
            }
        }
Пример #27
0
        public IActionResult Post()
        {
            try
            {
                foreach (var lineEvent in this.ReceivedMessage.events)
                {
                    if (lineEvent == null ||
                        lineEvent.replyToken == "00000000000000000000000000000000")
                    {
                        return(Ok());
                    }

                    //準備回覆訊息
                    if (lineEvent.type.ToLower() != "message" || lineEvent.message.type != "text")
                    {
                        return(Ok());
                    }

                    switch (lineEvent.message.text.ToLower())
                    {
                    case "/quickreply":
                        var quickReplyMsg = new TextMessage("拒絕融資推銷");
                        quickReplyMsg.quickReply.items.AddRange(new QuickReplyItemBase[]
                        {
                            new QuickReplyMessageAction("不需要", "不需要"),
                            new QuickReplyMessageAction("再見", "再見"),
                            new QuickReplyMessageAction("我超有錢", "我超有錢"),
                            new QuickReplyDatetimePickerAction("選擇時間", DateTime.Now.ToString("yyyy-MM-dd"), DatetimePickerModes.date),
                            new QuickReplyPostbackAction("PostBack Data 1", "Quick Reply PostBack Data", "顯示的文字", ""),
                            new QuickReplyPostbackAction("PostBack Data 2", "Quick Reply PostBack Data", "", ""),
                            new QuickReplyLocationAction("地點")
                        });
                        this.ReplyMessage(lineEvent.replyToken, quickReplyMsg);
                        break;

                    case "/imagemap":
                        var imgmapMsg = new ImagemapMessage
                        {
                            baseUrl  = new Uri(@"https://i.imgur.com/7pxFJW8.jpg"),
                            baseSize = new System.Drawing.Size(816, 649)
                        };
                        var largeNumber = new string[] { "壹", "貳", "參", "肆", "伍", "陸", "漆", "捌", "玖" };

                        var address = new List <List <int> >
                        {
                            new List <int> {
                                666, 111, 90, 90
                            },
                            new List <int> {
                                719, 287, 90, 90
                            },
                            new List <int> {
                                655, 458, 90, 90
                            },
                            new List <int> {
                                490, 561, 90, 90
                            },
                            new List <int> {
                                265, 568, 90, 90
                            },
                            new List <int> {
                                79, 465, 90, 90
                            },
                            new List <int> {
                                30, 283, 90, 90
                            },
                            new List <int> {
                                56, 105, 90, 90
                            },
                            new List <int> {
                                357, 341, 90, 90
                            },
                        };

                        for (var i = 0; i < largeNumber.Length && i < address.Count; i++)
                        {
                            imgmapMsg.actions.Add(new ImagemapMessageAction
                            {
                                text = largeNumber[i],
                                area = new ImagemapArea(address[i][0], address[i][1], address[i][2], address[i][3])
                            });
                        }
                        imgmapMsg.actions.Add(new ImagemapUriAction {
                            linkUri = new Uri(@"https://i.imgur.com/7pxFJW8.jpg"), area = new ImagemapArea(297, 71, 234, 201)
                        });
                        this.ReplyMessage(lineEvent.replyToken, imgmapMsg);
                        break;

                    case "/flexmessage":

                        //定義一則訊息
                        var baseFlexMessages = @"
                            [
                                {
                                    ""type"": ""text"",
                                    ""text"": ""來源 : $source$""
                                },
                                {
                                    ""type"": ""flex"",
                                    ""altText"": ""Sample Flex Message"",
                                    ""contents"": $flex$
                                }
                            ]";

                        var flexMessage = baseFlexMessages.Replace("$flex$", SampleFlexMessage.Sample1)
                                          .Replace("$source$", SampleFlexMessage.Source1);

                        this.ReplyMessageWithJSON(lineEvent.replyToken, flexMessage);

                        break;

                    case "/flexmessage2":

                        //定義一則訊息
                        var baseFlexMessages2 = @"
                            [
                                {
                                    ""type"": ""text"",
                                    ""text"": ""來源 : $source$""
                                },
                                {
                                    ""type"": ""flex"",
                                    ""altText"": ""Sample Flex Message"",
                                    ""contents"": $flex$
                                }
                            ]";

                        var flexMessage2 = baseFlexMessages2.Replace("$flex$", SampleFlexMessage.Sample2)
                                           .Replace("$source$", SampleFlexMessage.Source2);

                        this.ReplyMessageWithJSON(lineEvent.replyToken, flexMessage2);

                        break;

                    case "/lineurlscheme":
                        this.ReplyMessage(lineEvent.replyToken, "https://developers.line.biz/en/docs/messaging-api/using-line-url-scheme/#available-line-url-schemes");
                        break;

                    case "/liff":
                        //var liff = isRock.LIFF.Utility.AddLiffApp(_lineBot.ChannelAccessToken, new Uri("https://bu9lifftest.azurewebsites.net"), isRock.LIFF.ViewType.full);
                        this.ReplyMessage(lineEvent.replyToken, "line://app/1655852489-2yE1NxMX");
                        break;

                    case "/templatemessage":
                        var templateAction = new List <TemplateActionBase>();
                        templateAction.AddRange(new TemplateActionBase[]
                        {
                            new MessageAction
                            {
                                label = "回覆訊息",
                                text  = "測試訊息"
                            },
                            new UriAction
                            {
                                label = "開啟網頁",
                                uri   = new Uri("https://www.google.com.tw/")
                            },
                            new PostbackAction
                            {
                                label = "PostBack",
                                data  = "Postback Data"
                            }
                        });
                        var buttomTemplate = new ButtonsTemplate
                        {
                            altText           = "無法顯示",
                            text              = "測試text",
                            title             = "測試title",
                            thumbnailImageUrl = new Uri(@"https://i.imgur.com/7pxFJW8.jpg"),
                            actions           = templateAction //設定回覆動作
                        };
                        this.ReplyMessage(lineEvent.replyToken, buttomTemplate);
                        break;

                    case "/templatemessage2":
                        var templateAction2 = new List <TemplateActionBase>();
                        templateAction2.AddRange(new TemplateActionBase[]
                        {
                            new MessageAction
                            {
                                label = "回覆訊息",
                                text  = "測試訊息"
                            },
                            new UriAction
                            {
                                label = "開啟網頁",
                                uri   = new Uri("https://www.google.com.tw/")
                            },
                            new PostbackAction
                            {
                                label = "PostBack",
                                data  = "Postback Data"
                            }
                        });
                        var carouseTemplate2 = new CarouselTemplate
                        {
                            altText = "無法顯示",
                            columns = new List <Column>
                            {
                                new Column
                                {
                                    actions           = templateAction2,
                                    text              = "測試text",
                                    title             = "測試title",
                                    thumbnailImageUrl = new Uri(@"https://i.imgur.com/7pxFJW8.jpg")
                                },
                                new Column
                                {
                                    actions           = templateAction2,
                                    text              = "測試text",
                                    title             = "測試title",
                                    thumbnailImageUrl = new Uri(@"https://i.imgur.com/7pxFJW8.jpg")
                                },
                                new Column
                                {
                                    actions           = templateAction2,
                                    text              = "測試text",
                                    title             = "測試title",
                                    thumbnailImageUrl = new Uri(@"https://i.imgur.com/7pxFJW8.jpg")
                                }
                            }
                        };
                        this.ReplyMessage(lineEvent.replyToken, carouseTemplate2);
                        break;

                    case "/templatemessage3":
                        var templateAction3 = new List <TemplateActionBase>();
                        templateAction3.AddRange(new TemplateActionBase[]
                        {
                            new UriAction
                            {
                                label = "開啟網頁",
                                uri   = new Uri("https://www.google.com.tw/")
                            },
                            new PostbackAction
                            {
                                label = "PostBack",
                                data  = "Postback Data"
                            }
                        });
                        var confirmTemplate = new ConfirmTemplate
                        {
                            altText = "無法顯示",
                            text    = "測試text",
                            actions = templateAction3
                        };
                        this.ReplyMessage(lineEvent.replyToken, confirmTemplate);
                        break;

                    default:
                        return(Ok());
                    }
                }
            }
            catch (Exception ex)
            {
                this.PushMessage(_lineBot.AdminUserId, "發生錯誤:\n" + ex.Message);
            }

            return(Ok());
        }
        /// <summary>
        /// Get all messages from DirectLine and reply back to Line
        /// </summary>
        private async Task GetAndReplyMessages()
        {
            dl.ActivitySet result = string.IsNullOrEmpty(watermark) ?
                                    await dlClient.Conversations.GetActivitiesAsync(conversationId) :
                                    await dlClient.Conversations.GetActivitiesAsync(conversationId, watermark);

            userParams["Watermark"] = (Int64.Parse(result.Watermark)).ToString();

            foreach (var activity in result.Activities)
            {
                if (activity.From.Id == lineEvent.Source.UserId)
                {
                    continue;
                }

                List <Message> messages = new List <Message>();

                if (activity.Attachments != null && activity.Attachments.Count != 0 && (activity.AttachmentLayout == null || activity.AttachmentLayout == "list"))
                {
                    foreach (var attachment in activity.Attachments)
                    {
                        if (attachment.ContentType.Contains("card.animation"))
                        {
                            // https://docs.botframework.com/en-us/core-concepts/reference/#animationcard
                            // Use TextMessage for title and use Image message for image. Not really an animation though.
                            AnimationCard card = JsonConvert.DeserializeObject <AnimationCard>(attachment.Content.ToString());
                            messages.Add(new TextMessage($"{card.Title}\r\n{card.Subtitle}\r\n{card.Text}"));
                            foreach (var media in card.Media)
                            {
                                var originalContentUrl = media.Url?.Replace("http://", "https://");
                                var previewImageUrl    = card.Image?.Url?.Replace("http://", "https://");
                                messages.Add(new ImageMessage(originalContentUrl, previewImageUrl));
                            }
                        }
                        else if (attachment.ContentType.Contains("card.audio"))
                        {
                            // https://docs.botframework.com/en-us/core-concepts/reference/#audiocard
                            // Use TextMessage for title and use Audio message for image.
                            AudioCard card = JsonConvert.DeserializeObject <AudioCard>(attachment.Content.ToString());
                            messages.Add(new TextMessage($"{card.Title}\r\n{card.Subtitle}\r\n{card.Text}"));

                            foreach (var media in card.Media)
                            {
                                var originalContentUrl     = media.Url?.Replace("http://", "https://");
                                var durationInMilliseconds = 1;

                                messages.Add(new AudioMessage(originalContentUrl, durationInMilliseconds));
                            }
                        }
                        else if (attachment.ContentType.Contains("card.hero") || attachment.ContentType.Contains("card.thumbnail"))
                        {
                            // https://docs.botframework.com/en-us/core-concepts/reference/#herocard
                            // https://docs.botframework.com/en-us/core-concepts/reference/#thumbnailcard
                            HeroCard hcard = null;

                            if (attachment.ContentType.Contains("card.hero"))
                            {
                                hcard = JsonConvert.DeserializeObject <HeroCard>(attachment.Content.ToString());
                            }
                            else if (attachment.ContentType.Contains("card.thumbnail"))
                            {
                                ThumbnailCard tCard = JsonConvert.DeserializeObject <ThumbnailCard>(attachment.Content.ToString());
                                hcard = new HeroCard(tCard.Title, tCard.Subtitle, tCard.Text, tCard.Images, tCard.Buttons, null);
                            }
                            var imageUrl = string.Empty;
                            if (hcard.Images.Any())
                            {
                                imageUrl = hcard.Images?.First().Url.Replace("http://", "https://");
                            }
                            string text = string.IsNullOrEmpty(hcard.Subtitle) ? hcard.Text : hcard.Subtitle;
                            if (string.IsNullOrEmpty(text))
                            {
                                text = " ";
                            }
                            ButtonsTemplate buttonsTemplate = new ButtonsTemplate(
                                imageUrl,
                                hcard.Subtitle == null ? null : hcard.Title,
                                text);

                            if (hcard.Buttons != null)
                            {
                                foreach (var button in hcard.Buttons)
                                {
                                    buttonsTemplate.Actions.Add(GetAction(button));
                                }
                            }
                            else
                            {
                                // Action is mandatory, so create from title/subtitle.
                                var actionLabel = hcard.Title?.Length < hcard.Subtitle?.Length ? hcard.Title : hcard.Subtitle;
                                buttonsTemplate.Actions.Add(new PostbackTemplateAction(actionLabel, actionLabel, actionLabel));
                            }

                            messages.Add(new TemplateMessage("Buttons template", buttonsTemplate));
                        }
                        else if (attachment.ContentType.Contains("receipt"))
                        {
                            // https://docs.botframework.com/en-us/core-concepts/reference/#receiptcard
                            // Use TextMessage and Buttons. As LINE doesn't support thumbnail type yet.

                            ReceiptCard card = JsonConvert.DeserializeObject <ReceiptCard>(attachment.Content.ToString());
                            var         text = card.Title + "\r\n\r\n";
                            foreach (var fact in card.Facts)
                            {
                                text += $"{fact.Key}:{fact.Value}\r\n";
                            }
                            text += "\r\n";
                            foreach (var item in card.Items)
                            {
                                text += $"{item.Title}\r\nprice:{item.Price},quantity:{item.Quantity}";
                            }

                            messages.Add(new TextMessage(text));

                            ButtonsTemplate buttonsTemplate = new ButtonsTemplate(title: $"total:{card.Total}", text: $"tax:{card.Tax}");
                            foreach (var button in card.Buttons)
                            {
                                buttonsTemplate.Actions.Add(GetAction(button));
                            }

                            messages.Add(new TemplateMessage("Buttons template", buttonsTemplate));
                        }
                        else if (attachment.ContentType.Contains("card.signin"))
                        {
                            // https://docs.botframework.com/en-us/core-concepts/reference/#signincard
                            // Line doesn't support auth button yet, so simply represent link.
                            SigninCard card = JsonConvert.DeserializeObject <SigninCard>(attachment.Content.ToString());

                            ButtonsTemplate buttonsTemplate = new ButtonsTemplate(text: card.Text);
                            foreach (var button in card.Buttons)
                            {
                                buttonsTemplate.Actions.Add(GetAction(button));
                            }
                            messages.Add(new TemplateMessage("Buttons template", buttonsTemplate));
                        }
                        else if (attachment.ContentType.Contains("card.video"))
                        {
                            // https://docs.botframework.com/en-us/core-concepts/reference/#videocard
                            // Use Video message for video and buttons for action.

                            VideoCard card = JsonConvert.DeserializeObject <VideoCard>(attachment.Content.ToString());

                            foreach (var media in card.Media)
                            {
                                var originalContentUrl = media?.Url?.Replace("http://", "https://");
                                var previewImageUrl    = card.Image?.Url?.Replace("http://", "https://");

                                messages.Add(new VideoMessage(originalContentUrl, previewImageUrl));
                            }

                            ButtonsTemplate buttonsTemplate = new ButtonsTemplate(title: card.Title, text: $"{card.Subtitle}\r\n{card.Text}");
                            foreach (var button in card.Buttons)
                            {
                                buttonsTemplate.Actions.Add(GetAction(button));
                            }
                            messages.Add(new TemplateMessage("Buttons template", buttonsTemplate));
                        }
                        else if (attachment.ContentType.Contains("image"))
                        {
                            var originalContentUrl = attachment.ContentUrl?.Replace("http://", "https://");
                            var previewImageUrl    = string.IsNullOrEmpty(attachment.ThumbnailUrl) ? attachment.ContentUrl?.Replace("http://", "https://") : attachment.ThumbnailUrl?.Replace("http://", "https://");

                            messages.Add(new ImageMessage(originalContentUrl, previewImageUrl));
                        }
                        else if (attachment.ContentType.Contains("audio"))
                        {
                            var originalContentUrl     = attachment.ContentUrl?.Replace("http://", "https://");
                            var durationInMilliseconds = 0;

                            messages.Add(new AudioMessage(originalContentUrl, durationInMilliseconds));
                        }
                        else if (attachment.ContentType.Contains("video"))
                        {
                            var originalContentUrl = attachment.ContentUrl?.Replace("http://", "https://");
                            var previewImageUrl    = attachment.ThumbnailUrl?.Replace("http://", "https://");

                            messages.Add(new VideoMessage(originalContentUrl, previewImageUrl));
                        }
                    }
                }
                else if (activity.Attachments != null && activity.Attachments.Count != 0 && activity.AttachmentLayout != null)
                {
                    CarouselTemplate carouselTemplate = new CarouselTemplate();

                    foreach (var attachment in activity.Attachments)
                    {
                        HeroCard hcard = null;

                        if (attachment.ContentType == "application/vnd.microsoft.card.hero")
                        {
                            hcard = JsonConvert.DeserializeObject <HeroCard>(attachment.Content.ToString());
                        }
                        else if (attachment.ContentType == "application/vnd.microsoft.card.thumbnail")
                        {
                            ThumbnailCard tCard = JsonConvert.DeserializeObject <ThumbnailCard>(attachment.Content.ToString());
                            hcard = new HeroCard(tCard.Title, tCard.Subtitle, tCard.Text, tCard.Images, tCard.Buttons, null);
                        }
                        else
                        {
                            continue;
                        }

                        TemplateColumn tColumn = new TemplateColumn(
                            hcard.Images.FirstOrDefault()?.Url?.Replace("http://", "https://"),
                            hcard.Subtitle == null ? null : hcard.Title,
                            string.IsNullOrEmpty(hcard.Subtitle) ? hcard.Title : hcard.Subtitle);

                        if (hcard.Buttons != null)
                        {
                            foreach (var button in hcard.Buttons)
                            {
                                tColumn.Actions.Add(GetAction(button));
                            }
                        }
                        else
                        {
                            // Action is mandatory, so create from title/subtitle.
                            var actionLabel = hcard.Title?.Length < hcard.Subtitle?.Length ? hcard.Title : hcard.Subtitle;
                            tColumn.Actions.Add(new PostbackTemplateAction(actionLabel, actionLabel, actionLabel));
                        }

                        carouselTemplate.Columns.Add(tColumn);
                    }

                    messages.Add(new TemplateMessage("Carousel template", carouselTemplate));
                }
                else if (activity.Entities != null && activity.Entities.Count != 0)
                {
                    foreach (var entity in activity.Entities)
                    {
                        switch (entity.Type)
                        {
                        case "Place":
                            Place          place = entity.Properties.ToObject <Place>();
                            GeoCoordinates geo   = JsonConvert.DeserializeObject <GeoCoordinates>(place.Geo.ToString());
                            messages.Add(new LocationMessage(place.Name, place.Address.ToString(), geo.Latitude, geo.Longitude));
                            break;

                        case "GeoCoordinates":
                            GeoCoordinates geoCoordinates = entity.Properties.ToObject <GeoCoordinates>();
                            messages.Add(new LocationMessage(activity.Text, geoCoordinates.Name, geoCoordinates.Latitude, geoCoordinates.Longitude));
                            break;
                        }
                    }
                }
                else if (activity.ChannelData != null)
                {
                }
                else if (!string.IsNullOrEmpty(activity.Text))
                {
                    if (activity.Text.Contains("\n\n*"))
                    {
                        var             lines           = activity.Text.Split(new[] { "\n\n" }, StringSplitOptions.RemoveEmptyEntries);
                        ButtonsTemplate buttonsTemplate = new ButtonsTemplate(text: lines[0]);

                        foreach (var line in lines.Skip(1))
                        {
                            buttonsTemplate.Actions.Add(new PostbackTemplateAction(line, line.Replace("* ", ""), line.Replace("* ", "")));
                        }

                        messages.Add(new TemplateMessage("Buttons template", buttonsTemplate));
                    }
                    else
                    {
                        messages.Add(new TextMessage(activity.Text));
                    }
                }

                await Reply(messages);
            }
        }
        public async Task HandleTextMessage()
        {
            var     textMessage  = JsonConvert.DeserializeObject <TextMessage>(lineEvent.Message.ToString());
            Message replyMessage = null;

            if (textMessage.Text.ToLower() == "buttons")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));
                ButtonsTemplate buttonsTemplate = new ButtonsTemplate("https://github.com/apple-touch-icon.png", "Sample Title", "Sample Text", actions);

                replyMessage = new TemplateMessage("Buttons", buttonsTemplate);
            }
            else if (textMessage.Text.ToLower() == "confirm")
            {
                List <TemplateAction> actions = new List <TemplateAction>();
                actions.Add(new MessageTemplateAction("Yes", "yes"));
                actions.Add(new MessageTemplateAction("No", "no"));
                ConfirmTemplate confirmTemplate = new ConfirmTemplate("Confirm Test", actions);
                replyMessage = new TemplateMessage("Confirm", confirmTemplate);
            }
            else if (textMessage.Text.ToLower() == "carousel")
            {
                List <TemplateColumn> columns  = new List <TemplateColumn>();
                List <TemplateAction> actions1 = new List <TemplateAction>();
                List <TemplateAction> actions2 = new List <TemplateAction>();

                // Add actions.
                actions1.Add(new MessageTemplateAction("Message Label", "sample data"));
                actions1.Add(new PostbackTemplateAction("Postback Label", "sample data", "sample data"));
                actions1.Add(new UriTemplateAction("Uri Label", "https://github.com/kenakamu"));

                // Add datetime picker actions
                actions2.Add(new DatetimePickerTemplateAction("DateTime Picker", "DateTime", DatetimePickerMode.Datetime, "2017-07-21T13:00"));
                actions2.Add(new DatetimePickerTemplateAction("Date Picker", "Date", DatetimePickerMode.Date, "2017-07-21"));
                actions2.Add(new DatetimePickerTemplateAction("Time Picker", "Time", DatetimePickerMode.Time, "13:00"));

                columns.Add(new TemplateColumn()
                {
                    Title = "Casousel 1 Title", Text = "Casousel 1 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions1
                });
                columns.Add(new TemplateColumn()
                {
                    Title = "Casousel 2 Title", Text = "Casousel 2 Text", ThumbnailImageUrl = "https://github.com/apple-touch-icon.png", Actions = actions2
                });
                CarouselTemplate carouselTemplate = new CarouselTemplate(columns);
                replyMessage = new TemplateMessage("Carousel", carouselTemplate);
            }
            else if (textMessage.Text.ToLower() == "imagecarousel")
            {
                List <ImageColumn> columns = new List <ImageColumn>();
                UriTemplateAction  action  = new UriTemplateAction("Uri Label", "https://github.com/kenakamu");

                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));
                columns.Add(new ImageColumn("https://github.com/apple-touch-icon.png", action));

                ImageCarouselTemplate carouselTemplate = new ImageCarouselTemplate(columns);

                replyMessage = new TemplateMessage("Carousel", carouselTemplate);
            }
            else if (textMessage.Text.ToLower() == "imagemap")
            {
                var url      = HttpContext.Current.Request.Url;
                var imageUrl = $"{url.Scheme}://{url.Host}:{url.Port}/images/githubicon";
                List <ImageMapAction> actions = new List <ImageMapAction>();
                actions.Add(new UriImageMapAction("http://github.com", new ImageMapArea(0, 0, 520, 1040)));
                actions.Add(new MessageImageMapAction("I love LINE!", new ImageMapArea(520, 0, 520, 1040)));
                replyMessage = new ImageMapMessage(imageUrl, "GitHub", new BaseSize(1040, 1040), actions);
            }
            else if (textMessage.Text.ToLower() == "addrichmenu")
            {
                // Create Rich Menu
                RichMenu richMenu = new RichMenu()
                {
                    Size        = new RichMenuSize(1686),
                    Selected    = false,
                    Name        = "nice richmenu",
                    ChatBarText = "touch me",
                    Areas       = new List <RichMenuArea>()
                    {
                        new RichMenuArea()
                        {
                            Action = new PostbackTemplateAction("action=buy&itemid=123"),
                            Bounds = new RichMenuBounds(0, 0, 2500, 1686)
                        }
                    }
                };


                var richMenuId = await lineClient.CreateRichMenu(richMenu);

                var image = new MemoryStream(File.ReadAllBytes(HttpContext.Current.Server.MapPath(@"~\Images\richmenu.PNG")));
                // Upload Image
                await lineClient.UploadRichMenuImage(richMenuId, image);

                // Link to user
                await lineClient.LinkRichMenuToUser(lineEvent.Source.UserId, richMenuId);
            }
            else if (textMessage.Text.ToLower() == "deleterichmenu")
            {
                // Get Rich Menu for the user
                var richMenuId = await lineClient.GetRichMenuIdForUser(lineEvent.Source.UserId);

                await lineClient.UnlinkRichMenuToUser(lineEvent.Source.UserId);

                await lineClient.DeleteRichMenu(richMenuId);
            }
            else if (textMessage.Text.ToLower() == "deleteallrichmenu")
            {
                // Get Rich Menu for the user
                var richMenuList = await lineClient.GetRichMenuList();

                foreach (var richMenu in richMenuList)
                {
                    await lineClient.DeleteRichMenu(richMenu["richMenuId"].ToString());
                }
            }
            else
            {
                replyMessage = new TextMessage(textMessage.Text);
            }
            await Reply(replyMessage);
        }
Пример #30
0
        private CarouselTemplate GetCarouselList()
        {
            CarouselTemplate _carousel = new CarouselTemplate()
            {
                CarouselName = "CarouselProductos",
                Elements     = new List <ElementTemplate>()
                {
                    new ElementTemplate()
                    {
                        Img_Url = "images/products/cool_tea.png",
                        Title   = "Cool Tea",
                        Buttons = new List <ButtonTemplate>()
                        {
                            new ButtonTemplate()
                            {
                                Text = "Ver más", HrefLink = "javascript:void();"
                            }
                        }
                    },
                    new ElementTemplate()
                    {
                        Img_Url = "images/products/volt.jpg",
                        Title   = "Volt",
                        Buttons = new List <ButtonTemplate>()
                        {
                            new ButtonTemplate()
                            {
                                Text = "Ver más", HrefLink = "javascript:void();"
                            }
                        }
                    },
                    new ElementTemplate()
                    {
                        Img_Url = "images/products/sporade.jpg",
                        Title   = "Sporade",
                        Buttons = new List <ButtonTemplate>()
                        {
                            new ButtonTemplate()
                            {
                                Text = "Ver más", HrefLink = "javascript:void();"
                            }
                        }
                    },
                    new ElementTemplate()
                    {
                        Img_Url = "images/products/cifrut.png",
                        Title   = "Cifrut",
                        Buttons = new List <ButtonTemplate>()
                        {
                            new ButtonTemplate()
                            {
                                Text = "Ver más", HrefLink = "javascript:void();"
                            }
                        }
                    },
                    new ElementTemplate()
                    {
                        Img_Url = "images/products/big_cola.jpg",
                        Title   = "Big Cola",
                        Buttons = new List <ButtonTemplate>()
                        {
                            new ButtonTemplate()
                            {
                                Text = "Ver más", HrefLink = "javascript:void();"
                            }
                        }
                    },
                    new ElementTemplate()
                    {
                        Img_Url = "images/products/agua_cielo.png",
                        Title   = "Cielo",
                        Buttons = new List <ButtonTemplate>()
                        {
                            new ButtonTemplate()
                            {
                                Text = "Ver más", HrefLink = "javascript:void();"
                            }
                        }
                    },
                    new ElementTemplate()
                    {
                        Img_Url = "images/products/pulp.png",
                        Title   = "Pulp",
                        Buttons = new List <ButtonTemplate>()
                        {
                            new ButtonTemplate()
                            {
                                Text = "Ver más", HrefLink = "javascript:void();"
                            }
                        }
                    }
                }
            };

            return(_carousel);
        }