Botframework-solutions: [Mecanografiado] Agregue compatibilidad con habilidades de SDK de GA a VA / Skill Generator

Creado en 8 oct. 2019  ·  64Comentarios  ·  Fuente: microsoft/botframework-solutions

Después de un cambio en el protocolo Skill de WebSockets, hemos estado esperando que una nueva biblioteca de extensiones de transmisión esté disponible para TypeScript, que anteriormente solo estaba disponible para C #. Esto desbloqueará los escenarios de invocación de habilidades para Virtual Assistant cuando se usa Typecript.

Historia del usuario

Como desarrollador
Quiero ... poder conectar habilidades a una versión TypeScript del Asistente virtual
para que ... haya paridad entre C # y Typecript

Criterios de aceptación

  • [] Actualización de VA y generador de habilidades para incorporar nuevas habilidades del SDK de GA
  • [] Implemente un VA mecanografiado y agregue una habilidad de C # (por ejemplo, Calendario)
  • [] Proporcione documentación sobre los cambios necesarios para las soluciones de VA existentes y las habilidades creadas por el generador según sea necesario.
P0 Committed In Progress

Comentario más útil

@ Batta32 Si SkillConversationIdFactory usa encodeURI, la habilidad recibirá esa conversación.id y responderá en consecuencia. Estoy bastante seguro de que esto es obligatorio.

También sí, hay un problema con los identificadores de conversaciones largas al usar restify. Mencionamos cómo resolver el problema en esta muestra: https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/80.skills-simple-bot-to-bot/simple-root -bot / skillConversationIdFactory.js # L21

// Esta clave tiene un límite de 100 caracteres por defecto. Aumente con restify.createServer({ maxParamLength: 1000 }); en index.js.

Todos 64 comentarios

hola Darrenj,
¿Hay alguna ETA sobre el problema que se debe solucionar?
Gracias,
Kumar

Espero tener un trabajo de punta a punta para las pruebas de esta semana, todo bien.

Gracias @darrenj por la actualización.

¿Hay alguna actualización sobre este tema? @darrenj

Hola Darren,

@darrenj, ¿ podría proporcionar una actualización sobre este elemento de trabajo? necesitamos que esta característica crítica se desarrolle para nuestro caso de uso.

aprecio tu ayuda.

Gracias,
Kumar

Hola @darrenj ,

Perdón por molestarte de nuevo, ¿hay alguna actualización sobre esto?
Vi que la biblioteca se ha lanzado para la versión 4.6.0 (https://botbuilder.myget.org/feed/botbuilder-v4-js-daily/package/npm/botframework-streaming), ¿es esto compatible con Botframework? 4.5.0 y el asistente virtual?

Hay algunas cosas en vuelo aquí, una es la disponibilidad de la extensión de transmisión que ha detectado y la otra es la disponibilidad de mecanografiado de la nueva versión GA de la biblioteca Skills. Espero la primera compilación empaquetada de la biblioteca de habilidades la próxima semana, momento en el que podemos comenzar las actualizaciones de las plantillas de C # y Typescript para probar y proporcionar los pasos de migración (simples).

Nuestro objetivo es tener este trabajo listo para su uso en enero y mantendremos este problema actualizado con el progreso, incluso cuando estén disponibles las compilaciones diarias.

Mientras tanto, un Javascript / TypeScript VA Bot puede llamar a una habilidad creada en JavaScript / Typecript, ya que utiliza HTTP debido a la falta de dependencia de la extensión de transmisión. El problema surge cuando desea llamar a una habilidad de C # como Calendario, que los cambios anteriores se alinearán en todos los idiomas.

@darrenj, ¿esto está arreglado y puedo conectar C # Skill desde mecanografiado VA? Estoy confundido por tu último comentario.

Hola @darrenj ,

Una vez que esto se resuelva, ¿sería posible invocar habilidades de cSharp como ToDo desde una versión de TypeScript en VA?

Actualmente, recibo un error relacionado con WebSocketTransport utilizado en la habilidad C #. Pero mi VA está mecanografiada.

Sí, la migración a la versión GA de Skills elimina la dependencia de Websockets y, por lo tanto, permitirá una combinación perfecta de habilidades en todas las plataformas. Tenemos los últimos bits para C # y JS y, trabajando en la integración inicial, el objetivo es realizar cambios en una compilación diaria en las próximas semanas para desbloquear escenarios.

Hola @darrenj ,

Tengo otro caso de uso que es Typescript VA y Typescript Skill.

Mi problema es que updateActivity no está disponible en el VA para el Skill y necesito la biblioteca de transmisión para esto (por lo que tengo entendido). Ahora me di cuenta de que las dependencias de WebSocket se han eliminado de la última biblioteca de habilidades (4.4.9).
No entiendo por qué :) ¿Van a ser trasladados a otro lugar? ¿O?

