O ChatBot não funcionou no emulador da Web, mas funcionou bem no emulador do Local Bot Framework


9

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

insira a descrição da imagem aqui

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("engsooncheah@mvponduty.onmicrosoft.com", "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


Por emulador da web, você quer dizer o recurso Testar no bate-papo na web? Ou é um pacote / implementação de webchat completo . Isso está sendo hospedado em uma página do SharePoint / webpart / spfx?
Dana V

@DanaV, sim. O emulador da Web está no emulador da Web do Azure e também usando a linha direta no bate-papo na Web em outra página da Web. O chatbot não está hospedado na página do SharePoint.
Eng Soon Cheah

Respostas:


4

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.


Corrija, recupere dados do SharePoint interno. Devo publicar o ChatBot no SharePoint interno?
Eng Soon Cheah

Olá, @EngSoonCheah, ele se baseia em quem usará esse bot; se for apenas para os usuários internos da rede, teoricamente, você poderá publicá-lo na rede em que está o site do SharePoint. Se usuários externos precisarem acessá-lo, publique-o em serviço de bot azul e use o recurso de conexões híbridas do serviço de aplicativo do Azure (o serviço de bot do Azure é baseado no serviço de aplicativo do Azure) para conectar seu serviço de aplicativo de bot ao site local. Eu acho que este documento será útil: azuregems.io/azure-hybrid-connections #
Stanley Gong

Oi @EngSoonCheah, como vai? O seu problema foi resolvido?
Stanley Gong

ainda está tentando as conexões híbridas do Azure.
Eng Soon Cheah

@EngSoonCheah, Ah ... entendo. Boa sorte, se houver alguma atualização, por favor, avise-me :)
Stanley Gong

2

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


Eu tive atualização com o código fonte.
Eng Soon Cheah

O erro inicia na linha 136 no DispatchBot.cs. Qual linha é essa? precisa ver a linha 136 deste método ProcessRSSAsync
waleed 09/12/19

Eu atualizei o código fonte, o LINE 136 do HttpWebResponse
Eng Soon Cheah

Está bem. Parece que localmente você pode acessar o RSS do sharepoint, mas quando hospedado, ele não está retornando o mesmo xml, o que significa que provavelmente está retornando uma página de erro em HTML. Eu pesquisei o seu erro e encontrei o seguinte: forums.asp.net/t/… Sugere que você pode precisar usar o Proxy, tente o exemplo de código nesse link
waleed

A exibição do erro: System.PlatformNotSupportedException: operação não é suportada nesta plataforma.
Eng Soon Cheah

2

Quando você publica seu bot, haverá uma opção como abaixo:

Imagem

Selecione Editar configurações do serviço de aplicativo. Adicione apenas os seguintes detalhes, nada mais:

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

Clique em Aplicar, OK.

Certifique-se de remover o Microsoft App Ide Microsoft App Passworddo 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.


Eu só tinha visto o Preview and Configure porque baixei o código-fonte do ChatBot no Portal do Azure.
Eng Soon Cheah
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.