Virtuelles Assistentenprojekt und Skill-Projekt.
Typoskript.
Beim Versuch, eine Aktivität von einem Skill aus zu aktualisieren, gibt der virtuelle Assistent im MS Teams-Kanal einen Fehler aus.
updateActivity
nicht im bereitgestellten "SkillHandler" implementiert ist)onUpdateActivity
: protected async onUpdateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string, activity: Activity): Promise<ResourceResponse> {
return await this.updateActivity(claimsIdentity, conversationId, activityId, activity);
}
und die Funktion updateActivity
sieht so aus:
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);
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;
};
AppCredentials.trustServiceUrl(skillConversationReference.conversationReference.serviceUrl);
await (this.adapter as BotFrameworkAdapter).continueConversation(skillConversationReference.conversationReference, skillConversationReference.oAuthScope, callback);
return { id: uuid() };
}
SkillHandler
:// Register the request handler.
const handler: CustomSkillHandler = new CustomSkillHandler(adapter, bot, skillConversationIdFactory, credentialProvider, authenticationConfiguration);
const skillEndpoint = new ChannelServiceRoutes(handler);
skillEndpoint.register(server, '/api/skills');
Die Karte wird in Teams aktualisiert
Der Fehler wird angezeigt, wenn die VA versucht, die Aktivität aus der zuvor beschriebenen Funktion onUpdateActivity
zu aktualisieren.
(node:13410) UnhandledPromiseRejectionWarning: Error: Failed to decrypt conversation id
at new RestError (/Users/xxxx/Desktop/repository/xxx/virtual-assistant/node_modules/botframework-connector/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1397:28)
at /Users/xxxx/Desktop/repository/xxx/virtual-assistant/node_modules/botframework-connector/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1849:37
at process._tickCallback (internal/process/next_tick.js:68:7)
(node:13410) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 10)
Kanalteams
Danke @tommyJimmy87 für die Meldung dieses Problems, wir überprüfen es noch. Sobald wir ein Update haben, melden wir uns wieder !
Hallo @tommyjimmy87 , ich brauche Sie, um zusätzliche Repro-Schritte zu geben, was Sie tun, um herauszufinden, was falsch ist, da wir das Problem, mit dem Sie konfrontiert sind, nicht reproduzieren
The Card is updated in Teams
?CustomSkillHandler
?Hier ist der Zweig mit unseren neuesten Änderungen , die wir vorgenommen haben, um dieses Problem zu reproduzieren.
generator-bot-virtualassistant
bereitbotskills connect
CustomSkillHandler
CustomSkillHandler
Wir werden auf Ihre Antwort aufmerksam sein!
Hallo @Batta32 , werde versuchen, deine Fragen zu beantworten:
Ich meine, dass ich versuche, ein adaptive card
im MS Teams-Kanal zu aktualisieren, und das Ergebnis sollte sein, dass die Karte aktualisiert wird, nachdem ich eine Aktion ausgeführt habe (die Karte befindet sich innerhalb des Skills, also ist der Test im Grunde der updateActivity
vom Skill zum VA).
Ja, sowohl VA als auch Skill sind in Typoskript
Im Skill habe ich ein adaptive card
, nach einer Aktion des Benutzers soll diese Karte mit anderen Inhalten aktualisiert werden. Von der Fertigkeit nenne ich die updateActivity
:
dc.context.updateActivity(previouslySentActivity);
previouslySentActivity
Es ist die Aktivität, die wir aktualisieren möchten. Wir speichern die Aktivität im Status, um sie später aktualisieren zu können. Dies funktionierte in der vorherigen Version, aber der Ablauf der Sende- und Aktualisierungsaktivitäten hat sich meines Wissens mit der neuen Version geändert.
Dadurch wird der VA-Endpunkt aufgerufen (dies funktioniert), der dann die Aktivität aktualisieren sollte. Der Anruf kommt in CustomSkillHandler
in der Methode onUpdateActivity
, aber dann erhalte ich den Fehler, wenn die Aktivität an MS Teams gesendet wird.
Lassen Sie es mich wissen, wenn Sie mehr Kontext benötigen, vielleicht kann ich dies auch in Ihrem Zweig ausprobieren und prüfen, ob ich den gleichen Fehler habe.
Hallo @Batta32 , ich habe es von dem Zweig aus getestet, den Sie zum Testen verwenden. Ich habe hier einen Fork erstellt: https://github.com/tommyJimmy87/botframework-solutions/tree/feature/southworks/conversationid-issue
Ich habe Ihren Zweig geändert, um den gleichen Fehler zu reproduzieren. Innerhalb von testSkillHandler
ich einen try-catch hinzugefügt, um den Fehler zu erhalten:
try{
await context.updateActivity(activity);
}catch(e){
console.log(e);
}
Dies ist der eigentliche Fehler, den ich beim updateActivity
Aufruf erhalte:
{ body: '{"error":{"code":"ServiceError","message":"Unknown"}}',
headers: HttpHeaders { _headersMap: [Object] },
status: 400 },
body: { error: { code: 'ServiceError', message: 'Unknown' } } }
Das gleiche erhalte ich in meinem Projekt.
Dies ist der Test, den ich gemacht habe:
Ich habe einen neuen Dialog innerhalb der Beispiel-Skill testUpdateActivityDialog
wo ich im beginDialog ein TestCard
mit einem Text sende. Im onContinueDialog
schicke ich dieselbe Karte, aber mit einem anderen Text;
Verbinden Sie die VA mit dem Skill.
Rufen Sie die VA mit einer bestimmten Absicht an, die den Skill aufruft und den Testdialog startet und die Karte zeigt;
Rufen Sie die VA mit einer bestimmten Absicht auf, die den Skill und die continueDialog
des Testdialogs aufruft;
Der Skill ruft die VA an, um die Karte zu aktualisieren, und dann erhalten Sie den Fehler.
Großartig @tommyJimmy87 ! Wir werden es mit diesen neuen Informationen überprüfen, vielen Dank 😊.
Hallo @tommyJimmy87! Wir haben das Szenario mit Ihren neuesten Änderungen und den genannten Repro-Schritten erfolgreich reproduziert .
Wir werden weiter zu diesem Thema forschen. Sobald wir ein Update haben, melden wir uns wieder .
_Wir haben die Verbindung zwischen den VA- und Skill-Bots getestet und das gleiche Problem festgestellt, wenn der Skill die Aktivitätsinformationen an die VA sendet_
Hallo @DiegoCardozo94 ,
Danke für das Update.
Hast du eine Ahnung, wann das veröffentlicht werden könnte?
Glaubst du, dass dies vor dem 17. veröffentlicht werden kann, da wir eine strenge Veröffentlichung von unserer Seite haben, möchten wir nur verstehen, ob der 17. Termin machbar ist oder nicht? :)
Vielen Dank
Hallo @tommyJimmy87 , Entschuldigung für die Verzögerung.
Wir haben es geschafft zu bestätigen , dass dieses Problem in C # geschieht auch so scheint es , nicht nur auf Typoskript zusammenzuhängen.
Wir haben einige viele verwandte Probleme gefunden :
SkillHandler
ein gefälschtes ResourceResponse
generiert, wenn es Aktivitäten vom Skill an den Kanal weiterleitet. Das bedeutet, dass Operationen wie update
und delete
nicht funktionieren .SkillHandler
OnUpdateActivityAsync
nicht implementiert.Zu guter Letzt haben wir die folgenden Szenarien anhand der genannten Schritte validiert:
@darrenj , wir haben dieses Problem auch mit C# repliziert .
Unsere Testumgebung:
Unsere Repro-Schritte :
_Der virtuelle Assistent löst eine Ausnahme aus, wenn er versucht, eine Aktivität zu aktualisieren_
_TypeScript Skill wird erfolgreich im Microsoft Teams Channel ausgeführt und aktualisiert die zuvor gesendete Karte_
Hallo, https://github.com/microsoft/botframework-sdk/issues/5919 wurde in allen 3 unterstützten Sprachen behandelt. Sie können versuchen, ob diese Lösung mit einem der täglichen Builds ab morgen hilft.
Hallo @Batta32 , hier ist etwas, das Sie zuerst aktualisieren müssen, oder? Es ist nicht etwas, was ich schon versuchen kann?
Hallo @tommyJimmy87! Ja, werden wir die Validierung was @gabog erwähnt für Typoskript und C #.
Wir werden diesen Branch aktualisieren, indem wir die letzten Updates hinzufügen und den täglichen Build botbuilder-v4-js-daily des SDKs integrieren, der microsoft/botbuilder-js#2489 und microsoft/botbuilder-dotnet#4264 enthält.
Sobald wir ein Update haben, melden wir uns wieder .
Hallo @tommyJimmy87 , wir haben erfolgreich bestätigt, dass das Anwenden der Änderungen von microsoft/botbuilder-js#2489 in testSkillHandler
dieses Problem gelöst und die Aktivität korrekt über den Microsoft Teams-Kanal aktualisiert wird.
Überprüfen Sie diesen Commit , um die Änderungen zu identifizieren, die Sie in Ihrer testSkillHandler
anwenden sollten, insbesondere in der Methode processActivity
.
@darrenj & @gabog - wir haben die Änderungen von microsoft/botbuilder-dotnet#4264 auch mit C# -Bots erfolgreich validiert.
Unsere Testumgebung:
Repro-Schritte:
_Änderungen an der processActivity-Methode von testSkillHandler_
_TypeScript Virtual Assistant wird erfolgreich im Microsoft Teams-Kanal ausgeführt und aktualisiert die zuvor gesendete Karte_
Wir werden auf Ihre Antwort aufmerksam sein!
Hallo @Batta32 , danke für das Update, wir werden das so
@tommyJimmy87 - Nur das Commit, das wir oben gepostet haben!
Hi nochmal @Batta32 :) Auch dieser sieht aus wie gelöst! Ich werde morgen noch ein paar eingehendere Tests durchführen, aber die Änderungen in der von Ihnen bereitgestellten Test-Skill-Handler-Klasse scheinen in Ordnung zu sein. Vielen Dank!
Danke @tommyJimmy87! Sobald Sie dies bestätigen können, können wir dieses Thema schließen 😊.
Hallo @Batta32! Wir können dieses Thema gerne schließen :)
Danke @tommyJimmy87 für die Bestätigung!
@darrenj - wir können dieses Problem schließen, da es vom SDK-Team gelöst wurde!
Hilfreichster Kommentar
Hi nochmal @Batta32 :) Auch dieser sieht aus wie gelöst! Ich werde morgen noch ein paar eingehendere Tests durchführen, aber die Änderungen in der von Ihnen bereitgestellten Test-Skill-Handler-Klasse scheinen in Ordnung zu sein. Vielen Dank!