ChatBot, Web Emulator'da çalışmadı, ancak Local Bot Framework emulator'da iyi çalıştı


9

SharePoint On Premise ile bütünleşen ChatBot'u geliştirdim. ChatBot öykünücüsünde hata ayıkladığımda işe yarıyor. Ancak DirectLine kullanarak Azure'da Web Emulator ve Şirket Web Sitesinde Barındırılan Web Sitesinde hata ayıkladığımda işe yaramadı.

Bunu nasıl çözeceğini bilen var mı?

Bu vesileyle ekran görüntüm. Sol taraf Web Emulator'dan, sağ taraf yerel Bot Framework Emulator'dan

resim açıklamasını buraya girin

Kaynak Koduyla Güncelleme (09 Aralık 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);

Güncelleme 17 Aralık 2019

Gömülü ve Direct Line'ı kullanmayı denemiştim. Ama Hata hala aynı.

Bot, SharePoint'te barındırılmıyor.

Güncelleme 06 Ocak 2020 Azure Bot Hizmetlerinde çalışmadı


Web öykünücüsü ile Web Sohbeti'nde Test Etme özelliğini mi kastediyorsunuz? Yoksa tam bir webchat paketi / uygulaması mı. Bu bir SharePoint sayfasında / webpart / spfx'te mi barındırılıyor?
Dana V

@DanaV, evet. Web öykünücüsü Azure Web öykünücüsünde ve ayrıca başka bir web sayfasındaki web sohbetinde directline kullanıyor. Sohbet botu SharePoint sayfasında barındırılmıyor.
Eng Soon Cheah

Yanıtlar:


4

Açıklamanıza dayanarak, yerel olarak veri alabilirsiniz. Bu, kodunuzun ve mantığınızın iyi olduğu anlamına gelir.

SharePoint URL'nizin olduğunu fark ettim: https://mvponduty.sharepoint.com/sites/sg/daw/ve buna erişmeye çalıştım ve ayrıca tüm istek URL'nize erişmeye çalıştım: https://mvponduty.sharepoint.com/sites/sg/daw/_api/lists/getByTitle('data@work')/items?$filter=Keywords eq 'bloomberg'ikisinin yanıtı 404'tür.

Ve bunun şirket içi bir site olduğunu söylediniz, bu yüzden bu siteye halka açık bir ağdan erişilebildiğini kontrol edebilir misiniz?

Kodunuzu yerel olarak test ettiğinizde, şirket içi siteye erişebilecek olan dahili ağınızdaki gibi bu siteye erişebileceğinizi varsayıyorum. Ancak, kodunuzu Azure'da yayınladığınızda, artık dahili çalışmanızda değildir: bu hatayı oluşturan şirket içi SharePoint sitenize erişememesi için genel ağdadır.

Bildiğimiz gibi bot kodu Azure uygulama hizmetinde barındırılıyor, eğer bu hata yukarıdaki nedenden kaynaklanıyorsa, belki de Azure Uygulama Hizmeti Karma Bağlantılar özelliği bu senaryoda yardımcı olacaktır.


Doğru, Dahili SharePoint'ten veri alın. ChatBot'u Dahili SharePoint'te yayınlamalıyım?
Yakında Cheah

Merhaba @EngSoonCheah bu botu kimlerin kullanacağına dayanıyor, eğer sadece dahili ağ kullanıcılarınız için ise, teorik olarak, SharePoint sitenizin ağında yayınlayabilirsiniz. Harici kullanıcıların erişmesi gerekiyorsa, bot uygulama hizmetinizi yerel sitenize bağlamak için Azure uygulama hizmetinin (Azure bot hizmeti Azure uygulama hizmetine dayanır) karma bağlantılar özelliğini kullanın. Bu dokümanın yardımcı olacağını düşünüyorum: azuregems.io/azure-hybrid-connections
Stanley Gong

Merhaba @EngSoonCheah, nasıl gidiyor? Sorununuz çözüldü mü?
Stanley Gong

hala Azure Hibrit Bağlantılarını deniyor.
Eng Soon Cheah

@EngSoonCheah, Ah ... Anlıyorum. İyi şanslar, herhangi bir güncelleme varsa, lütfen bana bildirin
Stanley Gong

2

ChatBot iyi çalışıyor gibi görünüyor? mesaj gönderiyor ve alıyor. Barındırılana karşı yerel olarak çalıştırıldığında farklı davranan bazı kodlar var. Xml var, bir dosya mı yoksa üretilen mi? Aynı mantığa uyup uymadığını ve yerel olarak çalıştırıldığı zamanki verileri kullandığını kontrol etmeniz gerekir. Belki (gizli olmayan) kodlardan bazılarını çöktüğü yere yapıştırırsanız, nasıl yardımcı olacağımız konusunda daha fazla fikrimiz olabilir


Kaynak Kod ile güncelleme yaptım.
Eng Soon Cheah

DispatchBot.cs dosyasında 136 numaralı satırda hata başlar. Hangi çizgi? bu yöntemin 136. satırını görmek gerekir ProcessRSSAsync
waleed

Kaynak kodunu güncelledim, HttpWebResponse'den LINE 136
Eng Soon Cheah

Tamam. Yerel olarak sharepoint RSS para cezasına erişebilirsiniz, ancak barındırıldığında aynı xml döndürmüyor, bu da büyük olasılıkla bir HTML hata sayfası döndürdüğü anlamına geliyor. Hatanızı aradım ve buldum: forums.asp.net/t/… Proxy'yi kullanmanız gerekebileceğini gösteriyor, lütfen bu bağlantıdaki kod örneğini deneyin
waleed

Hata ekranı: System.PlatformNotSupportedException: Bu platformda işlem desteklenmiyor.
Eng Soon Cheah

2

Botunuzu yayınladığınızda, aşağıdaki gibi bir seçenek olacaktır:

görüntü

Uygulama Hizmeti Ayarlarını Düzenle'yi seçin. Yalnızca aşağıdaki ayrıntıları ekleyin, başka bir şey eklemeyin:

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

Uygula, Tamam'a tıklayın.

Bot öykünücüsünde de çalışacak şekilde appsettings.json öğesinden Microsoft App Idve kaldırdığından emin olun Microsoft App Password.

Şimdi botu yayınla. Her iki yerde de çalışacaktır.

Umarım bu yardımcı olur.


Azure Portal'dan ChatBot Kaynak Kodunu indirdiğim için yalnızca Önizleme ve Yapılandırmayı gördüm.
Eng Soon Cheah
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.