Botframework-solutions: [Typescript] Adicionar suporte de habilidade do GA SDK para VA / Skill Generator

Criado em 8 out. 2019  ·  64Comentários  ·  Fonte: microsoft/botframework-solutions

Seguindo uma mudança de protocolo do Skill para WebSockets, estamos aguardando a disponibilização de uma nova biblioteca de Extensões de Streaming para Typescript, anteriormente disponível apenas para C #. Isso desbloqueará cenários de invocação de habilidade para o Virtual Assistant ao usar o Typescript.

História do usuário

Como ... um desenvolvedor
Eu quero ... ser capaz de conectar habilidades a uma versão TypeScript do Assistente Virtual
para que ... haja paridade entre C # e Typescript

Critérios de Aceitação

  • [] Atualizar VA e gerador de habilidades para incorporar novas habilidades do GA SDK
  • [] Implante um VA typescript e adicione uma habilidade C # (por exemplo, calendário)
  • [] Fornecer documentação sobre as alterações necessárias às soluções VA existentes e habilidades criadas pelo gerador, conforme necessário
P0 Committed In Progress

Comentários muito úteis

@ Batta32 Se a SkillConversationIdFactory usar encodeURI, a habilidade receberá esse chat.id e responderá a ele de acordo. Tenho certeza de que isso é necessário.

Também sim, há um problema com ids de conversação longos durante o uso do restify. Mencionamos como resolver o problema neste exemplo: https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/80.skills-simple-bot-to-bot/simple-root -bot / skillConversationIdFactory.js # L21

// Esta chave tem um limite de 100 caracteres por padrão. Aumente com restify.createServer({ maxParamLength: 1000 }); em index.js.

Todos 64 comentários

oi darrenj,
Existe algum HEC sobre o problema a ser corrigido?
obrigado,
Kumar

Na esperança de ter fim a fim de trabalho para os testes esta semana tudo correndo bem.

Obrigado @darrenj pela atualização.

existe alguma atualização sobre este problema @darrenj

Oi darren,

@darrenj, você poderia fornecer uma atualização sobre este item de trabalho. precisamos que esse recurso crítico seja desenvolvido para nosso caso de uso.

Agradeço sua ajuda.

obrigado,
Kumar

Olá @darrenj ,

Desculpe incomodá-lo novamente, há alguma atualização sobre isso?
Vi que a biblioteca foi lançada para a versão 4.6.0 (https://botbuilder.myget.org/feed/botbuilder-v4-js-daily/package/npm/botframework-streaming), esta é compatível com o Botframework 4.5.0 e o Assistente Virtual?

Há algumas coisas em andamento aqui, uma é a disponibilidade da extensão de streaming que você identificou e a outra é a disponibilidade do texto datilografado da nova versão GA da biblioteca Skills. Estou esperando o primeiro pacote de compilação da biblioteca Skills na próxima semana, quando poderemos iniciar as atualizações dos modelos C # e Typescript para testar e fornecer as etapas (simples) de migração.

Pretendemos ter este trabalho pronto para uso em janeiro e manteremos este problema atualizado com o progresso, incluindo quando compilações diárias estiverem disponíveis.

Nesse ínterim, um VA Bot Javascript / Typescript pode chamar uma habilidade criada em JavaScript / Typescript, pois usa HTTP devido à falta de dependência da extensão de streaming. O problema surge quando você deseja chamar um C # Skill like Calendar, que as alterações acima serão alinhadas em todos os idiomas.

@darrenj isso foi corrigido e posso conectar o C # Skill a partir de VA digitado? Estou confuso sobre seu último comentário.

Olá @darrenj ,

Uma vez que isso seja resolvido, seria possível invocar habilidades cSharp como ToDo de uma versão TypeScript no VA?

Atualmente, estou recebendo um erro relacionado ao WebSocketTransport usado na habilidade C #. Mas meu VA é datilografado.

Sim, a migração para a versão GA do Skills remove a dependência do Websockets e, portanto, permitirá a combinação / combinação perfeita de habilidades entre as plataformas. Temos os bits mais recentes para C # e JS e, trabalhando na integração inicial, o objetivo é fazer as alterações em uma construção diária nas próximas semanas para desbloquear cenários.

Olá @darrenj ,

Eu tenho outro caso de uso que é VA e Habilidade de Texto Dactilografado.

Meu problema é que o updateActivity não está disponível no VA para o Skill e eu preciso da biblioteca de streaming para isso (até onde eu entendi). Agora eu realmente notei que as dependências do WebSocket foram removidas da biblioteca de habilidades mais recente (4.4.9).
Não entendo porque :) Vai ser movido para outro lugar? Ou?

