private IMessageActivity CreateWorkItemCard(IDialogContext context, WorkItemEx workItem, string workItemId) { var message = context.MakeMessage(); var attachment = CreateWorkItemAttachment(workItem, workItemId); message.Attachments.Add(attachment); return(message); }
private Attachment CreateWorkItemAttachment(WorkItemEx workItem, string workItemId) { var encodedUrl = workItem.TeamProject; string goToWorkItemUrl = "https://teamsbot.visualstudio.com/" + encodedUrl + "/_workitems?id=" + workItemId + "&_a=edit"; return(new HeroCard { Title = workItem.Title, Subtitle = workItem.Url, Buttons = new List <CardAction> { new CardAction(ActionTypes.OpenUrl, Strings.VSTSGetWorkItemCardButtonCaption, value: goToWorkItemUrl), } }.ToAttachment()); }
/// <summary> /// Get VSTS Work Item /// </summary> /// <param name="accessToken"></param> /// <param name="workItemId"></param> /// <returns></returns> public static async Task <WorkItemEx> GetWorkItem(string accessToken, string workItemId) { WorkItemEx item = new WorkItemEx(); var uri = GetUri("https://teamsbot.visualstudio.com/DefaultCollection/_apis/wit/workitems?", //Tuple.Create("access_token", accessToken)); Tuple.Create("id", workItemId), Tuple.Create("api-version", "1.0")); var res = await VSTSRequestAPI(uri, accessToken); var jsonObject = JObject.Parse(res); // parse as array if (jsonObject != null) { item.Title = jsonObject["fields"]["System.Title"].ToString(); item.TeamProject = jsonObject["fields"]["System.TeamProject"].ToString(); item.Url = jsonObject["url"].ToString(); } return(item); }
public async virtual Task MessageReceivedAsync(IDialogContext context, IAwaitable <IMessageActivity> argument) { var msg = await(argument); ConversationReference conversationReference; VSTSAcessToken vstsToken = new VSTSAcessToken(); string magicNumber = string.Empty; string token = string.Empty; string refreshToken = string.Empty; String error = null; string requestedWorkItemId = string.Empty; bool IsAuthenticated = false; if (context.UserData.TryGetValue("persistedCookieVSTS", out conversationReference)) { requestedWorkItemId = conversationReference.User.Properties["workItemId"].ToString(); if (string.IsNullOrEmpty(requestedWorkItemId)) { requestedWorkItemId = msg.Text; IsAuthenticated = true; } else { magicNumber = conversationReference.User.Properties["MagicNumber"].ToString(); if (string.Equals(msg.Text, magicNumber)) { IsAuthenticated = true; } else { //When entered number is not valid await context.PostAsync(Strings.AuthMagicNumberNotMacthed); await LogIn(context, msg.Text); } } if (IsAuthenticated) { refreshToken = conversationReference.User.Properties["RefreshToken"].ToString(); //Get the refreshed token error = VSTSHelpers.PerformTokenRequest(VSTSHelpers.GenerateRefreshPostData(refreshToken), true, out vstsToken); if (String.IsNullOrEmpty(error)) { conversationReference.User.Properties["AccessToken"] = vstsToken.accessToken; conversationReference.User.Properties["RefreshToken"] = vstsToken.refreshToken; } WorkItemEx workItem = await VSTSHelpers.GetWorkItem(vstsToken.accessToken, requestedWorkItemId); if (workItem != null) { var workItemCardMessage = CreateWorkItemCard(context, workItem, requestedWorkItemId); await context.PostAsync(workItemCardMessage); } } } else { await LogIn(context, msg.Text); } }