ChatBot tidak bekerja di Emulator Web tetapi berfungsi dengan baik di emulator Kerangka Bot Lokal

9

Saya mengembangkan ChatBot yang terintegrasi dengan SharePoint On Premise. Ketika saya men-debug ChatBot di emulator, itu berfungsi. Tetapi ketika saya melakukan debug pada Emulator Web di Azure dan Situs Web yang Diinangi di Situs Web Perusahaan dengan menggunakan DirectLine, itu tidak berfungsi.

Adakah yang tahu bagaimana mengatasinya?

Bersama screenshot saya ini. Sisi kiri berasal dari Web Emulator, sisi kanan berasal dari Bot Framework Emulator lokal

masukkan deskripsi gambar di sini

Pembaruan dengan Kode Sumber (09 Desember 2019)

XmlNamespaceManager xmlnspm = new XmlNamespaceManager(new NameTable());

Uri sharepointUrl = new Uri("https://mvponduty.sharepoint.com/sites/sg/daw/");

xmlnspm.AddNamespace("atom", "http://www.w3.org/2005/Atom");
xmlnspm.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices");
xmlnspm.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");

NetworkCredential cred = new System.Net.NetworkCredential("[email protected]", "Pa$$w0rd", "mvponduty.onmicrosoft.com");

HttpWebRequest listRequest = (HttpWebRequest)HttpWebRequest.Create(sharepointUrl.ToString() + "_api/lists/getByTitle('" + "data@work" + "')/items?$filter=Keywords%20eq%20%27bloomberg%27");
listRequest.Method = "GET";
listRequest.Accept = "application/atom+xml";
listRequest.ContentType = "application/atom+xml;type=entry";

listRequest.Credentials = cred;
//LINE 136 start from below
HttpWebResponse listResponse = (HttpWebResponse)listRequest.GetResponse();
StreamReader listReader = new StreamReader(listResponse.GetResponseStream());
XmlDocument listXml = new XmlDocument();

listXml.LoadXml(listReader.ReadToEnd());

if (listResponse.StatusCode == HttpStatusCode.OK)
{
    Console.WriteLine("Connected");
    await turnContext.SendActivityAsync("Connected");
}

// Get and display all the document titles.
XmlElement root = listXml.DocumentElement;
XmlNodeList elemList = root.GetElementsByTagName("content");
XmlNodeList elemList_title = root.GetElementsByTagName("d:Title");
XmlNodeList elemList_desc = root.GetElementsByTagName("d:Description");

//for LINK
XmlNodeList elemList_Id = root.GetElementsByTagName("d:Id");
XmlNodeList elemList_Source = root.GetElementsByTagName("d:Sources");
XmlNodeList elemList_ContentTypeId = root.GetElementsByTagName("d:ContentTypeId");

var attachments = new List<Attachment>();
for (int i = 0; i < elemList.Count; i++)
{

    string title = elemList_title[i].InnerText;
    string desc = elemList_desc[i].InnerText;

    string baseurllink = "https://mvponduty.sharepoint.com/sites/sg/daw/Lists/data/DispForm.aspx?ID=";
    string LINK = baseurllink + elemList_Id[i].InnerText + "&Source=" + elemList_Source[i].InnerText + "&ContentTypeId=" + elemList_ContentTypeId[i].InnerText;

    //// Hero Card
    var heroCard = new HeroCard(
        title: title.ToString(),
        text: desc.ToString(),

        buttons: new CardAction[]
        {
            new CardAction(ActionTypes.OpenUrl,"LINK",value:LINK)
        }
    ).ToAttachment();
    attachments.Add(heroCard);
}
var reply = MessageFactory.Carousel(attachments);
await turnContext.SendActivityAsync(reply);

Pembaruan 17 Desember 2019

Saya telah mencoba menggunakan Embedded and Direct Line. Namun Kesalahan masih sama.

Bot tidak di-host di SharePoint.

Pembaruan 06 Januari 2020 Tidak berfungsi di Layanan Azure Bot

Eng Soon Cheah
sumber
Dengan emulator web, maksud Anda adalah fitur Tes di Obrolan Web? Atau apakah itu bundel / implementasi webchat lengkap . Apakah ini dihosting di halaman SharePoint / webpart / spfx?
Dana V
@DV, ya. Emulator web ada di Azure Web emulator dan juga menggunakan directline di webchat di halaman web lain. Chatbot tidak di-host di halaman SharePoint.
Eng Soon Cheah

Jawaban:

4

Berdasarkan uraian Anda, Anda dapat mengambil data darinya secara lokal. Ini berarti kode dan logika Anda baik-baik saja.

