Λήψη συνημμένων αρχείων από Azure bot

Αυτό το άρθρο περιγράφει τον τρόπο λήψης συνημμένων αρχείων από ένα bot Azure που χρησιμοποιείται με ανταλλαγή μηνυμάτων στο Dynamics 365 Customer Service.

Για να κάνετε λήψη συνημμένων από ένα Azure bot, ολοκληρώστε τα παρακάτω βήματα:

  1. Λάβετε το διακριτικό για το bot χρησιμοποιώντας το Αναγνωριστικό εφαρμογής Microsoft και τον μυστικό κωδικό προγράμματος-πελάτη του bot σας.

  2. Λάβετε το attachmentId από τον amsReferences πίνακα στα δεδομένα καναλιού της δραστηριότητας.

    Για παράδειγμα, εάν ο πίνακας amsReferences περιέχει ["0-eus-d1-5360689c55c308cb4e3b51722e46b801"], τότε το attachmentId είναι 0-eus-d1-5360689c55c308cb4e3b51722e46b801.

  3. Εισαγάγετε το attachmentId σε μια RequestUri μεταβλητή και, στη συνέχεια, χρησιμοποιήστε RequestUri το σε μια GET αίτηση, όπως αυτό:

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

Διαχείριση συνημμένων αρχείων

Σημείωση

Οι πληροφορίες σε αυτήν την ενότητα ισχύουν μόνο για cloud κοινότητας δημόσιων οργανισμών (GCC).

Αυτή η ενότητα περιγράφει τον τρόπο διαχείρισης συνημμένων αρχείων στο κανάλι ανταλλαγής μηνυμάτων.

Πρώτα, εξετάστε τις μορφές συνημμένου αρχείου στο κανάλι ανταλλαγής μηνυμάτων.

Μορφές συνημμένου αρχείου

Όταν αποστέλλονται συνημμένα αρχείων από το Κέντρο επαφών του Dynamics 365 στον παράγοντα Azure στο κανάλι ανταλλαγής μηνυμάτων, οι πληροφορίες που απαιτούνται για τη λήψη των αρχείων μεταβιβάζονται στα amsReferences πεδία και amsMetadata της ιδιότητας Activity.ChannelData .

Κανάλι ανταλλαγής μηνυμάτων

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

Τρόπος διαχείρισης συνημμένων αρχείων στον κώδικα παράγοντα Azure σας

Οι πληροφορίες συνημμένων μεταβιβάζονται στο κανάλι υπηρεσίας του παράγοντα πανκαναλικού και είναι προσβάσιμες στον κώδικα του παράγοντα, όπως φαίνεται στο παρακάτω παράδειγμα.

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

Υποστήριξη κάρτας κατά κανάλι
Υποστήριξη για ζωντανή συνομιλία και ασύγχρονα κανάλια