Botframework-solutions: Perbarui aktivitas setelah migrasi ke 0,8 tidak berfungsi

Dibuat pada 20 Mei 2020  ·  18Komentar  ·  Sumber: microsoft/botframework-solutions

Proyek apa yang terpengaruh?

Proyek Asisten Virtual dan Proyek Keterampilan.

Bahasa apa ini?

naskah.

Apa yang terjadi?

Dari MS Teams Channel, saat mencoba memperbarui aktivitas dari Skill, Asisten Virtual akan error.

Apa langkah-langkah untuk mereproduksi masalah ini?

  1. Migrasikan VA dan Skill ke TypeScript versi 0.8 terbaru
  2. Di VA kita harus mengimplementasikan Kelas baru "CustomSkillHandler" yang memperluas kelas "ChannelServiceHandler" (kita perlu mengimplementasikan ini karena fungsi updateActivity tidak diimplementasikan dalam "SkillHandler" yang disediakan)
  3. Di dalam "CustomSkillHandler" terapkan 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() };
    }
  1. Dalam indeks ubah deklarasi 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');

  1. Uji aktivitas pembaruan dari Saluran Teams.

Apa yang Anda harapkan terjadi?

Kartu diperbarui di Teams

Bisakah Anda membagikan log, keluaran kesalahan, dll.?

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)

Ada tangkapan layar atau konteks tambahan?

Tim Saluran

Bot Services Bug customer-replied-to customer-reported

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!

Semua 18 komentar

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.

  1. Apa maksudmu dengan The Card is updated in Teams ?
  2. Apakah Anda menggunakan Asisten Virtual dan Keterampilan dalam versi TypeScript?
  3. Bisakah Anda memberikan langkah-langkah koneksi/komunikasi antara Asisten & Keterampilan Virtual dan bagaimana Anda menguji CustomSkillHandler ?
  4. Apakah Anda menggunakan [email protected] untuk menghasilkan Asisten dan Keterampilan Virtual?

Berikut adalah cabang dengan perubahan terbaru yang kami buat untuk mereproduksi masalah ini.

Lingkungan

Langkah-langkah repro

  1. Terapkan VA & Keterampilan menggunakan generator-bot-virtualassistant
  2. Hubungkan VA & Skill menggunakan perintah botskills connect
  3. Buat kelas CustomSkillHandler baru yang diperluas dari ChannelServiceHandler
  4. Tambahkan metode onUpdateActivity dan updateActivity pada CustomSkillHandler
  5. Ubah file indeks untuk menerima CustomSkillHandler
  6. Uji koneksi antara Asisten Virtual dan Skill menggunakan saluran Teams

Kami akan memperhatikan jawaban Anda!

Hai @Batta32 , akan mencoba menjawab pertanyaan Anda :

  1. 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).

  2. Ya, baik VA dan Skill ada di TypeScript

  3. 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.

  1. Tidak, sayangnya proyek kami sudah dalam status lanjutan dan saya perlu bermigrasi ke versi baru dengan mempertahankan semua hal khusus yang kami lakukan, pada dasarnya, kami bermigrasi secara manual. Yang tidak bagus tapi perlu.

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:

  1. 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;

  2. Hubungkan VA ke Skill.

  3. Panggil VA dengan maksud tertentu yang akan memanggil Skill dan memulai Dialog Tes dan menunjukkan kartu;

  4. Panggil VA dengan maksud tertentu yang akan memanggil Skill dan continueDialog dari Dialog Tes;

  5. 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_
image

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 :

  1. microsoft/botframework-sdk#5919: ini merinci bahwa SkillHandler menghasilkan ResourceResponse palsu ketika meneruskan aktivitas dari keterampilan ke saluran. Ini berarti bahwa operasi seperti update dan delete tidak akan berfungsi .
  2. microsoft/botbuilder-dotnet#3686: ini merinci bahwa kelas SkillHandler tidak mengimplementasikan OnUpdateActivityAsync .
    Jika Keterampilan dijalankan tanpa Asisten Virtual, kartu diperbarui dengan benar, tetapi saat dijalankan terhubung ke Asisten Virtual, kartu tidak diperbarui.
    Masalah ini memiliki komentar yang mengatakan bahwa masalah ini harus diperbaiki pada rilis berikutnya . Anda dapat melacak status pekerjaan di microsoft/botframework-sdk#5788 ini.
  3. officedev/botbuilder-microsoftteams#124: ini merinci bahwa menggunakan bot V3 di Saluran Tim gagal dengan HTTP 400 Bad Request (mirip dengan masalah ini).

Last but not least, kami memvalidasi skenario berikut menggunakan langkah-langkah yang disebutkan:

  • [berfungsi] Keahlian TypeScript saja
  • [masalah direproduksi] TypeScript Virtual Assistant terhubung TypeScript Skill
  • [masalah direproduksi] TypeScript Virtual Assistant terhubung C# Skill
  • [masalah direproduksi] C# Virtual Assistant terhubung Keahlian TypeScript
  • [masalah direproduksi] C# Asisten Virtual terhubung Keterampilan C#

@darrenj , kami juga mereplikasi masalah ini menggunakan bot C#.

Lingkungan pengujian kami:

  • Cabang dengan modifikasi kami
  • C# Contoh Asisten Virtual
  • Contoh Keterampilan C#

Langkah repro kami:

  1. Terapkan kedua sampel
  2. Siapkan Asisten Virtual dengan Ngrok
  3. Hubungkan Asisten Virtual dengan Microsoft Teams
  4. Hubungkan Keterampilan dengan Asisten Virtual
  5. Jalankan kedua sampel
  6. Di Microsoft Teams, kirim salam ke Asisten Virtual dan selesaikan Dialog Onboarding
  7. Kirim dialog contoh jalankan, Asisten Virtual akan merespons dengan kartu dengan teks Kirim Aktivitas
  8. Kirim pesan lain ke Asisten Virtual, itu akan membuat pengecualian mencoba memperbarui aktivitas

_Asisten Virtual akan mengeluarkan pengecualian saat mencoba memperbarui aktivitas_
image

_TypeScript Skill berhasil dijalankan di Microsoft Teams Channel, memperbarui kartu yang sebelumnya dikirim_
image

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:

  • Cabang dengan modifikasi kami
  • Contoh Asisten Virtual TypeScript
  • Contoh Keterampilan TypeScript

Langkah-langkah repro:

  1. Terapkan kedua sampel
  2. Siapkan Asisten Virtual dengan Ngrok
  3. Hubungkan Asisten Virtual dengan Microsoft Teams
  4. Hubungkan Keterampilan dengan Asisten Virtual
  5. Jalankan kedua sampel
  6. Di Microsoft Teams, kirim salam ke Asisten Virtual dan selesaikan Dialog Onboarding
  7. Kirim dialog contoh jalankan, Asisten Virtual akan merespons dengan kartu dengan teks Kirim Aktivitas
  8. Kirim pesan lain ke Asisten Virtual, itu akan memperbarui kartu dengan teks Update Activity

Keterangan lebih lanjut

_Perubahan yang dilakukan pada metode processActivity dari testSkillHandler_
image

_TypeScript Virtual Assistant berhasil berjalan di Microsoft Teams Channel, memperbarui kartu yang sebelumnya dikirim_
image

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!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat