Botframework-solutions: [Typescript] GA SDK Skill-Unterstützung zum VA/Skill Generator hinzufügen

Erstellt am 8. Okt. 2019  ·  64Kommentare  ·  Quelle: microsoft/botframework-solutions

Nach einer Änderung des Skill-Protokolls zu WebSockets haben wir darauf gewartet, dass eine neue Streaming Extensions- Bibliothek für Typescript verfügbar ist, die zuvor nur für C# verfügbar war. Dadurch werden Skill-Aufrufszenarien für Virtual Assistant entsperrt, wenn Typescript verwendet wird.

Benutzer Geschichte

Als ein Entwickler
Ich möchte ... Skills mit einer TypeScript-Version des Virtual Assistant verbinden können
damit ... es Parität zwischen C# und Typescript gibt

Akzeptanzkriterium

  • [ ] Aktualisieren Sie den VA- und Skill-Generator, um neue GA-SDK-Skills zu integrieren
  • [ ] Stellen Sie eine Typoskript-VA bereit und fügen Sie einen C#-Skill hinzu (z. B. Kalender)
  • [ ] Stellen Sie bei Bedarf eine Dokumentation zu den erforderlichen Änderungen an bestehenden VA-Lösungen und Fähigkeiten bereit, die vom Generator erstellt wurden
P0 Committed In Progress

Hilfreichster Kommentar

@Batta32 Wenn die SkillConversationIdFactory encodeURI verwendet, empfängt der Skill diese Conversation.id und antwortet entsprechend. Ich bin mir ziemlich sicher, dass dies erforderlich ist.

Außerdem gibt es ein Problem mit langen Konversations-IDs bei der Verwendung von restify. In diesem Beispiel erwähnen wir, wie das Problem behoben werden kann: https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/80.skills-simple-bot-to-bot/simple-root -bot/skillConversationIdFactory.js#L21

// Dieser Schlüssel hat standardmäßig eine Begrenzung von 100 Zeichen. Erhöhen Sie mit restify.createServer({ maxParamLength: 1000 }); in index.js.

Alle 64 Kommentare

Hallo Darrenj,
Gibt es eine ETA zu dem zu behebenden Problem?
Danke,
Kumar

In der Hoffnung, diese Woche für die Tests von Ende zu Ende arbeiten zu können, ist alles in Ordnung.

Danke @darrenj für das Update.

Gibt es ein Update zu diesem Thema @darrenj

Hallo Darren,

@darrenj könnten Sie bitte ein Update zu diesem

schätze deine Hilfe.

Danke,
Kumar

Hallo @darrenj ,

Entschuldigung, dass ich Sie wieder belästige, gibt es dazu ein Update?
Ich habe gesehen, dass die Bibliothek für die Version 4.6.0 freigegeben wurde (https://botbuilder.myget.org/feed/botbuilder-v4-js-daily/package/npm/botframework-streaming), ist diese kompatibel mit dem Botframework 4.5.0 und der virtuelle Assistent?

Hier sind einige Dinge im Umlauf, eines ist die Verfügbarkeit von Streaming-Erweiterungen, die Sie entdeckt haben, und das andere ist die Verfügbarkeit des Typoskripts der neuen GA-Version der Skills-Bibliothek. Ich erwarte den ersten gepackten Build der Skills-Bibliothek nächste Woche. Zu diesem Zeitpunkt können wir sowohl die C#- als auch die Typescript-Vorlage aktualisieren, um die (einfachen) Migrationsschritte zu testen und bereitzustellen.

Wir streben an, diese Arbeit im Januar einsatzbereit zu machen und werden diese Ausgabe über den Fortschritt auf dem Laufenden halten, auch wenn tägliche Builds verfügbar sind.

In der Zwischenzeit kann ein JavaScript/Typescript-VA-Bot einen in JavaScript/Typescript erstellten Skill aufrufen, da dieser aufgrund der fehlenden Abhängigkeit von der Streaming-Erweiterung HTTP verwendet. Das Problem tritt auf, wenn Sie einen C#-Skill wie Calendar aufrufen möchten, der durch die oben genannten Änderungen in allen Sprachen ausgerichtet wird.

@darrenj ist das behoben und kann ich C# Skill von Typescript VA verbinden? Ich bin verwirrt über deinen letzten Kommentar.

Hallo @darrenj ,

Wäre es möglich, cSharp-Fähigkeiten wie ToDo aus einer TypeScript-Version auf VA aufzurufen, sobald dies behoben ist?

Derzeit erhalte ich einen Fehler im Zusammenhang mit WebSocketTransport, das für C#-Skills verwendet wird. Aber mein VA ist Typoskript.

Ja, die Migration zur GA-Version von Skills beseitigt die Abhängigkeit von Websockets und ermöglicht so eine nahtlose Mischung/Match von Skills über Plattformen hinweg. Wir haben die neuesten Bits für C# und JS und arbeiten an der ersten Integration. Ziel ist es, innerhalb der nächsten Wochen Änderungen in einen täglichen Build zu integrieren, um Szenarien freizugeben.

Hallo @darrenj ,

Ich habe einen anderen Anwendungsfall, der Typescript VA und Typescript Skill ist.

Mein Problem ist, dass die updateActivity nicht über die VA für den Skill verfügbar ist und ich dafür die Streaming-Bibliothek benötige (soweit ich das verstanden habe). Jetzt ist mir tatsächlich aufgefallen, dass die WebSocket-Abhängigkeiten aus der neuesten Skills-Bibliothek (4.4.9) entfernt wurden.
Verstehe nicht warum :) Sollen woanders hingezogen werden? Oder?

