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
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
botframework
sharepoint-2013
azure-bot-service
direct-line-botframework
Eng Soon Cheah
sumber
sumber
Jawaban:
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.
sumber
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
sumber
Saat Anda mempublikasikan bot Anda, akan ada opsi seperti di bawah ini:
Pilih Edit Pengaturan Layanan Aplikasi. Tambahkan hanya detail berikut, tidak ada yang lain:
Klik Terapkan, Oke.
Pastikan Anda menghapus
Microsoft App Id
danMicrosoft App Password
dari appsettings.json, sehingga berfungsi di bot emulator juga.Sekarang Publikasikan bot. Ini akan bekerja di kedua tempat.
Semoga ini bermanfaat.
sumber