OK, eu tenho uma atualização sobre o progresso em relação ao GA dos recursos do Skill no SDK do Bot Framework. Isso fez a transição do trabalho incubado pelo Virtual Assistant para uma versão formal do GA.

Um exemplo está disponível que mostra como um Bot pode invocar outro Bot (habilidade). A principal mudança é que agora temos um adaptador unificado, o que significa que não há necessidade de utilizar um adaptador diferente ou extensões de streaming. C # e JS .

Estamos trabalhando em atualizações do modelo de Assistente Virtual / Habilidade para fornecer as (pequenas) mudanças prontas para uso e fornecer documentação sobre as poucas etapas necessárias para atualizar as Habilidades existentes. Visando o final de janeiro, com compilações em nossas compilações diárias em breve.

Se você deseja progredir antes disso, os exemplos acima devem fornecer tudo o que você precisa. Vou atualizar esse problema com dicas para compilações / alterações diárias assim que estiverem prontas.

@darrenj obrigado por esta atualização incrível. Estou apenas curioso para saber sobre o adaptador unificado antes de começarmos a aproveitá-lo em nosso assistente virtual de produção.

Isso significa que podemos usar um adaptador unificado em Typescript VA e ainda podemos invocar a habilidade c #?

Uma atualização tão esperada!

Postamos nossa versão 0.8 ontem, que inclui uma atualização para todos os nossos exemplos de habilidades para suportar o novo recurso de habilidades do GA e não mais a visualização. O Websockets foi retirado em favor da comunicação de serviço da Web entre as habilidades, as habilidades se comunicam de volta com o bot de forma assíncrona usando uma conexão HTTP de "retorno de chamada".

Como resultado, há algumas atualizações diretas para o Assistente Virtual existente e habilidades a serem feitas. As atualizações do C # VA são documentadas aqui e as atualizações do C # Skill são documentadas aqui .

As alterações do gerador JS / Typescript equivalente estão sendo finalizadas neste momento e visando a publicação de um novo Gerador e documentos para VA / Skills existentes até 14 de fevereiro. Para referência de fundo, as etapas de alto nível para apoiar habilidades de invocação podem ser encontradas aqui

Assim que essas alterações forem concluídas, significa que um VA JS / typescript pode invocar o C # Skills, vice-versa e, na verdade, o Python também.

@darrenj , alguma opinião sobre o comentário acima sobre o projeto de

De acordo com o acima, sim, haverá algumas etapas de migração a serem seguidas, as quais estamos finalizando

Obrigada.

Olá @darrenj , alguma notícia sobre quando as mudanças do gerador JS / TS e as atualizações de documentos serão lançadas?

