public static async Task <EndUserAndAgentConversationMappingState> GetFromVso(int vsoId)
        {
            using (WorkItemTrackingHttpClient workItemTrackingHttpClient = VsoHelper.GetWorkItemTrackingHttpClient())
            {
                try
                {
                    TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem workitem =
                        await workItemTrackingHttpClient.GetWorkItemAsync(vsoId);

                    return(new EndUserAndAgentConversationMappingState(vsoId.ToString(),
                                                                       workitem.Fields[VsoHelper.EndUserNameFieldName].ToString(),
                                                                       workitem.Fields[VsoHelper.EndUserIdFieldName].ToString(),
                                                                       workitem.Fields[VsoHelper.EndUserConversationIdFieldName].ToString(),
                                                                       workitem.Fields[VsoHelper.AgentConversationIdFieldName].ToString()));
                }
                catch (Exception ex)
                {
                    WebApiConfig.TelemetryClient.TrackException(ex, new Dictionary <string, string>
                    {
                        { "function", "CreateAConversation" },
                        { "debugNote", "error closing task" },
                        { "vsoId", vsoId.ToString() },
                    });

                    throw;
                }
            }
        }
        public async Task SaveInVso(string vsoId)
        {
            Uri uri = new Uri(VsoHelper.Uri);

            JsonPatchDocument patchDocument = new JsonPatchDocument
            {
                new JsonPatchOperation
                {
                    Operation = Operation.Add, Path = $"/fields/{VsoHelper.EndUserConversationIdFieldName}", Value = EndUserConversationId
                },
                new JsonPatchOperation
                {
                    Operation = Operation.Add, Path = $"/fields/{VsoHelper.AgentConversationIdFieldName}", Value = AgentConversationId
                },
                new JsonPatchOperation
                {
                    Operation = Operation.Add, Path = $"/fields/{VsoHelper.EndUserIdFieldName}", Value = EndUserId
                },
                new JsonPatchOperation
                {
                    Operation = Operation.Add, Path = $"/fields/{VsoHelper.EndUserNameFieldName}", Value = EndUserName
                },
            };

            using (WorkItemTrackingHttpClient workItemTrackingHttpClient = VsoHelper.GetWorkItemTrackingHttpClient())
            {
                try
                {
                    TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem result =
                        await workItemTrackingHttpClient.UpdateWorkItemAsync(patchDocument, Convert.ToInt32(vsoId));

                    Trace.TraceInformation($"Project {vsoId} successfully updated. {this}");
                }
                catch (Exception ex)
                {
                    WebApiConfig.TelemetryClient.TrackException(ex, new Dictionary <string, string>
                    {
                        { "function", "SaveInVso" },
                        { "debugNote", "Failed to update project" },
                        { "vsoId", vsoId },
                    });
                    throw;
                }
            }
        }
Example #3
0
        private static Attachment BuildOptionsForExistingProject(TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem workItem)
        {
            var heroCard = new HeroCard
            {
                Title    = "Hello! I am Expert Intelligence Bot.",
                Subtitle = "I am supported by experts who can work for you." +
                           $"You can also reach out to me by sending SMS at {ConfigurationManager.AppSettings["BotPhoneNumber"]}",
                Text = $"I am tracking project #{workItem.Id} " +
                       $"due on {workItem.Fields["Microsoft.VSTS.Scheduling.TargetDate"]} " +
                       $"Description: {workItem.Fields[VsoHelper.DescriptionFieldName]}). " +
                       "Before we begin working on new one, we need to first close existing project one",
                Buttons = new List <CardAction>
                {
                    new CardAction(ActionTypes.ImBack, $"Get details of project #{workItem.Id}", value: $"getproject {workItem.Id}"),
                    new CardAction(ActionTypes.ImBack, $"Close project #{workItem.Id}", value: $"closeproject {workItem.Id}")
                }
            };

            return(heroCard.ToAttachment());
        }