Eu desenvolvi o ChatBot que se integra ao SharePoint On Premise. Quando depuro o ChatBot no emulador, ele funciona. Mas quando depuro no Emulador da Web no Azure e no site hospedado no site da empresa usando o DirectLine, ele não funcionou.
Alguém sabe como resolver isso?
Aqui está minha imagem. O lado esquerdo é do Emulador da Web, o lado direito é do emulador local do Framework de Bot
Atualização com o código-fonte (09 de dezembro 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);
Atualização 17 de dezembro de 2019
Eu tentei usar Embedded e Direct Line. Mas o erro ainda é o mesmo.
O Bot não está hospedado no SharePoint.
Atualização 06 de janeiro de 2020 Não funcionou nos Serviços de Bot do Azure
botframework
sharepoint-2013
azure-bot-service
direct-line-botframework
Eng Soon Cheah
fonte
fonte
Respostas:
Com base na sua descrição, você pode buscar dados localmente. Isso significa que seu código e lógica estão corretos.
Percebi que o URL do seu sharePoint é:
https://mvponduty.sharepoint.com/sites/sg/daw/
e tentei acessá-lo e também tentei acessar todo o URL de solicitação:https://mvponduty.sharepoint.com/sites/sg/daw/_api/lists/getByTitle('data@work')/items?$filter=Keywords eq 'bloomberg'
a resposta dos dois é 404.E você disse que este é um site no local, então você poderia verificar se esse site pode ser acessado a partir de uma rede pública?
Presumo que, ao testar seu código localmente, você pode acessar este site como em sua rede interna, que poderá acessar o site local. No entanto, quando você publica seu código no Azure, ele não está mais em seu trabalho interno: está em rede pública, de modo que não é possível acessar o site do sharePoint local que causou esse erro.
Como sabemos, o código bot está hospedado no serviço de aplicativo do Azure; se esse erro for causado pelo motivo acima, talvez o recurso Conexões Híbridas do Serviço de Aplicativo do Azure seja útil nesse cenário.
fonte
O ChatBot parece estar funcionando bem? está enviando e recebendo mensagens. Há algum código que você tem que se comporta de maneira diferente quando executado localmente versus hospedado. Existe um XML, é um arquivo ou é gerado? Você precisa verificar se está seguindo a mesma lógica e usando os mesmos dados de quando é executado localmente. Talvez, se você colar parte do código (não confidencial) onde ele falha, podemos ter mais idéias de como ajudar
fonte
Quando você publica seu bot, haverá uma opção como abaixo:
Selecione Editar configurações do serviço de aplicativo. Adicione apenas os seguintes detalhes, nada mais:
Clique em Aplicar, OK.
Certifique-se de remover o
Microsoft App Id
eMicrosoft App Password
do appsettings.json, para que ele também funcione no emulador de bot.Agora publique o bot. Ele funcionará nos dois lugares.
Espero que isso seja útil.
fonte