ChatBot ไม่ทำงานใน Web Emulator แต่ทำงานได้ดีใน Local Bot Framework emulator


9

ฉันพัฒนา ChatBot ที่ทำงานร่วมกับ SharePoint On Premise เมื่อฉันดีบัก ChatBot เป็นอีมูเลเตอร์มันก็ใช้ได้ แต่เมื่อฉันดีบัก Web Emulator ใน Azure และเว็บไซต์ที่โฮสต์ในเว็บไซต์ บริษัท โดยใช้ DirectLine มันไม่ทำงาน

ไม่มีใครรู้วิธีการแก้ปัญหาหรือไม่

พร้อมกับภาพหน้าจอของฉัน ด้านซ้ายมือมาจาก Web Emulator ด้านขวามือมาจาก Bot Framework Emulator

ป้อนคำอธิบายรูปภาพที่นี่

อัปเดตด้วยซอร์สโค้ด (09 ธันวาคม 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);

อัปเดต 17 ธันวาคม 2562

ฉันลองใช้ Embedded และ Direct Line แต่ข้อผิดพลาดยังคงเหมือนเดิม

Bot ไม่ได้โฮสต์ใน SharePoint

อัปเดต 06 มกราคม 2020 มันไม่ทำงานใน Azure Bot Services


โดยโปรแกรมจำลองเว็บคุณหมายถึงฟีเจอร์ทดสอบในเว็บแชท หรือมันเป็นชุดwebchat เต็ม / การใช้งาน สิ่งนี้ถูกโฮสต์ในหน้า SharePoint / webpart / spfx หรือไม่
Dana V

@DanaV ใช่ web emulator อยู่ใน Azure Web emulator และใช้ directline ใน webchat ในเว็บเพจอื่น chatbot ไม่ได้โฮสต์ที่หน้า SharePoint
Eng เร็ว ๆ นี้ Cheah

คำตอบ:


4

จากคำอธิบายของคุณคุณสามารถดึงข้อมูลจากภายในเครื่องได้ ซึ่งหมายความว่ารหัสและตรรกะของคุณถูกต้อง

ฉันสังเกตเห็นว่า sharepoint URL ของคุณคือ: https://mvponduty.sharepoint.com/sites/sg/daw/และฉันพยายามเข้าถึงและพยายามเข้าถึง URL คำขอทั้งหมดของคุณ: https://mvponduty.sharepoint.com/sites/sg/daw/_api/lists/getByTitle('data@work')/items?$filter=Keywords eq 'bloomberg'การตอบสนองของทั้งสองมีทั้งหมด 404

และคุณบอกว่านี่เป็นไซต์ธรรมดาคุณสามารถตรวจสอบได้ไหมว่าเว็บไซต์นี้สามารถเข้าถึงได้จากเครือข่ายสาธารณะหรือไม่

ฉันคิดว่าเมื่อคุณทดสอบรหัสของคุณในพื้นที่คุณสามารถเข้าถึงเว็บไซต์นี้ได้เช่นเดียวกับที่คุณอยู่ในเครือข่ายภายในซึ่งจะสามารถเข้าถึงเว็บไซต์ได้ อย่างไรก็ตามเมื่อคุณเผยแพร่รหัสของคุณไปยัง Azure จะไม่อยู่ในงานภายในของคุณอีกต่อไป: อยู่ในเครือข่ายสาธารณะดังนั้นจึงไม่สามารถเข้าถึงไซต์ sharepoint ในสถานที่ของคุณซึ่งทำให้เกิดข้อผิดพลาดนี้

ดังที่เราทราบรหัสบอทถูกโฮสต์ในบริการแอป Azure หากข้อผิดพลาดนี้เกิดจากสาเหตุข้างต้นคุณลักษณะการเชื่อมต่อไฮบริดของบริการ Azure App Service Hybridอาจมีประโยชน์ในสถานการณ์นี้


แก้ไขดึงข้อมูลจาก SharePoint ภายใน ฉันควรเผยแพร่ ChatBot ใน SharePoint ภายในหรือไม่
เร็ว ๆ นี้เอง Cheah

