Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment télécharger des pièces jointes de fichier à partir d’un bot Azure utilisé avec la messagerie dans Dynamics 365 Customer Service.
Pour télécharger des pièces jointes à partir d’un bot Azure, procédez comme suit :
Obtenez le jeton pour votre bot en fournissant l’ID d’application Microsoft et la clé secrète client de votre bot.
Obtenez le
attachmentIddu tableauamsReferencesdans les données du canal de l’activité.Par exemple, si la
amsReferencesvaleur contient["0-eus-d1-5360689c55c308cb4e3b51722e46b801"], alors laattachmentIdvaleur est0-eus-d1-5360689c55c308cb4e3b51722e46b801.Insérez le
attachmentIddans une variableRequestUri, puis utilisezRequestUridans une requêteGET, comme ceci :
string requestUri = $"https://botapi.skype.com/amer/v3/attachments/{attachmentId}/views/original";
var httpRequest = new HttpRequestMessage(HttpMethod.Get, requestUri);
var authorization = new AuthenticationHeaderValue("bearer", <add the botToken here>);
httpRequest.Headers.Authorization = authorization;
httpRequest.Headers.Add("BotAcsId", activity.Recipient.Id);
HttpResponseMessage response = await client.SendAsync(httpRequest);
Gérer les pièces jointes
Note
Les informations contenues dans cette section s’appliquent uniquement à Government Community Cloud (GCC).
Cette section explique comment gérer les pièces jointes de fichiers dans le canal de messagerie.
Tout d’abord, passez en revue les formats de pièce jointe du fichier dans le canal de messagerie.
Formats de fichiers joints
Lorsque des pièces jointes de fichiers sont envoyées à partir du Centre de contacts Dynamics 365 vers l’agent Azure sur le canal de messagerie, les informations requises pour télécharger les fichiers sont transmises dans les champs amsReferences et amsMetadata de la propriété Activity.ChannelData.
Canal de messagerie
{
"recipient":{
"id":"8:acs:5ecf37b1-11 Oc-414g-ab33-804ffd6b4a33_eooe0010-7c57-1ceb-nec-113aOdOOb272",
"name":"Omnichannel-test-bot",
"aadObjectId":null,
"role":null
},
"attachments ":null,
"channelData":{
"tags":"Channelld-lcw,FromCustomer",
"deliveryMode":"bridged",
"fromUserId":"8:acs:5ecf37b1-110c-4149-ab33-804ffd6b4a33_00000010-61 b9-ab1 d-3dfe-9c3aOd009ea4",
"amsReferences":[
"0-wus-d6-20e7797d208fab388cc11b09674d166"
],
"amsMetadata":[
{
"contentType":"image/png",
"fileName":"SurnmerTime.png"
}
],
"sourceChannelId":"omnichannel"
}
}
Comment gérer les pièces jointes de fichiers dans votre code d’agent Azure
Les informations de pièce jointe sont transmises dans le canal de service de l’agent Omnichannel et sont accessibles dans le code de l’agent, comme illustré dans l’exemple suivant.
// 1. Retrieve Attachment ID from ChannelData["amsReferences"]
if (activity.ChannelData != null &&
activity.ChannelData is Dictionary<string, JsonElement> channelData &&
channelData.TryGetValue("amsReferences", out var amsReferencesElement))
{
var amsReferencesString = amsReferencesElement.GetString() ?? amsReferencesElement.ToString();
string attachmentId = JsonConvert.DeserializeObject<string[]>(amsReferencesString).FirstOrDefault();
// 2. Build HTTP request for specified attachment ID.
string requestUri = $"https://botapi.skype.com/amer/v3/attachments/{attachmentId}/views/original";
var httpRequest = new HttpRequestMessage(HttpMethod.Get, requestUri);
// 3. Acquire authentication token and add it to request headers
// Option A: Using IConnections (recommended)
var connection = connections.GetConnection("ServiceConnection");
var token = await connection.GetAccessTokenAsync(
"https://api.botframework.com",
new[] { "https://api.botframework.com/.default" },
forceRefresh: false);
// Option B: Using OAuth client credentials flow
// var tokenRequest = new HttpRequestMessage(HttpMethod.Post, $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token")
// {
// Content = new FormUrlEncodedContent(new Dictionary<string, string>
// {
// { "grant_type", "client_credentials" },
// { "client_id", botAppId },
// { "client_secret", botAppSecret },
// { "scope", "https://api.botframework.com/.default" }
// })
// };
// var tokenResponse = await client.SendAsync(tokenRequest);
// var tokenContent = await tokenResponse.Content.ReadAsStringAsync();
// var token = JsonConvert.DeserializeObject<dynamic>(tokenContent).access_token;
var authorization = new AuthenticationHeaderValue("bearer", token);
httpRequest.Headers.Add("Authorization", authorization.ToString());
// 4. Add Azure Communication Services Bot ID to request header. This is required to achieve good download performance.
httpRequest.Headers.Add("BotAcsId", activity.Recipient.Id);
// 5. Use HttpClient to execute the request and download attachment
var response = await client.SendAsync(httpRequest);
// 6. Save HTTP response stream to the file
var responseContentStream = await response.Content.ReadAsStreamAsync();
using (FileStream fileCreateStream = new FileStream("file path", FileMode.Create))
{
await responseContentStream.CopyToAsync(fileCreateStream);
}
}
Informations connexes
Soutien des cartes par canal
Prise en charge de la conversation instantanée en direct et des canaux asynchrones