Saya perhatikan bahwa URL sharePoint Anda adalah: https://mvponduty.sharepoint.com/sites/sg/daw/dan saya mencoba mengaksesnya, dan juga mencoba mengakses seluruh URL permintaan Anda:https://mvponduty.sharepoint.com/sites/sg/daw/_api/lists/getByTitle('data@work')/items?$filter=Keywords eq 'bloomberg' respons keduanya adalah 404.

Dan Anda mengatakan ini adalah situs di situs, jadi bisakah Anda memeriksa apakah situs ini dapat dijangkau dari jaringan publik?

Saya berasumsi ketika Anda menguji kode Anda secara lokal, Anda dapat mengakses situs ini karena Anda berada di jaringan internal Anda yang akan dapat mengakses situs di tempat. Namun, ketika Anda menerbitkan kode Anda ke Azure, itu tidak lagi dalam pekerjaan internal Anda: itu berada di jaringan publik sehingga tidak dapat mengakses situs SharePoint di tempat Anda yang menyebabkan kesalahan ini.

Seperti yang kita ketahui, kode bot dihosting di layanan aplikasi Azure, jika kesalahan ini disebabkan oleh alasan di atas, mungkin fitur Koneksi Koneksi Layanan Aplikasi Azure akan membantu dalam skenario ini.

Stanley Gong
sumber
Benar, ambil data dari Internal SharePoint. Haruskah saya menerbitkan ChatBot di Internal SharePoint?
Eng Soon Cheah
Hai @EngSoonCheah didasarkan pada siapa yang akan menggunakan bot ini, jika hanya untuk pengguna jaringan internal Anda, secara teoritis, Anda dapat mempublikasikannya di jaringan tempat SharePoint Anda masuk. Jika pengguna eksternal perlu mengaksesnya, Anda harus menerbitkannya untuk layanan bot azure, dan gunakan fitur koneksi hybrid layanan aplikasi Azure (layanan bot Azure didasarkan pada layanan aplikasi Azure) untuk menghubungkan layanan aplikasi bot Anda ke situs lokal Anda. Saya pikir dokumen ini akan membantu: azuregems.io/azure-hybrid-connections
Stanley Gong
Hai @EngSoonCheah, bagaimana kabarnya? Apakah masalah Anda telah terpecahkan?
Stanley Gong
masih mencoba Koneksi Azure Hybrid.
Eng Soon Cheah
@EngSoonCheah, Ah ... Begitu. Selamat mencoba, jika ada pembaruan, mohon beri tahu
:)
2

ChatBot tampaknya berfungsi dengan baik? itu mengirim dan menerima pesan. Ada beberapa kode yang Anda miliki yang berperilaku berbeda ketika dijalankan secara lokal versus dihosting. Ada Xml, apakah itu file atau dihasilkan? Anda perlu memeriksa apakah itu mengikuti logika yang sama dan menggunakan data yang sama seperti ketika dijalankan secara lokal. Mungkin jika Anda menempelkan beberapa kode (tidak rahasia) di tempat crash, kami dapat memiliki lebih banyak ide bagaimana membantu

waleed
sumber
Saya telah memperbarui dengan Kode Sumber.
Eng Soon Cheah
Kesalahan dimulai pada baris 136 di DispatchBot.cs. Baris mana itu? perlu melihat baris 136 dari metode ini ProcessRSSAsync
waleed
Saya telah memperbarui kode sumber, LINE 136 dari HttpWebResponse
Eng Soon Cheah
Baik. Tampaknya secara lokal Anda dapat mengakses RSS sharepoint baik, tetapi ketika dihosting itu tidak mengembalikan xml yang sama yang berarti kemungkinan besar mengembalikan halaman kesalahan HTML. Saya mencari kesalahan Anda dan menemukan ini: forums.asp.net/t/... Ini menunjukkan bahwa Anda mungkin perlu menggunakan Proxy, silakan coba contoh kode di tautan itu
waleed
Tampilan kesalahan: System.PlatformNotSupportedException: Operasi tidak didukung pada platform ini.
Eng Soon Cheah
2

Saat Anda mempublikasikan bot Anda, akan ada opsi seperti di bawah ini:

Gambar

Pilih Edit Pengaturan Layanan Aplikasi. Tambahkan hanya detail berikut, tidak ada yang lain:

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

Klik Terapkan, Oke.

Pastikan Anda menghapus Microsoft App Iddan Microsoft App Passworddari appsettings.json, sehingga berfungsi di bot emulator juga.

Sekarang Publikasikan bot. Ini akan bekerja di kedua tempat.

Semoga ini bermanfaat.

merkuri-01
sumber
Saya hanya melihat Pratinjau dan Konfigurasi karena saya mengunduh Kode Sumber ChatBot dari Azure Portal.
Eng Soon Cheah