Bestandsbijlagen downloaden van een Azure-bot

In dit artikel wordt beschreven hoe u bestandsbijlagen downloadt van een Azure-bot die wordt gebruikt met berichten in Dynamics 365 Customer Service.

Voer de volgende stappen uit om bijlagen van een Azure-bot te downloaden:

  1. Verkrijg de token voor je bot met behulp van de Microsoft App ID van je bot en de client secret.

  2. Haal de attachmentId matrix op uit de amsReferences matrix in de kanaalgegevens van de activiteit.

    Als de amsReferences bijvoorbeeld ["0-eus-d1-5360689c55c308cb4e3b51722e46b801"] bevat, dan is attachmentId0-eus-d1-5360689c55c308cb4e3b51722e46b801.

  3. Voeg de attachmentId in een RequestUri variabele in en gebruik RequestUri deze vervolgens in een GET aanvraag, zoals:

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

Bestandsbijlagen beheren

Opmerking

De informatie in deze sectie is alleen van toepassing op Government Community Cloud (GCC).

In deze sectie wordt beschreven hoe u bestandsbijlagen beheert in het berichtenkanaal.

Controleer eerst de indelingen van bestandsbijlagen in het berichtenkanaal.

Bestandsindelingen voor bestandsbijlagen

Wanneer bestandsbijlagen vanuit Dynamics 365 Contact Center worden verzonden naar de Azure-agent in het berichtenkanaal, worden de gegevens die nodig zijn om de bestanden te downloaden, doorgegeven in de amsReferences velden amsMetadata van de Activity.ChannelData eigenschap.

Berichtenkanaal

{
   "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"
   }
}

Bestandsbijlagen beheren in uw Azure-agentcode

Bijlagegegevens worden doorgegeven in het servicekanaal van de Omnichannel-agent en kunnen worden geopend in agentcode, zoals wordt weergegeven in het volgende voorbeeld.

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

Kaartondersteuning per kanaal
Ondersteuning voor live chat en asynchrone kanalen