Esempio n. 1
0
        // Called when a link message handler runs (i.e. we render a preview to a link whose domain is
        // included in the messageHandlers in the manifest)
        public async Task <MessagingExtensionResponse> HandleInvokeActivityAsync(ITurnContext turnContext, AppBasedLinkQuery query)
        {
            var previewImg = new List <CardImage>
            {
                new CardImage("https://assets.pokemon.com/assets/cms2/img/pokedex/full/025.png", "Pokemon"),
            };
            var preview     = new ThumbnailCard("Preview Card", null, $"Your query URL: {query.Url}", previewImg).ToAttachment();
            var heroCard    = new HeroCard("Preview Card", null, $"Your query URL: <pre>{query.Url}</pre>", previewImg).ToAttachment();
            var resultCards = new List <MessagingExtensionAttachment> {
                heroCard.ToMessagingExtensionAttachment(preview)
            };

            return(new MessagingExtensionResponse
            {
                ComposeExtension = new MessagingExtensionResult("list", "result", resultCards),
            });
        }
        /// <summary>
        /// Handles messaging extension action of "submit action" asynchronously.
        /// </summary>
        /// <param name="turnContext">The turn context.</param>
        /// <param name="query">The query object of messaging extension action.</param>
        /// <returns>Task tracking operation.</returns>
        public override async Task <InvokeResponse> HandleMessagingExtensionSubmitActionAsync(ITurnContext turnContext, MessagingExtensionAction query)
        {
            bool    done = false;
            JObject data = null;

            if (query.Data != null)
            {
                data = JObject.FromObject(query.Data);
                done = (bool)data["done"];
            }

            var body = new MessagingExtensionActionResponse();

            if (data != null && done)
            {
                string sharedMessage = string.Empty;
                if (query.CommandId.Equals("shareMessage") && query.CommandContext.Equals("message"))
                {
                    sharedMessage = $"Shared message: <div style=\"background:#F0F0F0\">{JObject.FromObject(query.MessagePayload).ToString()}</div><br/>";
                }

                var preview     = new ThumbnailCard("Created Card", null, $"Your input: {data["userText"]?.ToString()}").ToAttachment();
                var heroCard    = new HeroCard("Created Card", null, $"{sharedMessage}Your input: {data["userText"]?.ToString()}").ToAttachment();
                var resultCards = new List <MessagingExtensionAttachment> {
                    heroCard.ToMessagingExtensionAttachment(preview)
                };

                body.ComposeExtension = new MessagingExtensionResult("list", "result", resultCards);
            }
            else if ((query.CommandId != null && query.CommandId.Equals("createWithPreview")) || query.BotMessagePreviewAction != null)
            {
                if (query.BotMessagePreviewAction == null)
                {
                    body.ComposeExtension = new MessagingExtensionResult
                    {
                        Type            = "botMessagePreview",
                        ActivityPreview = new Activity
                        {
                            Attachments = new List <Attachment> {
                                this.TaskModuleResponseCard(query, null)
                            },
                        },
                    };
                }
                else
                {
                    var userEditActivities = query.BotActivityPreview;
                    var card = userEditActivities?[0]?.Attachments?[0];
                    if (card == null)
                    {
                        body.Task = new TaskModuleMessageResponse
                        {
                            Type  = "message",
                            Value = "Missing user edit card. Something wrong on Teams client.",
                        };
                    }
                    else if (query.BotMessagePreviewAction.Equals("send"))
                    {
                        Activity activity = turnContext.Activity.CreateReply();
                        activity.Attachments = new List <Attachment> {
                            card
                        };
                        await turnContext.SendActivityAsync(activity).ConfigureAwait(false);
                    }
                    else if (query.BotMessagePreviewAction.Equals("edit"))
                    {
                        body.Task = new TaskModuleContinueResponse
                        {
                            Type  = "continue",
                            Value = new TaskModuleTaskInfo
                            {
                                Card = card,
                            },
                        };
                    }
                }
            }
            else
            {
                body.Task = this.TaskModuleResponseTask(query, false);
            }

            return(new InvokeResponse
            {
                Status = 200,
                Body = body,
            });
        }