Bien, tengo una actualización sobre el progreso con respecto al GA de las capacidades de Skill dentro del Bot Framework SDK. Esto ha hecho que el trabajo incubado por Virtual Assistant se convierta en una versión formal de GA.

Hay una muestra disponible que muestra cómo un bot puede invocar a otro bot (habilidad). El cambio clave es que ahora tenemos un adaptador unificado, lo que significa que no es necesario utilizar un adaptador diferente o extensiones de transmisión. C # y JS .

Estamos trabajando en las actualizaciones de la plantilla Virtual Assistant / Skill para proporcionar los (pequeños) cambios listos para usar y proporcionar documentación sobre los pocos pasos necesarios para actualizar las Skills existentes. Apuntando a finales de enero, con mejoras en nuestras compilaciones diarias pronto.

Si está interesado en progresar antes de esto, los ejemplos anteriores deberían proporcionarle todo lo que necesita. Actualizaré este problema con sugerencias para compilaciones / cambios diarios tan pronto como estén listos.

@darrenj gracias por esta increíble actualización. Solo tengo curiosidad por saber sobre el adaptador unificado antes de que comencemos a aprovecharlo en nuestro asistente virtual de producción.

¿Significa esto que podemos usar un adaptador unificado en Typecript VA y aún podemos invocar la habilidad c #?

¡Una actualización tan esperada!

Ayer publicamos nuestra versión 0.8, que incluye una actualización de todas nuestras Habilidades de muestra para admitir la nueva capacidad de Habilidades de GA y ya no tiene una vista previa. Websockets se ha retirado a favor de la comunicación de servicio web entre habilidades. Las habilidades se comunican con el bot de forma asincrónica mediante una conexión HTTP de "devolución de llamada".

Como resultado, se deben realizar algunas actualizaciones directas del Asistente virtual y las Habilidades existentes. Las actualizaciones de C # VA se documentan aquí y las actualizaciones de habilidades de C # se documentan aquí .

Los cambios equivalentes del generador JS / TypeScript se están finalizando mientras hablamos y apuntan a la publicación de un nuevo generador y documentos para VA / Skills existentes antes del 14 de febrero. Para referencia de antecedentes, los pasos de alto nivel para apoyar las habilidades de invocación se pueden encontrar aquí

Una vez que se completen estos cambios, significa que un VA de JS / mecanografiado puede invocar C # Skills, viceversa y, de hecho, también Python.

@darrenj , ¿alguna idea sobre el comentario anterior sobre el proyecto mecanografiado?

De acuerdo con lo anterior, sí, habrá algunos pasos de migración a seguir que estamos finalizando.

Gracias.

Hola @darrenj , ¿alguna noticia sobre cuándo cambia el generador JS / TS y se publicarán las actualizaciones de documentos?

