Botframework-solutions: [Script de saisie] Ajout de la prise en charge des compétences SDK GA à VA/Skill Generator

Créé le 8 oct. 2019  ·  64Commentaires  ·  Source: microsoft/botframework-solutions

Suite à un changement de protocole Skill vers WebSockets, nous attendions qu'une nouvelle bibliothèque d' extensions de streaming soit disponible pour Typescript, auparavant uniquement disponible pour C#. Cela débloquera les scénarios d'appel de compétences pour l'assistant virtuel lors de l'utilisation de Typescript.

Histoire de l'utilisateur

En tant que développeur
Je veux ...pouvoir connecter des compétences à une version TypeScript de l'assistant virtuel
pour qu'il y ait une parité entre C# et Typescript

Critères d'acceptation

  • [ ] Mettre à jour l'AV et le générateur de compétences pour incorporer les nouvelles compétences du SDK GA
  • [ ] Déployez un VA dactylographié et ajoutez une compétence C# (par exemple, Calendrier)
  • [ ] Fournir la documentation sur les changements requis pour les solutions VA existantes et les compétences créées par le générateur selon les besoins
P0 Committed In Progress

Commentaire le plus utile

@ Batta32 Si SkillConversationIdFactory utilise encodeURI, la compétence recevra ce conversation.id et y répondra en conséquence. Je suis presque sûr que cela est nécessaire.

De plus, oui, il y a un problème avec les longs identifiants de conversation lors de l'utilisation de restify. Nous mentionnons comment résoudre le problème dans cet exemple : https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/80.skills-simple-bot-to-bot/simple-root -bot/skillConversationIdFactory.js#L21

// Cette clé a une limite de 100 caractères par défaut. Augmentez avec restify.createServer({ maxParamLength: 1000 }); dans index.js.

Tous les 64 commentaires

salut Darrenj,
Y a-t-il un ETA sur le problème à résoudre?
Merci,
Kumar

En espérant avoir un travail de bout en bout pour les tests cette semaine, tout va bien.

Merci @darrenj pour la mise à jour.

y a-t-il une mise à jour sur ce problème @darrenj

Salut Darren,

@darrenj pourriez-vous s'il vous plaît fournir une mise à jour sur cet élément de travail. nous avons besoin que cette fonctionnalité critique soit développée pour notre cas d'utilisation.

apprécier ton aide.

Merci,
Kumar

Salut @darrenj ,

Désolé de vous déranger à nouveau, y a-t-il des mises à jour à ce sujet ?
J'ai vu que la bibliothèque est sortie pour la version 4.6.0 (https://botbuilder.myget.org/feed/botbuilder-v4-js-daily/package/npm/botframework-streaming), est-ce compatible avec le Botframework 4.5.0 et l'assistant virtuel ?

Il y a quelques choses en vol ici, l'une est la disponibilité de l'extension de streaming que vous avez repérée et l'autre est la disponibilité dactylographiée de la nouvelle version GA de la bibliothèque de compétences. J'attends la première version packagée de la bibliothèque Skills la semaine prochaine, date à laquelle nous pourrons commencer les mises à jour des modèles C# et Typescript pour tester et fournir les étapes (simples) de migration.

Nous visons à ce que ce travail soit prêt à l'emploi en janvier et garderons ce problème à jour avec les progrès, y compris lorsque les versions quotidiennes seront disponibles.

En attendant, un bot Javascript/Typescript VA peut appeler une compétence créée en JavaScript/Typescript car cela utilise HTTP en raison de l'absence de dépendance de l'extension de streaming. Le problème survient lorsque vous souhaitez appeler une compétence C# comme le calendrier que les modifications ci-dessus s'aligneront dans toutes les langues.

@darrenj est-ce résolu et puis-je connecter C# Skill à partir de tapuscrit VA ? Je suis confus au sujet de votre dernier commentaire.

Bonjour @darrenj ,

Une fois ce problème résolu, serait-il possible d'invoquer des compétences cSharp comme ToDo à partir d'une version TypeScript sur VA ?

Actuellement, je reçois une erreur liée à WebSocketTransport utilisé sur la compétence C#. Mais mon VA est tapuscrit.

Oui, la migration vers la version GA de Skills supprime la dépendance vis-à-vis des Websockets et permettra ainsi un mix/match transparent de compétences sur toutes les plateformes. Nous avons les derniers bits pour C# et JS et travaillons sur l'intégration initiale, l'objectif est d'apporter des modifications à une version quotidienne au cours des deux prochaines semaines pour débloquer des scénarios.

