private static async Task SendContactAsync(ClientMessenger client, string userId)
        {
            var genericTemplate = new GenericTemplateAttachment(new List <GenericElement>
            {
                new GenericElement
                {
                    ImageUrl = "https://vignette.wikia.nocookie.net/jamesbond/images/7/78/Eva_Green.jpg/revision/latest/scale-to-width-down/1000?cb=20111001142753",
                    Title    = "Eva Green",
                    Subtitle = "Mighty Health\n108 Kirkbride Crescent, Maple, ON\[email protected]\n17148736202",
                    Buttons  = new List <Button>
                    {
                        new CallMeButton
                        {
                            Title       = "Call",
                            PhoneNumber = "17148736202"
                        },
                    }
                },
            });

            var message = new AttachmentMessage {
                Attachment = genericTemplate
            };
            var package = await client.GetJSONRenderedAsync(userId, message);

            var result = await client.SendMessageAsync(userId, message);
        }
        private static async Task SendGenericTemplateAsync(ClientMessenger client, string userId)
        {
            var genericTemplate = new GenericTemplateAttachment(new List <GenericElement>
            {
                new GenericElement
                {
                    ImageUrl = "https://hubsterdevcdn.blob.core.windows.net/pub/demo/webchat/cars/list_car_dragon.png",
                    //ItemUrl = "google.com?action=123",
                    Title    = "Green Dragon",
                    Subtitle = "$2.99\nPage *Scoped* User ID (PSID) of the message recipient. The user needs to have interacted with any of the Messenger platform.",
                    //DefaultAction = new DefaultAction
                    //{
                    //    // Title = "Default Action Title",
                    //    Type = "web_url",
                    //    Url = "google.com?item=123",
                    //    WebviewHeightRatio = "COMPACT",
                    //}
                },
                //new GenericElement
                //{
                //    ImageUrl = "https://hubsterdevcdn.blob.core.windows.net/pub/demo/webchat/cars/list_car_red_baron.png",
                //    Title = "My Title",
                //    Subtitle = "This is my subtitle and it's very long.\nNext line."
                //}
            });;

            var message = new AttachmentMessage {
                Attachment = genericTemplate
            };
            var package = await client.GetJSONRenderedAsync(userId, message);

            var result = await client.SendMessageAsync(userId, message);
        }
        private static async Task SendMediaUrlAsync(ClientMessenger client, string userId)
        {
            var vedio   = new VideoAttachment("https://hubsterdevcdn.blob.core.windows.net/engine/00000000-0000-0000-0000-000000000001/media/8338156741751296193-textinmotion_sample_576p.mp4");
            var message = new AttachmentMessage {
                Attachment = vedio
            };
            var package = await client.GetJSONRenderedAsync(userId, message);

            var result = await client.SendMessageAsync(userId, message);
        }
        private static async Task SendButtonTemplateAsync(ClientMessenger client, string userId)
        {
            // *NOTE: You're only allowed to send 3 buttons at a time
            var list = new List <Button>
            {
                //new UrlButton()
                //{
                //    Title = "My Url",
                //    Url = "http://google.com"
                //},
                //new PostbackButton
                //{
                //    Title = "Button 1",
                //    Payload = "Button 1 selected"
                //},
                //new PostbackButton
                //{
                //    Title = "Button 2",
                //    Payload = "Button 2 selected"
                //},
                //new PostbackButton
                //{
                //    Title = "Button 3",
                //    Payload = "Button 3 selected"
                //},
                new CallMeButton()
                {
                    Title       = "Call me please",
                    PhoneNumber = "416555000"
                },
                //new LogInButton()
                //{
                //    Url = "http://google.com"
                //},
                //new LogOutButton()
                //{
                //}
            };

            var text    = "Hey there welcome to Hubster! How can we help you today?";
            var message = new AttachmentMessage {
                Attachment = new ButtonTemplateAttachment(text, list)
            };
            var package = await client.GetJSONRenderedAsync(userId, message);

            var result = await client.SendMessageAsync(userId, message);
        }
        private static async Task SendFacebookMediaAsync(ClientMessenger client, string userId)
        {
            var mediaTemplate = new MedidaTemplateAttachment(new List <MediaElement>
            {
                new ImageElement
                {
                    Url = "need a facebook url"
                }
            });

            var message = new AttachmentMessage {
                Attachment = mediaTemplate
            };
            var package = await client.GetJSONRenderedAsync(userId, message);

            var result = await client.SendMessageAsync(userId, message);
        }
        private static async Task SendLocationAsync(ClientMessenger client, string userId)
        {
            var genericTemplate = new GenericTemplateAttachment(new List <GenericElement>
            {
                new GenericElement
                {
                    ImageUrl = "https://hubsterdevcdn.blob.core.windows.net/engine/00000000-0000-0000-0000-000000000001/maps/2607085880410200450-map.png",
                    ItemUrl  = "https://www.google.com/maps/place/108+Kirkbride+Crescent,+Vaughan,+ON+L6A+2J6",
                    Title    = "Location",
                    Subtitle = "108 Kirkbride Crescent, Maple, ON, Canada, L6A2J6",
                },
            });

            var message = new AttachmentMessage {
                Attachment = genericTemplate
            };
            var package = await client.GetJSONRenderedAsync(userId, message);

            var result = await client.SendMessageAsync(userId, message);
        }
        private static async Task SendCardAsync(ClientMessenger client, string userId)
        {
            var genericTemplate = new GenericTemplateAttachment(new List <GenericElement>
            {
                new GenericElement
                {
                    ImageUrl = "https://hubsterdevcdn.blob.core.windows.net/pub/demo/webchat/retail/contacts/maxim_shaw2.png",
                    Title    = "Some Card Title",
                    Subtitle = "$2.99\nSome card details that can be at most 80 characters.",
                    Buttons  = new List <Button>
                    {
                        new UrlButton
                        {
                            Title = "My Url",
                            Url   = "http://google.com"
                        },
                        new PostbackButton
                        {
                            Title   = "My postback",
                            Payload = "My postback selected"
                        },
                        // ignore
                        new CallMeButton
                        {
                            Title       = "Call me please",
                            PhoneNumber = "416419001"
                        },
                    }
                },
            });

            var message = new AttachmentMessage {
                Attachment = genericTemplate
            };
            var package = await client.GetJSONRenderedAsync(userId, message);

            var result = await client.SendMessageAsync(userId, message);
        }
        private static async Task SendCarouselAsync(ClientMessenger client, string userId)
        {
            var genericTemplate = new GenericTemplateAttachment(new List <GenericElement>
            {
                new GenericElement
                {
                    ImageUrl = "https://hubsterdevcdn.blob.core.windows.net/pub/demo/webchat/cars/list_car_victorious.png",
                    Title    = "Victorious",
                    Subtitle = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s.",
                    Buttons  = new List <Button>
                    {
                        // NOTE: consider adding padding to Title. Must be 16 minimal
                        new PostbackButton
                        {
                            Title   = Pad("Victorious", 16),
                            Payload = "Victorious"
                        },
                        // NOTE: consider adding padding to Title. Must be 16 minimal
                        new UrlButton
                        {
                            Title = Pad("Info", 16),
                            Url   = "https://hubster.io?car=victorious"
                        },
                    }
                },
                new GenericElement
                {
                    ImageUrl = "https://hubsterdevcdn.blob.core.windows.net/pub/demo/webchat/cars/list_car_dragon.png",
                    Title    = "Green Dragon",
                    Subtitle = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s.",
                    Buttons  = new List <Button>
                    {
                        new PostbackButton
                        {
                            Title   = Pad("Green Dragon", 16),
                            Payload = "Green Dragon"
                        },
                        new UrlButton
                        {
                            Title = Pad("Info", 16),
                            Url   = "https://hubster.io?car=green-dragon"
                        },
                    }
                },
                new GenericElement
                {
                    ImageUrl = "https://hubsterdevcdn.blob.core.windows.net/pub/demo/webchat/cars/list_car_panther.png",
                    Title    = "Panther",
                    Subtitle = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s.",
                    Buttons  = new List <Button>
                    {
                        new PostbackButton
                        {
                            Title   = Pad("Panther", 16),
                            Payload = "Panther"
                        },
                        new UrlButton
                        {
                            Title = Pad("Info", 16),
                            Url   = "https://hubster.io?car=panther"
                        },
                    }
                },
                new GenericElement
                {
                    ImageUrl = "https://hubsterdevcdn.blob.core.windows.net/pub/demo/webchat/cars/list_car_red_baron.png",
                    Title    = "Red Baron",
                    Subtitle = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy text ever since the 1500s.",
                    Buttons  = new List <Button>
                    {
                        new PostbackButton
                        {
                            Title   = Pad("Red Baron", 16),
                            Payload = "Red Baron"
                        },
                        new UrlButton
                        {
                            Title = Pad("Info", 16),
                            Url   = "https://hubster.io?car=red-baron"
                        },
                    }
                },
            });

            var message = new AttachmentMessage {
                Attachment = genericTemplate
            };
            var package = await client.GetJSONRenderedAsync(userId, message);

            var result = await client.SendMessageAsync(userId, message);
        }