Télécharger les pièces jointes à partir d’un bot Azure

Suivez ces étapes pour télécharger les pièces jointes un bot Azure Omnicanal.

  1. Obtenez le jeton pour votre bot en fournissant l’ID d’application Microsoft et la clé secrète client de votre bot.

  2. Récupérez l’attachmentId à partir de l’URL du contenu de la pièce jointe.

    Par exemple, si l’URL est https://us-api.asm.skype.com/v1/objects/0-eus-d1-5360689c55c308cb4e3b51722e46b801/, alors le attachmentId est 0-eus-d1-5360689c55c308cb4e3b51722e46b801.

  3. Insérez le attachmentId dans une variable RequestUri, puis utilisez RequestUri dans une requête GET, 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>);
    var requestHeaders = new Dictionary<string, string>()
      {
         { "Authorization", authorization.ToString() }
      };
    
    foreach (var header in requestHeaders)
      {
          httpRequest.Headers.Add(header.Key, header.Value);
      }
    
    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 décrit comment gérer les pièces jointes dans la plateforme de messagerie omnicanal Bot Service.

Tout d’abord, passons rapidement en revue les formats de pièces jointes dans le canal omnicanal Bot Service.

Formats de fichiers joints

Lorsque des pièces jointes sont envoyées depuis Omnicanal pour Customer Service au bot Azure sur le canal Bot Service Omnicanal, 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 service de bot Omnicanal

{
   "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 dans votre code de bot Azure

Les informations sur les pièces jointes sont transmises dans le canal omnicanal Bot Service et sont accessibles dans le code agent, comme indiqué dans l’exemple suivant.

// 1. Retrieve Attachment ID from ChannelData["amsReferences"]
if (turnContext.Activity.ChannelData != null &&
    turnContext.Activity.ChannelData is JObject incomingRequestChannelData &&
    incomingRequestChannelData.TryGetValue("amsReferences", out JToken amsReferencesArray))
{
    string attachmentId = JsonConvert.DeserializeObject<string[]>(amsReferencesArray.ToString()).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
    var token = await new MicrosoftAppCredentials("botAppId", "botAppSecret").GetTokenAsync();
    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", turnContext.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))
    {
        fileCreateStream.CopyTo(responseContentStream);
    }
}

Voir aussi

Prise en charge de la carte par canal
Prise en charge de la conversation instantanée en direct et des canaux asynchrones
Changements relatifs à la migration pour la nouvelle plateforme de messagerie Omnicanal