Hola @darrenj , ¿podría informarnos si la comunicación de VA (C #) al trabajo de habilidades mecanografiadas se realiza en el nuevo marco (SDK) que mencionó anteriormente? usted ha dicho que estaría listo para el 14 de febrero.
aprecio tu ayuda

@darrenj ¿ alguna actualización sobre este ticket?

@darrenj Hoy traté de migrar o hacer una solución para llamar a la habilidad C # desde VA / RootBot (Typecript). Encontré la guía para implementar el consumidor de habilidades que no tiene un ejemplo de rootbot / VA mecanografiado. ¿Existe algún plan para admitir la guía de migración basada en mecanografiado? Hágame saber la ETA o cualquier otra guía que pueda ayudar a lograr lo mismo.

Tenemos un conjunto de solicitudes de extracción en curso para los cambios que permiten que los nuevos VA / Habilidades mecanografiadas utilicen las nuevas Habilidades de GA. Actualizaré el ticket una vez que los tengamos fusionados y las compilaciones diarias estén disponibles.

Mientras tanto, aquí hay un documento preliminar sobre los pasos para migrar un VA existente, comentarios bienvenidos.

https://github.com/microsoft/botframework-solutions/pull/3123

Hola @darrenj , gracias por la actualización, la única pregunta que tengo en este momento es sobre las 'soluciones de botbuilder'. ¿Tenemos que usar una versión local? ¿De donde? Encontré esta rama aquí que se parece a la versión futura (https://github.com/microsoft/botframework-solutions/tree/feature/southworks/0.7/parity-botbuilder-solutions/sdk/typescript/libraries/botbuilder-solutions) , ¿está bien?

Gracias por adelantado.

@ Batta32 ¿Puede confirmar rápidamente qué rama de código pueden usar las personas para probar las instrucciones (antes de que se publique la nueva biblioteca)?

@ tommyJimmy87 : puede consultar el PR # 3122 que contiene todos los cambios necesarios de BotBuilder-Solutions para GA Skills SDK en TypeScript.
Sucursal: feature / southworks / ga-skills-sdk / botbuilder-solutions

Para usar la biblioteca localmente, siga estos pasos (usando la rama mencionada):

  1. Abra la biblioteca en Visual Studio Code
  2. Ejecute npm install para instalar las dependencias
  3. Ejecute npm run build para compilar la solución
  4. Ejecute npm pack para crear el archivo .tgz de la biblioteca
  5. Abra el archivo package.json del Asistente virtual en Visual Studio Code
  6. Actualice la referencia de botbuilder-solutions que apunta a la ruta de tgz creada
  7. Ejecute npm install para instalar las dependencias que instalarán el paquete local

Actualmente estamos validando estos cambios, no dude en enviarnos sus comentarios en ese PR y los revisaremos lo antes posible.

Este problema está obsoleto porque ha estado abierto 30 días sin actividad. Quite la etiqueta obsoleta o el comentario o esto se cerrará en 5 días

@darrenj : ¿podría informarnos si los cambios mencionados a continuación se pueden realizar para la conexión de VA (C #) a Skill, que es el nodo js?

https://microsoft.github.io/botframework-solutions/overview/whats-new/0.8-beta/migrate-existing-va-to-0.8/

Sí, la documentación está en PR y el equipo está terminando este trabajo mientras hablamos. (@ Batta32). Puede ver el trabajo en progreso aquí: https://github.com/microsoft/botframework-solutions/pull/3123

Junto con los cambios asociados al SDK: https://github.com/microsoft/botframework-solutions/pull/3122

Según lo prometido y gracias por su paciencia mientras trabajamos en una serie de cambios en los SDK.

  • Los pasos para actualizar su VA mecanografiado existente a GA BF Skills están aquí
  • Los pasos para actualizar su habilidad mecanografiada existente a las habilidades GA BF están aquí

Además, las próximas compilaciones diarias del generador VA tendrán estos cambios incluidos de fábrica. Actualizaré este problema con la versión exacta una vez procesado y validado.

Esto luego se publicará en npm cuando procesemos la versión 1.0 que se encuentra actualmente en espera de una ventana de cambio de Azure. Esperamos para fin de mes.

Si tiene alguna pregunta o problema con lo anterior, plantee un problema nuevo y estamos aquí para ayudarlo.

@ Batta32 para la migración, podemos comenzar a usar botbuilder-solutions 4.5.0-preview? ¿Supongo que la nueva versión de la migración es correcta?

@ Batta32 ¿ Cuándo se lanzará el nuevo SDK para su uso? Estoy construyendo un VA con 13 habilidades y uno de los requisitos es que esté construido en TypeScript. Actualmente estoy usando el SDK de la rama Siguiente para comenzar el proyecto.

Hola @ tommyJimmy87 & @ tomSauret847 , antes de que se publiquen, puede usar los paquetes publicados en MyGet como compilaciones diarias:

Para integrar la compilación diaria botbuilder-solutions tiene dos opciones diferentes, recomendamos la primera opción ya que es la más fácil (tenga en cuenta para eliminar los package-lock y node_modules de sus bots) :

  • Opción 1: agregue un archivo .npmrc que apunte al registro https://botbuilder.myget.org/F/aitemplates/npm y actualice package.json para apuntar la versión botbuilder-solutions a 4.5.0-preview223
  • Opción 2: descargue el tgz de botbuilder-solutions haciendo referencia a él directamente en el package.json con una ruta absoluta
npm pack [email protected] --registry https://botbuilder.myget.org/F/aitemplates/npm

Si desea usar generator-botbuilder-assistant , debe desinstalarlo si ya tiene uno y luego instalar el de MyGet:

npm uninstall -g generator-botbuilder-assistant
npm install -g [email protected] --registry https://botbuilder.myget.org/F/aitemplates/npm

@ Batta32 ¿Dónde tendremos que informar los problemas que encontremos con las compilaciones de vista previa? He generado un nuevo VA usando el generador de vista previa y utilicé el SDK de vista previa y recibí un error de que se estaba agregando un cuadro de diálogo no válido al intentar ejecutar el VA sin ninguna personalización.
Error: DialogSet.add (): Se está agregando un cuadro de diálogo no válido.

@darrenj : ¿cuál es el mejor enfoque para informar los problemas de las compilaciones diarias?

@ tomSauret847 : mientras tanto, ¡puede compartir su problema en este hilo con su entorno y los pasos de reproducción 😊!

El entorno se ejecuta localmente en una computadora con Windows 10
Pasos: ejecute el generador de vista previa para construir VA en blanco
actualizar appsettings.json y cognitivomodels.json
agregue el archivo .npmrc que apunta a https://botbuilder.myget.org/F/aitemplates/npm
eliminar node_modules y package-lock.json
ejecutar npm install [email protected]
ejecute npm install para instalar todos los demás paquetes
ejecutar compilación de NPM
ejecutar npm ejecutar iniciar
entonces recibo el siguiente error
C: UsersuserDesktopBlankVAtestassistantnode_modulesapplicationinsightsoutAutoCollectionExceptions.js: 34
lanzar THIS_IS_APPLICATION_INSIGHTS_RETHROWING_YOUR_EXCEPTION; // El error se originó en otro lugar de su aplicación
^

Error: DialogSet.add (): Se está agregando un cuadro de diálogo no válido.
en DialogSet.add (C: UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibdialogSet.js: 87: 19)
en MainDialog.addDialog (C: UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibcomponentDialog.js: 148: 22)
en el nuevo MainDialog (C: UsersuserDesktopBlankVAtestassistantlibdialogsmainDialog.js: 34: 14)
en Object.(C: UsersuserDesktopBlankVAtestassistantlibindex.js: 159: 24)
en Module._compile (internal / modules / cjs / loader.js: 778: 30)
en Object.Module._extensions..js (internal / modules / cjs / loader.js: 789: 10)
en Module.load (interno / módulos / cjs / loader.js: 653: 32)
en tryModuleLoad (interno / modules / cjs / loader.js: 593: 12)
en Function.Module._load (internal / modules / cjs / loader.js: 585: 3)
en Function.Module.runMain (internal / modules / cjs / loader.js: 831: 12)

¡Gracias! Reproducimos el problema siguiendo sus pasos, sin embargo, es un error en el orden en que se instalan las dependencias, lo que provoca un conflicto cuando se instala botbuilder-solutions se separa el resto.

image

Intente seguir estos pasos : (eliminando node_modules y package-lock )

  1. Actualice package.json con la versión 4.5.0-preview223 en botbuilder-solutions

image

  1. Instale todas las dependencias ejecutando npm install
  2. Construya la solución ejecutando npm run build
  3. Inicie el Asistente virtual ejecutando npm run start

image

@ tomSauret847 avíseme si ve algún otro problema. Estamos completando la validación final y enviaremos las nuevas compilaciones a npm una vez que se completen.

Hola @darrenj , recibí un error al intentar resolver los archivos lg con el nuevo administrador de plantillas, básicamente lo que sucede es que recibo la configuración regional en-US de MS Teams pero configuré solo en-us (minúsculas) y no va a ser reconocido. Quizás agregar una minúscula aquí if (this.templateEnginesPerLocale.has(locale)) resolvería el problema (LocaleTemplateEngineManager.ts línea 61). Para evitar este problema, por el momento, tuve que agregar esto en mi index.ts:

const supportedLocales: string[] = ['en-us', 'en-US','de-de'];

supportedLocales.forEach((locale: string) => {
    const localeTemplateFiles: string[] = [];
    templateFiles.forEach(template => {
        // LG template for en-us does not include locale in file extension.
        if (locale === 'en-us' || locale === 'en-US') {
            localeTemplateFiles.push(path.join(__dirname, 'responses', `${ template }.lg`));
        }
        else {
            localeTemplateFiles.push(path.join(__dirname, 'responses', `${ template }.${ locale }.lg`));
        }
    });

    localizedTemplates.set(locale, localeTemplateFiles);
});

Esto funciona bien, pero no sé si se puede hacer de una mejor manera.

Gracias. @ Batta32 : ¿puede verificar si tiene el cambio a LocaleTemplateEngine en las soluciones Lib que usa el SDK proporcionado MultiLanguageLG ? Espero que esto maneje elegantemente casos mixtos, pero sería bueno validar algunas pruebas.

@ lzc850612 ¿Podemos ejecutar una validación rápida con csharp GA RC para verificar que funcione como se esperaba con configuraciones regionales de casos mixtos que ingresan al Bot en una actividad?

Seguro @darrenj , ¡estaremos comprobando ese cambio!

@darrenj ¡ gracias por la actualización sobre el progreso! Tuve el mismo problema de configuración regional que señaló tommyJimmy, pero lo superé agregando locale.toLowerCase en localeTemplateManager. Actualmente estoy adjuntando una habilidad personalizada al VA pero sigo recibiendo un error que estoy tratando de localizar. La habilidad está devolviendo un error 501 al VA pero está procesando el mensaje en la función onMessage en defaultActitivityHandler.ts, simplemente no está pasando la actividad al cuadro de diálogo principal para que la habilidad la procese. Agregué la habilidad actualizando el archivo appSettings.json, y la habilidad está recibiendo la actividad.

@ Batta32 Quería comprobar si el camino hacia adelante todavía incluye el localTemplateEngineManager. Noté que falta en las compilaciones de vista previa y solo el ResponseManager está presente. En el futuro, ¿necesitaremos usar el administrador de respuestas o se volverá a agregar la plantilla de configuración regional?

@ Batta32 Pude rastrear el error que estaba recibiendo al comunicarme con una habilidad del VA. En el módulo dialogEx hay un seguimiento de envío que envía el seguimiento al VA de que se inició la habilidad. Este sendActivity arroja el siguiente error cuando se llama:
Error: / api / messages / v3 / conversations / 5659a380-841b-11ea-bed3-831b5a6aa1eb% 7Clivechat-dlpskill-emulator-skillconvo / activities / 5b61c920-841b-11ea-b148-8581dc55a9bb no existe
Cuando se agrega el ID de conversación en SkillConversationIdFactory, la habilidad no puede volver a publicar en el nuevo ID de conversación.

Actualizar:
Tuve un error tipográfico en skillHostEndpoint que estaba causando este problema. Una vez que lo corrigí, ahora puedo unir habilidades y hacer que interactúen con el VA.

@ Batta32 @darrenj Me enfrento a un comportamiento inesperado al intentar usar la charla con el VA: básicamente, cada vez que el usuario le pregunta algo al Bot, la introspaso volverá a mostrar el mensaje inicial, que en el caso de la charla no es genial como UX . ¿Es esto esperado o me falta algo?

Screen Shot 2020-04-23 at 11 25 46

(el mensaje por favor espere es un mensaje personalizado, no se preocupe por eso
)

@ Batta32 Pude rastrear el error que estaba recibiendo al comunicarme con una habilidad del VA. En el módulo dialogEx hay un seguimiento de envío que envía el seguimiento al VA de que se inició la habilidad. Este sendActivity arroja el siguiente error cuando se llama:
Error: / api / messages / v3 / conversations / 5659a380-841b-11ea-bed3-831b5a6aa1eb% 7Clivechat-dlpskill-emulator-skillconvo / activities / 5b61c920-841b-11ea-b148-8581dc55a9bb no existe
Cuando se agrega el ID de conversación en SkillConversationIdFactory, la habilidad no puede volver a publicar en el nuevo ID de conversación.

Actualizar:
Tuve un error tipográfico en skillHostEndpoint que estaba causando este problema. Una vez que lo corrigí, ahora puedo unir habilidades y hacer que interactúen con el VA.

@ tomSauret847 ¿Cuál fue tu problema? porque tengo el mismo error y no entiendo qué es. En mi asistente virtual tengo esto:
"skillHostEndpoint": "https://1c34e472.ngrok.io/api/skills"
Cuál es el punto final de la VA.

Error: /api/skills/v3/conversations/a%3A1QIRXOg6VwVn2aGC-eTj9sj3YYd6YUVrRKf8J7wLrjH1fPYcpn2dYpMyQpr_aHLHSp9Z2SHVzu8lKbdj_ArEh06kvjyF48IG1tgE1ctKTWdIASDloNgy51_eBFoGzwwIN-waSearchSkill-msteams-skillconvo/activities/1588679971133 does not exist at new RestError (/Users/em.tomaselli/Desktop/repository/BMW/wa-search-skill/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1397:28) at /Users/em.tomaselli/Desktop/repository/BMW/wa-search-skill/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1849:37 at process._tickCallback (internal/process/next_tick.js:68:7)

@ Batta32 Pude implementar mi VA y 1 habilidad en Azure. Cuando utilizo el chat web, todo funciona como se esperaba. Cuando intento usar el canal de equipos, recibo el siguiente error. Esto parece estar aislado del canal de Teams, ya que el chat web se está enrutando correctamente.
Error: Error al invocar el ID de habilidad: "dlpskill" en "https: // {nombre de la aplicación} .azurewebsites.net / api / skill / messages" (el estado es 500).
Error: / api / / v3 / conversaciones / A Habilidades: 1lFWWXG9CVtdrkA76VLFeS9CbYWzsHVr9mQ4S7BqDpL4K5WNIc0ND6mqaaj_QsSqH-Quu-Gb2vLX3HQ4CpG3ZDPCbR0XKLtJGOqW0kwKUbe2HKv5C9fs1sjLSO4EvoE5h-dlpskill-msteams-skillconvo / no existen actividades / 1588712064379 lo hace
en SkillDialog.(D: sitio de iniciowwwrootnode_modulesbotbuilder-dialogslibskillDialog.js: 164: 23)
en Generator.next ()
en cumplido (D: homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js: 11: 58)
en process._tickCallback (internal / process / next_tick.js: 68: 7)

@ tommyJimmy87 No estaba usando ngrok para comunicarme desde VA a la habilidad localmente, así que pude usar localhost: 3979 / api / skills para skillHostEndpoint y pude alcanzar la habilidad. Dado que también está utilizando el canal de Teams, diré que este es un problema con el canal de Teams. Puede intentar alcanzar la habilidad utilizando el chat web y ver si puede comunicarse con la habilidad desde el VA en azul.

Hola @ Batta32 , estoy de acuerdo con @ tomSauret847 en que lo más probable es que haya algún tipo de problema con el canal de Teams.

Después de un poco de depuración, podría intentar explicar lo que descubrí:

1) En ChannelServiceHandler no se implementan todos los métodos, lo que significa que cuando se llama a uno de los /api/skills se devolverá un código de error;

es decir, Archivo: ChannelServiceHandler.ts (botbuilder), línea: 219

    protected async onGetActivityMembers(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string): Promise<ChannelAccount[]> {
        throw new StatusCodeError(StatusCodes.NOT_IMPLEMENTED, `ChannelServiceHandler.onGetActivityMembers(): ${StatusCodes.NOT_IMPLEMENTED}: ${STATUS_CODES[StatusCodes.NOT_IMPLEMENTED]}`);
    }

2) /api/skills/v3/conversations/a%3A1QIRXOg6VwVn2aGC-eTj9sj3YYd6YUVrRKf8J7wLrjH1fPYcpn2dYpMyQpr_aHLHSp9Z2SHVzu8lKbdj_ArEh06kvjyF48IG1tgE1ctKTWdIASDloNgy51_eBFoGzwwIN-waSearchSkill-msteams-skillconvo/activities/1588761991793 En este caso, en cambio, hay algún problema al analizar el ID de la conversación y el resultado del error es siempre que el recurso no existe, pero si intenta llamar a la misma URL, cambie el conversionId con una cadena más simple funcionará (pero el resultado seguirá siendo que el método no está implementado debido al punto anterior).

Hola @ tommyJimmy87 , @ tomSauret847 , perdón por el retraso. Revisaremos el escenario de Teams Channel utilizando los cambios del SDK de habilidades de GA y volveremos a este hilo más adelante 😊.

@ tommyJimmy87 : reproducimos correctamente el problema mediante el canal de Microsoft Teams. Volveremos a este hilo tan pronto como solucionemos el problema.

¡Gracias!

Hola @ tommyJimmy87 , @ tomSauret847 , encontramos con éxito el motivo del problema.

El problema es que el carácter _ ':' _ se reemplaza por _ '% 3A'_ cuando las actividades se envían de vuelta al Asistente Virtual desde la Habilidad, lo que genera la falta de coincidencia de _conversationId_ entre ambos bots.
Aparentemente, este comportamiento se ejecuta en dependencia axios reemplazando a los personajes como se mencionó.

Por último, pero no menos importante, hay un problema en microsoft / botbuilder-js # 2182 que reemplaza axios en botbuilder y está etiquetado para estar listo para _R10_.

Vamos a actualizar el documento de Problemas conocidos que explica el problema.

Finalmente, volveremos a este hilo tan pronto como tengamos nuevas actualizaciones para ustedes 😊

_Ids de conversación no coincidentes_
image

La dependencia de _axios reemplaza ':' a '% 3A'_
image

@ Batta32 ¿Crees que se arreglará pronto o tomará un poco de tiempo?

@ tommyJimmy87 , @ tomSauret847 : notamos que el problema está en ms-rest-js en lugar de axios .

El problema es una falta de coincidencia de conversationId entre la habilidad y el asistente virtual. Este problema surge porque el carácter _ ':' _ del _conversationId_ de Teams se está reemplazando por _ '% 3A'_, que debe reemplazarse nuevamente por _': '_. La última conversión no se implementa en sendOperationRequest como lo hace _axios_.

Perdón por el error 😊.

_encodeURIComponent no reemplaza el '% 3A' de nuevo a ':' _
image

_Diferencias de codificación entre axios y ms-rest-js_
image

@ Batta32 el agente predeterminado para las versiones de ms-rest-js <2.0 es axios https://github.com/Azure/ms-rest-js/blob/1.x/lib/axiosHttpClient.ts

Creo que una forma de resolver este problema sería usar encodeURI dentro de la implementación de SkillConversationIdFactory. De esta manera, el agente subyacente no alterará la conversación.id de lo que está almacenado dentro de la fábrica.

¡Gracias @EricDahlvang , estaremos revisando la alternativa de uso encodeURI dentro de SkillConversationIdFactory !

@EricDahlvang : agregar encodeURI en SkillConversationIdFactory no soluciona el problema, ya que la habilidad ya está codificando conversationId antes de enviar las actividades al Asistente virtual.

Nos dimos cuenta de que el problema podría estar relacionado con la duración de la conversationId original no se alcanza el punto final del VA, sin embargo, se logra recortar algunos caracteres del conversationId correctamente.

Por último, pero no menos importante, este problema no está presente en C #.

_El punto final no se golpea con el ID de conversación original_
image

_El punto final se golpea con la conversación recortadaId_
image

_El problema no está presente en C # _
image

@ Batta32 Si SkillConversationIdFactory usa encodeURI, la habilidad recibirá esa conversación.id y responderá en consecuencia. Estoy bastante seguro de que esto es obligatorio.

También sí, hay un problema con los identificadores de conversaciones largas al usar restify. Mencionamos cómo resolver el problema en esta muestra: https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/80.skills-simple-bot-to-bot/simple-root -bot / skillConversationIdFactory.js # L21

// Esta clave tiene un límite de 100 caracteres por defecto. Aumente con restify.createServer({ maxParamLength: 1000 }); en index.js.

@EricDahlvang Gracias por esta información. Agregué la actualización tanto a mi VA como a mi habilidad. Ahora puedo hacer que el VA se comunique con la habilidad en el canal de Teams sin errores.

¡Gracias @EricDahlvang por la información proporcionada! Creamos el PR # 3359 mejorando el maxParamLength y también actualizando la versión de @types/restify@^8.4.2 .

Gracias chicos @ tommyJimmy87 , @ tomSauret847 , tan pronto como estos cambios se fusionen, podrán probarlo 😊.

image

@ Batta32 siento molestarte de nuevo, en primer lugar apliqué los cambios y ahora está funcionando. Ahora tengo un problema con la actividad de actualización de la habilidad a través del VA, dentro de SkillHandler no hay implementación para eso, ¿podría proporcionar una? Gracias

Hola @ tommyJimmy87 , notamos que el SkillHandler en C # y JS no contiene el onUpdateActivity() como mencionaste, mientras tanto puedes agregar tu propio controlador que se extiende desde SkillHandler o ChannelServiceHandler .

@darrenj : ¿puede confirmar que la ausencia del método onUpdateActivity() en SkillHandler es correcta o hay algún plan para implementarlo?

@ Batta32 De hecho probé esto, la implementación se ve así:

    protected async onUpdateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string, activity: Activity): Promise<ResourceResponse> {
        return await this.updateActivity(claimsIdentity, conversationId, activityId, activity);
    }