OK, ich habe ein Update zum Fortschritt in Bezug auf die GA der Skill-Funktionen im Bot Framework SDK. Dies hat die von Virtual Assistant inkubierte Arbeit in eine formelle GA-Version überführt.

Ein Beispiel ist verfügbar, das zeigt, wie ein Bot einen anderen Bot (Skill) aufrufen kann. Die wichtigste Änderung ist, dass wir jetzt einen einheitlichen Adapter haben, was bedeutet, dass kein anderer Adapter oder Streaming-Erweiterungen verwendet werden müssen. C# und JS .

Wir arbeiten an Aktualisierungen der Vorlage für den virtuellen Assistenten / Skill, um die (kleinen) Änderungen sofort bereitzustellen und eine Dokumentation zu den wenigen Schritten bereitzustellen, die zum Aktualisieren vorhandener Skills erforderlich sind. Targeting Ende Januar, bald mit Builds auf unseren täglichen Builds.

Wenn Sie im Vorfeld Fortschritte erzielen möchten, sollten Ihnen die obigen Beispiele alles geben, was Sie brauchen. Ich werde dieses Problem mit Hinweisen auf tägliche Builds/Änderungen aktualisieren, sobald sie fertig sind.

@darrenj danke für dieses tolle Update. Ich bin nur neugierig auf den einheitlichen Adapter, bevor wir ihn in unserem virtuellen Produktionsassistenten einsetzen.

Bedeutet dies, dass wir in Typescript VA einen einheitlichen Adapter verwenden können und trotzdem c#-Skill aufrufen können?

Ein lang erwartetes Update!

Wir haben gestern unsere Version 0.8 veröffentlicht, die ein Update für alle unsere Beispiel-Skills enthält, um die neue GA-Skills-Funktion zu unterstützen und keine Vorschau mehr anzuzeigen. Websockets wurde zugunsten der Web-Service-Kommunikation zwischen Skills eingestellt, Skills kommunizieren asynchron über eine "Callback"-HTTP-Verbindung zum Bot.

Infolgedessen müssen einige direkte Aktualisierungen an bestehenden virtuellen Assistenten und Fähigkeiten vorgenommen werden. C#-VA-Updates werden hier dokumentiert und C#-Skill-Updates werden hier dokumentiert.

Die entsprechenden Änderungen am JS/Typescript-Generator werden derzeit fertiggestellt und zielen auf die Veröffentlichung eines neuen Generators und von Dokumenten für bestehende VA/Skills bis zum 14. Februar ab. Als Hintergrundreferenz finden Sie die allgemeinen Schritte zur Unterstützung des Aufrufens von Fähigkeiten hier

