Desarrollé el ChatBot que se integra con SharePoint On Premise. Cuando depuro el ChatBot en el emulador, funciona. Pero cuando depuro en Web Emulator en Azure y en el sitio web alojado en el sitio web de la empresa utilizando DirectLine, no funcionó.
alguien sabe como resolverlo?
Con esto mi captura de pantalla. El lado izquierdo es de Web Emulator, el lado derecho es de Bot Framework Emulator local
Actualización con código fuente (09 de diciembre de 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);
Actualización 17 de diciembre de 2019
Intenté usar Embedded y Direct Line. Pero el error sigue siendo el mismo.
El Bot no está alojado en SharePoint.
Actualización 06 de enero de 2020 No funcionó en Azure Bot Services
botframework
sharepoint-2013
azure-bot-service
direct-line-botframework
Eng Soon Cheah
fuente
fuente
Respuestas:
Según su descripción, puede obtener datos de ella localmente. Esto significa que su código y lógica están bien.
Me di cuenta de que su URL sharePoint es:
https://mvponduty.sharepoint.com/sites/sg/daw/
e intenté acceder a ella, y también intenté acceder a toda su URL de solicitud:https://mvponduty.sharepoint.com/sites/sg/daw/_api/lists/getByTitle('data@work')/items?$filter=Keywords eq 'bloomberg'
la respuesta de ambos es 404.Y usted dijo que este es un sitio local, entonces, ¿podría comprobar si se puede acceder a este sitio desde una red pública?
Supongo que cuando prueba su código localmente, puede acceder a este sitio ya que está en su red interna, que podrá acceder al sitio local. Sin embargo, cuando publica su código en Azure, ya no está en su trabajo interno: está en una red pública, por lo que no puede acceder a su sitio sharePoint premier que causó este error.
Como sabemos, el código de bot está alojado en el servicio de aplicaciones de Azure, si este error es causado por la razón anterior, tal vez la característica de Conexiones híbridas del Servicio de aplicaciones de Azure sea útil en este escenario.
fuente
¿ChatBot parece estar funcionando bien? está enviando y recibiendo mensajes. Hay un código que tiene que se comporta de manera diferente cuando se ejecuta localmente en lugar de hospedado. Hay Xml, ¿es un archivo o se genera? Debe comprobar que sigue la misma lógica y utiliza los mismos datos que cuando se ejecuta localmente. Tal vez si pega algo del código (no confidencial) donde se bloquea, podemos tener más ideas sobre cómo ayudar
fuente
Cuando publique su bot, habrá una opción como la siguiente:
Seleccione Editar configuración del servicio de aplicaciones. Agregue solo los siguientes detalles, nada más:
Haga clic en Aplicar, Ok.
Asegúrese de eliminar
Microsoft App Id
yMicrosoft App Password
de appsettings.json, para que también funcione en el emulador de bot.Ahora publique el bot. Funcionará en ambos lugares.
Espero que esto sea útil.
fuente