مشروع مساعد افتراضي ومشروع مهارة.
المطبوع.
من قناة MS Teams ، عند محاولة تحديث نشاط من إحدى المهارات ، سيخرج المساعد الظاهري بالخطأ.
updateActivity
لم يتم تنفيذها في "SkillHandler" المتوفرة)onUpdateActivity
: protected async onUpdateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string, activity: Activity): Promise<ResourceResponse> {
return await this.updateActivity(claimsIdentity, conversationId, activityId, activity);
}
وتبدو الوظيفة updateActivity
كما يلي:
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');
تم تحديث البطاقة في Teams
يظهر الخطأ عندما يحاول VA تحديث النشاط من الوظيفة الموصوفة سابقًا 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)
فرق القناة
شكرًا @ tommyJimmy87 للإبلاغ عن هذه المشكلة ، ما زلنا
مرحبًا @ tommyjimmy87 ، إعادة بروز إضافية لما تفعله لمعرفة الخطأ حيث لا يمكننا إعادة إنتاج المشكلة التي تواجهها.
The Card is updated in Teams
؟CustomSkillHandler
؟إليك الفرع الذي يحتوي على أحدث التغييرات التي أجريناها لإعادة إظهار هذه المشكلة.
generator-bot-virtualassistant
botskills connect
CustomSkillHandler
CustomSkillHandler
سنكون منتبهين لإجابتك!
مرحبًا @ Batta32 ، سأحاول الإجابة على أسئلتك:
أعني أنني أحاول تحديث adaptive card
في قناة MS Teams والنتيجة يجب أن تكون البطاقة محدثة بعد أن قمت ببعض الإجراءات (البطاقة ضمن المهارة ، لذلك الاختبار هو updateActivity
من المهارة إلى VA).
نعم ، كلا من VA و Skill موجودان في نقش
في المهارة لدي adaptive card
، بعد إجراء من المستخدم ، يجب تحديث هذه البطاقة بمحتوى مختلف. من المهارة التي أسميها updateActivity
:
dc.context.updateActivity(previouslySentActivity);
previouslySentActivity
هو النشاط الذي نريد تحديثه ، نقوم بحفظ النشاط في الحالة حتى نتمكن من تحديثه لاحقًا. يستخدم هذا للعمل في الإصدار السابق ، ولكن تدفق نشاط الإرسال والتحديث بقدر ما أفهم تغير مع الإصدار الجديد.
سيؤدي هذا إلى استدعاء نقطة نهاية VA (هذا يعمل) والتي يجب أن تقوم بعد ذلك بتحديث النشاط. تأتي المكالمة إلى CustomSkillHandler
في طريقة onUpdateActivity
ولكن بعد ذلك أتلقى الخطأ عند إرسال النشاط إلى MS Teams.
اسمحوا لي أن أعرف إذا كنت بحاجة إلى مزيد من السياق ، في غضون ذلك ، ربما يمكنني تجربة ذلك أيضًا على فرعك والتحقق مما إذا كان لدي نفس الخطأ.
مرحبًا @ Batta32 ، لقد اختبرت ذلك من الفرع الذي تستخدمه للاختبار. لقد أنشأت شوكة هنا: https://github.com/tommyJimmy87/botframework-solutions/tree/feature/southworks/conversationid-issue
لقد غيرت فرعك لإعادة إنتاج نفس الخطأ. ضمن testSkillHandler
أضفت المحاولة للحصول على الخطأ:
try{
await context.updateActivity(activity);
}catch(e){
console.log(e);
}
هذا هو الخطأ الفعلي الذي أحصل عليه من المكالمة updateActivity
:
{ body: '{"error":{"code":"ServiceError","message":"Unknown"}}',
headers: HttpHeaders { _headersMap: [Object] },
status: 400 },
body: { error: { code: 'ServiceError', message: 'Unknown' } } }
وهو نفس الشيء الذي أحصل عليه في مشروعي.
هذا هو الاختبار الذي قمت به:
لقد أنشأت حوارًا جديدًا داخل نموذج المهارة testUpdateActivityDialog
حيث في البداية أرسل TestCard
مع نص. في onContinueDialog
أرسل نفس البطاقة ولكن بنص مختلف ؛
قم بتوصيل VA بالمهارة.
اتصل بـ VA بقصد من شأنه أن يستدعي المهارة ويبدأ اختبار الحوار وإظهار البطاقة ؛
اتصل بـ VA مع بعض النية التي ستستدعي المهارة و continueDialog
من مربع حوار الاختبار ؛
ستستدعي المهارة VA لتحديث البطاقة ثم تحصل على الخطأ.
@ tommyJimmy87 عظيم! سنراجعها بهذه المعلومات الجديدة ، شكرا جزيلا لك 😊.
مرحبا @ tommyJimmy87! أعدنا إنتاج السيناريو بنجاح باستخدام أحدث التغييرات وخطوات إعادة الإنتاج المذكورة.
سنواصل البحث حول هذه المسألة. بمجرد حصولنا على أي تحديث ، سنعود إليك 😊.
_ اختبرنا الاتصال بين VA وروبوتات المهارة التي تكتشف نفس المشكلة عندما ترسل المهارات معلومات النشاط إلى VA_
مرحبًا @ DiegoCardozo94 ،
شكرا للتحديث.
هل لديك أي فكرة عن موعد إصدار هذا؟
هل تعتقد أنه يمكن إصدار هذا قبل اليوم السابع عشر ، نظرًا لأن لدينا إصدارًا صارمًا من جانبنا ، نود فقط أن نفهم ما إذا كان التاريخ السابع عشر ممكنًا أم لا؟ :)
شكرا
مرحبًا @ tommyJimmy87 ، آسف على التأخير.
تمكنا من التحقق من أن هذه المشكلة تحدث في C # أيضًا ، لذا يبدو أنها ليست مرتبطة بـ TypeScript فقط.
وجدنا بعض المشكلات ذات الصلة :
SkillHandler
يولد ResourceResponse
مزيفًا عندما يعيد توجيه الأنشطة من المهارة إلى القناة. هذا يعني أن عمليات مثل update
و delete
لن تعمل .SkillHandler
لا تطبق OnUpdateActivityAsync
.أخيرًا وليس آخرًا ، تحققنا من صحة السيناريوهات التالية باستخدام الخطوات المذكورة:
darrenj ، قمنا بتكرار هذه المشكلة باستخدام C # bots أيضًا.
بيئة الاختبار لدينا:
خطوات Repro لدينا:
_المساعد الظاهري سوف يطرح استثناء عند محاولة تحديث نشاط ما_
_تم تشغيل مهارة TypeScript بنجاح في قناة Microsoft Teams ، وتحديث البطاقة التي تم إرسالها مسبقًا_
مرحبًا ، https://github.com/microsoft/botframework-sdk/issues/5919 تم تناوله في جميع اللغات الثلاثة المدعومة ، يمكنك تجربة ما إذا كان هذا الحل يساعد في استخدام إحدى الإصدارات اليومية بدءًا من الغد.
مرحبًا @ Batta32 ، هنا شيء يجب عليك تحديثه أولاً ، أليس كذلك؟ إنه ليس شيئًا يمكنني تجربته بالفعل؟
مرحبا @ tommyJimmy87! نعم، نحن سيتم التحقق من صحة ماgabog المذكورة للنسخة مطبوعة على الآلة الكاتبة وC #.
سنقوم بتحديث هذا الفرع بإضافة آخر التحديثات ودمج botbuilder-v4-js-daily build SDK الذي يحتوي على Microsoft / botbuilder-js # 2489 و microsoft / botbuilder-dotnet # 4264.
بمجرد حصولنا على أي تحديث ، سنعود إليك 😊.
مرحبا @ tommyJimmy87، أكدنا بنجاح أن تطبيق التغييرات من مايكروسوفت / botbuilder-شبيبة # 2489 في testSkillHandler
هذه المسألة يتم حلها ويتم تحديث النشاط بشكل صحيح باستخدام قناة فرق مايكروسوفت.
حدد هذا الالتزام لتحديد التغييرات التي يجب عليك تطبيقها في testSkillHandler
الخاص بك ، وتحديدًا في طريقة processActivity
.
darrenj & gabog - نجحنا في التحقق من صحة تغييرات Microsoft / botbuilder-dotnet # 4264 باستخدام C # bots أيضًا.
بيئة الاختبار لدينا:
خطوات Repro:
_التغييرات التي تم إجراؤها على طريقة نشاط العملية للاختبار
_تم تشغيل مساعد TypeScript الظاهري بنجاح في قناة Microsoft Teams ، وتحديث البطاقة التي تم إرسالها مسبقًا_
سنكون منتبهين لإجابتك!
مرحبًا @ Batta32 ، شكرًا على التحديث ،
@ tommyJimmy87 - فقط الالتزام الذي نشرناه أعلاه!
مرحبًا مرة أخرى @ Batta32 :) هذا أيضًا يبدو أنه تم حله! سأقوم ببعض الاختبارات الأكثر عمقًا غدًا ولكن يبدو أنني موافق على التغييرات في فئة "معالج مهارة الاختبار" التي قدمتها. شكرا!
شكرا @ tommyJimmy87! بمجرد تأكيد ذلك ، يمكننا إغلاق هذه المشكلة 😊.
مرحبا @ Batta32! يمكننا بكل سرور إغلاق هذه المشكلة :)
شكرا @ tommyJimmy87 لتأكيد ذلك!
darrenj - يمكننا إغلاق هذه المشكلة حيث تم حلها بواسطة فريق SDK!
التعليق الأكثر فائدة
مرحبًا مرة أخرى @ Batta32 :) هذا أيضًا يبدو أنه تم حله! سأقوم ببعض الاختبارات الأكثر عمقًا غدًا ولكن يبدو أنني موافق على التغييرات في فئة "معالج مهارة الاختبار" التي قدمتها. شكرا!