Sobald diese Änderungen abgeschlossen sind, bedeutet dies, dass eine JS/Typescript-VA C#-Kenntnisse aufrufen kann, umgekehrt und tatsächlich auch Python.

@darrenj , irgendwelche Gedanken zum obigen Kommentar zum Typoskript-Projekt?

Wie oben, ja, es werden einige Migrationsschritte folgen, die wir abschließen

Dankeschön.

Hey @darrenj , gibt es Neuigkeiten darüber, wann der JS/TS-Generator geändert und Doc-Updates veröffentlicht werden?

hey @darrenj , könnten Sie uns bitte
schätze deine Hilfe

@darrenj ein Update zu diesem Ticket?

@darrenj Heute habe ich versucht zu migrieren oder eine Korrektur vorzunehmen, um den C#-Skill aus dem VA/RootBot (Typescript) aufzurufen. Ich habe die Anleitung zum Implementieren von Skill Consumer gefunden, die kein Typoskript-Rootbot/VA-Beispiel enthält. Gibt es einen Plan, einen typoskriptbasierten Migrationsleitfaden zu unterstützen? Teilen Sie mir die ETA oder einen anderen Leitfaden mit, der dazu beitragen kann, dasselbe zu erreichen.

Wir haben eine Reihe von Pull-Requests für die Änderungen, die es neuen Typoskript-VA/Skills ermöglichen, die neuen GA-Skills zu verwenden. Ich werde das Ticket aktualisieren, sobald wir sie zusammengeführt haben und die täglichen Builds verfügbar sind.

In der Zwischenzeit ist hier ein Dokumententwurf zu den Schritten zur Migration einer vorhandenen VA, Feedback willkommen.

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

