ChatBot non funzionava nell'emulatore Web ma funzionava bene nell'emulatore Local Bot Framework


9

Ho sviluppato il ChatBot che si integra con SharePoint On Premise. Quando eseguo il debug di ChatBot nell'emulatore, funziona. Ma quando eseguo il debug sull'emulatore Web in Azure e sul sito Web ospitato nel sito Web dell'azienda usando DirectLine, non funziona.

Qualcuno sa come risolverlo?

Con la mia schermata. Il lato sinistro proviene dall'emulatore Web, il lato destro dall'emulatore Bot Framework locale

inserisci qui la descrizione dell'immagine

Aggiornamento con codice sorgente (09 dicembre 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);

Aggiornamento 17 dicembre 2019

Ho provato a usare Embedded e Direct Line. Ma l'errore è sempre lo stesso.

Il Bot non è ospitato in SharePoint.

Aggiornamento 06 gennaio 2020 Non funzionava in Azure Bot Services


Per emulatore web, intendi la funzione Test nella chat Web? O è un pacchetto / implementazione webchat completo . È ospitato in una pagina / webpart / spfx di SharePoint?
Dana V

@DanaV, sì. L'emulatore Web si trova nell'emulatore Web di Azure e usa anche directline nella webchat in un'altra pagina Web. Il chatbot non è ospitato nella pagina di SharePoint.
Eng Soon Cheah

Risposte:


4

Sulla base della tua descrizione, puoi recuperare i dati da esso localmente. Questo significa che il tuo codice e la tua logica vanno bene.

Ho notato che il tuo URL sharePoint è: https://mvponduty.sharepoint.com/sites/sg/daw/e ho provato ad accedervi, e ho anche provato ad accedere al tuo intero URL di richiesta: https://mvponduty.sharepoint.com/sites/sg/daw/_api/lists/getByTitle('data@work')/items?$filter=Keywords eq 'bloomberg'la risposta dei due è tutta 404.

E hai detto che si tratta di un sito on-prem, quindi potresti controllare che questo sito sia raggiungibile da una rete pubblica?

Suppongo che quando testerai il tuo codice localmente, puoi accedere a questo sito come sei nella tua rete interna che sarà in grado di accedere al sito on-prem. Tuttavia, quando pubblichi il tuo codice in Azure, non è più nel tuo lavoro interno: è nella rete pubblica, quindi non può accedere al tuo sito sharePoint on-prem che ha causato questo errore.

Come sappiamo, il codice bot è ospitato nel servizio app di Azure, se questo errore è causato dal motivo precedente, forse la funzionalità Connessioni ibride del servizio app di Azure sarà utile in questo scenario.


Corretto, recuperare i dati da SharePoint interno. Devo pubblicare ChatBot in SharePoint interno?
Eng Soon Cheah,

Ciao @EngSoonCheah si basa su chi utilizzerà questo bot, se è solo per gli utenti della tua rete interna, teoricamente, puoi pubblicarlo nella rete in cui si trova il tuo sito di SharePoint. Se gli utenti esterni devono accedervi, dovresti pubblicarlo su servizio bot azzurro e usa la funzionalità di connessioni ibride del servizio app di Azure (il servizio bot di Azure si basa sul servizio app di Azure) per connettere il servizio app bot al sito locale. Penso che questo documento sarà utile: azuregems.io/azure-hybrid-connections
Stanley Gong,

Ciao @EngSoonCheah, come va? Il tuo problema è stato risolto?
Stanley Gong,

sto ancora provando le connessioni ibride di Azure.
Eng Soon Cheah,

@EngSoonCheah, Ah ... capisco. Buona fortuna, se ci sono aggiornamenti, per favore fatemi sapere
:)

2

ChatBot sembra funzionare bene? sta inviando e ricevendo messaggi. C'è del codice che si sta comportando diversamente quando eseguito localmente rispetto a quello ospitato. C'è Xml, è un file o generato? È necessario verificare che stia seguendo la stessa logica e utilizzando gli stessi dati di quando viene eseguito localmente. Forse se incolli un po 'del codice (non riservato) in cui si blocca, possiamo avere più idee su come aiutare


Ho avuto l'aggiornamento con il codice sorgente.
Eng Soon Cheah

L'errore inizia alla riga 136 in DispatchBot.cs. Che linea è? è necessario vedere la riga 136 di questo metodo ProcessRSSAsync
waleed

Avevo aggiornato il codice sorgente, la LINEA 136 da HttpWebResponse
Eng Soon Cheah

Ok. Sembra localmente che puoi accedere bene allo sharepoint RSS, ma quando è ospitato non restituisce lo stesso xml, il che significa che molto probabilmente restituisce una pagina di errore HTML. Ho cercato il tuo errore e ho trovato questo: forums.asp.net/t/… Suggerisce che potresti aver bisogno di usare Proxy, per favore prova l'esempio di codice in quel link
waleed

Viene visualizzato l'errore: System.PlatformNotSupportedException: l'operazione non è supportata su questa piattaforma.
Eng Soon Cheah

2

Quando pubblichi il tuo bot, ci sarà un'opzione come di seguito:

Immagine

Seleziona Modifica impostazioni servizio app. Aggiungi solo i seguenti dettagli, nient'altro:

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

Fai clic su Applica, Ok.

Assicurati di rimuovere Microsoft App Ide Microsoft App Passwordda appsettings.json, in modo che funzioni anche nell'emulatore bot.

Ora pubblica il bot. Funzionerà in entrambi i posti.

Spero sia utile.


Ho visto l'anteprima e la configurazione solo perché scarico il codice sorgente di ChatBot dal portale di Azure.
Eng Soon Cheah
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.