Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
- Los agentes no admiten el envío y la recepción de archivos en Government Community Cloud High (GCC High), el Departamento de Defensa (DoD) y Teams operados por entornos de 21Vianet.
Hay dos maneras de enviar y recibir archivos:
Use las API de Microsoft Graph: Este método funciona en todos los ámbitos de Microsoft Teams (
personal,channel,groupchat).Use las API de consentimiento de archivos del SDK de Teams: Solo admiten archivos en
personalcontexto.
Uso de graph API
Publique mensajes con datos adjuntos de tarjeta que hagan referencia a archivos de SharePoint ya existentes, mediante Graph API para OneDrive y SharePoint. Para usar graph API, obtenga acceso a cualquiera de las siguientes opciones a través del flujo de autorización estándar de OAuth 2.0:
- Carpeta de OneDrive de un usuario para archivos
personalygroupchat. - Los archivos del canal de un equipo para
channelarchivos.
Las API de Graph funcionan en todos los ámbitos de Teams. Para obtener más información, vea enviar datos adjuntos de archivos de mensajes de chat.
Como alternativa, puede enviar y recibir archivos desde un agente mediante las API de consentimiento de archivos del SDK de Teams.
Uso de las API del archivo de consentimiento del SDK de Teams
Las API de consentimiento de archivos del SDK de Teams solo funcionan en el personal contexto. No funcionan en el channel contexto o groupchat .
Con el SDK de Teams, el agente puede enviar y recibir archivos directamente con los usuarios en el personal contexto, también conocidos como chats personales. Implemente funcionalidades, como son informes de gastos, reconocimiento de imágenes, archivado de archivos y firmas electrónicas que implican la edición del contenido del archivo. Los archivos compartidos en Teams suelen aparecer como tarjetas y permiten una visualización enriquecida desde la aplicación.
En las secciones siguientes se describe cómo enviar contenido de archivo como interacción directa del usuario, como el envío de un mensaje. El SDK de Teams proporciona rutas de actividad para controlar flujos de trabajo de consentimiento de archivos, incluidos file.consent.accept y file.consent.decline.
Configuración del agente para admitir archivos
Para enviar y recibir archivos en el agente, establezca la supportsFiles propiedad del manifiesto trueen . Esta propiedad se describe en la sección bots de la referencia del manifiesto.
La definición tiene este aspecto, "supportsFiles": true. Si el agente no habilita supportsFiles, las características enumeradas en esta sección no funcionan.
Recibir archivos en un chat personal
Cuando un usuario envía un archivo al agente, el archivo se carga por primera vez en el almacenamiento de OneDrive para la Empresa del usuario. A continuación, el agente recibe una actividad de mensaje que notifica al usuario sobre la carga del usuario. La actividad contiene metadatos de archivo, como es su nombre y la dirección URL de contenido. El usuario puede leer directamente desde esta dirección URL para capturar su contenido binario.
Ejemplo de actividad de mensaje con datos adjuntos de archivo
El código siguiente muestra un ejemplo de actividad de mensaje con datos adjuntos de archivo:
{
"attachments": [{
"contentType": "application/vnd.microsoft.teams.file.download.info",
"contentUrl": "https://contoso.sharepoint.com/personal/johnadams_contoso_com/Documents/Applications/file_example.txt",
"name": "file_example.txt",
"content": {
"downloadUrl" : "https://download.link",
"uniqueId": "1150D938-8870-4044-9F2C-5BBDEBA70C9D",
"fileType": "txt",
"etag": "123"
}
}]
}
En la tabla siguiente se describen las propiedades de contenido de los datos adjuntos:
| Propiedad | Objetivo |
|---|---|
downloadUrl |
Dirección URL de OneDrive para capturar el contenido del archivo. El usuario puede emitir un HTTP GET directamente desde esta dirección URL. |
uniqueId |
Identificador de archivo único. Este es el identificador del elemento de unidad de OneDrive, en caso de que el usuario envíe un archivo al agente. |
fileType |
Tipo de archivo, como .pdf o .docx. |
Como procedimiento recomendado, confirme la carga del archivo mediante el envío de un mensaje al usuario.
Cargar archivos en un chat personal
Para cargar un archivo en un usuario:
- Envíe un mensaje al usuario que solicita permiso para escribir el archivo. Este mensaje debe contener
FileConsentCarddatos adjuntos con el nombre del archivo que se va a cargar. - Si el usuario acepta la descarga de archivos, el agente recibe una actividad de invocación con una dirección URL de ubicación.
- Para transferir el archivo, el agente realiza una
HTTP POSToperación directamente en la dirección URL de ubicación proporcionada. - Opcionalmente, quite la tarjeta de consentimiento original si no desea que el usuario acepte más cargas del mismo archivo.
Mensaje que solicita permiso para cargar
El siguiente mensaje de escritorio contiene un objeto de datos adjuntos simple que solicita permiso de usuario para cargar el archivo:
El siguiente mensaje móvil contiene un objeto de datos adjuntos que solicita permiso de usuario para cargar el archivo:
{
"attachments": [{
"contentType": "application/vnd.microsoft.teams.card.file.consent",
"name": "file_example.txt",
"content": {
"description": "<Purpose of the file, such as: this is your monthly expense report>",
"sizeInBytes": 1029393,
"acceptContext": {
},
"declineContext": {
}
}
}]
}
En la tabla siguiente se describen las propiedades de contenido de los datos adjuntos:
| Propiedad | Objetivo |
|---|---|
description |
Describe el propósito del archivo o resume su contenido. |
sizeInBytes |
Proporciona al usuario una estimación del tamaño del archivo y la cantidad de espacio que ocupa en OneDrive. |
acceptContext |
Contexto adicional que se transmite silenciosamente al agente cuando el usuario acepta el archivo. |
declineContext |
Contexto adicional que se transmite silenciosamente al agente cuando el usuario rechaza el archivo. |
Invocación de la actividad cuando el usuario acepta el archivo
Una actividad de invocación se envía al agente cuando un usuario acepta el archivo. Contiene la dirección URL del marcador de posición OneDrive para la Empresa que el agente puede emitir PUT para transferir el contenido del archivo. Para obtener información sobre cómo cargar en la dirección URL de OneDrive, vea cargar bytes en la sesión de carga.
En el código siguiente se muestra un ejemplo de una versión concisa de la actividad de invocación que recibe el agente:
{
"name": "fileConsent/invoke",
"value": {
"type": "fileUpload",
"action": "accept",
"context": {
},
"uploadInfo": {
"contentUrl": "https://contoso.sharepoint.com/personal/johnadams_contoso_com/Documents/Applications/file_example.txt",
"name": "file_example.txt",
"uploadUrl": "https://upload.link",
"uniqueId": "1150D938-8870-4044-9F2C-5BBDEBA70C8C",
"fileType": "txt",
"etag": "123"
}
}
}
Del mismo modo, si el usuario rechaza el archivo, el agente recibe el siguiente evento con el mismo nombre de actividad general:
{
"name": "fileConsent/invoke",
"value": {
"type": "fileUpload",
"action": "decline",
"context": {
}
}
}
Notificar al usuario sobre un archivo cargado
Después de cargar un archivo en el OneDrive del usuario, envíe un mensaje de confirmación al usuario. El mensaje debe contener los siguientes datos adjuntos FileCard que el usuario puede seleccionar, ya sea para obtener una vista previa o para abrirlo en OneDrive, o descargarlo localmente:
{
"attachments": [{
"contentType": "application/vnd.microsoft.teams.card.file.info",
"contentUrl": "https://contoso.sharepoint.com/personal/johnadams_contoso_com/Documents/Applications/file_example.txt",
"name": "file_example.txt",
"content": {
"uniqueId": "1150D938-8870-4044-9F2C-5BBDEBA70C8C",
"fileType": "txt",
}
}]
}
En la tabla siguiente se describen las propiedades de contenido de los datos adjuntos:
| Propiedad | Objetivo |
|---|---|
uniqueId |
Id. de elemento de unidad de OneDrive o SharePoint. |
fileType |
Tipo de archivo, como .pdf o .docx. |
Capturar imágenes alineadas del mensaje
Captura de imágenes insertadas que forman parte del mensaje mediante el OnMessage controlador . El SDK de Teams controla la autenticación automáticamente, por lo que puede acceder a las direcciones URL de contenido de datos adjuntos directamente desde el contexto de actividad.
En el código siguiente se muestra un ejemplo de captura de imágenes insertadas de un mensaje:
using Microsoft.Teams.Api;
using Microsoft.Teams.Apps;
using Microsoft.Teams.Plugins.AspNetCore.Extensions;
var builder = WebApplication.CreateBuilder(args);
builder.AddTeams();
var app = builder.Build();
var teams = app.UseTeams();
teams.OnMessage(async (context, cancellationToken) =>
{
var attachment = context.Activity.Attachments?[0];
if (attachment != null && attachment.ContentType.Contains("image"))
{
// Download the inline image from the content URL.
var client = new HttpClient();
var responseMessage = await client.GetAsync(attachment.ContentUrl);
// Save the inline image to Files directory.
var filePath = Path.Combine("Files", "ImageFromUser.png");
using (var fileStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
{
await responseMessage.Content.CopyToAsync(fileStream);
}
// Create reply with the received image.
var imageData = Convert.ToBase64String(File.ReadAllBytes(filePath));
var reply = new MessageActivity(
$"Attachment of {attachment.ContentType} type and size of {responseMessage.Content.Headers.ContentLength} bytes received.");
reply.AddAttachment(new Attachment
{
Name = "ImageFromUser.png",
ContentType = "image/png",
ContentUrl = $"data:image/png;base64,{imageData}",
});
await context.SendAsync(reply, cancellationToken);
}
});
app.Run();
Ejemplo básico
En el ejemplo siguiente se muestra cómo controlar el flujo de trabajo de consentimiento de archivos completo, incluido el envío de tarjetas de consentimiento, el control de respuestas aceptadas y rechazadas y la carga de archivos en OneDrive.
Enviar tarjeta de consentimiento de archivo
El código siguiente envía una tarjeta de consentimiento de archivo al usuario, solicitando permiso para cargar el archivo recibido en su OneDrive:
async Task SendFileConsentCard<T>(IContext<T> context, string fileName, string fileId, int fileSize)
where T : IActivity
{
var consentContext = new { filename = fileName, file_id = fileId };
var fileCard = new FileConsentCard
{
Description = "This is the file I want to send you",
SizeInBytes = fileSize,
AcceptContext = consentContext,
DeclineContext = consentContext
};
var message = new MessageActivity
{
Attachments =
[
new Attachment
{
Content = fileCard,
ContentType = new ContentType(ContentTypeFileConsent),
Name = fileName
}
]
};
await context.Send(message);
}
Controlar la carga de archivos
El código siguiente realiza la carga real de archivos después de que el usuario acepte la tarjeta de consentimiento, cargue el contenido en OneDrive y envíe un mensaje de éxito con un archivo adjunto de información. En C#, esta lógica está insertada dentro del OnFileConsent controlador.
async function handleFileUpload(context: any, uploadInfo: FileUploadInfo, fileId: string): Promise<void> {
try {
const content = pendingUploads.get(fileId)!;
pendingUploads.delete(fileId);
await uploadToOnedrive(uploadInfo.uploadUrl!, content);
await context.send({
type: 'message',
text: `<b>${uploadInfo.name}</b> has been successfully uploaded.`,
attachments: [{
content: {
uniqueId: uploadInfo.uniqueId,
fileType: uploadInfo.fileType
},
contentType: CONTENT_TYPE_FILE_INFO,
name: uploadInfo.name,
contentUrl: uploadInfo.contentUrl
}]
});
} catch (e: any) {
pendingUploads.delete(fileId);
console.log(`File upload failed: ${e}`);
}
}
async function uploadToOnedrive(url: string, content: Buffer): Promise<void> {
const fileSize = content.length;
const response = await axios.put(url, content, {
headers: {
'Content-Type': 'application/octet-stream',
'Content-Length': fileSize.toString(),
'Content-Range': `bytes 0-${fileSize - 1}/${fileSize}`
}
});
if (![200, 201].includes(response.status)) {
throw new Error(`Upload failed with status ${response.status}`);
}
}
Ejemplo de código
En el ejemplo de código siguiente se muestra cómo obtener el consentimiento de archivos y cargar archivos en Teams desde un agente:
| Ejemplo de nombre | Descripción | .NET | Node.js | Python |
|---|---|---|---|---|
| File upload | En este ejemplo de agente para Teams se muestran las funcionalidades de carga de archivos mediante El marco del SDK de Teams, lo que permite a los usuarios cargar archivos y ver imágenes insertadas en chats. | View | View | Ver |