Hallo @darrenj , danke für das Update, die einzige Frage, die ich im Moment habe, betrifft die 'Botbuilder-Lösungen'. Müssen wir eine lokale Version verwenden? Wovon? Ich habe diesen Zweig hier gefunden, der wie die zukünftige Version aussieht (https://github.com/microsoft/botframework-solutions/tree/feature/southworks/0.7/parity-botbuilder-solutions/sdk/typescript/libraries/botbuilder-solutions) , ist das richtig?

Danke im Voraus.

@Batta32 Können Sie schnell bestätigen, welchen

@tommyJimmy87 - Sie können den PR #3122 überprüfen, der alle erforderlichen Änderungen des BotBuilder-Solutions for GA Skills SDK in TypeScript enthält.
Branche :

Um die Bibliothek lokal zu nutzen, gehen Sie bitte wie folgt vor (über die genannte Filiale):

  1. Öffnen Sie die Bibliothek in Visual Studio Code
  2. Führen Sie npm install aus, um die Abhängigkeiten zu installieren
  3. Führen Sie npm run build aus, um die Lösung zu kompilieren
  4. Führen Sie npm pack , um die .tgz-Datei der Bibliothek zu erstellen
  5. Öffnen Sie die package.json Datei des virtuellen Assistenten in Visual Studio Code
  6. Aktualisieren Sie die Referenz der botbuilder-solutions, die auf den erstellten tgz-Pfad verweist
  7. Führen Sie npm install aus, um die Abhängigkeiten zu installieren, die das lokale Paket installieren

Wir überprüfen derzeit diese Änderungen, zögern Sie nicht, Feedback in dieser PR zu geben, und wir werden sie so schnell wie möglich überprüfen.

Dieses Problem ist veraltet, da es seit 30 Tagen ohne Aktivität geöffnet war. Entferne veraltetes Label oder Kommentar oder dies wird in 5 Tagen geschlossen

Ja - die Dokumentation ist in PR und das Team schließt diese Arbeit ab, während wir sprechen! (@Batta32). Hier können Sie die laufenden Arbeiten sehen: https://github.com/microsoft/botframework-solutions/pull/3123

Zusammen mit den dazugehörigen Änderungen am SDK: https://github.com/microsoft/botframework-solutions/pull/3122

Wie versprochen und vielen Dank für Ihre Geduld, während wir an einer Reihe von Änderungen in den SDKs gearbeitet haben.

  • Schritte zum Aktualisieren Ihrer vorhandenen Typoskript-VA auf GA BF-Fähigkeiten finden Sie hier
  • Schritte zum Aktualisieren Ihres vorhandenen Typoskript-Skills auf GA BF-Skills finden Sie hier

Darüber hinaus werden diese Änderungen in den nächsten täglichen Builds des VA-Generators standardmäßig enthalten sein. Ich werde dieses Problem mit der genauen Version aktualisieren, sobald es verarbeitet und validiert wurde.

Dies wird dann in npm veröffentlicht, wenn wir die Version 1.0 verarbeiten, die derzeit auf ein Azure-Änderungsfenster wartet. Wir hoffen bis Ende des Monats.

Bei Fragen/Problemen mit den oben genannten Punkten wenden Sie sich bitte an ein neues Problem und wir sind hier, um Ihnen zu helfen.

@Batta32 für die Migration können wir die botbuilder-solutions 4.5.0-preview verwenden? Ich denke, ist die neue Version für die Migration richtig?

@Batta32 Wann wird das neue SDK zur Verwendung freigegeben? Ich baue eine VA mit 13 Fähigkeiten und eine der Anforderungen ist, dass sie in TypeScript erstellt wird. Ich verwende derzeit das SDK aus dem Next-Zweig, um das Projekt zu starten.

Hallo @tommyJimmy87 & @tomSauret847 , bevor sie veröffentlicht werden, können Sie die in MyGet veröffentlichten Pakete als tägliche Builds verwenden:

Um den täglichen Build von botbuilder-solutions zu integrieren, haben Sie zwei verschiedene Optionen, wir empfehlen die erste Option, da sie die einfachste ist (berücksichtigen Sie, dass Sie die package-lock und node_modules Ihrer Bots entfernen). :

  • Option 1: Fügen Sie eine .npmrc Datei hinzu, die auf die Registrierung https://botbuilder.myget.org/F/aitemplates/npm , und aktualisieren Sie die package.json .npmrc Datei, um die botbuilder-solutions Version auf 4.5.0-preview223 zu verweisen
  • Option 2: Laden Sie das tgz von botbuilder-solutions herunter und verweisen Sie es direkt in der package.json mit einem absoluten Pfad
npm pack [email protected] --registry https://botbuilder.myget.org/F/aitemplates/npm

Wenn Sie generator-botbuilder-assistant möchten, sollten Sie es deinstallieren, wenn Sie bereits eines haben, und dann das von MyGet installieren:

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

@Batta32 Wo müssen wir Probleme melden, die wir mit den Vorschau-Builds finden? Ich habe mit dem Vorschaugenerator eine neue VA generiert und das Vorschau-SDK verwendet und erhalte eine Fehlermeldung, dass ein ungültiges Dialogfeld hinzugefügt wird, wenn ich versuche, die VA ohne Anpassung auszuführen.
Fehler: DialogSet.add(): Ungültiger Dialog wird hinzugefügt.

@darrenj - was ist der beste Ansatz, um die Probleme der täglichen Builds zu melden?

@tomSauret847 - in der Zwischenzeit können Sie Ihr Problem in diesem Thread mit Ihrer Umgebung und den Repro-Schritten teilen 😊!

Die Umgebung wird lokal auf einem Windows 10-Computer ausgeführt
Schritte: Führen Sie den Vorschaugenerator aus, um eine leere VA zu erstellen
appsettings.json und kognitivemodels.json aktualisieren
.npmrc-Datei hinzufügen, die auf https://botbuilder.myget.org/F/aitemplates/npm . verweist
lösche node_modules und package-lock.json
starte npm install
Führen Sie npm install aus, um alle anderen Pakete zu installieren
NPM-Build ausführen
run npm run start
dann erhalte ich folgende Fehlermeldung
C:UsersuserDesktopBlankVAtestassistantnode_modulesapplicationinsightsoutAutoCollectionExceptions.js:34
THIS_IS_APPLICATION_INSIGHTS_RETHROWING_YOUR_EXCEPTION werfen; // Der Fehler ist an einer anderen Stelle in Ihrer App aufgetreten
^

Fehler: DialogSet.add(): Ungültiger Dialog wird hinzugefügt.
at DialogSet.add (C:UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibdialogSet.js:87:19)
at MainDialog.addDialog (C:UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibcomponentDialog.js:148:22)
at new MainDialog (C:UsersuserDesktopBlankVAtestassistantlibdialogsmainDialog.js:34:14)
bei Objekt.(C:UsersuserDesktopBlankVAtestassistantlibindex.js:159:24)
at Module._compile (internal/modules/cjs/loader.js:778:30)
bei Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
bei Module.load (intern/modules/cjs/loader.js:653:32)
bei tryModuleLoad (internal/modules/cjs/loader.js:593:12)
bei Function.Module._load (internal/modules/cjs/loader.js:585:3)
bei Function.Module.runMain (internal/modules/cjs/loader.js:831:12)

Vielen Dank! Wir haben das Problem nach Ihren Schritten reproduziert , es ist jedoch ein Fehler in der Reihenfolge der Installation der Abhängigkeiten, der einen Konflikt verursacht, wenn botbuilder-solutions vom Rest getrennt installiert wird.

image

Versuchen Sie, diese Schritte auszuführen : (Entfernen Sie node_modules und package-lock )

  1. Aktualisieren Sie package.json mit der 4.5.0-preview223 Version in botbuilder-solutions

image

  1. Installieren Sie alle Abhängigkeiten, die npm install ausführen
  2. Erstellen Sie die Lösung, indem Sie npm run build ausführen
  3. Starten Sie den virtuellen Assistenten, indem Sie npm run start ausführen

image

@tomSauret847 lass es mich wissen, wenn du andere Probleme siehst. Wir schließen die endgültige Validierung ab und werden neue Builds nach Abschluss auf npm verschieben.

Hallo @darrenj , ich habe einen Fehler beim Versuch, die lg-Dateien mit dem neuen Vorlagenmanager aufzulösen, erhalten. Im Grunde passiert es, dass ich das Gebietsschema en-US von MS Teams if (this.templateEnginesPerLocale.has(locale)) das Problem lösen (LocaleTemplateEngineManager.ts Zeile 61) . Um dieses Problem vorerst zu umgehen, musste ich dies in meine index.ts einfügen:

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

Das funktioniert gut, aber ich weiß nicht, ob es besser gemacht werden kann.

Vielen Dank. @Batta32 - können Sie überprüfen, ob Sie die Änderung zu LocaleTemplateEngine in der Lösungsbibliothek haben, die das bereitgestellte SDK MultiLanguageLG ? Ich würde hoffen, dass dies elegant mit gemischten Fällen umgehen würde, aber einige Tests wären gut zu validieren.

@lzc850612 Können wir eine schnelle Validierung mit dem csharp GA RC durchführen, um zu überprüfen, ob es wie erwartet funktioniert, wenn Gebietsschemas mit gemischter Groß-/Kleinschreibung bei einer Aktivität in den Bot kommen?

Klar @darrenj , wir werden diese Änderung überprüfen!

@darrenj danke für das Update zum Fortschritt! Ich hatte das gleiche Gebietsschemaproblem, auf das TommyJimmy hingewiesen hat, habe es aber durch Hinzufügen von locale.toLowerCase im localeTemplateManager überwunden. Ich hänge derzeit einen benutzerdefinierten Skill an die VA an, erhalte jedoch immer noch einen Fehler, den ich aufspüren möchte. Der Skill gibt einen 501-Fehler an die VA zurück, verarbeitet jedoch die Nachricht in der onMessage-Funktion in defaultActivityHandler.ts. Er übergibt die Aktivität nur nicht an den Hauptdialog für die Verarbeitung durch den Skill. Ich habe den Skill hinzugefügt, indem ich die Datei appSettings.json aktualisiert habe, und der Skill empfängt die Aktivität.

@Batta32 Ich wollte überprüfen, ob der Pfad nach vorne noch den localTemplateEngineManager enthält. Mir ist aufgefallen, dass es in den Vorschau-Builds fehlt und nur responseManager vorhanden ist. Müssen wir in Zukunft den Response-Manager verwenden oder wird die Locale-Vorlage wieder hinzugefügt?

@Batta32 Ich konnte den Fehler aufspüren, den ich bei der Kommunikation mit einem Skill von der VA erhalten habe. Im dialogEx-Modul gibt es einen Sende-Trace, der den Trace an die VA zurücksendet, an der der Skill gestartet wurde. Diese sendActivity gibt beim Aufruf den folgenden Fehler aus:
Fehler: /api/messages/v3/conversations/5659a380-841b-11ea-bed3-831b5a6aa1eb%7Clivechat-dlpskill-emulator-skillconvo/activities/5b61c920-841b-11ea-b148-8581dc55a9bb existiert nicht
Wenn die Konversations-ID in SkillConversationIdFactory angehängt wird, kann der Skill nicht an die neue Konversations-ID zurücksenden.

Aktualisieren:
Ich hatte einen Tippfehler im SkillHostEndpoint, der dieses Problem verursacht hat. Nachdem ich dies korrigiert habe, kann ich jetzt Fähigkeiten anhängen und sie mit der VA interagieren lassen.

@Batta32 @darrenj Ich habe ein unerwartetes Verhalten, wenn ich versuche, den Chat mit der VA zu verwenden: Im Grunde jedes Mal, wenn der Benutzer etwas an den Bot fragt, wird der Introstep die erste Nachricht erneut anzeigen, was im Fall von Chat als UX nicht großartig ist . Ist das erwartet oder übersehe ich etwas?

Screen Shot 2020-04-23 at 11 25 46

(Die Nachricht bitte warten ist eine benutzerdefinierte Nachricht, mach dir darüber keine Sorgen
)

@Batta32 Ich konnte den Fehler aufspüren, den ich bei der Kommunikation mit einem Skill von der VA erhalten habe. Im dialogEx-Modul gibt es einen Sende-Trace, der den Trace an die VA zurücksendet, an der der Skill gestartet wurde. Diese sendActivity gibt beim Aufruf den folgenden Fehler aus:
Fehler: /api/messages/v3/conversations/5659a380-841b-11ea-bed3-831b5a6aa1eb%7Clivechat-dlpskill-emulator-skillconvo/activities/5b61c920-841b-11ea-b148-8581dc55a9bb existiert nicht
Wenn die Konversations-ID in SkillConversationIdFactory angehängt wird, kann der Skill nicht an die neue Konversations-ID zurücksenden.

Aktualisieren:
Ich hatte einen Tippfehler im SkillHostEndpoint, der dieses Problem verursacht hat. Nachdem ich dies korrigiert habe, kann ich jetzt Fähigkeiten anhängen und sie mit der VA interagieren lassen.

@tomSauret847 Was war dein Problem? weil ich den gleichen Fehler habe und nicht verstehe woran es liegt. In meinem virtuellen Assistenten habe ich das:
"skillHostEndpoint": "https://1c34e472.ngrok.io/api/skills"
Was ist der Endpunkt der 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 Ich konnte meine VA und 1 Skill in Azure bereitstellen. Wenn ich den Webchat benutze, funktioniert alles wie erwartet. Wenn ich versuche, den Teams-Kanal zu verwenden, erhalte ich die folgende Fehlermeldung. Dies scheint auf den Teams-Kanal isoliert zu sein, da der Webchat korrekt weitergeleitet wird.
Fehler: Fehler beim Aufrufen der Skill-ID: "dlpskill" unter "https://{App-Name}.azurewebsites.net/api/skill/messages" (Status ist 500).
Fehler: / api / Fähigkeiten / v3 / Gespräche / a: 1lFWWXG9CVtdrkA76VLFeS9CbYWzsHVr9mQ4S7BqDpL4K5WNIc0ND6mqaaj_QsSqH-Quu-Gb2vLX3HQ4CpG3ZDPCbR0XKLtJGOqW0kwKUbe2HKv5C9fs1sjLSO4EvoE5h-dlpskill-msteams-skillconvo / activities / 1588712064379 nicht existiert
bei SkillDialog.(D:homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js:164:23)
bei Generator.nächste ()
bei erfüllt (D:homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js:11:58)
at process._tickCallback (intern/process/next_tick.js:68:7)

@tommyJimmy87 Ich habe localhost:3979/api/skills für den SkillHostEndpoint verwenden und den Skill erreichen. Da Sie auch den Teams-Kanal verwenden, werde ich sagen, dass dies ein Problem mit dem Teams-Kanal ist. Sie können versuchen, den Skill über den Webchat zu erreichen und zu sehen, ob Sie mit dem Skill von der VA in Azure kommunizieren können.

Hallo @Batta32 , ich stimme @tomSauret847 zu, dass es höchstwahrscheinlich ein Problem mit dem Teams-Kanal gibt.

Nach ein wenig Debugging könnte ich versuchen zu erklären, was ich herausgefunden habe:

1) In ChannelServiceHandler sind nicht alle Methoden implementiert, dh wenn eine der /api/skills aufgerufen wird, wird jedes Mal ein Fehlercode zurückgegeben;

