Bot Framework preguntas más frecuentes generales

En este artículo se responden las preguntas generales más frecuentes.

se aplica a: SDK V4APPLIES TO: SDK v4

¿Por qué la actividad de escritura no hace nada?

Algunos canales no admiten actualizaciones de escritura transitorias en su cliente.

¿Cuál es la diferencia entre la biblioteca Connector y la biblioteca Builder en el SDK?

La biblioteca Connector es la exposición de la API REST. La biblioteca Builder agrega el modelo de programación de diálogos conversacionales y otras características como avisos, cascadas, cadenas y relleno guiado de formularios. La biblioteca Builder también proporciona acceso a servicios de Cognitive Services como LUIS.

¿Cómo se relacionan los mensajes de usuario con las llamadas a métodos HTTPS?

Cuando el usuario envía un mensaje por un canal, el servicio web de Bot Framework emitirá una solicitud HTTPS POST al punto de conexión de servicio web del bot. El bot puede enviar cero, uno o varios mensajes al usuario en ese canal emitiendo una solicitud HTTPS POST independiente a Bot Framework por cada mensaje que envía.

¿Cómo puedo interceptar todos los mensajes entre el usuario y el bot?

Mediante Bot Framework SDK para .NET, puede proporcionar implementaciones de las interfaces IPostToBot e IBotToUser al contenedor de inserción de dependencias Autofac. Con Bot Framework SDK para cualquier lenguaje, puede usar middleware para el mismo propósito. El repositorio BotBuilder-Azure contiene bibliotecas de C# y Node.js que registrarán estos datos en una tabla de Azure.

¿Qué es el método IDialogStack.Forward en Bot Framework SDK para. NET?

El propósito principal de IDialogStack.Forward consiste en reutilizar un diálogo secundario existente que suele ser "reactivo", donde el diálogo secundario (en IDialog.StartAsync) espera un elemento T de un objeto con un controlador ResumeAfter. En particular, si tiene un diálogo secundario que espera un elemento IMessageActivity``T, puede reenviar el elemento IMessageActivity entrante (que se recibió en algún diálogo primario) mediante el uso del método IDialogStack.Forward. Por ejemplo, para reenviar un elemento IMessageActivity entrante a un elemento LuisDialog, llame a IDialogStack.Forward para insertar el elemento LuisDialog en la pila de diálogos, ejecute el código de LuisDialog.StartAsync hasta que se programe una espera para el mensaje siguiente y, a continuación, alimente de inmediato la espera con el elemento IMessageActivity reenviado. T suele ser un elemento IMessageActivity, puesto que IDialog.StartAsync normalmente se construye para esperar a ese tipo de actividad. Puede usar IDialogStack.Forward a un elemento LuisDialog como un mecanismo para interceptar los mensajes del usuario para su procesamiento antes de reenviar el mensaje a un elemento LuisDialog existente. Como alternativa, también puede usar DispatchDialog con ContinueToNextGroup para ese propósito.

Se espera encontrar el elemento reenviado en el primer controlador ResumeAfter (por ejemplo, LuisDialog.MessageReceived) que se ha programado por StartAsync.

¿Cuál es la diferencia entre "proactivo" y "reactivo"?

Desde la perspectiva del bot, "reactivo" significa que el usuario inicia la conversación enviando un mensaje al bot y el bot reacciona respondiendo a ese mensaje. En cambio, "proactivo" significa que el bot inicia la conversación enviando el primer mensaje al usuario. Por ejemplo, un bot puede enviar un mensaje proactivo que notifique al usuario cuando un temporizador expira o se produce un evento.

¿Cómo puedo enviar mensajes proactivos al usuario?

Para obtener ejemplos que muestran cómo enviar mensajes proactivos, consulte los ejemplos de C# V4 y los ejemplos de Node.js V4 del repositorio BotBuilder-Samples en GitHub.

¿Cómo puedo hacer referencia a servicios no serializables desde los diálogos de C# en el SDK v3?

Existen varias opciones:

  • Resolver la dependencia mediante Autofac y FiberModule.Key_DoNotSerialize. Esta es la solución más limpia.
  • Usar los atributos NonSerialized y OnDeserialized para restaurar la dependencia en la deserialización. Esta es la solución más sencilla.
  • No almacene esa dependencia para que no se serialice. No se recomienda esta solución, aunque es técnicamente posible.
  • Utilizar el suplente de serialización de reflexión. Esta solución puede no ser posible en algunos casos y tiene el riesgo de serializar demasiado.

¿Qué es una ETag? ¿Cómo se relaciona con el almacenamiento de las bolsas de datos del bot?

