Proyek Asisten Virtual dan Proyek Keterampilan.
naskah.
Dari MS Teams Channel, saat mencoba memperbarui aktivitas dari Skill, Asisten Virtual akan error.
updateActivity
tidak diimplementasikan dalam "SkillHandler" yang disediakan)onUpdateActivity
: protected async onUpdateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string, activity: Activity): Promise<ResourceResponse> {
return await this.updateActivity(claimsIdentity, conversationId, activityId, activity);
}
dan fungsi updateActivity
terlihat seperti ini:
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');
Kartu diperbarui di Teams
Kesalahan ditampilkan saat VA mencoba memperbarui aktivitas dari fungsi yang dijelaskan sebelumnya 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)
Tim Saluran
Terima kasih @tommyJimmy87 telah melaporkan masalah ini, kami masih meninjaunya. Segera setelah kami memiliki pembaruan, kami akan kembali kepada Anda 😊!
Hai @tommyjimmy87 , Saya ingin Anda memberikan langkah-langkah repro tambahan dari apa yang Anda lakukan untuk mencari tahu apa yang salah karena kami tidak dapat mereproduksi masalah yang Anda hadapi.
The Card is updated in Teams
?CustomSkillHandler
?Berikut adalah cabang dengan perubahan terbaru yang kami buat untuk mereproduksi masalah ini.
generator-bot-virtualassistant
botskills connect
CustomSkillHandler
CustomSkillHandler
Kami akan memperhatikan jawaban Anda!
Hai @Batta32 , akan mencoba menjawab pertanyaan Anda :
Maksud saya, saya mencoba memperbarui adaptive card
di saluran MS Teams dan hasilnya adalah kartu tersebut diperbarui setelah saya melakukan beberapa tindakan (kartu itu ada di dalam keterampilan, jadi pada dasarnya tesnya adalah updateActivity
dari keterampilan ke VA).
Ya, baik VA dan Skill ada di TypeScript
Dalam keterampilan saya memiliki adaptive card
, setelah tindakan dari pengguna kartu ini harus diperbarui dengan konten yang berbeda. Dari skill tersebut saya sebut dengan updateActivity
:
dc.context.updateActivity(previouslySentActivity);
previouslySentActivity
itu adalah aktivitas yang ingin kita perbarui, kita simpan aktivitas itu dalam keadaan agar dapat memperbaruinya nanti. Ini digunakan untuk bekerja di versi sebelumnya, tetapi aliran aktivitas pengiriman dan pembaruan sejauh yang saya pahami berubah dengan versi baru.
Ini akan memanggil titik akhir VA (ini berfungsi) yang kemudian akan memperbarui aktivitas. Panggilan masuk ke CustomSkillHandler
dalam metode onUpdateActivity
tetapi kemudian saya mendapatkan kesalahan saat aktivitas dikirim ke MS Teams.
Beri tahu saya jika Anda membutuhkan lebih banyak konteks, sementara itu, mungkin saya dapat mencoba ini juga di cabang Anda dan memeriksa apakah saya memiliki kesalahan yang sama.
Hai @Batta32 , saya mengujinya dari cabang yang Anda gunakan untuk menguji. Saya membuat garpu di sini: https://github.com/tommyJimmy87/botframework-solutions/tree/feature/southworks/conversationid-issue
Saya mengubah cabang Anda untuk mereproduksi kesalahan yang sama. Di dalam testSkillHandler
saya menambahkan try-catch untuk mendapatkan kesalahan:
try{
await context.updateActivity(activity);
}catch(e){
console.log(e);
}
Ini adalah kesalahan aktual yang saya dapatkan dari panggilan updateActivity
:
{ body: '{"error":{"code":"ServiceError","message":"Unknown"}}',
headers: HttpHeaders { _headersMap: [Object] },
status: 400 },
body: { error: { code: 'ServiceError', message: 'Unknown' } } }
Yang sama dengan yang saya dapatkan di proyek saya.
Ini adalah tes yang saya lakukan:
Saya membuat Dialog baru di dalam sample-skill testUpdateActivityDialog
di mana di beginDialog saya mengirim TestCard
dengan teks. Di onContinueDialog
saya mengirim kartu yang sama tetapi dengan teks yang berbeda;
Hubungkan VA ke Skill.
Panggil VA dengan maksud tertentu yang akan memanggil Skill dan memulai Dialog Tes dan menunjukkan kartu;
Panggil VA dengan maksud tertentu yang akan memanggil Skill dan continueDialog
dari Dialog Tes;
Keterampilan akan memanggil VA untuk memperbarui kartu dan kemudian Anda mendapatkan kesalahan.
Hebat @tommyJimmy87 ! Kami akan mengulasnya dengan informasi baru ini, terima kasih banyak 😊.
Hai @tommyJimmy87! Kami berhasil mereproduksi skenario menggunakan perubahan terbaru Anda dan langkah-langkah repro yang disebutkan.
Kami akan terus meneliti tentang masalah ini. Segera setelah kami memiliki pembaruan, kami akan menghubungi Anda kembali 😊.
_Kami menguji koneksi antara bot VA & Skill yang mendeteksi masalah yang sama saat skill mengirimkan informasi aktivitas ke VA_
Hai @DiegoCardozo94 ,
Terima kasih atas pembaruannya.
Apakah Anda tahu kapan ini akan dirilis?
Apakah menurut Anda ini dapat dirilis sebelum tanggal 17, karena kami memiliki rilis yang ketat dari pihak kami, kami hanya ingin memahami apakah tanggal 17 itu layak atau tidak? :)
Terima kasih
Hai @tommyJimmy87 , maaf atas keterlambatannya.
Kami berhasil memvalidasi bahwa masalah ini juga terjadi di C# sehingga tampaknya tidak terkait dengan TypeScript saja.
Kami menemukan beberapa banyak masalah terkait :
SkillHandler
menghasilkan ResourceResponse
palsu ketika meneruskan aktivitas dari keterampilan ke saluran. Ini berarti bahwa operasi seperti update
dan delete
tidak akan berfungsi .SkillHandler
tidak mengimplementasikan OnUpdateActivityAsync
.Last but not least, kami memvalidasi skenario berikut menggunakan langkah-langkah yang disebutkan:
@darrenj , kami juga mereplikasi masalah ini menggunakan bot C#.
Lingkungan pengujian kami:
Langkah repro kami:
_Asisten Virtual akan mengeluarkan pengecualian saat mencoba memperbarui aktivitas_
_TypeScript Skill berhasil dijalankan di Microsoft Teams Channel, memperbarui kartu yang sebelumnya dikirim_
Hai, https://github.com/microsoft/botframework-sdk/issues/5919 belum ada yang membahas semua 3 bahasa yang didukung, Anda dapat mencoba jika solusi itu membantu menggunakan salah satu build harian mulai besok.
Hai @Batta32 , ini ada yang harus kamu perbarui dulu kan? Itu bukan sesuatu yang sudah bisa saya coba?
Hai @tommyJimmy87! Ya, kami akan memvalidasi apa @gabog disebutkan untuk naskah dan C #.
Kami akan memperbarui cabang ini dengan menambahkan pembaruan terakhir dan menggabungkan build harian botbuilder-v4-js-daily dari SDK yang berisi microsoft/botbuilder-js#2489 dan microsoft/botbuilder-dotnet#4264 .
Segera setelah kami memiliki pembaruan, kami akan menghubungi Anda kembali 😊.
Hai @tommyJimmy87 , kami berhasil mengonfirmasi bahwa menerapkan perubahan microsoft/botbuilder-js#2489 di testSkillHandler
masalah ini telah diselesaikan dan aktivitas diperbarui dengan benar menggunakan saluran Microsoft Teams.
Periksa komit ini untuk mengidentifikasi perubahan yang harus Anda terapkan di testSkillHandler
, khususnya dalam metode processActivity
.
@darrenj & @gabog - kami berhasil memvalidasi perubahan microsoft/botbuilder-dotnet#4264 menggunakan bot C# juga.
Lingkungan pengujian kami:
Langkah-langkah repro:
_Perubahan yang dilakukan pada metode processActivity dari testSkillHandler_
_TypeScript Virtual Assistant berhasil berjalan di Microsoft Teams Channel, memperbarui kartu yang sebelumnya dikirim_
Kami akan memperhatikan jawaban Anda!
Hai @Batta32 , terima kasih atas pembaruannya, kami akan segera mencobanya. Hanya satu pertanyaan dari pihak saya: apakah ada versi perpustakaan yang diubah atau hanya komit yang Anda posting di atas? Terima kasih
@tommyJimmy87 - Hanya komit yang telah kami posting di atas!
Hai lagi @Batta32 :) Juga yang ini sepertinya terpecahkan! Saya akan melakukan beberapa tes yang lebih mendalam besok tetapi tampaknya tidak masalah dengan perubahan di kelas Test Skill Handler yang Anda berikan. Terima kasih!
Terima kasih @tommyJimmy87! Segera setelah Anda dapat mengkonfirmasi ini, kami dapat menutup masalah ini 😊.
Hai @Batta32! Kami dengan senang hati dapat menutup masalah ini :)
Terima kasih @tommyJimmy87 untuk konfirmasi ini!
@darrenj - kami dapat menutup masalah ini karena telah diselesaikan oleh tim SDK!
Komentar yang paling membantu
Hai lagi @Batta32 :) Juga yang ini sepertinya terpecahkan! Saya akan melakukan beberapa tes yang lebih mendalam besok tetapi tampaknya tidak masalah dengan perubahan di kelas Test Skill Handler yang Anda berikan. Terima kasih!