Partager via


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

Omnicanal pour Customer Service contient une suite de capacités qui étendent la puissance de Dynamics 365 Customer Service Enterprise pour permettre aux organisations de se connecter et d’interagir instantanément avec leurs clients sur les canaux de messagerie numérique. Une licence supplémentaire est requise pour accéder à Omnichannel pour Customer Service. Pour plus d’informations, voir les pages Vue d’ensemble de la tarification de Dynamics 365 Customer Service et Plan de tarification de Dynamics 365 Customer Service.

Suivez ces étapes pour télécharger les pièces jointes de votre bot Azure via le canal Microsoft Teams.

  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 pendant la migration

Note

Les informations contenues dans cette section s’appliquent uniquement à Government Community Cloud (GCC).

Cette section décrit comment vous devez gérer les pièces jointes lorsque vous migrez vos implémentations omnicanales depuis le canal Microsoft Teams vers la nouvelle plateforme de messagerie du service de bot Omnicanal.

Avant de commencer, révisons rapidement les formats de pièces jointes dans le canal de service de bot Teams et le canal de service de bot omnicanal.

Formats de fichiers joints

Lorsque des pièces jointes sont envoyées depuis Omnicanal pour Customer Service à un bot Azure sur le canal de service bot Teams, le format de pièce jointe est transmis dans la propriété Activity.Attachments. Le type de contenu de cette pièce jointe est « application/vnd.microsoft.teams.file.download.info ».

Canal de service de bot Teams

{
   "attachments":[
      {
         "contentType":" text/html",
         "contentUrl":null,
         "content ":{
            "name":null,
            "thumbnailUrl":null
         }
      },
      {
         "contentType":"application/vnd.microsoft.teams.file.download.info",
         "contentUrl":"https://us-api.asm.skype.com/v1/objects/0-wus-d8-111 a550dfI 6e947f250519ffc242763d/",
         "content":{
            "downloadUrl":"https://us-api.asm.skype.com/v1/objects/0-wus-d8-111 a550dfI 6e947f250519ffc242763d/",
            "uniqueld":"0-wus-d8-111 a550dfI 6e947f250519ffc242763d",
            "fileType":"png "
         },
         "name":"bot.png",
         "thumbnailUrl":null
      }
   ]
}

Cependant, lorsque des pièces jointes sont envoyées depuis Omnicanal pour Customer Service au bot Azure sur le canal de service bot 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 de pièce jointe sont transmises différemment dans le canal de service de bot Omnicanal et le canal de service de bot Teams. Pour assurer une migration fluide entre les deux canaux de conversation instantanée, la logique spécifique au canal Teams doit être conservée dans le code du bot, de même que la logique spécifique au canal du service de bot omnicanal dans le code de bot, comme illustré dans l’exemple de code 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);
    }
}
else if (turnContext.Activity.Attachments != null)
{
    // 1. Retrieve Teams attachment
    var teamsAttachment = turnContext.Activity.Attachments.FirstOrDefault(attachment => attachment.ContentType.Equals("application/vnd.microsoft.teams.file.download.info", StringComparison.OrdinalIgnoreCase));

    if (teamsAttachment != null)
    {
        // 1. Retrieve Teams Attachment ID from Content["uniqueId"] field
        string attachmentId = (teamsAttachment.Content as JObject).GetValue("uniqueId").ToString();

        // 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());

        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.SendAsync(httpRequest);
    }
}

Voir aussi

Prise en charge de la carte par canal
Prise en charge de la conversation instantanée en direct et des canaux asynchrones
Modifications de la migration pour la nouvelle plateforme de messagerie omnicanale