Salut @darrenj ,

J'ai un autre cas d'utilisation qui est Typescript VA et Typescript Skill.

Mon problème est que l'activité updateActivity n'est pas disponible à travers le VA vers la compétence et j'ai besoin de la bibliothèque de streaming pour cela (pour autant que j'aie compris). Maintenant, j'ai remarqué que les dépendances WebSocket ont été supprimées de la dernière bibliothèque de compétences (4.4.9).
Je ne comprends pas pourquoi :) Vous allez être déplacé ailleurs ? Ou?

OK, j'ai une mise à jour sur les progrès en ce qui concerne l'AG des capacités de compétence dans le Bot Framework SDK. Cela a permis de transformer le travail incubé par Virtual Assistant en une version officielle de l'AG.

Un exemple est disponible qui montre comment un bot peut invoquer un autre bot (compétence). Le changement clé est que nous avons maintenant un adaptateur unifié, ce qui signifie qu'il n'est pas nécessaire d'utiliser un autre adaptateur ou des extensions de streaming. C# et JS .

Nous travaillons sur des mises à jour du modèle d'assistant virtuel/compétence pour fournir les (petits) changements prêts à l'emploi et fournir une documentation sur les quelques étapes nécessaires pour mettre à jour les compétences existantes. Ciblage fin janvier, avec des builds sur nos builds quotidiens bientôt.

Si vous souhaitez progresser avant cela, les exemples ci-dessus devraient vous donner tout ce dont vous avez besoin. Je mettrai à jour ce problème avec des pointeurs vers les versions/modifications quotidiennes dès qu'elles seront prêtes.

@darrenj merci pour cette superbe mise à jour. Je suis juste curieux de connaître l' adaptateur unifié avant de commencer à en tirer parti dans notre assistant virtuel de production.

Cela signifie-t-il que nous pouvons utiliser un adaptateur unifié dans Typescript VA et que nous pouvons toujours invoquer la compétence c# ?

Une mise à jour tant attendue !

Nous avons publié hier notre version 0.8 qui inclut une mise à jour de tous nos exemples de compétences pour prendre en charge la nouvelle fonctionnalité de compétences GA et ne plus prévisualiser. Les Websockets ont été retirés au profit de la communication Web-Service entre les compétences, les compétences communiquent avec le Bot de manière asynchrone à l'aide d'une connexion HTTP de "rappel".

En conséquence, il y a quelques mises à jour simples à apporter à l'assistant virtuel et aux compétences existants. Les mises à jour C# VA sont documentées ici et les mises à jour des compétences C# sont documentées ici .

Les changements équivalents du générateur JS/Typescript sont en cours de finalisation au moment où nous parlons et ciblent la publication d'un nouveau générateur et de documents pour les VA/compétences existantes d'ici le 14 février. Pour référence, les étapes de haut niveau pour prendre en charge les compétences d'invocation peuvent être trouvées ici

Une fois ces changements terminés, cela signifie qu'un VA JS/typescript peut invoquer C# Skills, vice versa et même Python.

@darrenj , des réflexions sur le commentaire ci-dessus à propos du projet dactylographié ?

Comme indiqué ci-dessus, oui, il y aura des étapes de migration à suivre que nous finalisons

Merci.

Salut @darrenj , des nouvelles du moment où le générateur JS/TS changera et les mises à jour de la doc seront publiées ?

salut @darrenj , pourriez-vous s'il vous plaît nous faire savoir si la communication de VA (C#) au travail de compétence tapuscrit est effectuée dans le nouveau framework (SDK) que vous avez mentionné ci-dessus. vous avez dit que ce serait fait avant le 14 février.
apprécier ton aide

@darrenj aucune mise à jour sur ce billet ?

@darrenj Aujourd'hui, j'ai essayé de migrer ou de faire un correctif pour appeler la compétence C# à partir du VA/RootBot (Typescript). J'ai trouvé le guide pour implémenter le consommateur de compétences qui n'a pas d'exemple de rootbot/VA dactylographié. Existe-t-il un plan pour prendre en charge le guide de migration basé sur le dactylographe ? Faites-moi savoir l'ETA ou tout autre guide qui peut aider à atteindre la même chose.

