Butuh bantuan Anda dalam hal ini.
Tolong beri tahu saya jika Anda memerlukan detail lebih lanjut tentang ini.
Terima kasih,
Sreekanth
@Virtual-Josh setidaknya kita mungkin perlu memastikan pelanggan memahami cara menggunakan debugging Sidecar di Emulator sehingga mereka dapat menguji lingkungan tim.
Hai @SreekanthOAuth ,
Ada beberapa hal yang perlu diketahui.
Pertama, Anda dapat menggunakan Emulator Kerangka Kerja Bot untuk men-debug bot Anda di dalam Teams. Di Emulator, Anda dapat membuka "Bantuan"-> "Memulai saluran (Pemeriksa Bot)" untuk melihat petunjuk cara menyiapkannya.
Kedua, Emulator akan bekerja seperti yang didokumentasikan dalam obrolan satu-ke-satu dan grup. Jika Anda mengalami masalah dengan itu, beri tahu kami.
Ketiga, ada bug dalam pesan dalam tim. Ketika Anda melakukan perintah /inspect GUID
dalam tim, Anda harus merespons thread yang memiliki /inspect GUID
jika Anda ingin melihat aktivitas pelacakan di Emulator. Saat ini logika di InspectionMiddleware tidak menangani aktivitas yang berasal dari obrolan tim Teams. Saya telah membuka masalah pada berbagai repo kami untuk menyelesaikan masalah tersebut. Anda dapat melihat masalah tersebut di sini:
https://github.com/microsoft/botbuilder-dotnet/issues/2955
https://github.com/microsoft/botbuilder-python/issues/428
https://github.com/microsoft/botbuilder-java/issues/142
https://github.com/microsoft/botbuilder-js/issues/1406
Beri tahu saya jika Anda memiliki pertanyaan lain.
Hai @Virtual-Josh, kami tidak melihat masalah apa pun di Emulator. Di sini Bot berfungsi seperti yang diharapkan.
Satu-satunya tempat di mana kami melihat masalah ini adalah di Saluran Teams.
Terima kasih,
Sreekanth
Saya ingin Anda memberi saya gambaran lengkap tentang apa yang Anda lakukan untuk mencari tahu apa yang salah. Berikut adalah beberapa pertanyaan awal yang sangat saya minati.
Atau Anda dapat melihat contoh yang kami miliki untuk Teams ( C# JS ) jika Anda ingin mencoba layanan mandiri.
Hai @SreekanthOAuth
Bot Tim akan menerima acara pembaruan percakapan saat pengguna pertama kali menambahkan bot untuk obrolan 1:1, atau bot ditambahkan ke tim. Bukan saat percakapan baru dibuat di tim atau anggota tim mengirim pesan ke bot. Jika pesan selamat datang dikirim dari OnMemberAdded pada ConversationUpdate: pesan tersebut tidak akan diaktifkan di Teams pada waktu yang sama seperti di emulator.
WebChat dan Emulator mengirim pembaruan percakapan saat mereka terhubung (karena keduanya membuat percakapan baru saat startup).
Anda dapat melacak siapa yang mengirim pesan ke bot, dan merespons dengan pesan selamat datang pada kontak pertama. Mekanisme ini tidak dibangun ke dalam SDK, jadi ini adalah sesuatu yang khusus yang perlu dikodekan di bot Anda.
@EricDahlvang - Maaf atas jawaban yang terlambat.
Oke. Biarkan saya memberikan beberapa rincian lebih lanjut tentang hal itu.
Kami memiliki Asisten Virtual dan keterampilan khusus. Saat pengguna meminta sesuatu, aliran beralih dari Asisten Virtual ke keterampilan masing-masing. Di dalam skill, ada metode dc.endDialog() di complete(). Fungsi ini dijalankan seperti yang diharapkan di Emulator, Webchat, dan saluran SMS. Tetapi berdasarkan analisis kami, ini tampaknya tidak berfungsi seperti yang diharapkan dalam tim. Konteksnya tidak dibersihkan. Sehingga kami melihat menu skill yang sama yang kami minta pertama kali setiap kali (walaupun Anda meminta maksud yang berbeda)
Membuat keterampilan khusus (dari TypeScript), berdasarkan dokumentasi di bawah ini,
https://microsoft.github.io/botframework-solutions/skills/tutorials/create-skill/typescript/3-create-your-skill/
Dan satu hal lagi adalah,
Silakan menyarankan ini.
Terima kasih,
Sreekanth
Saya melihat masalah ini yang membahas masalah serupa dan solusinya di C#bot namun kami membutuhkan solusi untuk bot TypeScript.
Hai @gabog karena sekarang kita sedang membicarakan keterampilan, bisakah kamu melihat tiket ini untuk membantu menyelesaikannya?
Hai @SreekanthOAuth ,
Saya akan memindahkan masalah ini ke repo solusi botframework karena masalah intinya adalah perutean VA/Keterampilan.
@SreekanthOAuth - Kami telah memperbarui template VA dan
@lauren-mills - Terima kasih atas pembaruannya.
Kami telah bekerja di Asisten Virtual sejak dari 5 bulan. Jadi kami memiliki banyak pembaruan untuk VA kami.
Akan sangat membantu jika Anda dapat memberikan perincian tentang perubahan besar apa yang terjadi untuk membuatnya berfungsi.
Kami berada di TypeScript
Terima kasih,
Sreekanth
Pembaruan telah dilakukan pada template C#, dan akan segera hadir di template TypeScript. Perubahan utama adalah mewarisi dari TeamsActivityHandler alih-alih IBot di kelas DialogBot. Ini file dalam template C#, dan saya yakin perubahan TypeScript harus sama, tetapi beri tahu saya jika Anda mengalami masalah. https://github.com/microsoft/botframework-solutions/blob/master/templates/Virtual-Assistant-Template/csharp/Sample/VirtualAssistantSample/Bots/DefaultActivityHandler.cs
Terima kasih atas pembaruannya. Kami akan mencoba dan menghubungi Anda kembali.
Terima kasih,
Sreekanth
Kami melihat DialogBot diperluas dari ActivityHandler di asisten virtual saat ini.
Kami tidak menemukan 'TeamsActivityHandler' di 'botbuilder' NPM paket.
Dan, di bawah ini ada beberapa pertanyaan lagi
Apakah perubahan ini hanya untuk Virtual Assistant atau bahkan untuk skill juga?
Perubahan ini tidak khusus untuk saluran Teams, bukan? Jika tidak, bagaimana pengaruhnya/bekerja pada saluran lain?
Tolong beri tahu saya jika Anda memerlukan detail lebih lanjut tentangnya.
Terima kasih,
Sreekanth
Saya dapat melihat teamsActivityHandler di sumber untuk botbuilder-js di sini . Bisakah Anda memastikan Anda menggunakan versi 4.6?
Perubahan ini harus dilakukan di bot mana pun yang akan langsung diakses melalui tim. Jika Anda berencana untuk mengekspos keahlian Anda secara langsung (bukan melalui VA), Anda juga memerlukan perubahan ini untuk mengaktifkan penanganan aktivitas Teams. Jika tidak, tidak penting untuk memperbarui proyek keterampilan.
Selain itu, terlepas dari namanya, pengendali aktivitas ini akan berfungsi untuk semua saluran lain selain Teams. Itu hanya menambahkan penanganan Tim tambahan.
Setelah menginstal versi terbaru, melihat pengecualian saat memulai server. Bisakah Anda menyarankan kami tentang ini.
error.txt
@Batta32 - dapatkah Anda melihat log kesalahan di atas dan memberikan saran?
Hai @SreekanthOAuth , kami mengajukan beberapa pertanyaan terkait dengan instalasi yang Anda buat.
botbuilder
perpustakaan - 4.6.2botbuilder-skills
- 4.4.9botbuilder-solutions
- 4.4.9package-lock.json
dan folder node_modules
sebelum instalasi? Jika tidak, harap hapus, perbarui versi perpustakaan ke yang terbaru dan jalankan instalasi lagi.Masalahnya mungkin terkait dengan perbedaan versi botbuilder
di dalam Asisten Virtual dengan versi botbuilder-solutions
dan botbuilder-skills
.
Kami akan memperhatikan jawaban Anda 😊.
@Batta32 , Terima kasih untuk detailnya.
Hari ini, kami telah mencoba ini dan tidak melihat kesalahan saat memulai server. Tapi kami melihat masalah saat kami meminta ucapan di saluran tim,
Dan mendapatkan kode staus sebagai 501 yang berarti TIDAK_DITERAPKAN
Error:
at DefaultAdapter.<anonymous> (at DefaultAdapter.<anonymous> (D:\home\site\wwwroot\node_modules\botbuilder\lib\botFrameworkAdapter.js:640:27)at DefaultAdapter.<anonymous> (D:\home\site\wwwroot\node_modules\botbuilder\lib\botFrameworkAdapter.js:640:27): D:\home\site\wwwroot\node_modules\botbuilder\lib\botFrameworkAdapter.jsat DefaultAdapter.<anonymous> (D:\home\site\wwwroot\node_modules\botbuilder\lib\botFrameworkAdapter.js:640:27): 640)
at fulfilled (at fulfilled (D:\home\site\wwwroot\node_modules\botbuilder\lib\botFrameworkAdapter.js:11:58)at fulfilled (D:\home\site\wwwroot\node_modules\botbuilder\lib\botFrameworkAdapter.js:11:58): D:\home\site\wwwroot\node_modules\botbuilder\lib\botFrameworkAdapter.jsat fulfilled (D:\home\site\wwwroot\node_modules\botbuilder\lib\botFrameworkAdapter.js:11:58): 11)
at process._tickCallback (at process._tickCallback (internal/process/next_tick.js:68:7)at process._tickCallback (internal/process/next_tick.js:68:7): internal/process/next_tick.jsat process._tickCallback (internal/process/next_tick.js:68:7): 68)
Berdasarkan log ini dan analisis kami, tampaknya Jenis Aktivitas berjalan sebagai Invoke dan di dalam kode di bawah ini, itu gagal.
processActivity(req, res, logic) {
return __awaiter(this, void 0, void 0, function* () {
let body;
let status;
let processError;
try {
// Parse body of request
status = 400;
const request = yield parseRequest(req);
// Authenticate the incoming request
status = 401;
const authHeader = req.headers.authorization || req.headers.Authorization || '';
yield this.authenticateRequest(request, authHeader);
// Process received activity
status = 500;
const context = this.createContext(request);
context.turnState.set(botbuilder_core_1.BotCallbackHandlerKey, logic);
yield this.runMiddleware(context, logic);
// Retrieve cached invoke response.
if (request.type === botbuilder_core_1.ActivityTypes.Invoke) {
const invokeResponse = context.turnState.get(exports.INVOKE_RESPONSE_KEY);
**if (invokeResponse && invokeResponse.value) {**
const value = invokeResponse.value;
status = value.status;
body = value.body;
}
**else {
status = 501;
}**
}
else {
status = 200;
}
}
catch (err) {
// Catch the error to try and throw the stacktrace out of processActivity()
processError = err;
body = err.toString();
}
// Return status
res.status(status);
if (body) {
res.send(body);
}
res.end();
// Check for an error
if (status >= 400) {
if (processError && processError.stack) {
throw new Error(
BotFrameworkAdapter.processActivity(): ${status} ERROR\n ${processError.stack} );
}
else {
throw new Error(
BotFrameworkAdapter.processActivity(): ${status} ERROR );
}
}
});
}
Bisakah Anda menyarankan kami tentang ini.
Terima kasih,
Sreekanth
Hai @SreekanthOAuth , kami mengajukan beberapa pertanyaan untuk mencari tahu apa yang salah.
Hai @Batta32 , temukan jawabannya di bawah ini
1.Dapatkah Anda membagikan seluruh file log dengan kesalahan jika tersedia?
_Dalam aliran log melihat respons di bawah_
2.Dapatkah Anda memverifikasi jika masalah ini terjadi menggunakan Emulator?
_Ya, ini berfungsi dengan baik di saluran Emulator dan Webchat_
3.Apakah ini terjadi untuk setiap maksud yang ingin Anda jalankan atau untuk maksud tertentu? (misalnya maksud yang memerlukan akses otentikasi)
_Langkah pertama di bot kami adalah Masuk. Karena gagal, langkah pertama tidak yakin apakah kasus ini sama untuk semua atau tidak.
4.Apakah dialogBot Anda diperluas ke ActivityHandler atau TeamsActivityHandler?
_Ini diperluas dengan TeamsActivityHandler_
Hai @SreekanthOAuth , maaf atas keterlambatannya. Kami berhasil mereproduksi skenario Anda yang kami pecahkan dengan mengganti metode handleTeamsSigninVerifyState
pada DialogBot yang diperluas TeamsActivityHandler
. Seperti yang Anda lihat di TeamsActivityHandler , ini berisi beberapa metode yang tidak diterapkan, yang harus kita timpa.
Dengan ini, dapatkah Anda memberi tahu kami jika Anda menerapkan metode handleTeamsSigninVerifyState
di kelas yang mengimplementasikan TeamsActivityHandler
? Jika tidak, Anda dapat menggunakan kode di bawah ini:
public async handleTeamsSigninVerifyState(context: TurnContext, state: SigninStateVerificationQuery): Promise<void> {
await this.dialog.run(context, this.state);
}
Untuk mencapai ini, kami mengikuti langkah - Contoh Asisten Virtual :
DialogBot.ts
untuk memperpanjang TeamsActivityHandler
DialogBot
, terapkan metode handleTeamsSigninVerifyState
overriden seperti yang ditunjukkan dalam Sampel Auth TimInvoke
di botFrameworkAdapter .Invoke
diterima hanya saat masuk dari saluran Teams.handleTeamsSigninVerifyState
diganti dipanggil setelah masuk di Teams, alih-alih await bot.run(turnContext);
ditemukan di index.ts
.
Jika metode ini tidak diterapkan, itu akan default untuk menggunakan posting server dalam indeks, dan itu menyebabkan context.turnState.get()
di botFrameworkAdapter mengembalikan invokeResponse
dengan status 501
, yang pada gilirannya digunakan untuk membuat dan mengirim respons dengan status tersebut.
_Skenario direproduksi_
Kami harap ini membantu Anda 😊.
Hai @Batta32 , terima kasih atas pembaruannya.
Saya telah mencoba menambahkan perubahan ini tetapi mendapatkan beberapa kesalahan
Setelah menambahkan perubahan, file dialogBot.ts
`
impor {
Pengendali Aktivitas,
BotTelemetriKlien,
keadaan percakapan,
Kode Akhir Percakapan,
Kerasnya,
SigninStateVerificationQuery,
TeamsActivityHandler,
PutarKonteks,
StatePropertyAccessor} dari 'botbuilder';
impor {
Dialog,
DialogKonteks,
DialogSet,
keadaan dialog,
DialogTurnResult } dari 'botbuilder-dialogs';
kelas ekspor DialogBot
telemetriClient hanya-baca pribadi: BotTelemetryClient;
private readonly solutionName: string = 'Bantuan Virtual Ecolab';
rootDialogId hanya bisa dibaca pribadi: string;
dialog hanya-baca pribadi: DialogSet;
dialog hanya-baca pribadi: Dialog;
dialog readonly pribadiState: StatePropertyAccessor
constructor(
conversationState: ConversationState,
telemetryClient: BotTelemetryClient,
dialog: T) {
super();
this.rootDialogId = dialog.id;
this.telemetryClient = telemetryClient;
this.dialogState = conversationState.createProperty<DialogState>(this.solutionName); // new one
this.dialogs = new DialogSet(this.dialogState);
this.dialogs.add(dialog);
this.onTurn(this.turn.bind(this));
this.dialog = dialog; // new one
}
//tslint:disable-next-line: no-any
public async turn(turnContext: TurnContext, next: () => Promise<void>): Promise<any> {
// Client notifying this bot took to long to respond (timed out)
if (turnContext.activity.code === EndOfConversationCodes.BotTimedOut) {
this.telemetryClient.trackTrace({
message: `Timeout in ${ turnContext.activity.channelId } channel: Bot took too long to respond`,
severityLevel: Severity.Information
});
return;
}
const dc: DialogContext = await this.dialogs.createContext(turnContext);
if (dc.activeDialog !== undefined) {
const result: DialogTurnResult = await dc.continueDialog();
} else {
await dc.beginDialog(this.rootDialogId);
}
await next();
}
public async handleTeamsSigninVerifyState(context: TurnContext, state: SigninStateVerificationQuery): Promise<void> {
await this.dialog.run(context, this.dialogState); // getting error here.
}
}
`
Di sini wrt dialog dan dialogState membuat atribut baru.
Di this.dialog tidak ada run() .
Bisakah Anda menyarankan.
Terima kasih,
Sreekanth
Hai @SreekanthOAuth! Jika Anda tidak dapat menggunakan metode run, Anda harus menambahkan tipe untuk T
yang berisi metode tersebut, sebagai berikut:
DialogBot
sebagai DialogBot<T extends MainDialog> extends TeamsActivityHandler
atau langsung tentukan tipe konkret untuk dialog sebagai dialog: MainDialog
.MainDialog
.Anda dapat memeriksa perubahan tersebut di cabang yang kami Contoh Asisten Virtual yang dimodifikasi yang mengimplementasikan Masuk Tim.
Terakhir, Anda dapat melihat NodeJS Sample 46 untuk mengetahui cara mengimplementasikan metode run dengan dialog waterfall .
Beri tahu kami jika ini membantu atau Anda memiliki masalah lain 😊.
Tutup karena tidak aktif. Silakan buka kembali sesuai kebutuhan.
@lauren-mills , bisakah Anda membuka kembali masalah ini karena masalah masih ada.
Kami telah mencoba saran Anda berdasarkan komentar terbaru. Namun, kami masih menghadapi masalah.
Masalah sebenarnya di sini adalah,
Harap beri tahu kami jika Anda memerlukan informasi tambahan.
Terima kasih,
Sreekanth Dari Ecolab.
Hai @SreekanthOAuth!
Kami sedang menyelidiki ini.
Hai @SreekanthOAuth ,
Kami dapat mereproduksi masalah Anda menggunakan cabang master , tetapi juga melakukan pengujian yang sama pada berikutnya dan berhasil tanpa masalah.
Ini adalah langkah-langkah yang kami ikuti untuk mereproduksi masalah:
botskills connect --remoteManifest "http://localhost:<SKILL_PORT>/api/skill/manifest" --luisFolder "<PATH_TO_LUIS_FOLDER>" --ts
manifest.json
dari Asisten Virtual untuk menggunakannya di Teams dengan mengikuti langkah-langkah ini<<YOUR-MICROSOFT-APP-ID>>
dengan appID Asisten Virtualmanifest.json
dan file ikon, dan impor ke TeamsdeserializeResponseBody()
dari file deserializationPolicy
di ms-rest-js
:Kami juga melakukan tes yang sama menggunakan cabang berikutnya , dan masalahnya tidak ditemukan
Seperti yang dapat dilihat pada gambar di atas, setelah menyelesaikan dialog waterfall, Skill Sample pertama menyerahkan kendali ke Asisten Virtual, kemudian ucapan untuk Skill Sample kedua dikirim ( alternative
) dan itu dieksekusi dengan sukses, seperti yang dicatat oleh " Apa lagi yang bisa saya bantu? " yang dikirim oleh Asisten Virtual.
Catatan: Untuk menggunakan cabang next
, Anda perlu membangun Solusi BotBuilder dan Keterampilan BotBuilder secara lokal, dan memperbarui package.json
dari Asisten Virtual dan Keterampilan untuk menggunakan .tgz
file, karena belum dirilis.
Ini berarti bahwa masalah ini akan diperbaiki dalam versi perpustakaan TypeScript yang akan segera dirilis.
Maaf untuk jawaban yang terlambat. Saya akan memeriksa dan memberikan pembaruan.
Hai @SreekanthOAuth ,
Cabang next
telah digabungkan dengan cabang master
.
Harap uji lagi dengan perubahan yang baru diterapkan.
Silakan buka kembali jika Anda mengalami masalah lagi
Silakan buka kembali ini. Kami mencoba memperbaiki berdasarkan saran "mengganti" ActivityType.EndOfConversation ke ActivityType.HandOff dan mengimplementasikan TeamActivityHander. Namun, masalah mendasar adalah EndOfConversation ActivityType tidak didukung oleh MSTeam. Kami benar-benar terjebak dan tidak bisa menjanjikan pemangku kepentingan internal kami untuk ketersediaan bot MSTeam.