dh Datei: ChannelServiceHandler.ts (botbuilder), Zeile: 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 In diesem Fall gibt es stattdessen ein Problem beim Parsen der Konversations-ID und das Fehlerergebnis ist immer, dass die Ressource nicht existiert, aber wenn Sie versuchen, dieselbe URL aufzurufen, ändern Sie die Konversations-ID mit einer einfacheren Zeichenfolge es wird funktionieren (aber das Ergebnis wird immer noch sein, dass die Methode wegen des vorherigen Punktes nicht implementiert wird).

Hallo @tommyJimmy87 , @tomSauret847 - sorry für die Verspätung. Wir werden das Szenario des Teams-Kanals anhand der GA Skills SDK-Änderungen überprüfen und später auf diesen Thread zurückkommen 😊.

@tommyJimmy87 - wir haben das Problem erfolgreich über den Microsoft Teams Channel reproduziert. Wir werden auf diesen Thread zurückkommen, sobald wir das Problem behoben haben.

Vielen Dank!

Hallo @tommyJimmy87 , @tomSauret847 , wir haben die Ursache des Problems erfolgreich gefunden.

Das Problem ist, dass das Zeichen _':'_ durch _'%3A'_ ersetzt wird, wenn die Aktivitäten vom Skill an den virtuellen Assistenten zurückgesendet werden, wodurch die Nichtübereinstimmung von _conversationId_ zwischen beiden Bots erzeugt wird.
Anscheinend wird dieses Verhalten in axios- Abhängigkeit ausgeführt und ersetzt die Zeichen wie erwähnt.