Nous avons un ensemble de Pull Requests en cours pour les changements permettant aux nouveaux VA/Skills dactylographiés d'utiliser les nouvelles GA Skills. Je mettrai à jour le ticket une fois que nous les aurons fusionnés et que les versions quotidiennes seront disponibles.

En attendant, voici un projet de document sur les étapes de migration d'une VA existante, vos commentaires sont les bienvenus.

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

Salut @darrenj , merci pour la mise à jour, la seule question que j'ai pour le moment concerne les 'botbuilder-solutions'. Doit-on utiliser une version locale ? D'où? J'ai trouvé cette branche ici qui ressemble à la future version (https://github.com/microsoft/botframework-solutions/tree/feature/southworks/0.7/parity-botbuilder-solutions/sdk/typescript/libraries/botbuilder-solutions) , Est-ce correct?

Merci d'avance.

@Batta32 Pouvez-vous rapidement confirmer quelle branche de code les gens peuvent utiliser pour tester les instructions (avant la publication de la nouvelle bibliothèque)

@tommyJimmy87 - vous pouvez consulter le PR #3122 qui contient toutes les modifications nécessaires de BotBuilder-Solutions for GA Skills SDK dans TypeScript.
Branche : feature/southworks/ga-skills-sdk/botbuilder-solutions

Pour utiliser la bibliothèque localement, veuillez suivre ces étapes (en utilisant la branche mentionnée) :

  1. Ouvrir la bibliothèque dans Visual Studio Code
  2. Exécutez npm install afin d'installer les dépendances
  3. Exécutez npm run build afin de compiler la solution
  4. Exécutez npm pack pour créer le fichier .tgz de la bibliothèque
  5. Ouvrez le fichier package.json l'assistant virtuel dans Visual Studio Code
  6. Mettre à jour la référence de botbuilder-solutions pointant vers le chemin du tgz créé
  7. Exécutez npm install afin d'installer les dépendances qui installeront le package local

Nous validons actuellement ces changements, n'hésitez pas à donner votre avis dans ce PR et nous les examinerons dès que possible.

Ce numéro est obsolète car il est ouvert depuis 30 jours sans activité. Supprimez l'étiquette ou le commentaire obsolète ou cela sera fermé dans 5 jours

