Projeto de Assistente Virtual e Projeto de Habilidade.
Datilografado.
No MS Teams Channel, ao tentar atualizar uma atividade de uma Habilidade, o Virtual Assistant apresentará um erro.
updateActivity
não está implementada no "SkillHandler" fornecido)onUpdateActivity
: 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
parece com isto:
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');
O cartão é atualizado nas equipes
O erro é mostrado quando o VA tenta atualizar a atividade da função descrita anteriormente 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)
Equipes de canal
Obrigado @ tommyJimmy87 por relatar esse problema, ainda estamos analisando. Assim que tivermos alguma atualização, entraremos em contato com você 😊!
Olá @ tommyjimmy87 , preciso que você forneça etapas adicionais de reprodução do que está fazendo para descobrir o que está errado, pois não foi possível reproduzir o problema que você está enfrentando.
The Card is updated in Teams
?CustomSkillHandler
?Aqui está o branch com nossas últimas alterações que fizemos para reproduzir este problema.
generator-bot-virtualassistant
botskills connect
CustomSkillHandler
CustomSkillHandler
Estaremos atentos à sua resposta!
Olá @ Batta32 , tentarei responder às suas perguntas:
Quero dizer que estou tentando atualizar um adaptive card
no canal MS Teams e o resultado deve ser que o cartão é atualizado depois que eu fiz alguma ação (o cartão está dentro da habilidade, então basicamente o teste é updateActivity
da habilidade para o VA).
Sim, VA e Skill estão em texto datilografado
Na habilidade eu tenho um adaptive card
, após uma ação do usuário este cartão deve ser atualizado com um conteúdo diferente. Pela habilidade eu chamo de updateActivity
:
dc.context.updateActivity(previouslySentActivity);
previouslySentActivity
é a atividade que queremos atualizar, salvamos a atividade no estado para poder atualizá-la mais tarde. Isso costumava funcionar na versão anterior, mas o fluxo de envio e atualização de atividade, pelo que eu entendi, mudou com a nova versão.
Isso chamará o ponto de extremidade VA (está funcionando), que deve atualizar a atividade. A chamada entra em CustomSkillHandler
no método onUpdateActivity
, mas recebo o erro quando a atividade é enviada para equipes do MS.
Deixe-me saber se você precisa de mais contexto, entretanto, talvez eu possa tentar fazer isso também no seu branch e verificar se eu tenho o mesmo erro.
Olá @ Batta32 , testei no branch que você está usando para testar. Criei um fork aqui: https://github.com/tommyJimmy87/botframework-solutions/tree/feature/southworks/conversationid-issue
Mudei seu branch para reproduzir o mesmo erro. Dentro de testSkillHandler
, adicionei um try-catch para obter o erro:
try{
await context.updateActivity(activity);
}catch(e){
console.log(e);
}
Este é o erro real que estou recebendo da chamada updateActivity
:
{ body: '{"error":{"code":"ServiceError","message":"Unknown"}}',
headers: HttpHeaders { _headersMap: [Object] },
status: 400 },
body: { error: { code: 'ServiceError', message: 'Unknown' } } }
Que é o mesmo que recebo no meu projeto.
Este é o teste que fiz:
Eu criei um novo diálogo dentro da habilidade de amostra testUpdateActivityDialog
onde no beginDialog eu envio um TestCard
com um texto. No onContinueDialog
envio o mesmo cartão mas com um texto diferente;
Conecte o VA à habilidade.
Ligue para o VA com alguma intenção que irá chamar a Habilidade e iniciar o Diálogo de Teste e mostrar o cartão;
Chame o VA com alguma intenção que chamará a Habilidade e o continueDialog
do Diálogo de Teste;
A habilidade irá chamar o VA para atualizar o cartão e então você obterá o erro.
Ótimo @ tommyJimmy87 ! Vamos revê-lo com essas novas informações, muito obrigado 😊.
Olá @ tommyJimmy87! Reproduzimos com sucesso o cenário usando suas alterações mais recentes e as etapas de reprodução mencionadas.
Continuaremos pesquisando sobre este assunto. Assim que tivermos alguma atualização, entraremos em contato com você 😊.
_Testamos a conexão entre os bots VA e Skill detectando o mesmo problema quando as habilidades enviam as informações de atividade para o VA_
Olá @ DiegoCardozo94 ,
Obrigado pela atualização.
Você tem alguma ideia de quando isso será lançado?
Você acha que isso pode ser lançado antes do dia 17, já que temos uma liberação estrita de nossa parte, gostaríamos apenas de saber se a data 17 é viável ou não? :)
Obrigado
Olá @ tommyJimmy87 , desculpe pela demora.
Conseguimos validar que esse problema também ocorre em C #, portanto, parece não estar relacionado apenas ao TypeScript.
Encontramos muitos problemas relacionados :
SkillHandler
gera um falso ResourceResponse
quando encaminha atividades da habilidade para o canal. Isso significa que operações como update
e delete
não funcionarão .SkillHandler
não implementa OnUpdateActivityAsync
.Por último, mas não menos importante, validamos os seguintes cenários usando as etapas mencionadas:
@darrenj , replicamos esse problema usando bots C # também.
Nosso ambiente de teste:
Nossas etapas de reprodução :
_O Assistente Virtual lançará uma exceção ao tentar atualizar uma atividade_
_TypeScript Skill executado com sucesso no Microsoft Teams Channel, atualizando o cartão que foi enviado anteriormente_
Olá, https://github.com/microsoft/botframework-sdk/issues/5919 tem nee endereçado em todos os 3 idiomas suportados, você pode tentar se essa solução ajudar usando uma das compilações diárias a partir de amanhã.
Olá @ Batta32 , aqui está algo que você precisa atualizar primeiro, certo? Não é algo que eu já possa experimentar?
Olá @ tommyJimmy87! Sim, estaremos validando o que @gabog mencionou para TypeScript e C #.
Estaremos atualizando este branch adicionando as últimas atualizações e incorporando a compilação diária botbuilder-v4-js-daily do SDK que contém o microsoft / botbuilder-js # 2489 e microsoft / botbuilder-dotnet # 4264.
Assim que tivermos alguma atualização, entraremos em contato com você 😊.
Olá @ tommyJimmy87 , confirmamos com sucesso que ao aplicar as alterações de microsoft / botbuilder-js # 2489 no testSkillHandler
esse problema foi resolvido e a atividade foi atualizada corretamente usando o canal Microsoft Teams.
Verifique este commit para identificar as mudanças que você deve aplicar em seu testSkillHandler
, especificamente no método processActivity
.
@darrenj & @gabog - validamos com sucesso as mudanças de microsoft / botbuilder-dotnet # 4264 usando bots C # também.
Nosso ambiente de teste:
Etapas Repro:
_Alterações feitas no método processActivity de testSkillHandler_
_TypeScript Virtual Assistant sendo executado com sucesso no Microsoft Teams Channel, atualizando o cartão que foi enviado anteriormente_
Estaremos atentos à sua resposta!
Olá @ Batta32 , obrigado pela atualização, vamos tentar isso o mais
@ tommyJimmy87 - Apenas o commit que postamos acima!
Oi de novo @ Batta32 :) Este também parece resolvido! Farei alguns testes mais profundos amanhã, mas parece que as mudanças na classe Test Skill Handler que você forneceu parecem estar bem. Obrigado!
Obrigado @ tommyJimmy87! Assim que você confirmar isso, podemos encerrar este problema 😊.
Olá @ Batta32! Podemos encerrar este problema com prazer :)
Obrigado @ tommyJimmy87 por confirmar isso!
@darrenj - podemos encerrar esse problema, pois foi resolvido pela equipe do SDK!
Comentários muito úteis
Oi de novo @ Batta32 :) Este também parece resolvido! Farei alguns testes mais profundos amanhã, mas parece que as mudanças na classe Test Skill Handler que você forneceu parecem estar bem. Obrigado!