Zu guter Letzt gibt es ein Problem in microsoft/botbuilder-js#2182, das Axios in Botbuilder ersetzt und als bereit für _R10_ markiert ist.

Wir werden das Dokument " Bekannte Probleme" aktualisieren, in dem das Problem erläutert wird

Endlich werden wir auf diesen Thread zurückkommen, sobald wir neue Updates für euch haben 😊

_Nicht übereinstimmende Konversations-IDs_
image

_axios-Abhängigkeit ersetzt ':' durch '%3A'_
image

@Batta32 Denkst du, dass es bald behoben wird oder etwas dauern wird?

@tommyJimmy87 , @tomSauret847 - wir haben festgestellt, dass das Problem in ms-rest-js statt in axios liegt .

Das Problem ist eine Diskrepanz von conversationId zwischen dem Skill und dem virtuellen Assistenten. Dieses Problem tritt auf, weil das Zeichen _':'_ der _conversationId_ von Teams durch _'%3A'_ ersetzt wird, das wieder durch _':'_ ersetzt werden sollte. Die letzte Konvertierung wird in sendOperationRequest nicht wie bei

Sorry für den Fehler 😊.

_encodeURIComponent ersetzt '%3A' nicht zurück zu ':'_
image

_Unterschiede bei der Kodierung zwischen Axios und ms-rest-js_
image