@darrenj - pourriez-vous nous faire savoir si les modifications mentionnées ci-dessous peuvent être effectuées pour la connexion de VA(C#) à Skill qui est le nœud js .

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

Oui - la documentation est dans les relations publiques et l'équipe termine ce travail au moment où nous parlons ! (@Batta32). Vous pouvez voir les travaux en cours ici : https://github.com/microsoft/botframework-solutions/pull/3123

Avec les modifications associées au SDK : https://github.com/microsoft/botframework-solutions/pull/3122

Comme promis et merci pour votre patience pendant que nous travaillions sur un ensemble de changements dans les SDK.

  • Les étapes pour mettre à jour vos compétences dactylographiées existantes VA à GA BF sont ici
  • Les étapes pour mettre à jour votre compétence de script dactylographiée existante vers les compétences GA BF sont ici

De plus, les prochaines versions quotidiennes du générateur VA incluront ces modifications prêtes à l'emploi. Je mettrai à jour ce problème avec la version exacte une fois traitée et validée.

Cela sera ensuite publié dans npm lorsque nous traiterons la version 1.0 qui est actuellement en attente d'une fenêtre de modification Azure. Nous espérons d'ici la fin du mois.

Pour toute question/problème concernant ce qui précède, veuillez soulever un nouveau problème et nous sommes là pour vous aider.

@Batta32 pour la migration, nous pouvons commencer à utiliser le botbuilder-solutions 4.5.0-preview ? Je suppose que la nouvelle version pour la migration est correcte ?

@Batta32 Quand le nouveau SDK sera-t-il disponible pour utilisation ? Je construis un VA avec 13 compétences et l'une des exigences est qu'il soit construit en TypeScript. J'utilise actuellement le SDK de la branche Next pour démarrer le projet.

Salut @tommyJimmy87 & @tomSauret847 , avant qu'ils ne soient publiés, vous pouvez utiliser les packages publiés dans MyGet en tant que builds quotidiens :

Pour intégrer le botbuilder-solutions build quotidien vous avez deux options différentes, nous vous recommandons la première option car c'est la plus simple (prendre en compte pour supprimer les package-lock et node_modules de vos bots) :

  • Option 1 : ajouter un fichier .npmrc pointant vers le registre https://botbuilder.myget.org/F/aitemplates/npm , et mettre à jour le package.json pour pointer la version botbuilder-solutions vers 4.5.0-preview223
  • Option 2 : Télécharger le tgz de botbuilder-solutions référençant directement dans le package.json avec un chemin absolu
npm pack [email protected] --registry https://botbuilder.myget.org/F/aitemplates/npm

Si vous souhaitez utiliser le generator-botbuilder-assistant , vous devez le désinstaller si vous en avez déjà un puis installer celui de MyGet :

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

@Batta32 Où aurons-nous besoin de signaler les problèmes que nous trouvons avec les versions d'aperçu ? J'ai généré un nouveau VA à l'aide du générateur de prévisualisation et utilisé le SDK de prévisualisation et j'ai reçu une erreur indiquant qu'une boîte de dialogue non valide est ajoutée lors de la tentative d'exécution du VA sans aucune personnalisation.
Erreur : DialogSet.add() : boîte de dialogue non valide en cours d'ajout.

@darrenj - quelle est la meilleure approche pour signaler les problèmes des builds quotidiens ?

@tomSauret847 - en attendant, vous pouvez partager votre problème dans ce fil avec votre environnement et les étapes de repro 😊 !

L'environnement s'exécute localement sur l'ordinateur Windows 10
Étapes : exécutez le générateur de prévisualisation pour créer une VA vierge
mettre à jour appsettings.json et cognitivemodels.json
ajouter le fichier .npmrc pointant vers https://botbuilder.myget.org/F/aitemplates/npm
supprimer node_modules et package-lock.json
exécuter npm installer [email protected]
exécutez npm install pour installer tous les autres packages
exécuter la compilation NPM
exécuter npm exécuter démarrer
alors je reçois l'erreur suivante
C:UsersuserDesktopBlankVAtestassistantnode_modulesapplicationinsightsoutAutoCollectionExceptions.js:34
lancer THIS_IS_APPLICATION_INSIGHTS_RETHROWING_YOUR_EXCEPTION ; // L'erreur provient d'un autre endroit de votre application
^

Erreur : DialogSet.add() : boîte de dialogue non valide en cours d'ajout.
à DialogSet.add (C:UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibdialogSet.js:87:19)
à MainDialog.addDialog (C:UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibcomponentDialog.js:148:22)
au nouveau MainDialog (C:UsersuserDesktopBlankVAtestassistantlibdialogsmainDialog.js:34:14)
à l'objet.(C:UsersuserDesktopBlankVAtestassistantlibindex.js:159:24)
à Module._compile (internal/modules/cjs/loader.js:778:30)
à Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
à Module.load (internal/modules/cjs/loader.js:653:32)
à tryModuleLoad (interne/modules/cjs/loader.js:593:12)
à Function.Module._load (internal/modules/cjs/loader.js:585:3)
à Function.Module.runMain (internal/modules/cjs/loader.js:831:12)

Merci! Nous avons reproduit le problème en suivant vos étapes, mais il s'agit d'une erreur dans l'ordre d'installation des dépendances provoquant un conflit lorsque botbuilder-solutions est installé, séparé du reste.

image

Essayez de suivre ces étapes : (en supprimant les node_modules et package-lock )

  1. Mettez à jour le package.json avec la version 4.5.0-preview223 dans botbuilder-solutions

image

  1. Installez toutes les dépendances exécutant npm install
  2. Construire la solution en exécutant npm run build
  3. Démarrez l'assistant virtuel en exécutant npm run start

image

@ tomSauret847 faites le moi savoir si vous voyez d'autres problèmes. Nous terminons la validation finale et pousserons les nouvelles versions vers npm une fois terminées.

Salut @darrenj , j'ai eu une erreur en essayant de résoudre les fichiers lg avec le nouveau gestionnaire de modèles, en gros, ce qui se passe, c'est que je reçois les paramètres régionaux en-US de MS Teams mais je définis uniquement en-us (minuscules) et ne sera pas reconnu. Peut-être que l'ajout d'une minuscule ici if (this.templateEnginesPerLocale.has(locale)) résoudrait le problème (LocaleTemplateEngineManager.ts ligne 61). Pour contourner ce problème pour le moment j'ai du ajouter ceci dans mon 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);
});

Cela fonctionne bien mais je ne sais pas si cela peut être fait d'une meilleure façon.

