Пример #1
0
        /// <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);
        }
Пример #2
0
 //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);
         }
     }
 }