@Batta32 der Standardagent für ms-rest-js-Versionen < 2.0 ist Axios https://github.com/Azure/ms-rest-js/blob/1.x/lib/axiosHttpClient.ts

Ich denke, eine Möglichkeit, dieses Problem zu beheben, besteht darin, encodeURI innerhalb der SkillConversationIdFactory-Implementierung zu verwenden. Auf diese Weise ändert der zugrunde liegende Agent die dialog.id nicht von dem, was in der Factory gespeichert ist.

Danke @EricDahlvang , wir werden die Alternative der Verwendung von encodeURI innerhalb von SkillConversationIdFactory überprüfen!

@EricDahlvang - Das Hinzufügen von encodeURI in SkillConversationIdFactory behebt das Problem nicht, da der Skill bereits die conversationId codiert, bevor die Aktivitäten an den virtuellen Assistenten zurückgesendet werden.

Wir haben festgestellt, dass das Problem möglicherweise mit der Länge der conversationId der Endpunkt der VA nicht getroffen wird, das Trimmen einiger Zeichen aus dem conversationId jedoch korrekt getroffen wird.

Zu guter Letzt ist dieses Problem in C# nicht vorhanden.

_Der Endpunkt wird nicht mit der ursprünglichen Unterhaltungs-ID erreicht_
image