Merci. @Batta32 - pouvez-vous vérifier si vous avez modifié LocaleTemplateEngine dans les solutions Lib qui utilise le SDK fourni MultiLanguageLG ? J'espère que cela traitera élégamment les cas mixtes mais quelques tests seraient bons à valider.

@ lzc850612 Pouvons-nous exécuter une validation rapide avec le csharp GA RC pour vérifier qu'il fonctionne comme prévu avec des paramètres régionaux de casse mixte entrant dans le Bot sur une activité ?

Bien sûr @darrenj , nous vérifierons ce changement !

@darrenj merci pour la mise à jour sur l'avancement ! J'ai eu le même problème de paramètres régionaux que tommyJimmy a signalé, mais je l'ai surmonté en ajoutant locale.toLowerCase dans le localeTemplateManager. J'attache actuellement une compétence personnalisée au VA, mais je reçois toujours une erreur que j'essaie de retrouver. La compétence renvoie une erreur 501 à l'appliance virtuelle, mais elle traite le message dans la fonction onMessage dans defaultActivityHandler.ts, elle ne transmet tout simplement pas l'activité à la boîte de dialogue principale pour la compétence à traiter. J'ai ajouté la compétence en mettant à jour le fichier appSettings.json, et la compétence reçoit l'activité.

@Batta32 Je voulais vérifier si le chemin à suivre inclut toujours le localTemplateEngineManager. J'ai remarqué qu'il manquait dans les versions d'aperçu et que seul responseManager était présent. À l'avenir, allons-nous devoir utiliser le gestionnaire de réponses ou le modèle Locale va-t-il être rajouté ?

@Batta32 J'ai pu retrouver l'erreur que je
Erreur : /api/messages/v3/conversations/5659a380-841b-11ea-bed3-831b5a6aa1eb%7Clivechat-dlpskill-emulator-skillconvo/activities/5b61c920-841b-11ea-b148-8581dc55a9bb n'existe pas
Lorsque l'ID de conversation est ajouté dans SkillConversationIdFactory, la compétence ne peut pas publier en retour sur le nouvel ID de conversation.

Mettre à jour:
J'ai eu une faute de frappe dans le skillHostEndpoint qui causait ce problème. Une fois que j'ai corrigé cela, je suis maintenant en mesure d'attacher des compétences et de les faire interagir avec le VA.

@Batta32 @darrenj Je suis confronté à un comportement inattendu lorsque j'essaie d'utiliser le bavardage avec le VA: en gros, chaque fois que l'utilisateur demande quelque chose au Bot, l'introstep réintroduira le message initial, ce qui dans le cas du bavardage n'est pas génial comme UX . Est-ce que c'est prévu ou j'ai raté quelque chose ?

Screen Shot 2020-04-23 at 11 25 46

(le message s'il vous plaît maintenez le message est un message personnalisé ne vous inquiétez pas à ce sujet
)

@Batta32 J'ai pu retrouver l'erreur que je
Erreur : /api/messages/v3/conversations/5659a380-841b-11ea-bed3-831b5a6aa1eb%7Clivechat-dlpskill-emulator-skillconvo/activities/5b61c920-841b-11ea-b148-8581dc55a9bb n'existe pas
Lorsque l'ID de conversation est ajouté dans SkillConversationIdFactory, la compétence ne peut pas publier en retour sur le nouvel ID de conversation.

Mettre à jour:
J'ai eu une faute de frappe dans le skillHostEndpoint qui causait ce problème. Une fois que j'ai corrigé cela, je suis maintenant en mesure d'attacher des compétences et de les faire interagir avec le VA.

@tomSauret847 Quel était ton problème ? car j'ai la même erreur et je ne comprends pas de quoi il s'agit. Dans mon assistant virtuel j'ai ceci :
"skillHostEndpoint": "https://1c34e472.ngrok.io/api/skills"
Quel est le point 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 J'ai pu déployer mon VA et 1 compétence sur Azure. Lorsque j'utilise le chat Web, tout fonctionne comme prévu. Lorsque j'essaie d'utiliser le canal des équipes, je reçois l'erreur ci-dessous. Cela semble être isolé du canal Teams puisque le chat Web est correctement acheminé.
Erreur : Erreur lors de l'appel de l'ID de compétence : "dlpskill" sur "https://{app name}.azurewebsites.net/api/skill/messages" (le statut est 500).
Erreur: / api / compétences / v3 / conversations / a: 1lFWWXG9CVtdrkA76VLFeS9CbYWzsHVr9mQ4S7BqDpL4K5WNIc0ND6mqaaj_QsSqH-quu-Gb2vLX3HQ4CpG3ZDPCbR0XKLtJGOqW0kwKUbe2HKv5C9fs1sjLSO4EvoE5h-dlpskill-msteams-skillconvo / activités / 1588712064379 n'existe pas
à SkillDialog.(D:homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js:164:23)
sur Generator.next ()
à rempli (D:homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js:11:58)
à process._tickCallback (interne/process/next_tick.js:68:7)