Una ETag es un mecanismo para el control de simultaneidad optimista. El almacenamiento de las bolsas de datos del bot utiliza ETags para evitar actualizaciones conflictivas de los datos. Un error de ETag con el código de estado HTTP 412 "Error de condición previa" indica que se recibieron varios mensajes en paralelo antes de que el bot pudiera finalizar su primera operación. La pila de diálogos y el estado se almacenan en bolsas de datos del bot. Por ejemplo, es posible que vea el error de ETag "Error en la condición previa" si el bot todavía está procesando un mensaje anterior cuando recibe un nuevo mensaje para esa conversación.

¿Qué es la limitación de frecuencia?

El servicio Bot Framework debe protegerse a sí mismo y a sus clientes contra patrones de llamada abusivos (p. ej., ataque por denegación de servicio), de modo que ningún bot pueda afectar negativamente al rendimiento de otros bots. Para lograr este tipo de protección, se han agregado límites de velocidad (también conocidos como limitaciones) a los puntos de conexión. Al aplicar un límite de velocidad, podemos restringir la frecuencia con la que un cliente o un bot pueden realizar una llamada específica. Por ejemplo: al habilitar la limitación de frecuencia, si un bot quiere publicar un gran número de actividades, deberá hacerlo a intervalos durante un período de tiempo. Tenga en cuenta que el propósito de limitación de frecuencia no es limitar el volumen total de un bot. Está diseñado para evitar el abuso de la infraestructura de conversación que no sigue los patrones de conversación humana. Por ejemplo, desbordar dos conversaciones con más contenido de lo que dos personas podrían consumir.

¿Qué son los límites de frecuencia?

Ajustamos continuamente los límites de velocidad para que sean tan flexibles como sea posible y al mismo tiempo para proteger nuestro servicio y a nuestros usuarios. Dado que en ocasiones los umbrales cambiarán, no publicamos las cifras por el momento. Por último, si hospeda el bot en una App Service, el bot está enlazado a las limitaciones del App Service. Para más información, consulte Resumen del Acuerdo de Nivel de Servicio para los servicios de Azure Si se ve afectado por la limitación de velocidad, no dude en comunicarse con nosotros en bf-reports@microsoft.com .

¿Cuál es el límite de tamaño de un archivo transferido mediante canales?

Algunos canales tienen límites en el tamaño o el tipo de archivos que se pueden enviar. Por ejemplo, tanto Direct Line como Facebook limitan las cargas de actividad a 262 144 bytes, mientras que el emulador no tiene límite. El canal impone estos límites. Si envía un mensaje que supera este límite, puede recibir un error, como: La longitud del contenido de la solicitud superó el límite de 262144 bytes. Sin embargo, puede proporcionar un vínculo al recurso como datos adjuntos de Internet. Para obtener más información sobre el envío de datos adjuntos, vea cómo agregar medios a mensajes.

¿Cómo puedo saber si me afecta la limitación de velocidad?

Es poco probable que sufra una limitación de velocidad, incluso en grandes volúmenes. La mayoría de limitaciones de frecuencia ocurren debido al envío masivo de actividades (desde un bot o desde un cliente), pruebas de carga extrema o un error. Cuando se limita una solicitud, se devuelve una respuesta HTTP 429 (demasiadas solicitudes) junto con un encabezado Retry-After que indica el tiempo (en segundos) que se debe esperar para que el reintento de la solicitud se realice correctamente. Puede recopilar esta información habilitando los análisis para el bot a través de Azure Application Insights. O bien, puede agregar un código en el bot para registrar los mensajes.

¿Cómo ocurre la limitación de frecuencia?

La limitación de velocidad se debe a cualquiera de las condiciones siguientes:

  • Un bot envía mensajes con demasiada frecuencia
  • Un cliente de un bot envía mensajes con demasiada frecuencia
  • Los clientes de Direct Line solicitan un nuevo socket web con demasiada frecuencia.

¿Cómo implementar la entrega humana?

A veces es necesario transferir (entregar) una conversación de un bot a un ser humano. Esto sucede, por ejemplo, si el bot no entiende al usuario o si la solicitud no se puede automatizar. En estos casos, el bot proporciona una transición a los seres humanos. El SDK Bot Framework admite la entrega a una persona. Hay algunos tipos de eventos para las operaciones de entrega de señalización. Estos eventos se intercambian entre un bot y un centro de agentes, también denominado centro de interacción. Este centro de agentes se define como una aplicación o un sistema que permite a los agentes, normalmente humanos, recibir y controlar las solicitudes de los usuarios, así como las solicitudes de escalación de los bots. Para obtener información detallada, consulte el artículo Transición de conversaciones de bot a humano.