สวัสดี @EngSoonCheah มันขึ้นอยู่กับว่าใครจะใช้บอตนี้หากเป็นเพียงสำหรับผู้ใช้เครือข่ายภายในของคุณในทางทฤษฎีคุณสามารถเผยแพร่ในเครือข่ายไซต์ SharePoint ของคุณหากผู้ใช้ภายนอกจำเป็นต้องเข้าถึงคุณควรเผยแพร่มันเพื่อ บริการบอต azure และใช้คุณลักษณะการเชื่อมต่อแบบไฮบริดของบริการแอป Azure (บริการบอต Azure ขึ้นอยู่กับบริการแอป Azure) เพื่อเชื่อมต่อบริการแอพ bot ของคุณไปยังเว็บไซต์ท้องถิ่นของคุณ ฉันคิดว่าเอกสารนี้จะเป็นประโยชน์: azuregems.io/azure-hybrid-connections
Stanley Gong

สวัสดี @EngSoonCheah เป็นไงบ้าง ปัญหาของคุณได้รับการแก้ไขแล้วหรือยัง?
สแตนลีย์กง

ยังคงพยายามเชื่อมต่อ Azure Hybrid
Eng เร็ว ๆ นี้ Cheah

@EngSoonCheah อ่า ... ฉันเข้าใจแล้ว ขอให้โชคดีถ้ามีการปรับปรุงใด ๆ โปรดแจ้งให้เราทราบ
Stanley Gong

2

ChatBot ดูเหมือนว่าจะทำงานได้ดี? มันกำลังส่งและรับข้อความ มีรหัสบางอย่างที่คุณมีซึ่งทำงานแตกต่างกันเมื่อทำงานในพื้นที่กับโฮสต์ มี Xml เป็นไฟล์หรือสร้างหรือไม่ คุณต้องตรวจสอบว่ามันเป็นไปตามตรรกะเดียวกันและใช้ข้อมูลเดียวกันกับเมื่อมันถูกเรียกใช้ในเครื่อง บางทีหากคุณวางรหัส (ไม่เป็นความลับ) บางส่วนที่เกิดปัญหาเราอาจมีแนวคิดเพิ่มเติมเกี่ยวกับวิธีการช่วยเหลือ


ฉันได้รับการอัปเดตด้วยซอร์สโค้ด
เร็ว ๆ นี้เอง Cheah

ข้อผิดพลาดเริ่มต้นที่บรรทัดที่ 136 ใน DispatchBot.cs สายไหน จำเป็นต้องดูบรรทัดที่ 136 ของวิธีนี้ ProcessRSSAsync
waleed

ฉันได้อัปเดตซอร์สโค้ด LINE 136 จาก HttpWebResponse แล้ว
Eng Soon Cheah

ตกลง. ดูเหมือนว่าในเครื่องของคุณคุณสามารถเข้าถึง sharepoint RSS ได้ แต่เมื่อโฮสต์มันไม่ได้ส่งคืน xml เดียวกันซึ่งหมายความว่าเป็นไปได้มากว่าการส่งคืนหน้าข้อผิดพลาด HTML ฉันค้นหาข้อผิดพลาดของคุณและพบสิ่งนี้: forums.asp.net/t/… มันแสดงให้เห็นว่าคุณอาจจำเป็นต้องใช้พร็อกซีโปรดลองตัวอย่างโค้ดในลิงค์นั้น
waleed

การแสดงข้อผิดพลาด: System.PlatformNotSupportedException: แพลตฟอร์มนี้ไม่รองรับการทำงาน
เร็ว ๆ นี้เอง Cheah

2

เมื่อคุณเผยแพร่บอทของคุณจะมีตัวเลือกดังต่อไปนี้:

ภาพ

เลือกแก้ไขการตั้งค่าบริการแอพ เพิ่มรายละเอียดต่อไปนี้เท่านั้นไม่มีอะไรอื่น:

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

คลิกใช้, ตกลง

ตรวจสอบให้แน่ใจว่าคุณได้ลบMicrosoft App IdและMicrosoft App Passwordออกจาก appsettings.json เพื่อให้ทำงานในโปรแกรมจำลองบอทได้เช่นกัน

ตอนนี้เผยแพร่บอท มันจะทำงานได้ทั้งสองที่

หวังว่านี่จะเป็นประโยชน์


ฉันเห็นตัวอย่างและกำหนดค่าเพราะฉันดาวน์โหลดซอร์สโค้ด ChatBot จาก Azure Portal เท่านั้น
Eng เร็ว ๆ นี้ Cheah
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.