Projet d'assistant virtuel et projet de compétences.
Manuscrit.
À partir de MS Teams Channel, lorsque vous essayez de mettre à jour une activité à partir d'une compétence, l'assistant virtuel génère une erreur.
updateActivity
n'est pas implémentée dans le "SkillHandler" fourni)onUpdateActivity
: 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
ressemble à ceci :
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');
La carte est mise à jour dans Teams
L'erreur s'affiche lorsque le VA essaie de mettre à jour l'activité à partir de la fonction décrite précédemment onUpdateActivity
.
(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)
Équipes de canal
Merci @tommyJimmy87 d' avoir signalé ce problème, nous l'examinons toujours. Dès que nous aurons une mise à jour, nous reviendrons vers vous !
Salut @tommyjimmy87 , j'ai besoin que vous me donniez des étapes de reproduction supplémentaires de ce que vous faites afin de comprendre ce qui ne va pas car nous n'avons pas pu reproduire le problème auquel vous êtes confronté.
The Card is updated in Teams
?CustomSkillHandler
?Voici la branche avec nos dernières modifications que nous avons apportées pour reproduire ce problème.
generator-bot-virtualassistant
botskills connect
CustomSkillHandler
CustomSkillHandler
Nous serons attentifs à votre réponse !
Salut @Batta32 , va essayer de répondre à tes questions :
Je veux dire que j'essaie de mettre à jour un adaptive card
dans le canal MS Teams et le résultat devrait être que la carte est mise à jour après que j'ai fait une action (la carte est dans la compétence, donc fondamentalement le test est le updateActivity
de la compétence au VA).
Oui, VA et Skill sont tous deux en Typescript
Dans la compétence, j'ai un adaptive card
, après une action de l'utilisateur, cette carte devrait être mise à jour avec un contenu différent. De la compétence que j'appelle le updateActivity
:
dc.context.updateActivity(previouslySentActivity);
previouslySentActivity
c'est l'activité que l'on veut mettre à jour, on sauve l'activité dans l'état afin de pouvoir la mettre à jour plus tard. Cette utilisation fonctionnait dans la version précédente, mais le flux d'activité d'envoi et de mise à jour, pour autant que je sache, a changé avec la nouvelle version.
Cela appellera le point de terminaison VA (cela fonctionne) qui devrait alors mettre à jour l'activité. L'appel arrive dans le CustomSkillHandler
dans la méthode onUpdateActivity
mais j'obtiens ensuite l'erreur lorsque l'activité est envoyée à MS Teams.
Faites-moi savoir si vous avez besoin de plus de contexte, en attendant, je peux peut-être l'essayer également sur votre branche et vérifier si j'ai la même erreur.
Salut @Batta32 , je l'ai testé à partir de la branche que vous utilisez pour tester. J'ai créé un fork ici : https://github.com/tommyJimmy87/botframework-solutions/tree/feature/southworks/conversationid-issue
J'ai modifié votre branche pour reproduire la même erreur. Dans le testSkillHandler
j'ai ajouté un try-catch pour obtenir l'erreur :
try{
await context.updateActivity(activity);
}catch(e){
console.log(e);
}
C'est l'erreur réelle que je reçois de l'appel updateActivity
:
{ body: '{"error":{"code":"ServiceError","message":"Unknown"}}',
headers: HttpHeaders { _headersMap: [Object] },
status: 400 },
body: { error: { code: 'ServiceError', message: 'Unknown' } } }
Ce qui est le même que j'obtiens dans mon projet.
Voici le test que j'ai fait :
J'ai créé un nouveau dialogue à l'intérieur de l'exemple de compétence testUpdateActivityDialog
où dans le beginDialog j'envoie un TestCard
avec un texte. Dans le onContinueDialog
j'envoie la même carte mais avec un texte différent ;
Connectez le VA à la compétence.
Appelez le VA avec une intention qui appellera la compétence et démarrera la boîte de dialogue de test et affichera la carte ;
Appelez le VA avec une intention qui appellera la compétence et le continueDialog
de la boîte de dialogue de test ;
La compétence appellera le VA afin de mettre à jour la carte, puis vous obtiendrez l'erreur.
Super @tommyJimmy87 ! Nous allons le revoir avec ces nouvelles informations, merci beaucoup .
Salut @tommyJimmy87 ! Nous avons réussi à reproduire le scénario en utilisant vos dernières modifications et les étapes de reproduction mentionnées.
Nous poursuivrons nos recherches sur ce problème. Dès que nous aurons une mise à jour, nous reviendrons vers vous .
_Nous avons testé la connexion entre les bots VA & Skill en détectant le même problème lorsque les compétences envoient les informations d'activité au VA_
Salut @DiegoCardozo94 ,
Merci pour la mise à jour.
Avez-vous une idée de quand cela pourrait sortir?
Pensez-vous que cela puisse sortir avant le 17, puisque nous avons une sortie strictement de notre côté nous aimerions juste comprendre si la date du 17 est faisable ou pas ? :)
Merci
Salut @tommyJimmy87 , désolé pour le retard.
Nous avons réussi à valider que ce problème se produit également en C#, il ne semble donc pas être lié uniquement à TypeScript.
Nous avons trouvé de nombreux problèmes connexes :
SkillHandler
génère un faux ResourceResponse
lorsqu'il transmet les activités de la compétence au canal. Cela signifie que les opérations comme update
et delete
ne fonctionneront pas .SkillHandler
n'implémente pas OnUpdateActivityAsync
.Enfin et surtout, nous avons validé les scénarios suivants en utilisant les étapes mentionnées :
@darrenj , nous avons également répliqué ce problème en utilisant des robots C#.
Notre environnement de test :
Nos étapes de repro :
_L'assistant virtuel lancera une exception lors de la tentative de mise à jour d'une activité_
_TypeScript Skill s'exécutant avec succès dans Microsoft Teams Channel, mettant à jour la carte qui a été précédemment envoyée_
Salut, https://github.com/microsoft/botframework-sdk/issues/5919 a besoin d'être adressé sur les 3 langues prises en charge, vous pouvez essayer si cette solution aide à utiliser l'une des versions quotidiennes à partir de demain.
Salut @Batta32 , voici quelque chose que vous devez d'abord mettre à jour, n'est-ce pas ? Ce n'est pas quelque chose que je peux déjà essayer ?
Salut @tommyJimmy87 ! Oui, nous validerons ce que mentionné pour TypeScript et C#.
Nous mettrons à jour cette branche en ajoutant les dernières mises à jour et en incorporant la version quotidienne botbuilder-v4-js-daily du SDK qui contient les fichiers microsoft/botbuilder-js#2489 et microsoft/botbuilder-dotnet#4264 .
Dès que nous aurons une mise à jour, nous reviendrons vers vous .
Salut @tommyJimmy87 , nous avons confirmé avec succès que l'application des modifications de microsoft/botbuilder-js#2489 dans le testSkillHandler
ce problème est résolu et que l'activité est correctement mise à jour à l'aide du canal Microsoft Teams.
Vérifiez ce commit afin d'identifier les changements que vous devez appliquer dans votre testSkillHandler
, en particulier dans la méthode processActivity
.
@darrenj & @gabog - nous avons également validé avec succès les modifications de microsoft/botbuilder-dotnet#4264 à l'aide de bots C# .
Notre environnement de test :
Étapes de reproduction :
_Modifications apportées à la méthode processActivity de testSkillHandler_
_TypeScript Virtual Assistant s'exécutant avec succès dans Microsoft Teams Channel, mettant à jour la carte qui a été précédemment envoyée_
Nous serons attentifs à votre réponse !
Salut @Batta32 , merci pour la mise à jour, nous allons essayer cela dès que possible. Juste une question de mon côté : une version de la bibliothèque a-t-elle été modifiée ou s'agit-il simplement du commit que vous avez publié ci-dessus ? Merci
@tommyJimmy87 - Juste le commit que nous avons posté ci-dessus !
Re-bonjour @Batta32 :) Aussi celui-ci semble résolu ! Je ferai des tests plus approfondis demain, mais je semble être d'accord avec les changements dans la classe Test Skill Handler que vous avez fournis. Merci!
Merci @tommyJimmy87 ! Dès que vous pourrez le confirmer, nous pourrons clore ce problème 😊.
Salut @Batta32 ! Nous pouvons volontiers clore ce problème :)
Merci @tommyJimmy87 pour l'avoir confirmé !
@darrenj - nous pouvons clore ce problème car il a été résolu par l'équipe du SDK !
Commentaire le plus utile
Re-bonjour @Batta32 :) Aussi celui-ci semble résolu ! Je ferai des tests plus approfondis demain, mais je semble être d'accord avec les changements dans la classe Test Skill Handler que vous avez fournis. Merci!