@tommyJimmy87 Je n'utilisais pas ngrok pour communiquer de VA à skill localement, j'ai donc pu utiliser localhost:3979/api/skills pour le skillHostEndpoint et j'ai pu atteindre la skill. Étant donné que vous utilisez également le canal Teams, je dirai qu'il s'agit d'un problème avec le canal Teams. Vous pouvez essayer d'atteindre la compétence à l'aide du chat Web et voir si vous pouvez communiquer avec la compétence de la VA dans Azure.

Salut @Batta32 , je suis d'accord avec @tomSauret847 qu'il y a très probablement un problème avec Teams Channel.

Après un peu de débogage, je pourrais essayer d'expliquer ce que j'ai découvert:

1) Dans le ChannelServiceHandler toutes les méthodes ne sont pas implémentées, ce qui signifie que lorsque l'un des /api/skills est appelé, il renverra à chaque fois un code d'erreur ;

c'est-à-dire Fichier : ChannelServiceHandler.ts (botbuilder) , ligne : 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 Dans ce cas, à la place, il y a un problème dans l'analyse de l'ID de conversation et le résultat de l'erreur est toujours que la ressource n'existe pas, mais si vous essayez d'appeler la même URL, changez l'ID de conversation avec une chaîne plus simple cela fonctionnera (mais le résultat sera toujours que la méthode n'est pas implémentée à cause du point précédent).

Salut @tommyJimmy87 , @tomSauret847 - désolé pour le retard. Nous examinerons le scénario de la chaîne Teams à l'aide des modifications apportées au SDK GA Skills et nous reviendrons sur ce fil plus tard 😊.

@tommyJimmy87 - nous avons réussi à reproduire le problème à l'aide de Microsoft Teams Channel. Nous reviendrons sur ce fil dès que nous aurons résolu le problème.

Merci!

Salut @tommyJimmy87 , @tomSauret847 , nous avons réussi à trouver la raison du problème.

Le problème est que le caractère _':'_ est remplacé par _'%3A'_ lorsque les activités sont renvoyées à l'assistant virtuel depuis la compétence, générant la non-concordance de _conversationId_ entre les deux bots.
Apparemment, ce comportement est exécuté dans une dépendance axios remplaçant les caractères mentionnés.

Enfin, il y a un problème dans microsoft/botbuilder-js#2182 qui remplace axios dans botbuilder et il est marqué pour être prêt pour _R10_.

Nous allons mettre à jour le document sur les problèmes connus expliquant le problème

Enfin, nous reviendrons sur ce fil dès que nous aurons de nouvelles mises à jour pour vous les gars 😊

_Discordance de conversationIds_
image

La dépendance _axios remplace ':' par '%3A'_
image

@Batta32 Pensez-vous que ce sera bientôt corrigé ou que cela prendra un peu de temps?

@tommyJimmy87 , @tomSauret847 - nous avons remarqué que le problème est dans ms-rest-js au lieu d' axios .

Le problème est un décalage de conversationId entre la compétence et l'assistant virtuel. Ce problème est soulevé car le caractère _':'_ du _conversationId_ de Teams est remplacé par _'%3A'_ qui doit être remplacé par _':'_. La dernière conversion n'est pas implémentée dans sendOperationRequest comme le fait _axios_.

Désolé pour l'erreur 😊.

_encodeURIComponent ne remplace pas le '%3A' en ':'_
image

_Différences d'encodage entre axios et ms-rest-js_
image

@Batta32 l'agent par défaut pour les versions ms-rest-js < 2.0 est axios https://github.com/Azure/ms-rest-js/blob/1.x/lib/axiosHttpClient.ts

Je pense qu'une façon de résoudre ce problème serait d'utiliser encodeURI dans l'implémentation SkillConversationIdFactory. De cette façon, l'agent sous-jacent ne modifiera pas le conversation.id par rapport à ce qui est stocké dans l'usine.