Y la función updateActivity es la siguiente:

private async updateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, replyToActivityId: string, activity: Activity): Promise<ResourceResponse> {

        let skillConversationReference: SkillConversationReference;
        try {
            skillConversationReference = await this.conversationIdFactory.getSkillConversationReference(conversationId);
        } catch (err) {
            // If the factory has overridden getSkillConversationReference, call the deprecated getConversationReference().
            // In this scenario, the oAuthScope paired with the ConversationReference can only be used for talking with
            // an official channel, not another bot.
            if (err.message === 'Not Implemented') {
                const conversationReference = await this.conversationIdFactory.getConversationReference(conversationId);
                skillConversationReference = {
                    conversationReference,
                    oAuthScope: JwtTokenValidation.isGovernment(this.channelService) ?
                        GovernmentConstants.ToChannelFromBotOAuthScope :
                        AuthenticationConstants.ToChannelFromBotOAuthScope
                };
            } else {
                // Re-throw all other errors. 
                throw err;
            }
        }

        if (!skillConversationReference) {
            throw new Error('skillConversationReference not found');
        }
        if (!skillConversationReference.conversationReference) {
            throw new Error('conversationReference not found.');
        }

        const activityConversationReference = TurnContext.getConversationReference(activity);

        /**
         * Callback passed to the BotFrameworkAdapter.createConversation() call.
         * This function does the following:
         *  - Caches the ClaimsIdentity on the TurnContext.turnState
         *  - Applies the correct ConversationReference to the Activity for sending to the user-router conversation.
         *  - For EndOfConversation Activities received from the Skill, removes the ConversationReference from the
         *    ConversationIdFactory
         */
        const callback = async (context: TurnContext): Promise<void> => {
            const adapter: BotFrameworkAdapter = (context.adapter as BotFrameworkAdapter);
            // Cache the ClaimsIdentity and ConnectorClient on the context so that it's available inside of the bot's logic.
            context.turnState.set(adapter.BotIdentityKey, claimsIdentity);
            context.turnState.set(this.SkillConversationReferenceKey, activityConversationReference);
            activity = TurnContext.applyConversationReference(activity, skillConversationReference.conversationReference) as Activity;
            const client = adapter.createConnectorClient(activity.serviceUrl);
            context.turnState.set(adapter.ConnectorClientKey, client);

            context.activity.id = replyToActivityId;
            await context.updateActivity(context.activity);
            return;
        };

        // Add the channel service URL to the trusted services list so we can send messages back.
        // the service URL for skills is trusted because it is applied based on the original request
        // received by the root bot.
        AppCredentials.trustServiceUrl(skillConversationReference.conversationReference.serviceUrl);

        await (this.adapter as BotFrameworkAdapter).continueConversation(skillConversationReference.conversationReference, skillConversationReference.oAuthScope, callback);
        return { id: uuid() };
    }

