Crear y enviar diálogos
Importante
Los ejemplos de código de esta sección se basan en la versión 4.6 y versiones posteriores del SDK de Bot Framework. Si busca documentación para versiones anteriores, consulte la sección Extensiones de mensaje - SDK v3 en la carpeta Recursos de la documentación.
Puede crear un cuadro de diálogo modal (denominado módulo de tareas en TeamsJS v1.x) mediante una tarjeta adaptable o una vista web incrustada. Para crear un cuadro de diálogo, debe realizar el proceso denominado solicitud de invocación inicial. Este documento trata la solicitud de invocación inicial, las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde el chat 1:1, el chat de grupo, el canal (nueva publicación), el canal (respuesta al subproceso) y el cuadro de comandos.
Nota:
Si no rellena el cuadro de diálogo con parámetros definidos en el manifiesto de la aplicación, debe crear el cuadro de diálogo para los usuarios con una tarjeta adaptable o una vista web incrustada.
La solicitud de invocación inicial
En el proceso de la solicitud de invocación inicial, el servicio recibe un objeto Activity
de tipo composeExtensions/fetchTask
y debe responder con un objeto task
que contenga una tarjeta adaptable o una dirección URL a la vista web incrustada. Junto con las propiedades de actividad del bot estándar, la carga de invocación inicial contiene los siguientes metadatos de solicitud:
Nombre de propiedad | Objetivo |
---|---|
type |
Tipo de solicitud. Debe ser invoke . |
name |
Tipo de comando que se emite para el servicio. Debe ser composeExtension/fetchTask . |
from.id |
Id. del usuario que envió la solicitud. |
from.name |
Nombre del usuario que envió la solicitud. |
from.aadObjectId |
Identificador de objeto de Microsoft Entra del usuario que envió la solicitud. |
channelData.tenant.id |
Identificador de inquilino de Microsoft Entra. |
channelData.channel.id |
Id. de canal (si la solicitud se realizó en un canal). |
channelData.team.id |
Id. de equipo (si la solicitud se realizó en un canal). |
value.commandId |
Contiene el identificador del comando que se invocó. |
value.commandContext |
Contexto que desencadenó el evento. Debe ser compose . |
value.context.theme |
El tema de cliente del usuario, útil para el formato de vista web incrustada. Debe ser default , contrast o dark . |
Ejemplo
El código para la solicitud de invocación inicial se proporciona en el ejemplo siguiente:
{
"type": "invoke",
"id": "f:bc319b1d-571a-194d-9ffb-11d7ab37c9ff",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
}
"channelData": {
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "fe50f49e5c74440bb2ebf07f49e9553c",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
Propiedades de actividad de carga cuando se invoca un cuadro de diálogo desde el chat 1:1
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde el chat 1:1 se enumeran de la siguiente manera:
Nombre de propiedad | Objetivo |
---|---|
type |
Tipo de solicitud. Debe ser invoke . |
name |
Tipo de comando que se emite para el servicio. Debe ser composeExtension/fetchTask . |
from.id |
Id. del usuario que envió la solicitud. |
from.name |
Nombre del usuario que envió la solicitud. |
from.aadObjectId |
Identificador de objeto de Microsoft Entra del usuario que envió la solicitud. |
channelData.tenant.id |
Identificador de inquilino de Microsoft Entra. |
channelData.source.name |
Nombre de origen desde el que se invoca el cuadro de diálogo. |
ChannelData.legacy. replyToId |
Obtiene o establece el identificador del mensaje para el que este mensaje es una respuesta. |
value.commandId |
Contiene el identificador del comando que se invocó. |
value.commandContext |
Contexto que desencadenó el evento. Debe ser compose . |
value.context.theme |
El tema de cliente del usuario, útil para el formato de vista web incrustada. Debe ser default , contrast o dark . |
Ejemplo
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde el chat 1:1 se proporcionan en el ejemplo siguiente:
{
"type": "invoke",
"id": "f:bc319b1d-571a-194d-9ffb-11d7ab37c9ff",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
}
"channelData": {
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "fe50f49e5c74440bb2ebf07f49e9553c",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Propiedades de actividad de carga cuando se invoca un cuadro de diálogo desde un chat de grupo
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde un chat de grupo se enumeran de la siguiente manera:
Nombre de propiedad | Objetivo |
---|---|
type |
Tipo de solicitud. Debe ser invoke . |
name |
Tipo de comando que se emite para el servicio. Debe ser composeExtension/fetchTask . |
from.id |
Id. del usuario que envió la solicitud. |
from.name |
Nombre del usuario que envió la solicitud. |
from.aadObjectId |
Identificador de objeto de Microsoft Entra del usuario que envió la solicitud. |
channelData.tenant.id |
Identificador de inquilino de Microsoft Entra. |
channelData.source.name |
Nombre de origen desde el que se invoca el cuadro de diálogo. |
ChannelData.legacy. replyToId |
Obtiene o establece el identificador del mensaje para el que este mensaje es una respuesta. |
value.commandId |
Contiene el identificador del comando que se invocó. |
value.commandContext |
Contexto que desencadenó el evento. Debe ser compose . |
value.context.theme |
El tema de cliente del usuario, útil para el formato de vista web incrustada. Debe ser default , contrast o dark . |
Ejemplo
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde un chat de grupo se proporcionan en el ejemplo siguiente:
{
"type": "invoke",
"id": "f:bf72031f-a17e-f99c-48dc-5c0714950d87",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
},
"conversation": {
"isGroup": true,
"conversationType": "groupChat",
"id": "19:d77be72390a1416e9644261e9064fa00@thread.skype",
"tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"channelData": {
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "213167a1e3b6428b93e186ea5407c759",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Propiedades de actividad de carga cuando se invoca un cuadro de diálogo desde un chat de reunión
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde un chat de reunión se proporcionan en el ejemplo siguiente:
{
"type": "invoke",
"id": "f:4d271f11-4eed-622f-e820-6d82bf91692f",
"channelId": "msteams",
"from": {
"id": "29:1yLsdbTM1UjxqqD8cjduNUCI1jm8xZaH3lx9u5JQ04t2bknuTCkP45TXdfROTOWk1LzN1AqTgFZUEqHIVGn_qUA",
"name": "MOD Administrator",
"aadObjectId": "ef16aa89-5b26-4a2c-aebb-761b551577c0"
},
"conversation": {
"tenantId": "c9f9aafd-64ac-4f38-8e05-12feba3fb090",
"id": "19:meeting_NTk4ZDY4ZmYtOWEzZS00OTRkLThhY2EtZmUzZmUzMDQyM2M0@thread.v2",
"name": "Test meeting"
},
"channelData": {
"tenant": {
"id": "c9f9aafd-64ac-4f38-8e05-12feba3fb090"
},
"source": {
"name": "compose"
},
"meeting": {
"id": "MCMxOTptZWV0aW5nX05UazRaRFk0Wm1ZdE9XRXpaUzAwT1RSa0xUaGhZMkV0Wm1VelptVXpNRFF5TTJNMEB0aHJlYWQudjIjMA=="
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "c46a6b53573f42b5bc801716e5ccc960",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask",
}
Propiedades de actividad de carga cuando se invoca un cuadro de diálogo desde un canal (nueva publicación)
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde un canal (nueva publicación) se enumeran de la siguiente manera:
Nombre de propiedad | Objetivo |
---|---|
type |
Tipo de solicitud. Debe ser invoke . |
name |
Tipo de comando que se emite para el servicio. Debe ser composeExtension/fetchTask . |
from.id |
Id. del usuario que envió la solicitud. |
from.name |
Nombre del usuario que envió la solicitud. |
from.aadObjectId |
Identificador de objeto de Microsoft Entra del usuario que envió la solicitud. |
channelData.tenant.id |
Identificador de inquilino de Microsoft Entra. |
channelData.channel.id |
Id. de canal (si la solicitud se realizó en un canal). |
channelData.team.id |
Id. de equipo (si la solicitud se realizó en un canal). |
channelData.source.name |
Nombre de origen desde el que se invoca el cuadro de diálogo. |
ChannelData.legacy. replyToId |
Obtiene o establece el identificador del mensaje para el que este mensaje es una respuesta. |
value.commandId |
Contiene el identificador del comando que se invocó. |
value.commandContext |
Contexto que desencadenó el evento. Debe ser compose . |
value.context.theme |
El tema de cliente del usuario, útil para el formato de vista web incrustada. Debe ser default , contrast o dark . |
Ejemplo
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde un canal (nueva publicación) se proporcionan en el ejemplo siguiente:
{
"type": "invoke",
"id": "f:a5fbb109-c989-c449-ee83-71ac99919d4b",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype",
"name": "parsable",
"tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"channelData": {
"channel": {
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
},
"team": {
"id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
},
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "Test",
"commandContext": "compose",
"requestId": "5336640edc7748b28ce2df43f5b45963",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Propiedades de actividad de carga cuando se invoca un cuadro de diálogo desde un canal (respuesta al subproceso)
Las propiedades de actividad de carga cuando se invoca un cuadro de diálogo desde un canal (respuesta al subproceso) se enumeran de la siguiente manera:
Nombre de propiedad | Objetivo |
---|---|
type |
Tipo de solicitud. Debe ser invoke . |
name |
Tipo de comando que se emite para el servicio. Debe ser composeExtension/fetchTask . |
from.id |
Id. del usuario que envió la solicitud. |
from.name |
Nombre del usuario que envió la solicitud. |
from.aadObjectId |
Identificador de objeto de Microsoft Entra del usuario que envió la solicitud. |
channelData.tenant.id |
Identificador de inquilino de Microsoft Entra. |
channelData.channel.id |
Id. de canal (si la solicitud se realizó en un canal). |
channelData.team.id |
Id. de equipo (si la solicitud se realizó en un canal). |
channelData.source.name |
Nombre de origen desde el que se invoca el cuadro de diálogo. |
ChannelData.legacy. replyToId |
Obtiene o establece el identificador del mensaje para el que este mensaje es una respuesta. |
value.commandId |
Contiene el identificador del comando que se invocó. |
value.commandContext |
Contexto que desencadenó el evento. Debe ser compose . |
value.context.theme |
El tema de cliente del usuario, útil para el formato de vista web incrustada. Debe ser default , contrast o dark . |
Ejemplo
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde un canal (respuesta al subproceso) se proporcionan en el ejemplo siguiente:
{
"type": "invoke",
"id": "f:19ccc884-c792-35ef-2f40-d0ff43dcca71",
"from": {
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype;messageid=1611060744833",
"name": "parsable",
"tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"channelData": {
"channel": {
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
},
"team": {
"id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
},
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "TEst",
"commandContext": "message",
"requestId": "7f7d22efe5414818becebcec649a7912",
"messagePayload": {
"linkToMessage": "https://teams.microsoft.com/l/message/19:6decf54d86d945e4b3924b63a9161a78@thread.skype/1611060744833",
"id": "1611060744833",
"replyToId": null,
"createdDateTime": "2021-01-19T12:52:24.833Z",
"lastModifiedDateTime": null,
"deleted": false,
"summary": null,
"importance": "normal",
"locale": "en-us",
"body": {
"contentType": "html",
"content": "<div><div><at id=\"0\">Testing outgoing Webhook-Nikitha</at> - Hi</div>\n</div>"
},
"from": {
"device": null,
"conversation": null,
"user": {
"userIdentityType": "aadUser",
"id": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc",
"displayName": "Olo Brockhouse"
},
"application": null
},
"reactions": [],
"mentions": [
{
"id": 0,
"mentionText": "Testing outgoing Webhook-Nikitha",
"mentioned": {
"device": null,
"conversation": null,
"user": null,
"application": {
"applicationIdentityType": "webhook",
"id": "b8c1c68c-e290-4bdd-81c3-266f310751dc",
"displayName": "Testing outgoing Webhook-Nikitha"
}
}
}
],
"attachments": []
},
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Propiedades de actividad de carga cuando se invoca un cuadro de diálogo desde un cuadro de comando
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde un cuadro de comando se enumeran de la siguiente manera:
Nombre de propiedad | Objetivo |
---|---|
type |
Tipo de solicitud. Debe ser invoke . |
name |
Tipo de comando que se emite para el servicio. Debe ser composeExtension/fetchTask . |
from.id |
Id. del usuario que envió la solicitud. |
from.name |
Nombre del usuario que envió la solicitud. |
from.aadObjectId |
Identificador de objeto de Microsoft Entra del usuario que envió la solicitud. |
channelData.tenant.id |
Identificador de inquilino de Microsoft Entra. |
channelData.source.name |
Nombre de origen desde el que se invoca el cuadro de diálogo. |
value.commandId |
Contiene el identificador del comando que se invocó. |
value.commandContext |
Contexto que desencadenó el evento. Debe ser compose . |
value.context.theme |
El tema de cliente del usuario, útil para el formato de vista web incrustada. Debe ser default , contrast o dark . |
Ejemplo
Las propiedades de la actividad de carga cuando se invoca un cuadro de diálogo desde un cuadro de comando se proporcionan en el ejemplo siguiente:
{
"type": "invoke",
"id": "f:172560f1-95f9-3189-edb2-b7612cd1a3cd",
"id": "29:1aBjVi5MwCFfhPIV03E5uDdfpBFXp_2Yz-sjrvVg12oavg96cqpE_DiMhOpmN9zHeZpYbJcuUEKuSDy2AYWPz1A",
"name": "Olo Brockhouse",
"aadObjectId": "b130c271-d2eb-45f9-83ab-9eb3fe3788bc"
},
"conversation": {
"isGroup": true,
"conversationType": "channel",
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype",
"name": "parsable",
"tenantId": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"channelData": {
"channel": {
"id": "19:6decf54d86d945e4b3924b63a9161a78@thread.skype"
},
"team": {
"id": "19:acca514e83cb497e960e0b014d405336@thread.skype"
},
"tenant": {
"id": "0d9b645f-597b-41f0-a2a3-ef103fbd91bb"
},
"source": {
"name": "compose"
}
},
"value": {
"commandId": "TEst",
"commandContext": "compose",
"requestId": "d2ce690cdc2b4920a538e75882610a30",
"context": {
"theme": "default"
}
},
"name": "composeExtension/fetchTask"
}
Ejemplo
La siguiente sección de código es un ejemplo de solicitud fetchTask
:
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
//handle fetch task
}
Solicitud de invocación inicial de un mensaje
Cuando se invoca el bot desde un mensaje, el value
objeto de la solicitud de invocación inicial debe contener los detalles del mensaje desde el que se invoca la extensión de mensaje. Las matrices reactions
y mentions
son opcionales y no están presentes si no hay reacciones ni menciones en el mensaje original.
La sección siguiente es un ejemplo del objeto value
:
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
var messageText = action.MessagePayload.Body.Content;
var fromId = action.MessagePayload.From.User.Id;
//finish handling the fetchTask
}
Responder a fetchTask
Responda a la solicitud de invocación con un objeto task
que contenga un objeto taskInfo
con la tarjeta adaptable o la dirección URL web, o un mensaje de cadena simple.
Nombre de propiedad | Objetivo |
---|---|
type |
Puede ser continue para presentar un formulario o message para un elemento emergente simple. |
value |
Un objeto taskInfo para un formulario o un string para un mensaje. |
El esquema del objeto taskInfo es:
Nombre de propiedad | Objetivo |
---|---|
title |
Título del cuadro de diálogo. |
height |
Debe ser un entero (en píxeles) o small , medium , large . |
width |
Debe ser un entero (en píxeles) o small , medium , large . |
card |
Tarjeta adaptable que define el formulario (si usa uno). |
url |
Dirección URL que se va a abrir dentro del cuadro de diálogo como una vista web incrustada. |
fallbackUrl |
Si un cliente no admite la característica de diálogo, esta dirección URL se abre en una pestaña del explorador. |
Responder a fetchTask con una tarjeta adaptable
Al usar una tarjeta adaptable, debe responder con un task
objeto con el value
objeto que contiene una tarjeta adaptable.
Ejemplo
La siguiente sección de código es un ejemplo de fetchTask
respuesta con una tarjeta adaptable:
En este ejemplo se usa el paquete NuGet AdaptiveCards además del SDK de Bot Framework.
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
string placeholder = "Not invoked from message";
if (action.MessagePayload != null)
{
var messageText = action.MessagePayload.Body.Content;
var fromId = action.MessagePayload.From.User.Id;
placeholder = "Invoked from message";
}
var response = new MessagingExtensionActionResponse()
{
Task = new TaskModuleContinueResponse()
{
Value = new TaskModuleTaskInfo()
{
Height = "small",
Width = "small",
Title = "Example dialog",
Card = new Attachment()
{
ContentType = AdaptiveCard.ContentType,
Content = new AdaptiveCard("1.0")
{
Body = new List<AdaptiveElement>()
{
new AdaptiveTextInput() { Id = "FormField1", Placeholder = placeholder},
new AdaptiveTextInput() { Id = "FormField2", Placeholder = "FormField2"},
new AdaptiveTextInput() { Id = "FormField3", Placeholder = "FormField3"},
},
Actions = new List<AdaptiveAction>()
{
new AdaptiveSubmitAction()
{
Type = AdaptiveSubmitAction.TypeName,
Title = "Submit",
},
},
},
},
},
},
};
return response;
}
Creación de un cuadro de diálogo con una vista web incrustada
Al usar una vista web incrustada, debe responder con un objeto task
con el objeto value
que contiene la dirección URL del formulario web que desea cargar. Los dominios de cualquier dirección URL que quiera cargar deben incluirse en la matriz validDomains
del manifiesto de la aplicación. Para obtener más información sobre cómo compilar la vista web incrustada, consulte la documentación del cuadro de diálogo.
protected override async Task<MessagingExtensionActionResponse> OnTeamsMessagingExtensionFetchTaskAsync(ITurnContext<IInvokeActivity> turnContext, MessagingExtensionAction action, CancellationToken cancellationToken)
{
string placeholder = "Not invoked from message";
if (action.MessagePayload != null)
{
var messageText = action.MessagePayload.Body.Content;
var fromId = action.MessagePayload.From.User.Id;
placeholder = "Invoked from message";
}
var response = new MessagingExtensionActionResponse()
{
Task = new TaskModuleContinueResponse()
{
Value = new TaskModuleTaskInfo()
{
Height = "small",
Width = "small",
Title = "Example dialog",
Url = "https://contoso.com/msteams/taskmodules/newcustomer",
},
},
},
};
return response;
}
Solicitud para instalar el bot conversacional
Si la aplicación contiene un bot conversacional, instale el bot en la conversación y, a continuación, cargue el cuadro de diálogo. El bot es útil para obtener contexto adicional para el cuadro de diálogo. Un ejemplo de este escenario es capturar la lista para rellenar un control selector de personas o la lista de canales de un equipo.
Cuando la extensión de mensaje recibe la invocación de composeExtensions/fetchTask
, compruebe si el bot está instalado en el contexto actual para facilitar el flujo. Por ejemplo, compruebe el flujo con una llamada de obtención de lista de participantes. Si el bot no está instalado, devuelva una tarjeta adaptable con una acción que solicite al usuario que instale el bot. El usuario debe tener permiso para instalar las aplicaciones en esa ubicación para la comprobación. Si la instalación de la aplicación no se realiza correctamente, el usuario recibe un mensaje para ponerse en contacto con el administrador.
Ejemplo
La siguiente sección de código es un ejemplo de la respuesta:
{
"type": "AdaptiveCard",
"body": [
{
"type": "TextBlock",
"text": "Looks like you haven't used Disco in this team/chat"
}
],
"actions": [
{
"type": "Action.Submit",
"title": "Continue",
"data": {
"msteams": {
"justInTimeInstall": true
}
}
}
],
"version": "1.0"
}
Después de la instalación del bot conversacional, recibe otro mensaje de invocación con name = composeExtensions/submitAction
, y value.data.msteams.justInTimeInstall = true
.
Ejemplo
La siguiente sección de código es un ejemplo de la respuesta de la tarea a la invocación:
{
"value": {
"commandId": "giveKudos",
"commandContext": "compose",
"context": {
"theme": "default"
},
"data": {
"msteams": {
"justInTimeInstall": true
}
}
},
"conversation": {
"id": "19:7705841b240044b297123ad7f9c99217@thread.skype"
},
"name": "composeExtension/submitAction",
"imdisplayname": "Bob Smith"
}
La respuesta de la tarea a la invocación debe ser similar a la del bot instalado.
Ejemplo
La siguiente sección de código es un ejemplo de instalación cuando es necesario de la aplicación con tarjeta adaptable:
private static Attachment GetAdaptiveCardAttachmentFromFile(string fileName)
{
//Read the card json and create attachment.
string[] paths = { ".", "Resources", fileName };
var adaptiveCardJson = File.ReadAllText(Path.Combine(paths));
var adaptiveCardAttachment = new Attachment()
{
ContentType = "application/vnd.microsoft.card.adaptive",
Content = JsonConvert.DeserializeObject(adaptiveCardJson),
};
return adaptiveCardAttachment;
}
Ejemplo de código
Ejemplo de nombre | Descripción | .NET | Node.js | Python | Manifiesto |
---|---|---|---|---|---|
Acción de extensión de mensaje de Teams | En este ejemplo se muestra cómo definir comandos de acción, crear cuadros de diálogo y responder a la acción de envío del cuadro de diálogo. | View | View | View | View |
Vista previa de la acción de extensión de mensaje | En este ejemplo se muestra cómo usar la versión preliminar de la acción en Extensiones de mensajería mediante Bot Framework v4. | View | View | ND | View |
Búsqueda de extensión de mensaje de Teams | En este ejemplo se muestra cómo crear una extensión de mensaje basada en búsqueda. Busca paquetes nudget y muestra los resultados en la extensión de mensajería basada en búsquedas. | View | View | View | View |