J'ai développé le ChatBot qui s'intègre à SharePoint On Premise. Lorsque je débogue le ChatBot dans l'émulateur, cela fonctionne. Mais lorsque je débogue sur l'émulateur Web dans Azure et le site Web hébergé sur le site Web de l'entreprise à l'aide de DirectLine, cela n'a pas fonctionné.
Quelqu'un sait-il comment le résoudre?
Ci-joint ma capture d'écran. Le côté gauche est de l'émulateur Web, le côté droit est de l'émulateur Bot Framework local
Mise à jour avec le code source (09 décembre 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);
Mise à jour 17 décembre 2019
J'avais essayé d'utiliser Embedded et Direct Line. Mais l'erreur est toujours la même.
Le Bot n'est pas hébergé dans SharePoint.
Mise à jour 06 janvier 2020 Son n'a pas fonctionné dans Azure Bot Services
Réponses:
En fonction de votre description, vous pouvez en extraire des données localement. Cela signifie que votre code et votre logique sont corrects.
J'ai remarqué que votre URL sharePoint est:
https://mvponduty.sharepoint.com/sites/sg/daw/
et j'ai essayé d'y accéder, et j'ai également essayé d'accéder à l'ensemble de votre URL de demande:https://mvponduty.sharepoint.com/sites/sg/daw/_api/lists/getByTitle('data@work')/items?$filter=Keywords eq 'bloomberg'
les réponses des deux sont toutes 404.Et vous avez dit qu'il s'agissait d'un site sur site, pourriez-vous donc vérifier si ce site est accessible depuis un réseau public?
Je suppose que lorsque vous testez votre code localement, vous pouvez accéder à ce site car vous êtes dans votre réseau interne qui pourra accéder au site sur site. Cependant, lorsque vous publiez votre code sur Azure, il ne fait plus partie de votre travail interne: il se trouve dans le réseau public et ne peut donc pas accéder à votre site sharePoint sur site qui a provoqué cette erreur.
Comme nous le savons, le code bot est hébergé sur le service d'application Azure, si cette erreur est causée par la raison ci-dessus, peut-être que la fonctionnalité de connexion hybride d'Azure App Service sera utile dans ce scénario.
la source
ChatBot semble bien fonctionner? c'est envoyer et recevoir des messages. Il y a du code qui se comporte différemment lorsqu'il est exécuté localement ou hébergé. Il y a du Xml, est-ce un fichier ou généré? Vous devez vérifier qu'il suit la même logique et utilise les mêmes données que lorsqu'il est exécuté localement. Peut-être que si vous collez une partie du code (non confidentiel) là où il se bloque, nous pouvons avoir plus d'idées sur la façon d'aider
la source
Lorsque vous publierez votre bot, il y aura une option comme ci-dessous:
Sélectionnez Modifier les paramètres App Service. Ajoutez seulement les détails suivants, rien d'autre:
Cliquez sur Appliquer, OK.
Assurez-vous de supprimer le
Microsoft App Id
etMicrosoft App Password
de appsettings.json, afin qu'il fonctionne également dans l'émulateur de bot.Publiez maintenant le bot. Cela fonctionnera aux deux endroits.
J'espère que cela vous sera utile.
la source