Assistente Virtual TypeScript e habilidade
TypeScript
O seguinte erro é gerado durante a tentativa de autenticação
Erro: DialogContext.beginDialog (): Uma caixa de diálogo com um id de 'AuthPrompt' não foi encontrada.
em WaterfallStepContext.
em Generator.next (
em D: \ home \ site \ wwwroot \ node_modules \ botbuilder-dialogs \ lib \ dialogContext.js: 7: 71
na nova promessa (
em __awaiter (D: \ home \ site \ wwwroot \ node_modules \ botbuilder-dialogs \ lib \ dialogContext.js: 3: 12)
em WaterfallStepContext.beginDialog (D: \ home \ site \ wwwroot \ node_modules \ botbuilder-dialogs \ lib \ dialogContext.js: 119: 16)
em MultiProviderAuthDialog.firstStep (D: \ home \ site \ wwwroot \ node_modules \ bot-solutions \ lib \ authentication \ multiProviderAuthDialog.js: 75: 34)
em WaterfallDialog.
em Generator.next (
em D: \ home \ site \ wwwroot \ node_modules \ botbuilder-dialogs \ lib \ waterfallDialog.js: 7: 71
Implante assistente virtual e habilidade. Habilite o MultiProviderAuthDialog na habilidade
Use a caixa de diálogo de autenticação para autenticar com o Azure Active Directory v2
Receba o cartão de login para fazer login
Erro: DialogContext.beginDialog (): Uma caixa de diálogo com um id 'AuthPrompt' não foi encontrada.
em WaterfallStepContext.
em Generator.next (
em D: \ home \ site \ wwwroot \ node_modules \ botbuilder-dialogs \ lib \ dialogContext.js: 7: 71
na nova promessa (
em __awaiter (D: \ home \ site \ wwwroot \ node_modules \ botbuilder-dialogs \ lib \ dialogContext.js: 3: 12)
em WaterfallStepContext.beginDialog (D: \ home \ site \ wwwroot \ node_modules \ botbuilder-dialogs \ lib \ dialogContext.js: 119: 16)
em MultiProviderAuthDialog.firstStep (D: \ home \ site \ wwwroot \ node_modules \ bot-solutions \ lib \ authentication \ multiProviderAuthDialog.js: 75: 34)
em WaterfallDialog.
em Generator.next (
em D: \ home \ site \ wwwroot \ node_modules \ botbuilder-dialogs \ lib \ waterfallDialog.js: 7: 71
Obrigado @ tomSauret847 por comunicar este problema! Assim que tivermos alguma atualização, entraremos em contato com você 😊.
Olá @ tomSauret847 - desculpe pelo atraso. Reproduzimos com sucesso o problema usando a habilidade TypeScript seguindo estas etapas:
OAuthPromptSettings
para o construtor MultiProviderAuthDialog
appsettings.oauthConnections
às propriedades de botSettings
AADv2
AADv2
para o registro no AzureAssim que tivermos alguma atualização, entraremos em contato com você 😊.
Olá @ tomSauret847 - corrigimos este problema neste commit .
Na verdade, esse era um problema na biblioteca bot-solutions
e agendamos a correção para ser lançada com a versão 1.0 da biblioteca.
Enquanto isso, se você quiser uma maneira de testar a correção por si mesmo, pode seguir estas etapas :
npm install
para instalar suas dependências.npm run build
para construir a solução.npm pack
para gerar um arquivo .tgz
. Ele deve criar um arquivo no mesmo local, denominado bot-solutions-version.tgz"bot-solutions": "^1.0.0"
para "bot-solutions": "<PATH_TO_TGZ>"
Estaremos atentos às suas respostas 😊.
Obrigado por olhar para este @ Batta32 . Ainda estou recebendo um erro neste processo. O erro é
Erro: não foi possível encontrar a configuração de conexão com o nome {nome da conexão}
Estou configurando a conexão conforme descrito aqui para configurar o SSO para uma habilidade.
Ainda precisamos ter uma conexão de autenticação em cada habilidade com as habilidades de datilografia?
Ou podemos usar o SSO único como descrito para as habilidades de C #?
Se eu adicionar a conexão na habilidade, receberei o prompt de login como você fez, mas não receberei o token de volta após completar o login. Se você pudesse esclarecer se precisamos configurar uma única conexão no VA ou se precisamos configurar conexões em cada uma das habilidades que requerem autenticação.
Obrigado @ tomSauret847 pela sua resposta. Assim que tivermos alguma atualização, entraremos em contato com você 😊!
Olá @ tomSauret847 - reproduzimos com sucesso o problema. É porque a propriedade name
em oauthConnections
de appsettings.json
difere da propriedade connectionName
em OAuthPromptSettings
você está usando.
Continuaremos revendo isso e analisando as questões que você mencionou acima. Assim que tivermos alguma atualização, entraremos em contato com você 😊.
As etapas que seguimos para reproduzir o problema foram:
name
em oauthConnections
de appsettings.json
difere da propriedade connectionName
em OAuthPromptSettings
você está usando_Quando connectionName e name são diferentes, o problema é reproduzido_
_Emissão reproduzida_
Olá @ tomSauret847
Ainda precisamos ter uma conexão de autenticação em cada habilidade com as habilidades de datilografia?
Você precisa ter uma conexão de autenticação em cada habilidade do TypeScript até que a versão 1.0 da habilidade do TypeScript seja lançada.
Ou podemos usar o SSO único como descrito para as habilidades de C #?
O SSO para TypeScript não pode ser usado conforme descrito para as habilidades C #, pois a versão 1.0 do TypeScript ainda não foi lançada.
Deixe-nos saber se isso ajuda você 😊.
@ tomSauret847 - o erro Error: Could not find Connection Setting with name {connection name}
é porque a propriedade name
em oauthConnections
de appsettings
difere da propriedade connectionName
OAuthPromptSettings
você está usando.
Para resolver isso, você deve verificar se as duas propriedades são iguais .
Para mais informações, você pode verificar o comentário acima.
Obrigado @ Batta32 por investigar isso. Posso confirmar que, se criar uma propriedade de conexão na habilidade, posso obter o prompt de login. Seu comentário trouxe outra questão. Estamos nos preparando para iniciar os testes com nosso novo VA e, em seguida, entrar em produção. A pergunta que tenho,
Essa correção para a autenticação será publicada no NPM antes do lançamento 1.0?
Para nosso ambiente de produção, precisaremos de pacotes NPM publicados, portanto, precisaríamos que esta correção fosse publicada antes de movermos este VA para a produção. Estarei atento à sua resposta.
@ tomSauret847 - Obrigado pela sua resposta! Estamos adicionando essas correções nos PRs do TypeScript versão 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
Iremos informá-lo assim que tivermos alguma atualização sobre isso. Enquanto isso, estamos trabalhando na validação do processo de autenticação no TypeScript.
@ tomSauret847 - identificamos outro problema: a variável Skill State foi _undefined_ durante o processo de autenticação.
Tomamos como guia o PR # 3561 que define um valor padrão para o acessador Skill State que incorporamos neste commit .
Depois de aplicar essas alterações, o processo de autenticação funciona corretamente. Esse problema será corrigido assim que o TypeScript v1.0 for mesclado.
Este é o nosso ambiente usando este branch : feature/southworks/test-fix-auth-skill
:
Enquanto isso, se você quiser uma maneira de testar a correção por si mesmo, pode seguir estas etapas:
npm install
para instalar suas dependências.npm run build
para construir a solução.npm pack
para gerar um arquivo .tgz. Ele deve criar um arquivo no mesmo local, denominado bot-solutions-version.tgz"bot-solutions": "^1.0.0"
para "bot-solutions": "<PATH_TO_TGZ>"
npm install
para instalar suas dependências.npm run build
para construir a solução.Estamos atentos à sua resposta. 😊
Variável _SkillState obtendo um valor indefinido_
_Processo de autenticação funcionando corretamente_
Obrigado novamente @ Batta32! Eu usei o pacote 1.0 para o teste. Ainda preciso manter uma configuração de conexão na habilidade, mas consigo fazer a autenticação funcionar. Consegui ver onde o VA está recebendo a resposta do token e encaminhando para a habilidade a ser processada.
@ Batta32 Configuramos a autenticação em 2 de nossas habilidades e está funcionando bem no canal Teams. O canal de linha direta não está passando do prompt de autenticação. A habilidade não está recebendo o token de volta após o login bem-sucedido. Este problema está presente apenas em nosso canal de linha direta. Estamos usando o cliente de linha direta de amostra que foi fornecido e habilitou as opções de autenticação aprimoradas, portanto, não inserimos o "código mágico". Funcionou antes de adicionar a autenticação aprimorada, mas depois de adicionar esse recurso, a habilidade não está mais recebendo a resposta do token de volta. Se cancelarmos a habilidade e voltarmos para o diálogo, o token estará presente e podemos concluir o diálogo. Deixe-me saber se você tem alguma ideia sobre o que pode estar causando isso.
Obrigado @ tomSauret847 , estaremos revendo esse cenário e responderemos assim que possível!
Apenas para começar a rever o cenário:
Obrigado novamente @ Batta32 por cuidar disso. Estamos usando a amostra de linha direta do repositório de soluções do construtor de bots localizado aqui
O "código mágico" é explicado nesta questão de estouro de pilha aqui
É apenas o código que o usuário bot deve copiar e colar de volta na conversa após a autenticação bem-sucedida. Ao implementar a autenticação aprimorada, ele remove essa etapa para o usuário do bot, de forma que ele só precise se autenticar e a conversa avance conforme o token é devolvido ao bot nos bastidores.
Muito obrigado @ tomSauret847 , estaremos analisando isso e avisaremos você sobre qualquer atualização aqui 😊!
Olá @ tomSauret847 , não foi possível reproduzir esse problema porque o cenário de autenticação está funcionando corretamente.
Fizemos algumas perguntas para você:
Esta é a configuração que estamos usando:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"BotName": "skillbot-name",
"DirectLineSecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"EnableDirectLineEnhancedAuthentication": true,
"SpeechServiceRegionIdentifier": "",
"SpeechServiceSubscriptionKey": ""
}
As etapas que seguimos são:
Estaremos atentos à sua resposta.
Obrigado @ matiasroldan6 por investigar isso. Para responder às suas perguntas
Temos o ID do usuário definido como "dl_xxxx" no cliente de linha direta
Temos a autenticação Azure AD v2 na conexão no Skill e VA
Temos o appsettings.json do cliente de linha direta definido da mesma forma que você definiu acima
Não podemos usar o canal de linha direta na habilidade e apenas usá-lo no VA
Podemos usar a autenticação no canal Equipes com o único problema é que as mensagens de diálogo estão fora de ordem. Ele está deixando de enviar o primeiro stepContext.context.sendActivity ('mensagem') até um minuto depois na conversão. Isso só acontece em diálogos que possuem autenticação incluída neles e apenas no canal Teams.
Estamos usando o bot-solutions 1.0 que está localizado aqui
Por favor, deixe-me saber se você precisar de mais informações sobre a habilidade e VA
Olá @ tomSauret847 , podemos reproduzir uma ocorrência deste problema.
Em nosso cenário, o problema eram os endereços de origens confiáveis definidos no canal Directline. Por exemplo, o pop-up Directline afirma que as origens confiáveis precisam ser _https_ ou _http_ para _localhost_. Isso explicaria o Directline como o único canal que está falhando para você.
Para verificar se este também é o seu problema, você pode tentar definir como origens confiáveis:
O endereço do seu bot (https://xxxxx.azurewebsites.net ou https://xxxx.ngrok.io se você estiver depurando localmente)
Seu localhost, se necessário, como http: // localhost
A configuração para reproduzir isso foi:
Nossas etapas de reprodução foram:
Por favor, deixe-nos saber se isso é de alguma ajuda. Estaremos atentos às suas respostas.
Obrigado @ matiasroldan6 por investigar isso. As configurações que você mostra acima são as mesmas que estamos usando. Removemos a rota localhost e apenas temos o endereço do bot nas origens confiáveis para o canal de linha direta (https://xxxxx.azurewebsites.net). A habilidade ainda não responde após o prompt de login e se cancelarmos a conversa e invocarmos a habilidade novamente, ela terá o token e continuará o diálogo. Ainda não conseguimos obter a habilidade de receber o token depois que o usuário fizer login.
Obrigado pela sua resposta @ tomSauret847 - continuaremos a trabalhar para tentar encontrar a solução para este problema 😊.
Temos perguntas para entender como você está usando o endpoint azurewebsites.net
levando em consideração a versão 1.0 de soluções de bots (PR # 3583):
Messaging endpoint
de seu Web App Bot (assistente virtual) publicado?.tgz
da biblioteca. Isso está correto?Obrigado @ Batta32
Obrigado @ tomSauret847 , continuaremos analisando este problema com as novas informações que você forneceu! Assim que tivermos alguma atualização, entraremos em contato com você 😊.
Olá @ tomSauret847 , reproduzimos com êxito uma ocorrência deste problema.
Uma coisa que notamos em suas respostas anteriores é que você está usando o URL do seu bot como uma origem confiável.
De acordo com este comentário e esta documentação , você deve ter a URL do seu cliente de bate-papo.
Nossa configuração foi:
Passos:
Continuaremos analisando esse problema conforme confirmamos e conforme você mencionou, que no Microsoft Teams and Emulator isso está funcionando.
Olá @ tomSauret847 , executamos com sucesso o processo de autenticação usando a autenticação avançada.
Colocamos algumas perguntas para que você possa verificar do nosso lado:
<WEB_APP_BOT_NAME>
pelo nome do seu recurso de bot? Verifique se você tem node_modules
, lib
e o restante das pastas.Este é o nosso ambiente :
Seguimos estas etapas :
.tgz
em ambas as amostras"bot-solutions": ".//TGZ//bot-solutions-1.0.0.tgz"
dos botsdeploy.ps1
publish.ps1
run sample dialog
Por último, mas não menos importante, confirmamos as mesmas etapas usando bots C # e verificamos se também está funcionando corretamente.
Estaremos atentos à sua resposta 😊
_Configuração da autenticação avançada_
_Comunicação bem-sucedida usando autenticação aprimorada e bots TypeScript_
_Comunicação bem-sucedida usando autenticação avançada e bots C #_
Obrigado @VictorGrycuk. Desculpe pela resposta tardia, precisamos configurar uma instância de teste para verificar a correção. Conseguimos fazer a autenticação funcionar na instância de teste e restringimos onde está o problema.
Para nossa instância do VA / Skills, nós os colocamos atrás de um gateway de aplicativo com um firewall. Parece que esse é o motivo pelo qual a autenticação aprimorada não está funcionando. Quando implementamos isso em um VA e habilidade fora dessa configuração, está funcionando corretamente. o gateway de aplicativo coloca outro host na mistura e pensamos que é isso que está bloqueando o token. Portanto, temos a seguinte pergunta,
Existe uma maneira de fazer com que a autenticação aprimorada funcione com um bot atrás de um App Gateway?
Ótimo @ tomSauret847! Faremos uma pesquisa e alguns testes para revisar uma maneira de fazer a autenticação aprimorada funcionar com um bot atrás de um App Gateway.
Assim que tivermos alguma atualização sobre isso, avisaremos aqui 😊.
Olá @ tomSauret847 , fizemos uma pequena pesquisa e surgimos com algumas perguntas .
Estaremos atentos à sua resposta 🙂
Obrigado por responder @VictorGrycuk aqui estão as respostas às nossas perguntas,
Estamos testando com os bots implantados no Azure. Não podemos criar um túnel para testar localmente.
Sim, estamos usando um gateway de aplicativo do Azure com WAF, conforme descrito em seu link
Estes são bots TypeScript (VA e 2 habilidades com autenticação), estamos usando apenas 1 habilidade C # para contornar o problema do loop síncrono e não há autenticação nele.
Olá @ tomSauret847 , desculpe pela demora - achamos que deveria ser possível usar a Autenticação Avançada com um Gateway de Aplicativo do Azure com os bots por trás dele.
Algumas perguntas adicionais:
Componentes :
Configuração :
Estaremos trabalhando para replicar este cenário.
Obrigado @VictorGrycuk. As respostas às suas perguntas são
Você pode se conectar ao Virtual Assistant com um emulador usando o IP público do Gateway? Em nossos testes, confirmamos que isso é possível
Você pode se conectar e se comunicar com uma habilidade por meio do VA sem comunicação aprimorada?
Olá @ tomSauret847 , podemos confirmar que a autenticação aprimorada funciona com os bots por trás de um gateway de aplicativo do Azure.
Criamos o PR # 3694 que inclui uma nova documentação sobre como configurar um Gateway de Aplicativo do Azure com um bot implantado.
Fizemos nosso teste seguindo estas etapas :
Como esse parece ser um problema de configuração do Gateway de Aplicativo do Azure, sugiro que você peça sugestões em https://stackoverflow.com/questions/tagged/botframework ; e se você estiver bem, podemos encerrar este problema 🙂.
Obrigado @VictorGrycuk Vamos trabalhar com as informações que você postou. Já notei que este link está quebrado.
Obrigado @ tomSauret847 , esse link levará à configuração de uma sonda de integridade do Gateway com um bot TypeScript (bem como esta imagem ), uma vez que os documentos são mesclados em master
branch, já que a documentação usa {{site.baseurl}}
para gere os URLs.
@peterinnesmsft - podemos encerrar o problema devido à inatividade. @ tomSauret847 se você ainda estiver tendo problemas,
Além disso, se você tiver alguma dúvida, pergunte em https://stackoverflow.com/questions/tagged/botframework.
Todo o processo de autenticação será resolvido assim que os seguintes PRs forem mesclados para o TypeScript versão 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
Obrigado @ Batta32 por sua ajuda nisso. Estamos tendo que colocar esta seção em espera por enquanto, então fecharei este problema e reabrirei se tivermos problemas quando o retomarmos.
@ Batta32 Temos uma pergunta rápida sobre esse assunto. O SSO para o texto digitado ainda está disponível? Descobrimos que o problema é que nossas habilidades estão protegidas por um firewall e não podemos receber a resposta do token. Quando passamos as credenciais do VA, ele não está encaminhando o token para a habilidade, está apenas reiniciando a conversa. Se o SSO para texto digitado não estiver disponível, quando você espera que esteja? Obrigado por toda sua ajuda neste assunto.
Olá @ tomSauret847 , SSO não está disponível para TypeScript atualmente, pois foi introduzido na versão 1.0. Os PRs do TypeScript versão 1.0 devem ser aprovados e mesclados para lançar uma nova versão com esse recurso.
Avisaremos você assim que tivermos alguma atualização 😊.
Comentários muito úteis
Obrigado novamente @ Batta32! Eu usei o pacote 1.0 para o teste. Ainda preciso manter uma configuração de conexão na habilidade, mas consigo fazer a autenticação funcionar. Consegui ver onde o VA está recebendo a resposta do token e encaminhando para a habilidade a ser processada.