Assistant virtuel et compétence TypeScript
Manuscrit
L'erreur suivante est levée lors de la tentative d'authentification
Erreur : DialogContext.beginDialog() : une boîte de dialogue avec l'ID 'AuthPrompt' n'a pas été trouvée.
à WaterfallStepContext.
sur Generator.next (
à D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:7:71
à la nouvelle promesse (
à __awaiter (D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:3:12)
à WaterfallStepContext.beginDialog (D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:119:16)
à MultiProviderAuthDialog.firstStep (D:\home\site\wwwroot\node_modules\bot-solutions\lib\authentication\multiProviderAuthDialog.js:75:34)
à WaterfallDialog.
sur Generator.next (
à D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\waterfallDialog.js:7:71
Déployez l'assistant virtuel et les compétences. Activer le MultiProviderAuthDialog dans la skill
Utilisez la boîte de dialogue d'authentification pour vous authentifier avec Azure Active Directory v2
Recevez une carte de connexion pour vous connecter
Erreur : DialogContext.beginDialog() : une boîte de dialogue avec l'ID 'AuthPrompt' n'a pas été trouvée.
à WaterfallStepContext.
sur Generator.next (
à D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:7:71
à la nouvelle promesse (
à __awaiter (D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:3:12)
à WaterfallStepContext.beginDialog (D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\dialogContext.js:119:16)
à MultiProviderAuthDialog.firstStep (D:\home\site\wwwroot\node_modules\bot-solutions\lib\authentication\multiProviderAuthDialog.js:75:34)
à WaterfallDialog.
sur Generator.next (
à D:\home\site\wwwroot\node_modules\botbuilder-dialogs\lib\waterfallDialog.js:7:71
Merci @tomSauret847 d' avoir signalé ce problème ! Dès que nous aurons une mise à jour, nous reviendrons vers vous .
Salut @tomSauret847 - désolé pour le retard. Nous avons réussi à reproduire le problème à l'aide de la compétence TypeScript en suivant ces étapes :
OAuthPromptSettings
tableau au MultiProviderAuthDialog
constructeurappsettings.oauthConnections
aux propriétés de botSettings
AADv2
AADv2
à l'inscription dans AzureDès que nous aurons une mise à jour, nous reviendrons vers vous .
Salut @tomSauret847 - nous avons corrigé ce problème dans ce commit .
Il s'agissait en fait d'un problème dans la bibliothèque bot-solutions
, et nous avons prévu de publier le correctif avec la version 1.0 de la bibliothèque.
En attendant, si vous souhaitez tester le correctif par vous-même, vous pouvez suivre ces étapes :
npm install
pour installer ses dépendances.npm run build
pour générer la solution.npm pack
pour générer un fichier .tgz
. Il devrait créer un fichier au même emplacement, nommé bot-solutions-version.tgz"bot-solutions": "^1.0.0"
à "bot-solutions": "<PATH_TO_TGZ>"
Nous serons attentifs à vos réponses 😊.
Merci d'avoir examiné ce @Batta32 Je
Erreur : Impossible de trouver le paramètre de connexion avec le nom {nom de la connexion}
Je configure la connexion comme indiqué ici pour configurer le SSO pour une compétence.
Avons-nous toujours besoin d'une connexion d'authentification dans chaque compétence avec les compétences dactylographiées ?
Ou pouvons-nous utiliser le SSO unique tel qu'il est décrit pour les compétences C# ?
Si j'ajoute la connexion sur la compétence, j'obtiendrai l'invite de connexion comme vous l'avez fait, mais je ne recevrai pas le jeton après avoir terminé la connexion. Si vous pouviez préciser si nous devons configurer une seule connexion dans le VA ou si nous devons configurer des connexions dans chacune des compétences qui nécessitent une authentification.
Merci @tomSauret847 pour votre réponse. Dès que nous aurons une mise à jour, nous reviendrons vers vous !
Salut @ tomSauret847 - nous avons réussi à reproduire le problème. C'est parce que la propriété name
dans oauthConnections
du appsettings.json
diffère de la propriété connectionName
dans le OAuthPromptSettings
vous utilisez.
Nous continuerons à examiner cela et à analyser les questions que vous avez mentionnées ci-dessus. Dès que nous aurons une mise à jour, nous reviendrons vers vous .
Les étapes que nous avons suivies pour reproduire le problème étaient les suivantes :
name
dans oauthConnections
du appsettings.json
diffère de la propriété connectionName
dans le OAuthPromptSettings
vous utilisez_Lorsque connectionName et name sont différents, le problème est reproduit_
_Problème reproduit_
Salut @tomSauret847
Avons-nous toujours besoin d'une connexion d'authentification dans chaque compétence avec les compétences dactylographiées ?
Vous devez disposer d'une connexion d'authentification dans chaque compétence TypeScript jusqu'à la sortie de la version 1.0 de la compétence TypeScript.
Ou pouvons-nous utiliser le SSO unique tel qu'il est décrit pour les compétences C# ?
SSO pour TypeScript ne peut pas être utilisé car il est décrit pour les compétences C# car la version 1.0 de TypeScript n'est pas encore publiée.
Faites-nous savoir si cela vous aide .
@tomSauret847 - l'erreur Error: Could not find Connection Setting with name {connection name}
est due au fait que la propriété name
dans oauthConnections
du appsettings
diffère de la propriété connectionName
dans le OAuthPromptSettings
vous utilisez.
Pour résoudre ce problème, vous devez vérifier que les deux propriétés sont égales .
Pour plus d'informations, vous pouvez vérifier le commentaire ci-dessus.
Merci @Batta32 d' avoir examiné cela. Je peux confirmer que si je crée une propriété de connexion sur la compétence, je peux obtenir l'invite de connexion. Votre commentaire a soulevé une autre question. Nous nous préparons à passer aux tests avec notre nouveau VA et ensuite à la production. La question que j'ai,
Ce correctif pour l'authentification va-t-il être publié sur NPM avant la version 1.0 ?
Pour notre environnement de production, nous aurons besoin de packages NPM publiés, nous aurions donc besoin que ce correctif soit publié avant de pouvoir déplacer cette VA en production. Je serai attentif à votre réponse.
@tomSauret847 - Merci pour votre réponse ! Nous ajoutons ces correctifs dans les PRs de TypeScript version 1.0 :
[TypeScript][Bot-Solutions] Implement changes in Bot-Solutions to 1.0 release
[TypeScript][Virtual Assistant] Implement changes in Virtual Assistant to 1.0 release
[TypeScript][Skill] Implement changes in Skill to 1.0 release
Nous vous informerons dès que nous aurons une mise à jour à ce sujet. Pendant ce temps, nous travaillons sur la validation du processus d'authentification dans TypeScript.
@ tomSauret847 - nous avons identifié un autre problème selon lequel la variable État des compétences était _non définie_ pendant le processus d'authentification.
Nous avons pris comme guide le PR #3561 qui définit une valeur par défaut pour l'accesseur Skill State que nous avons incorporé dans ce commit .
Après avoir appliqué ces modifications, le processus d'authentification fonctionne correctement. Ce problème sera résolu dès que le TypeScript v1.0 sera fusionné.
Voici notre environnement utilisant cette branche : feature/southworks/test-fix-auth-skill
:
En attendant, si vous souhaitez tester le correctif par vous-même, vous pouvez suivre ces étapes :
npm install
pour installer ses dépendances.npm run build
pour générer la solution.npm pack
pour générer un fichier .tgz. Il devrait créer un fichier au même emplacement, nommé bot-solutions-version.tgz"bot-solutions": "^1.0.0"
à "bot-solutions": "<PATH_TO_TGZ>"
npm install
pour installer ses dépendances.npm run build
pour construire la solution.Nous sommes attentifs à votre réponse. ??
_Variable SkillState obtenant une valeur indéfinie_
_Le processus d'authentification fonctionne correctement_
Merci encore @Batta32 ! J'ai utilisé le package 1.0 pour les tests. Je dois toujours conserver un paramètre de connexion dans la compétence, mais je peux faire fonctionner l'authentification. J'ai pu voir où le VA reçoit la réponse symbolique et la transmet à la compétence à traiter.
@Batta32 Nous avons configuré l'authentification dans 2 de nos compétences et cela fonctionne bien dans le canal Teams. Le canal de ligne directe ne dépasse pas l'invite d'authentification. La compétence ne reçoit pas le jeton après une connexion réussie. Ce problème n'est présent que dans notre canal de ligne directe. Nous utilisons l'exemple de client en ligne directe qui a été fourni et avons activé les options d'authentification améliorées afin de ne pas entrer le « code magique ». Cela fonctionnait avant l'ajout de l'authentification améliorée, mais après l'ajout de cette fonctionnalité, la compétence ne reçoit plus la réponse du jeton. Si nous annulons la compétence et retournons dans cette boîte de dialogue, le jeton sera présent et nous pourrons terminer la boîte de dialogue. Faites-moi savoir si vous avez des idées sur ce qui pourrait causer cela.
Merci @tomSauret847 , nous allons examiner ce scénario et nous vous répondrons dès que possible !
Juste pour commencer à revoir le scénario :
Merci encore @Batta32 d' avoir examiné cela. Nous utilisons l'exemple de ligne directe du référentiel botbuilder-solutions situé ici
Le "code magique" est expliqué dans cette question de débordement de pile ici
Il s'agit simplement du code que l'utilisateur du bot doit copier et coller dans la conversation après s'être authentifié avec succès. En implémentant l'authentification améliorée, cette étape est supprimée pour l'utilisateur du bot afin qu'il n'ait qu'à s'authentifier et la conversation avance à mesure que le jeton est renvoyé au bot dans les coulisses.
Merci beaucoup @tomSauret847 , nous allons examiner cela et nous vous informerons de toute mise à jour ici 😊 !
Salut @tomSauret847 , nous n'avons pas pu reproduire ce problème car le scénario d'authentification fonctionne correctement.
Nous vous avons posé quelques
Voici la configuration que nous avons utilisée :
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"BotName": "skillbot-name",
"DirectLineSecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"EnableDirectLineEnhancedAuthentication": true,
"SpeechServiceRegionIdentifier": "",
"SpeechServiceSubscriptionKey": ""
}
Les étapes que nous avons suivies sont :
Nous serons attentifs à votre réponse.
Merci @matiasroldan6 d' avoir examiné cela. Pour répondre à tes questions
Nous avons l'ID utilisateur défini sur "dl_xxxx" dans le client en ligne directe
Nous avons l'authentification Azure AD v2 dans la connexion sur la Skill et VA
Nous avons le appsettings.json du client en ligne directe défini de la même manière que ci-dessus
Nous ne pouvons pas utiliser le canal de ligne directe sur la compétence et ne l'utilisons que sur le VA
Nous sommes en mesure d'utiliser l'authentification dans le canal Teams avec le seul problème est que les messages de dialogue sont en panne. Il ne parvient pas à envoyer le premier stepContext.context.sendActivity('message') jusqu'à une minute plus tard dans la conversion. Cela ne se produit que sur les boîtes de dialogue dans lesquelles l'authentification est incluse et dans le canal Teams uniquement.
Nous utilisons le bot-solutions 1.0 qui se trouve ici
S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations sur la compétence et VA
Salut @tomSauret847 , nous pourrions reproduire une occurrence de ce problème.
Dans notre scénario, le problème était les adresses d'origine de confiance définies dans le canal Directline. Par exemple, la fenêtre contextuelle Directline indique que les origines de confiance doivent être _https_ ou _http_ pour _localhost_. Cela expliquerait Directline comme le seul canal qui échoue pour vous.
Pour vérifier s'il s'agit également de votre problème, pouvez-vous essayer de définir comme origines de confiance :
Votre adresse de bot (soit https://xxxxx.azurewebsites.net ou https://xxxx.ngrok.io si vous déboguez localement)
Votre localhost si vous en avez besoin, comme http://localhost
Le paramètre pour reproduire cela était :
Nos étapes de repro étaient :
S'il vous plaît laissez-nous savoir si cela est d'une quelconque aide. Nous serons attentifs à vos réponses.
Merci @matiasroldan6 d' avoir examiné cela. Les paramètres que vous montrez ci-dessus sont les mêmes que ceux que nous utilisons. Nous avons supprimé la route localhost et n'avons que l'adresse du bot dans les origines de confiance pour le canal de ligne directe (https://xxxxx.azurewebsites.net). La compétence ne répond toujours pas après l'invite de connexion et si nous annulons la conversation et invoquons à nouveau la compétence, elle aura le jeton et continuera le dialogue. Nous ne parvenons toujours pas à obtenir la compétence pour recevoir le jeton une fois que l'utilisateur s'est connecté.
Merci pour votre réponse @tomSauret847 - nous continuerons à travailler dessus en essayant de trouver la solution à ce problème 😊.
Nous avons des questions afin de comprendre comment vous utilisez le point azurewebsites.net
terminaison
Messaging endpoint
de votre Web App Bot (Virtual Assistant) publié ?.tgz
de la bibliothèque. Est-ce correct?Merci @Batta32
Merci @tomSauret847 , nous continuerons d'examiner ce problème avec ces nouvelles informations que vous avez fournies ! Dès que nous aurons une mise à jour, nous reviendrons vers vous .
Salut @tomSauret847 , nous avons réussi à reproduire une occurrence de ce problème.
Une chose que nous avons remarquée dans vos réponses précédentes est que vous utilisez l'URL de votre bot comme origine de confiance.
D'après ce commentaire , et cette documentation , vous devriez avoir l'URL de votre client de chat.
Notre configuration était :
Pas:
Nous continuerons à examiner ce problème comme nous l'avons confirmé et comme vous l'avez mentionné, que dans Microsoft Teams et Emulator, cela fonctionne.
Salut @tomSauret847 , nous avons exécuté avec succès le processus d'authentification à l'aide de l'authentification améliorée.
Nous avons posé quelques
<WEB_APP_BOT_NAME>
par le nom de votre ressource de bot ? Vérifiez si vous avez le node_modules
, lib
, et le reste des dossiers.C'est notre environnement :
Nous avons suivi ces étapes :
.tgz
sur les deux échantillons"bot-solutions": ".//TGZ//bot-solutions-1.0.0.tgz"
des botsdeploy.ps1
publish.ps1
run sample dialog
Enfin, nous avons confirmé les mêmes étapes à l'aide de bots C# et vérifié que cela fonctionnait également correctement.
Nous serons attentifs à votre réponse
_Configuration de l'Authentification Renforcée_
_Communication réussie à l'aide de l'authentification améliorée et des robots TypeScript_
_Communication réussie à l'aide de l'authentification améliorée et des robots C#_
Merci @VictorGrycuk. Désolé pour la réponse tardive, nous avions besoin de configurer une instance de test pour vérifier le correctif. Nous avons réussi à faire fonctionner l'authentification dans l'instance de test et avons identifié le problème.
Pour notre instance de VA/Skills, nous les avons derrière une passerelle d'application avec un pare-feu. Il semble que c'est la raison pour laquelle l'authentification améliorée ne fonctionne pas. Lorsque nous implémentons cela sur un VA et une compétence en dehors de cette configuration, cela fonctionne correctement. la passerelle d'application place un autre hôte dans le mix et nous pensons que c'est ce qui bloque le jeton. Nous avons donc la question suivante,
Existe-t-il un moyen de faire fonctionner l'authentification améliorée avec un bot derrière une passerelle d'application ?
Super @tomSauret847 ! Nous ferons une recherche et quelques tests afin d'examiner un moyen de faire fonctionner l'authentification améliorée avec un bot derrière une passerelle d'application.
Dès que nous aurons une mise à jour à ce sujet, nous vous le ferons savoir ici .
Salut @tomSauret847 , nous avons fait une petite recherche et nous avons posé quelques
Nous serons attentifs à votre réponse
Merci d'avoir répondu @VictorGrycuk voici les réponses à nos questions,
Nous testons avec les bots déployés sur Azure. Nous ne sommes pas en mesure de créer un tunnel pour tester localement.
Oui, nous utilisons une passerelle d'application Azure avec un WAF comme indiqué dans votre lien
Ce sont des robots TypeScript (VA et 2 compétences avec authentification), nous n'utilisons qu'une compétence C# pour contourner le problème de la boucle synchrone et il n'y a pas d'authentification.
Salut @ tomSauret847 , désolé pour le retard - nous pensons qu'il devrait être possible d'utiliser l'authentification améliorée avec une passerelle d'application Azure ayant les bots derrière elle.
Quelques questions supplémentaires :
Composants :
Paramétrage :
Nous allons travailler à reproduire ce scénario.
Merci @VictorGrycuk Les réponses à vos questions sont
Pouvez-vous vous connecter à l'assistant virtuel avec un émulateur en utilisant l'adresse IP publique de la passerelle ? Lors de nos tests, nous avons confirmé que cela est possible
Pouvez-vous vous connecter et communiquer avec une compétence via le VA sans une communication améliorée ?
Salut @tomSauret847 , nous pouvons confirmer que l'authentification améliorée fonctionne avec les bots derrière une passerelle d'application Azure.
Nous avons créé le PR #3694 qui comprend une nouvelle documentation sur la configuration d'une passerelle d'application Azure avec un bot déployé.
Nous avons fait notre test en suivant ces étapes :
Comme cela semble être un problème de configuration d'Azure Application Gateway, je vous suggère de demander des suggestions à https://stackoverflow.com/questions/tagged/botframework ; et si vous allez bien, nous pouvons clore ce problème 🙂.
Merci @VictorGrycuk Nous allons travailler sur les informations que vous avez publiées. J'ai déjà remarqué que ce lien est rompu.
Merci @tomSauret847 , ce lien conduira à la configuration de la sonde de santé d'une passerelle avec un bot TypeScript (ainsi que cette image ) une fois les documents fusionnés dans la branche master
, car la documentation utilise {{site.baseurl}}
pour générer les URL.
@peterinnesmsft - nous pouvons fermer le problème en raison de l'inactivité. @tomSauret847 si vous rencontrez toujours des problèmes, n'hésitez pas à réactiver et nous pourrons le reprendre ou créer un nouveau problème !
De plus, si vous avez des questions, veuillez les poser sur https://stackoverflow.com/questions/tagged/botframework.
L'ensemble du processus d'authentification sera résolu dès que les PR suivants seront fusionnés pour TypeScript version 1.0 :
[TypeScript][Bot-Solutions] Implement changes in Bot-Solutions to 1.0 release
[TypeScript][Virtual Assistant] Implement changes in Virtual Assistant to 1.0 release
[TypeScript][Skill] Implement changes in Skill to 1.0 release
Merci @Batta32 pour votre aide à ce sujet. Nous devons mettre cette section en attente pour le moment, je vais donc fermer ce problème et le rouvrir si nous avons des problèmes lorsque nous le reprendrons.
@Batta32 Nous avons une question rapide sur ce problème. Le SSO pour dactylographié est-il encore disponible ? Nous avons découvert que le problème est que nos compétences sont derrière un pare-feu et ne peuvent pas recevoir la réponse du jeton. Lorsque nous transmettons les informations d'identification du VA, il ne transmet pas le jeton à la compétence, il redémarre simplement la conversation. Si l'authentification unique pour le texte dactylographié n'est pas disponible, quand pensez-vous qu'elle le sera ? Merci pour toute votre aide sur ce problème.
Salut @tomSauret847 , SSO n'est pas disponible pour TypeScript actuellement car il est introduit dans la version 1.0. Les PR de TypeScript version 1.0 doivent être approuvés et fusionnés afin de publier une nouvelle version avec cette fonctionnalité.
Nous vous tiendrons au courant dès que nous aurons une mise à jour 😊.
Commentaire le plus utile
Merci encore @Batta32 ! J'ai utilisé le package 1.0 pour les tests. Je dois toujours conserver un paramètre de connexion dans la compétence, mais je peux faire fonctionner l'authentification. J'ai pu voir où le VA reçoit la réponse symbolique et la transmet à la compétence à traiter.