Ei @darrenj , poderia nos dizer se a comunicação do VA (C #) para o trabalho de habilidade de datilografia é feita no novo framework (SDK) que você mencionou acima. você disse que seria feito em 14 de fevereiro
Agradeço sua ajuda

@darrenj alguma atualização sobre este tíquete?

@darrenj Hoje eu tentei migrar ou fazer uma correção para chamar a habilidade C # do VA / RootBot (Typescript). Eu encontrei o guia para implementar o consumidor de habilidade que não tem um exemplo de rootbot / VA de script. Existe algum plano para oferecer suporte ao guia de migração com base em typescript? Avise-me o ETA ou qualquer outro guia que possa ajudar a conseguir o mesmo.

Temos um conjunto de solicitações pull em andamento para as alterações, permitindo que novos VA / Skills digitados usem as novas habilidades GA. Atualizarei o tíquete assim que os tivermos mesclados e as compilações diárias disponíveis.

Enquanto isso, aqui está um rascunho de documento sobre as etapas para migrar um VA existente, comentários bem-vindos.

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

Olá @darrenj , obrigado pela atualização, a única dúvida que tenho no momento é sobre as 'soluções de construtor de bots'. Precisamos usar uma versão local? De onde? Encontrei este branch aqui que parece uma versão futura (https://github.com/microsoft/botframework-solutions/tree/feature/southworks/0.7/parity-botbuilder-solutions/sdk/typescript/libraries/botbuilder-solutions) , Isso está certo?

Desde já, obrigado.

@ Batta32 Você pode confirmar rapidamente qual branch de código as pessoas podem usar para testar as instruções (antes da publicação da nova biblioteca)

@ tommyJimmy87 - você pode verificar o PR # 3122 que contém todas as alterações necessárias do BotBuilder-Solutions for GA Skills SDK no TypeScript.
Filial: feature / southworks / ga-skills-sdk / botbuilder-solutions

Para usar a biblioteca localmente, siga estas etapas (usando o ramo mencionado):

  1. Abra a biblioteca no Visual Studio Code
  2. Execute npm install para instalar as dependências
  3. Execute npm run build para compilar a solução
  4. Execute npm pack para criar o arquivo .tgz da biblioteca
  5. Abra o arquivo package.json do Assistente Virtual no Visual Studio Code
  6. Atualizar a referência do botbuilder-solutions apontando para o caminho do tgz criado
  7. Execute npm install para instalar as dependências que irão instalar o pacote local

No momento, estamos validando essas alterações, não hesite em fornecer qualquer feedback nesse PR e iremos analisá-las o mais rápido possível.

Este problema está desatualizado porque está aberto há 30 dias sem atividades. Remova o rótulo ou comentário desatualizado ou será fechado em 5 dias

@darrenj - você poderia nos informar se as alterações mencionadas abaixo podem ser feitas para a conexão de VA (C #) para Skill que é o nó js.

https://microsoft.github.io/botframework-solutions/overview/whats-new/0.8-beta/migrate-existing-va-to-0.8/

Sim - a documentação está no PR e a equipe está encerrando esse trabalho enquanto conversamos! (@ Batta32). Você pode ver o trabalho em andamento aqui: https://github.com/microsoft/botframework-solutions/pull/3123

Junto com as alterações associadas ao SDK: https://github.com/microsoft/botframework-solutions/pull/3122

Conforme prometido e obrigado por sua paciência enquanto trabalhamos em um conjunto de alterações nos SDKs.

  • Os passos para atualizar suas habilidades de VA para GA BF já existentes estão aqui
  • Os passos para atualizar sua habilidade de datilografia existente para habilidades GA BF estão aqui

Além disso, as próximas compilações diárias do gerador VA terão essas alterações incluídas fora da caixa. Vou atualizar este problema com a versão exata, uma vez processada e validada.

Isso será publicado no npm quando processarmos a versão 1.0, que está atualmente aguardando uma janela de alteração do Azure. Esperamos até o final do mês.

Qualquer dúvida / problema com o acima, por favor, levante um novo problema e estamos aqui para ajudar.

@ Batta32 para a migração, podemos começar usando o botbuilder-solutions 4.5.0-preview? Eu acho que é o novo lançamento para a migração, certo?

@ Batta32 Quando o novo SDK será lançado para uso? Estou construindo um VA com 13 habilidades e um dos requisitos é que seja construído em TypeScript. Estou usando o SDK da próxima ramificação atualmente para iniciar o projeto.

Olá @ tommyJimmy87 e @ tomSauret847 , antes de serem publicados, você pode usar os pacotes publicados em MyGet como compilações diárias:

Para integrar botbuilder-solutions a compilação diária, você tem duas opções diferentes, recomendamos a primeira opção por ser a mais fácil (leve em consideração para remover package-lock e node_modules de seus bots) :

  • Opção 1: adicionar um arquivo .npmrc apontando para o registro https://botbuilder.myget.org/F/aitemplates/npm e atualizando o package.json para apontar a versão botbuilder-solutions para 4.5.0-preview223
  • Opção 2: Baixe o tgz de botbuilder-solutions referenciando-o diretamente no package.json com um caminho absoluto
npm pack [email protected] --registry https://botbuilder.myget.org/F/aitemplates/npm

Se você quiser usar o generator-botbuilder-assistant , você deve desinstalá-lo se já tiver um e, em seguida, instalar o do MyGet:

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

@ Batta32 Onde precisaremos relatar os problemas que encontramos nas compilações de visualização? Eu gerei um novo VA usando o gerador de visualização e usei o SDK de visualização e recebo um erro informando que uma caixa de diálogo inválida está sendo adicionada ao tentar executar o VA sem qualquer personalização.
Erro: DialogSet.add (): diálogo inválido sendo adicionado.

@darrenj - qual é a melhor abordagem para relatar os problemas das compilações diárias?

@ tomSauret847 - enquanto isso, você pode compartilhar seu problema neste tópico com seu ambiente e as etapas de reprodução 😊!

O ambiente está sendo executado localmente no computador com Windows 10
Passos: execute o gerador de visualização para construir VA em branco
atualizar appsettings.json e cognitivemodels.json
adicione o arquivo .npmrc apontando para https://botbuilder.myget.org/F/aitemplates/npm
delete node_modules e package-lock.json
execute npm install [email protected]
execute npm install para instalar todos os outros pacotes
executar a construção NPM
executar npm executar iniciar
então eu recebo o seguinte erro
C: UsersuserDesktopBlankVAtestassistantnode_modulesapplicationinsightsoutAutoCollectionExceptions.js: 34
lançar THIS_IS_APPLICATION_INSIGHTS_RETHROWING_YOUR_EXCEPTION; // Erro originado em algum outro lugar do seu aplicativo
^

Erro: DialogSet.add (): diálogo inválido sendo adicionado.
em DialogSet.add (C: UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibdialogSet.js: 87: 19)
em MainDialog.addDialog (C: UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibcomponentDialog.js: 148: 22)
no novo MainDialog (C: UsersuserDesktopBlankVAtestassistantlibdialogsmainDialog.js: 34: 14)
em Object.(C: UsersuserDesktopBlankVAtestassistantlibindex.js: 159: 24)
em Module._compile (internal / modules / cjs / loader.js: 778: 30)
em Object.Module._extensions..js (internal / modules / cjs / loader.js: 789: 10)
em Module.load (internal / modules / cjs / loader.js: 653: 32)
em tryModuleLoad (internal / modules / cjs / loader.js: 593: 12)
em Function.Module._load (internal / modules / cjs / loader.js: 585: 3)
em Function.Module.runMain (internal / modules / cjs / loader.js: 831: 12)

Obrigado! Reproduzimos o problema seguindo seus passos, porém é um erro na ordem como as dependências são instaladas causando um conflito quando botbuilder-solutions é instalado separado do resto.

image

Tente seguir estas etapas : (removendo node_modules e package-lock )

  1. Atualize o package.json com a versão 4.5.0-preview223 em botbuilder-solutions

image

  1. Instale todas as dependências executando npm install
  2. Construa a solução executando npm run build
  3. Inicie o Assistente Virtual executando npm run start

image

@ tomSauret847, deixe-me saber se você encontrar qualquer outro problema. Estamos concluindo a validação final e enviaremos novas compilações ao npm assim que concluídas.

Olá @darrenj , recebi um erro ao tentar resolver os arquivos lg com o novo gerenciador de modelos, basicamente o que acontece é que estou recebendo a localidade en-US do MS Teams, mas defini apenas en-us (minúsculas) e não vai ser reconhecido. Talvez adicionar minúsculas aqui if (this.templateEnginesPerLocale.has(locale)) resolveria o problema (LocaleTemplateEngineManager.ts linha 61). Para contornar esse problema no momento, tive que adicionar isso em meu index.ts:

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

Isso funciona bem, mas não sei se pode ser feito de uma maneira melhor.

Obrigado. @ Batta32 - você pode verificar se tem a alteração para LocaleTemplateEngine na biblioteca de soluções que usa o SDK fornecido MultiLanguageLG ? Eu esperava que isso lidasse com casos mistos de maneira elegante, mas alguns testes seriam bons para validar.

@ lzc850612 Podemos executar uma validação rápida com o csharp GA RC para verificar se ele funciona como esperado com localidades combinadas entrando no Bot em uma atividade?

Claro @darrenj , estaremos verificando essa mudança!

@darrenj obrigado pela atualização sobre o progresso! Eu tive o mesmo problema de localidade que tommyJimmy apontou, mas superei adicionando locale.toLowerCase no localeTemplateManager. No momento, estou anexando uma habilidade personalizada ao VA, mas ainda estou recebendo um erro que estou tentando rastrear. A habilidade está retornando um erro 501 para o VA, mas está processando a mensagem na função onMessage no defaultActitivityHandler.ts, ela apenas não está passando a atividade para o diálogo principal para a habilidade processar. Eu adicionei a habilidade atualizando o arquivo appSettings.json, e a habilidade está recebendo a atividade.

@ Batta32 Eu queria verificar se o caminho a seguir ainda inclui o localTemplateEngineManager. Percebi que ele está faltando nas compilações de visualização e apenas o responseManager está presente. No futuro, precisaremos usar o gerenciador de resposta ou o modelo Locale será adicionado novamente?

@ Batta32 Consegui rastrear o erro que estava recebendo ao comunicar-me com uma habilidade do VA. No módulo dialogEx há um rastreamento de envio que está enviando o rastreamento de volta para o VA em que a habilidade foi iniciada. Este sendActivity está gerando o seguinte erro quando chamado:
Erro: / api / messages / v3 / conversations / 5659a380-841b-11ea-bed3-831b5a6aa1eb% 7Clivechat-dlpskill-emulator-skillconvo / Activities / 5b61c920-841b-11ea-b148-8581dc55a9bb não existe
Quando o ID de conversação é anexado em SkillConversationIdFactory, a habilidade não pode postar de volta para o novo ID de conversação.

Atualizar:
Eu cometi um erro de digitação no skillHostEndpoint que estava causando esse problema. Depois de corrigir isso, agora sou capaz de anexar habilidades e fazer com que elas interajam com o VA.

@ Batta32 @darrenj Estou enfrentando um comportamento inesperado ao tentar usar o chitchat com o VA: basicamente toda vez que o usuário pergunta algo ao Bot, o introstep irá repetir a mensagem inicial, que no caso do chitchat não é tão bom quanto UX . Isso é esperado ou estou faltando alguma coisa?

Screen Shot 2020-04-23 at 11 25 46

(a mensagem aguarde é uma mensagem personalizada, não se preocupe com isso
)

@ Batta32 Consegui rastrear o erro que estava recebendo ao comunicar-me com uma habilidade do VA. No módulo dialogEx há um rastreamento de envio que está enviando o rastreamento de volta para o VA em que a habilidade foi iniciada. Este sendActivity está gerando o seguinte erro quando chamado:
Erro: / api / messages / v3 / conversations / 5659a380-841b-11ea-bed3-831b5a6aa1eb% 7Clivechat-dlpskill-emulator-skillconvo / Activities / 5b61c920-841b-11ea-b148-8581dc55a9bb não existe
Quando o ID de conversação é anexado em SkillConversationIdFactory, a habilidade não pode postar de volta para o novo ID de conversação.

Atualizar:
Eu cometi um erro de digitação no skillHostEndpoint que estava causando esse problema. Depois de corrigir isso, agora sou capaz de anexar habilidades e fazer com que elas interajam com o VA.

@ tomSauret847 Qual era o seu problema? pois estou tendo o mesmo erro e não entendo o que é. No meu Assistente Virtual, tenho o seguinte:
"skillHostEndpoint": "https://1c34e472.ngrok.io/api/skills"
Qual é o ponto final do 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 Consegui implantar meu VA e 1 habilidade no Azure. Quando eu uso o chat na web, tudo funciona conforme o esperado. Quando tento usar o canal times recebo o erro abaixo. Isso parece ser isolado do canal Teams, uma vez que o chat da web está sendo encaminhado corretamente.
Erro: Erro ao invocar o ID da habilidade: "dlpskill" em "https: // {nome do aplicativo} .azurewebsites.net / api / habilidade / mensagens" (o status é 500).
Erro: / api / habilidades / v3 / conversas / A: 1lFWWXG9CVtdrkA76VLFeS9CbYWzsHVr9mQ4S7BqDpL4K5WNIc0ND6mqaaj_QsSqH-qUU-Gb2vLX3HQ4CpG3ZDPCbR0XKLtJGOqW0kwKUbe2HKv5C9fs1sjLSO4EvoE5h-dlpskill-msteams-skillconvo / atividades / 1588712064379 não existe
em SkillDialog.(D: homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js: 164: 23)
em Generator.next ()
em cumprido (D: homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js: 11: 58)
em process._tickCallback (internal / process / next_tick.js: 68: 7)

@ tommyJimmy87 Eu não estava usando o ngrok para me comunicar do VA para a habilidade localmente, então consegui usar o localhost: 3979 / api / skills para skillHostEndpoint e consegui alcançar a habilidade. Como você também está usando o canal Teams, direi que esse é um problema do canal Teams. Você pode tentar alcançar a habilidade usando o chat da web e ver se consegue se comunicar com a habilidade do VA no azul.

Olá @ Batta32 , concordo com @ tomSauret847 que provavelmente há algum tipo de problema com o canal Teams.

Depois de um pouco de depuração, posso tentar explicar o que descobri:

1) No ChannelServiceHandler todos os métodos não são implementados, o que significa que quando um dos /api/skills é chamado sempre retornará um código de erro;

ou seja, Arquivo: ChannelServiceHandler.ts (botbuilder), linha: 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 Neste caso, em vez disso, há algum problema em analisar o ID da conversa e o resultado do erro é sempre que o recurso não existe, mas se você tentar chamar o mesmo URL alterando o chatId com uma string mais simples vai funcionar (mas o resultado ainda será que o método não foi implementado por causa do ponto anterior).

Olá @ tommyJimmy87 , @ tomSauret847 - desculpe pelo atraso. Estaremos revisando o cenário do canal de equipes usando as alterações do GA Skills SDK e voltaremos a este tópico mais tarde 😊.

@ tommyJimmy87 - reproduzimos com sucesso o problema usando o Microsoft Teams Channel. Voltaremos a este tópico assim que corrigirmos o problema.

Obrigado!

Olá @ tommyJimmy87 , @ tomSauret847 , encontramos o motivo do problema.

O problema é que o caractere _ ':' _ está sendo substituído por _ '% 3A'_ quando as atividades são enviadas de volta para o Assistente Virtual da Habilidade, gerando a incompatibilidade de _conversationId_ entre os dois bots.
Aparentemente, este comportamento é executado na dependência de axios substituindo os caracteres mencionados.

Por último, mas não menos importante, há um problema em microsoft / botbuilder-js # 2182 que substitui axios no botbuilder e está marcado para estar pronto para _R10_.

Vamos atualizar o documento de Problemas Conhecidos explicando o problema

Por fim, voltaremos a este tópico assim que tivermos novas atualizações para vocês 😊

_Descompasso de speechIds_
image

A dependência _axios substitui ':' por '% 3A'_
image

@ Batta32 Você acha que será consertado em breve ou levará um pouco de tempo?

@ tommyJimmy87 , @ tomSauret847 - notamos que o problema está em ms-rest-js em vez de axios .

O problema é uma incompatibilidade de conversationId entre a Habilidade e o Assistente Virtual. Esse problema é levantado porque o caractere _ ':' _ do _conversationId_ das equipes está sendo substituído por _ '% 3A'_, que deve ser substituído novamente por _': '_. A última conversão não é implementada em sendOperationRequest como _axios_ faz.

Desculpe pelo erro 😊.

_encodeURIComponent não substitui o '% 3A' de volta para ':' _
image

_Diferenças de codificação entre axios e ms-rest-js_
image

@ Batta32, o agente padrão para ms-rest-js versões <2.0 é axios https://github.com/Azure/ms-rest-js/blob/1.x/lib/axiosHttpClient.ts

Acho que uma maneira de resolver esse problema seria usar encodeURI na implementação SkillConversationIdFactory. Dessa forma, o agente subjacente não alterará a conversa.id do que está armazenado na fábrica.

Obrigado @EricDahlvang , estaremos revisando a alternativa de uso encodeURI dentro de SkillConversationIdFactory !

@EricDahlvang - adicionar encodeURI em SkillConversationIdFactory não corrige o problema, pois a Habilidade já está codificando conversationId antes de enviar as atividades de volta para o Assistente Virtual.

Percebemos que o problema pode estar relacionado à duração do chatId quando ele é recebido do Microsoft Teams. Percebemos que usando o conversationId o endpoint do VA não é atingido, no entanto, o corte de alguns caracteres de conversationId é atingido corretamente.

Por último, mas não menos importante, esse problema não está presente no C #.

_O endpoint não foi atingido com o ID da conversa original_
image

_O endpoint é atingido com o chatId cortado
image

_O problema não está presente em C # _
image

@ Batta32 Se a SkillConversationIdFactory usar encodeURI, a habilidade receberá esse chat.id e responderá a ele de acordo. Tenho certeza de que isso é necessário.

Também sim, há um problema com ids de conversação longos durante o uso do restify. Mencionamos como resolver o problema neste exemplo: https://github.com/microsoft/BotBuilder-Samples/blob/master/samples/javascript_nodejs/80.skills-simple-bot-to-bot/simple-root -bot / skillConversationIdFactory.js # L21

// Esta chave tem um limite de 100 caracteres por padrão. Aumente com restify.createServer({ maxParamLength: 1000 }); em index.js.

@EricDahlvang Obrigado por esta informação. Eu adicionei a atualização ao meu VA e habilidade. Agora posso fazer com que o VA se comunique com a habilidade no canal Teams sem erros.

Obrigado @EricDahlvang pelas informações fornecidas! Criamos o PR # 3359 melhorando o maxParamLength e também atualizando a versão de @types/restify@^8.4.2 .

Obrigado pessoal @ tommyJimmy87 , @ tomSauret847 , assim que essas alterações forem mescladas, vocês poderão testá-lo 😊.

image

@ Batta32 desculpe incomodá-lo novamente, antes de mais nada, apliquei as alterações e agora está funcionando. Agora estou com um problema com a atividade de atualização de habilidade através do VA, dentro do SkillHandler não há implementação para isso, você poderia fornecer uma? Valeu

Olá @ tommyJimmy87 , notamos que SkillHandler em C # e JS não contém onUpdateActivity() como você mencionou, enquanto isso, você pode adicionar seu próprio manipulador estendendo-se de SkillHandler ou ChannelServiceHandler .

@darrenj - você pode confirmar se a ausência do método onUpdateActivity() no SkillHandler está correta ou há algum plano para implementá-lo?

@ Batta32 Eu realmente tentei isso, a implementação é parecida com esta:

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

E a função updateActivity é a seguinte:

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

É basicamente uma cópia da função processActivity que já está implementada em SkillHandler mas chamando context.updateActivity(context.activity) no final.

Disse que estou recebendo este erro:

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

Provavelmente há algo que estou perdendo ou fazendo errado.

@ tommyJimmy87 - tentaremos reproduzir o seu cenário e retornaremos a você mais tarde 😊.

@ Batta32 Notei no "cartão de ajuda" com o assistente virtual que não está exibindo o cartão de ajuda para a habilidade ativa. Quando você pressiona a interrupção de "ajuda" no diálogo de habilidade, ainda está apresentando o cartão de ajuda para o VA e não a habilidade. Eu atualizei para a última versão que incluía a configuração do estado activeSkillProperty com a habilidade que está ativa. Alguma ideia de como consertar esse problema? Ao sair do estado, a caixa de diálogo ativa ainda está registrada como uma caixa de diálogo que possuo no VA e não na habilidade ativa.

Olá @ tommyJimmy87 , @ tomSauret847 , obrigado por relatar esses problemas.

Como [email protected] , [email protected] e [email protected] são publicados em npmjs e mesclados no branch master , você pode criar os problemas no repositório para explique melhor o problema e faremos o acompanhamento 😊.

Esta página foi útil?
0 / 5 - 0 avaliações