/// <summary> /// To parse the incoming json from QnA Maker in to a reply /// </summary> /// <param name="customResponse"></param> /// <param name="responseJson"></param> /// <param name="telemetryClient"></param> /// <returns></returns> public static Activity getAnswer(Activity customResponse, string responseJson, IBotTelemetryClient telemetryClient) { Answers answersHolder = null; CardMaker _cardMaker = new CardMaker(telemetryClient); try { answersHolder = JsonConvert.DeserializeObject <Answers>(responseJson.Trim()); } catch (Exception e) { telemetryClient.TrackException(e, TelemetryMetaData.BindExceptionEvent(TelemetryKey.JsonDeserializationError, "QnA Answer Json to Answer Model")); } switch (answersHolder.Type) { case "Multi_Response": customResponse = MessageFactory.Text(answersHolder.Content[RandomSelector.Rand(answersHolder.Content.Count())]); break; case "Image_Response": try { var response = customResponse.CreateReply(); response.Attachments = new List <Attachment>() { _cardMaker.getCardAttachment(_cardMaker.getImage_ResponseCardJson(answersHolder)) }; return(response); } catch (Exception e) { telemetryClient.TrackException(e, TelemetryMetaData.BindExceptionEvent(TelemetryKey.CardRenderError, "Image_Response card error", customResponse.Conversation.Id, responseJson)); } break; case "Card_Response": try { var response = customResponse.CreateReply(); response.Attachments = new List <Attachment>() { _cardMaker.getCardAttachment(_cardMaker.getCard_ResponseCardJson(answersHolder)) }; return(response); } catch (Exception e) { telemetryClient.TrackException(e, TelemetryMetaData.BindExceptionEvent(TelemetryKey.CardRenderError, "Card_Response card error", customResponse.Conversation.Id, responseJson)); } break; default: customResponse = MessageFactory.Text(answersHolder.Content.First()); break; } return(customResponse); }
//When a new chat session starts protected override async Task OnMembersAddedAsync(IList <ChannelAccount> membersAdded, ITurnContext <IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { foreach (var member in membersAdded) { if (member.Id != turnContext.Activity.Recipient.Id) { //Make welcome card Attachment attachmennt = null; try { var cardjson = File.ReadAllText(Path.Combine(new string[] { ".", @"wwwroot/WelcomeCard.json" })); attachmennt = (new CardMaker(TelemetryClient)).getCardAttachment(cardjson); } catch (Exception e) { TelemetryClient.TrackException(e, TelemetryMetaData.BindExceptionEvent(TelemetryKey.CardRenderError, "Welcome Card Error")); } await turnContext.SendActivityAsync(MessageFactory.Attachment(attachmennt), cancellationToken); } } }