Ich habe den ChatBot entwickelt, der in SharePoint On Premise integriert ist. Wenn ich den ChatBot im Emulator debugge, funktioniert es. Beim Debuggen auf Web Emulator in Azure und auf der Unternehmenswebsite gehosteten Website mithilfe von DirectLine funktionierte dies jedoch nicht.
Weiß jemand, wie man es löst?
Hiermit mein Screenshot. Die linke Seite stammt vom Web Emulator, die rechte Seite vom lokalen Bot Framework Emulator
Update mit Quellcode (09. Dezember 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);
Update 17. Dezember 2019
Ich hatte versucht, Embedded und Direct Line zu verwenden. Aber der Fehler ist immer noch der gleiche.
Der Bot wird nicht in SharePoint gehostet.
Update 06. Januar 2020 In Azure Bot Services hat es nicht funktioniert
botframework
sharepoint-2013
azure-bot-service
direct-line-botframework
Eng Soon Cheah
quelle
quelle
Antworten:
Basierend auf Ihrer Beschreibung können Sie Daten lokal abrufen. Dies bedeutet, dass Ihr Code und Ihre Logik in Ordnung sind.
Ich habe festgestellt, dass Ihre SharePoint-URL lautet:
https://mvponduty.sharepoint.com/sites/sg/daw/
und ich habe versucht, darauf zuzugreifen, und habe auch versucht, auf Ihre gesamte Anforderungs-URL zuzugreifen:https://mvponduty.sharepoint.com/sites/sg/daw/_api/lists/getByTitle('data@work')/items?$filter=Keywords eq 'bloomberg'
Die Antwort der beiden ist alle 404.Und Sie sagten, dies sei eine On-Prem-Site. Könnten Sie also überprüfen, ob diese Site über ein öffentliches Netzwerk erreichbar ist?
Ich gehe davon aus, dass Sie beim lokalen Testen Ihres Codes auf diese Site zugreifen können, während Sie sich in Ihrem internen Netzwerk befinden, das auf die lokale Site zugreifen kann. Wenn Sie Ihren Code jedoch in Azure veröffentlichen, befindet er sich nicht mehr in Ihrer internen Arbeit: Er befindet sich in einem öffentlichen Netzwerk, sodass Sie nicht auf Ihre lokale SharePoint-Website zugreifen können, die diesen Fehler verursacht hat.
Wie wir wissen, wird Bot-Code im Azure-App-Dienst gehostet. Wenn dieser Fehler aus dem oben genannten Grund verursacht wird, ist die Azure App Service-Hybridverbindungsfunktion in diesem Szenario möglicherweise hilfreich.
quelle
ChatBot scheint gut zu funktionieren? Es sendet und empfängt Nachrichten. Es gibt einen Code, der sich anders verhält, wenn er lokal als gehostet ausgeführt wird. Es gibt XML, ist es eine Datei oder generiert? Sie müssen überprüfen, ob es der gleichen Logik folgt und dieselben Daten verwendet wie bei der lokalen Ausführung. Wenn Sie einen Teil des (nicht vertraulichen) Codes einfügen, in dem er abstürzt, können wir möglicherweise weitere Ideen haben, wie Sie helfen können
quelle
Wenn Sie Ihren Bot veröffentlichen, gibt es eine Option wie folgt:
Wählen Sie App Service-Einstellungen bearbeiten. Fügen Sie nur die folgenden Details hinzu, sonst nichts:
Klicken Sie auf Übernehmen, OK.
Stellen Sie sicher, dass Sie das
Microsoft App Id
undMicrosoft App Password
aus appsettings.json entfernen , damit es auch im Bot-Emulator funktioniert.Veröffentlichen Sie nun den Bot. Es wird an beiden Orten funktionieren.
Hoffe das ist hilfreich.
quelle