Proyecto de Asistente Virtual y Proyecto de Habilidad.
Mecanografiado.
Desde el canal de MS Teams, al intentar actualizar una actividad desde una habilidad, el Asistente virtual fallará.
updateActivity
no está implementada en el "SkillHandler" proporcionado)onUpdateActivity
: protected async onUpdateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string, activity: Activity): Promise<ResourceResponse> {
return await this.updateActivity(claimsIdentity, conversationId, activityId, activity);
}
y la función updateActivity
ve así:
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 tarjeta se actualiza en Teams
El error se muestra cuando el VA intenta actualizar la actividad de la función 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)
Equipos de canal
Gracias @ tommyJimmy87 por informar de este problema, todavía lo estamos revisando. Tan pronto como tengamos alguna actualización, te responderemos 😊!
Hola, @ tommyjimmy87 , necesito que des pasos de reproducción adicionales de lo que estás haciendo para descubrir qué está mal, ya que no pudimos reproducir el problema que estás enfrentando.
The Card is updated in Teams
?CustomSkillHandler
?Aquí está la rama con nuestros últimos cambios que hicimos para reproducir este problema.
generator-bot-virtualassistant
botskills connect
CustomSkillHandler
CustomSkillHandler
¡Estaremos atentos a tu respuesta!
Hola @ Batta32 , intentaré responder a tus preguntas:
Quiero decir que estoy tratando de actualizar un adaptive card
en el canal de MS Teams y el resultado debería ser que la tarjeta se actualice después de que hice alguna acción (la tarjeta está dentro de la habilidad, así que básicamente la prueba es updateActivity
de la habilidad al VA).
Sí, tanto VA como Skill están en TypeScript
En la habilidad tengo un adaptive card
, después de una acción del usuario, esta tarjeta debe actualizarse con contenido diferente. Desde la habilidad llamo updateActivity
:
dc.context.updateActivity(previouslySentActivity);
previouslySentActivity
es la actividad que queremos actualizar, guardamos la actividad en el estado para poder actualizarla posteriormente. Esto solía funcionar en la versión anterior, pero el flujo de la actividad de envío y actualización, según tengo entendido, cambió con la nueva versión.
Esto llamará al punto final de VA (esto está funcionando) que luego debería actualizar la actividad. La llamada entra en el método CustomSkillHandler
en el método onUpdateActivity
pero luego aparece el error cuando la actividad se envía a MS Teams.
Avíseme si necesita más contexto, mientras tanto, tal vez pueda probar esto también en su sucursal y verificar si tengo el mismo error.
Hola @ Batta32 , lo probé desde la rama que estás usando para probar. Creé una bifurcación aquí: https://github.com/tommyJimmy87/botframework-solutions/tree/feature/southworks/conversationid-issue
Cambié tu rama para reproducir el mismo error. Dentro de testSkillHandler
agregué un try-catch para obtener el error:
try{
await context.updateActivity(activity);
}catch(e){
console.log(e);
}
Este es el error real que recibo de la llamada updateActivity
:
{ body: '{"error":{"code":"ServiceError","message":"Unknown"}}',
headers: HttpHeaders { _headersMap: [Object] },
status: 400 },
body: { error: { code: 'ServiceError', message: 'Unknown' } } }
Que es lo mismo que obtengo en mi proyecto.
Esta es la prueba que hice:
Creé un nuevo Diálogo dentro de la habilidad de muestra testUpdateActivityDialog
donde en el beginDialog envío un TestCard
con un texto. En el onContinueDialog
envío la misma tarjeta pero con un texto diferente;
Conecte el VA a la Habilidad.
Llame al VA con alguna intención que llamará a la Habilidad e iniciará el Diálogo de prueba y mostrará la tarjeta;
Llame al VA con alguna intención que llame a la Habilidad y al continueDialog
del Diálogo de prueba;
La habilidad llamará al VA para actualizar la tarjeta y luego obtendrá el error.
¡Genial @ tommyJimmy87 ! Lo revisaremos con esta nueva información, muchas gracias 😊.
¡Hola @ tommyJimmy87! Reproducimos con éxito el escenario utilizando sus últimos cambios y los pasos de reproducción mencionados.
Seguiremos investigando sobre este tema. Tan pronto como tengamos alguna actualización, te responderemos 😊.
_Probamos la conexión entre VA y los bots de habilidades detectando el mismo problema cuando las habilidades envían la información de la actividad a la VA_
Hola @ DiegoCardozo94 ,
Gracias por la actualización.
¿Tiene alguna idea de cuándo podría lanzarse esto?
¿Crees que esto se puede publicar antes del 17, ya que tenemos un lanzamiento estrictamente de nuestro lado, nos gustaría saber si la fecha del 17 es factible o no? :)
Gracias
Hola @ tommyJimmy87 , perdón por el retraso.
Logramos validar que este problema también ocurre en C #, por lo que parece no estar relacionado solo con TypeScript.
Encontramos muchos problemas relacionados :
SkillHandler
genera un ResourceResponse
falso cuando reenvía actividades de la habilidad al canal. Esto significa que operaciones como update
y delete
no funcionarán .SkillHandler
no implementa OnUpdateActivityAsync
.Por último, pero no menos importante, validamos los siguientes escenarios utilizando los pasos mencionados:
@darrenj, replicamos este problema usando C # los robots también.
Nuestro entorno de prueba:
Nuestros pasos de reproducción :
_El Asistente Virtual lanzará una excepción al intentar actualizar una actividad_
_TypeScript Skill ejecutándose con éxito en Microsoft Teams Channel, actualizando la tarjeta que se envió previamente_
Hola, https://github.com/microsoft/botframework-sdk/issues/5919 se ha abordado en los 3 idiomas admitidos, puede probar si esa solución ayuda a usar una de las compilaciones diarias a partir de mañana.
Hola @ Batta32 , aquí hay algo que debes actualizar primero, ¿verdad? ¿No es algo que pueda probar ya?
¡Hola @ tommyJimmy87! Sí, validaremos lo que mencionó para TypeScript y C #.
Actualizaremos esta rama agregando las últimas actualizaciones e incorporando la compilación diaria botbuilder-v4-js-daily del SDK que contiene microsoft / botbuilder-js # 2489 y microsoft / botbuilder-dotnet # 4264.
Tan pronto como tengamos alguna actualización, te responderemos 😊.
Hola @ tommyJimmy87 , confirmamos con éxito que aplicando los cambios de microsoft / botbuilder-js # 2489 en el testSkillHandler
se solucionó este problema y la actividad se actualizó correctamente usando el canal de Microsoft Teams.
Marque esta confirmación para identificar los cambios que debe aplicar en su testSkillHandler
, específicamente en el método processActivity
.
@darrenj & @gabog : C # también.
Nuestro entorno de prueba:
Pasos de reproducción:
_Cambios realizados en el método processActivity de testSkillHandler_
_El Asistente Virtual de TypeScript se ejecuta con éxito en Microsoft Teams Channel, actualizando la tarjeta que se envió previamente_
¡Estaremos atentos a tu respuesta!
Hola @ Batta32 , gracias por la actualización, probaremos esto lo antes posible. Solo una pregunta de mi parte: ¿se ha cambiado alguna versión de la biblioteca o es solo la confirmación que publicaste anteriormente? Gracias
@ tommyJimmy87 - ¡Solo el compromiso que publicamos arriba!
Hola de nuevo @ Batta32 :) ¡También este parece resuelto! Mañana haré algunas pruebas más profundas, pero parece que estoy de acuerdo con los cambios en la clase Test Skill Handler que proporcionaste. ¡Gracias!
¡Gracias @ tommyJimmy87! Tan pronto como pueda confirmar esto, podemos cerrar este problema 😊.
¡Hola @ Batta32! Con mucho gusto podemos cerrar este problema :)
¡Gracias @ tommyJimmy87 por confirmar esto!
@darrenj : ¡podemos cerrar este problema ya que lo resolvió el equipo de SDK!
Comentario más útil
Hola de nuevo @ Batta32 :) ¡También este parece resuelto! Mañana haré algunas pruebas más profundas, pero parece que estoy de acuerdo con los cambios en la clase Test Skill Handler que proporcionaste. ¡Gracias!