Merci @EricDahlvang , nous examinerons l'alternative d'utiliser encodeURI dans les SkillConversationIdFactory !

@EricDahlvang - l'ajout du encodeURI dans le SkillConversationIdFactory ne résout pas le problème car la compétence encode déjà le conversationId avant de renvoyer les activités à l'assistant virtuel.

Nous avons réalisé que le problème pouvait être lié à la longueur du conversationId lorsqu'il est reçu de Microsoft Teams. Nous avons remarqué qu'en utilisant le conversationId le point de terminaison du VA n'est pas touché, cependant, le découpage de certains caractères du conversationId est correctement touché.

Enfin, ce problème n'est pas présent en C#.

_Le point de terminaison n'est pas touché avec le conversationId d'origine_
image

_Le point de terminaison est touché avec le conversationId coupé_
image

_Le problème n'est pas présent en C#_
image

@ Batta32 Si SkillConversationIdFactory utilise encodeURI, la compétence recevra ce conversation.id et y répondra en conséquence. Je suis presque sûr que cela est nécessaire.

De plus, oui, il y a un problème avec les longs identifiants de conversation lors de l'utilisation de restify. Nous mentionnons comment résoudre le problème dans cet exemple : https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/80.skills-simple-bot-to-bot/simple-root -bot/skillConversationIdFactory.js#L21

// Cette clé a une limite de 100 caractères par défaut. Augmentez avec restify.createServer({ maxParamLength: 1000 }); dans index.js.

@EricDahlvang Merci pour ces informations. J'ai ajouté la mise à jour à la fois à mon VA et à mes compétences. Je suis maintenant en mesure de faire communiquer le VA avec la compétence dans le canal Teams sans erreur.

Merci @EricDahlvang pour les informations fournies ! Nous avons créé le PR #3359 en améliorant le maxParamLength et en mettant également à jour la version de @types/restify@^8.4.2 .

Merci les gars @tommyJimmy87 , @tomSauret847 , dès que ces changements seront fusionnés, vous pourrez le tester 😊.

image

@Batta32 désolé de vous déranger à nouveau, tout d'abord, j'ai appliqué les modifications et maintenant cela fonctionne. Maintenant, j'ai un problème avec l'activité de mise à jour des compétences via le VA, dans le SkillHandler, il n'y a pas d'implémentation pour cela, pourriez-vous en fournir une ? THX

Salut @tommyJimmy87 , nous avons remarqué que le SkillHandler en C# et JS ne contient pas le onUpdateActivity() comme vous l'avez mentionné, en attendant vous pouvez ajouter votre propre gestionnaire s'étendant de SkillHandler ou ChannelServiceHandler .

@darrenj - pouvez-vous confirmer que l'absence de la méthode onUpdateActivity() dans le SkillHandler est correcte ou est-il prévu de l'implémenter ?

@Batta32 J'ai en fait essayé ceci, l'implémentation ressemble à ceci :

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

Et la fonction updateActivity est la suivante :

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

Il s'agit essentiellement d'une copie de la fonction processActivity qui est déjà implémentée dans le SkillHandler mais qui appelle le context.updateActivity(context.activity) à la fin.

J'ai dit que j'obtiens cette erreur :

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

Il y a probablement quelque chose qui me manque ou que je fais mal.

@tommyJimmy87 - nous essaierons de reproduire votre scénario et nous reviendrons vers vous plus tard 😊.

@Batta32 J'ai remarqué sur la "carte d'aide" avec l'assistant virtuel qu'il n'affiche pas la carte d'aide pour la compétence active. Lorsque vous appuyez sur l'interruption « aide » dans la boîte de dialogue de compétence, la carte d'aide pour le VA et non la compétence est toujours présentée. J'ai mis à jour la dernière version qui incluait la définition de l'état activeSkillProperty avec la compétence active. Des idées sur la façon de résoudre ce problème? Déconnexion de l'état où le dialogue actif est toujours enregistré en tant que dialogue que j'ai dans le VA et non en tant que compétence active.

Salut @tommyJimmy87 , @tomSauret847 , merci d'avoir signalé ces problèmes.

Comme [email protected] , [email protected] et [email protected] sont publiés dans npmjs et fusionnés dans la branche master , vous pouvez créer les tickets dans le référentiel afin de expliquez mieux le problème et nous les suivrons .

Cette page vous a été utile?
0 / 5 - 0 notes