Es básicamente una copia de la función processActivity que ya está implementada en SkillHandler pero llamando a context.updateActivity(context.activity) al final.

Dijo que recibo este error:

(node:68325) UnhandledPromiseRejectionWarning: Error: Failed to decrypt conversation id 

Probablemente hay algo que me estoy perdiendo o estoy haciendo mal.

@ tommyJimmy87 : intentaremos reproducir tu escenario y te responderemos más tarde 😊.

@ Batta32 Noté en la "Tarjeta de ayuda" con el asistente virtual que no muestra la tarjeta de ayuda para la habilidad activa. Cuando presionas la interrupción de "ayuda" mientras estás en el diálogo de habilidad, todavía se muestra la tarjeta de ayuda para el asistente virtual y no la habilidad. He actualizado a la última versión que incluía configurar el estado activeSkillProperty con la habilidad que está activa. ¿Alguna idea sobre cómo solucionar este problema? Al cerrar la sesión, el estado del diálogo activo todavía está registrado como un diálogo que tengo en el VA y no como la habilidad activa.

Hola @ tommyJimmy87 , @ tomSauret847 , gracias por informar de estos problemas.

Como [email protected] , [email protected] y [email protected] se publican en npmjs y se fusionan en la rama master , puede crear los problemas en el repositorio para explica mejor el problema y le daremos seguimiento 😊.

¿Fue útil esta página
0 / 5 - 0 calificaciones