_Der Endpunkt wird mit der getrimmten ConversationId_ erreicht.
image

_Das Problem ist in C# nicht vorhanden_
image

@Batta32 Wenn die SkillConversationIdFactory encodeURI verwendet, empfängt der Skill diese Conversation.id und antwortet entsprechend. Ich bin mir ziemlich sicher, dass dies erforderlich ist.

Außerdem gibt es ein Problem mit langen Konversations-IDs bei der Verwendung von restify. In diesem Beispiel erwähnen wir, wie das Problem behoben werden kann: https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/80.skills-simple-bot-to-bot/simple-root -bot/skillConversationIdFactory.js#L21

// Dieser Schlüssel hat standardmäßig eine Begrenzung von 100 Zeichen. Erhöhen Sie mit restify.createServer({ maxParamLength: 1000 }); in index.js.

@EricDahlvang Vielen Dank für diese Informationen. Ich habe das Update sowohl zu meiner VA als auch zu meinem Skill hinzugefügt. Ich kann jetzt die VA dazu bringen, fehlerfrei mit dem Skill im Teams-Kanal zu kommunizieren.

Danke @EricDahlvang für die bereitgestellten Informationen! Wir haben den PR #3359 erstellt, der das maxParamLength verbessert und auch die Version von @types/restify@^8.4.2 aktualisiert hat.

Danke Leute @tommyJimmy87 , @tomSauret847 , sobald diese Änderungen zusammengeführt sind, könnt ihr es testen 😊.

image

@Batta32 Entschuldigung, dass ich Sie wieder belästige, zuerst habe ich die Änderungen übernommen und jetzt funktioniert es. Jetzt habe ich ein Problem mit der Update-Aktivität von Skill durch die VA, im SkillHandler gibt es dafür keine Implementierung, könntest du eine bereitstellen? Danke

Hallo @tommyJimmy87 , wir haben festgestellt, dass das SkillHandler in C# und JS nicht das onUpdateActivity() wie Sie bereits erwähnt haben, während Sie Ihren eigenen Handler hinzufügen können, SkillHandler oder ChannelServiceHandler .

@darrenj - können Sie bestätigen, dass das Fehlen der Methode onUpdateActivity() im SkillHandler korrekt ist oder gibt es einen Plan, sie zu implementieren?

@Batta32 Ich habe das tatsächlich versucht, die Implementierung sieht so aus:

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

Und die updateActivity Funktion ist die folgende:

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 ist im Grunde eine Kopie der Funktion processActivity , die bereits in SkillHandler implementiert ist, aber am Ende context.updateActivity(context.activity) aufruft.

Sagte, dass ich diesen Fehler erhalte:

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

Wahrscheinlich fehlt mir etwas oder ich mache falsch.

@tommyJimmy87 - wir werden versuchen, dein Szenario zu reproduzieren und werden uns später bei dir melden 😊.

@Batta32 Mir ist auf der " Hilfekarte für den aktiven Skill nicht

Hallo @tommyJimmy87 , @tomSauret847 ,

Als [email protected] , [email protected] und [email protected] werden in npmjs master , um die Probleme im Repository , um anlegen zu das Problem besser erklären und wir werden ihnen nachgehen 😊.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen