-
Notifications
You must be signed in to change notification settings - Fork 1
/
WhoAmIIntent.cs
89 lines (80 loc) · 3.32 KB
/
WhoAmIIntent.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
namespace sample.Areas
{
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Zyin.IntentBot.Intent;
using Zyin.IntentBot.Services;
/// <summary>
/// Intent context for whoami, which will return your user info from AAD graph api.
/// This is an authenticated context so it'll ask for authentication. Check default.htm for more details.
/// </summary>
public class WhoAmIContext : AuthIntentContext
{
public override string IntentName => SampleIntentService.Intent_WhoAmI;
}
/// <summary>
/// Handler to process greetings intent
/// </summary>
public class WhoAmIIntentHandler : IntentHandler<WhoAmIContext>
{
/// <summary>
/// Path to profile card
/// </summary>
private static readonly string[] profileCardPaths = { "Areas", "profileCard.json" };
/// <summary>
/// Graph service reference
/// </summary>
protected readonly GraphService graphService;
/// <summary>
/// file content service
/// </summary>
private readonly JsonAdaptiveCardService jsonCardService;
/// <summary>
/// Initialize a new instance of the <see cref="WhoAmIIntentHandler"> class
/// </summary>
/// <param name="graphService">graph service</param>
public WhoAmIIntentHandler(GraphService graphService, JsonAdaptiveCardService jsonCardServie)
{
this.graphService = graphService ?? throw new ArgumentNullException(nameof(graphService));
this.jsonCardService = jsonCardServie ?? throw new ArgumentNullException(nameof(jsonCardServie));
}
/// <summary>
/// Process the whoami request
/// </summary>
/// <param name="turnContext"></param>
/// <param name="intentContext"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
protected override async Task ProcessIntentInternalAsync(
ITurnContext turnContext,
WhoAmIContext intentContext,
CancellationToken cancellationToken)
{
// Set user token
var token = intentContext.AppToken;
this.graphService.InitializeTokenAsync(token);
// Get profile and photo
var profileTask = this.graphService.GetMyProfile();
var photoTask = this.graphService.GetMyPhoto();
await Task.WhenAll(profileTask, photoTask);
var profile = await profileTask;
var photoUrl = await photoTask;
var values = new Dictionary<string, string>()
{
{ nameof(photoUrl), photoUrl },
{ "name", profile.name },
{ "title", profile.title ?? "No Title Specified" },
{ "mail", profile.mail },
{ "mobilePhone", profile.mobilePhone },
{ "id", profile.id.ToString() },
};
// Construct profile card and return
var jsonCard = await this.jsonCardService.GetJsonAdaptiveCardAsync(profileCardPaths);
var attachment = jsonCard.GetAttachment(values);
await turnContext.SendActivityAsync(MessageFactory.Attachment(attachment), cancellationToken);
}
}
}