चैटबॉट वेब एमुलेटर में काम नहीं करता था, लेकिन लोकल बॉट फ्रेमवर्क एमुलेटर में अच्छा काम करता था


9

मैंने चैटबॉट विकसित किया जो SharePoint ऑन प्रिमाइस के साथ एकीकृत होता है। जब मैं एमुलेटर में चैटबॉट को डीबग करता हूं, तो यह काम करता है। लेकिन जब मैंने एज़्योर में वेब एमुलेटर पर डिबग किया और डायरेक्टलाइन का उपयोग करके कंपनी की वेबसाइट में होस्ट किया, तो यह काम नहीं किया।

क्या किसी को पता है कि इसे कैसे हल करना है?

मेरे स्क्रीनशॉट के साथ। लेफ्ट हैंड साइड वेब एमुलेटर से है, राइट हैंड साइड लोकल बॉट फ्रेमवर्क एमुलेटर से है

यहां छवि विवरण दर्ज करें

सोर्स कोड के साथ अपडेट (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 दिसंबर 2019

मैंने एंबेडेड और डायरेक्ट लाइन का उपयोग करने की कोशिश की थी। लेकिन त्रुटि अभी भी वही है।

SharePoint में बॉट होस्ट नहीं किया गया है।

अद्यतन 06 जनवरी 2020 इसकी एज़्योर बॉट सेवाओं में काम नहीं किया गया


वेब एमुलेटर से आपका मतलब वेब चैट फीचर में टेस्ट से है? या यह एक पूर्ण वेबचैट बंडल / कार्यान्वयन है। क्या इसे SharePoint पृष्ठ / वेबपार्ट / spfx में होस्ट किया जा रहा है?
दाना वी

@ डानावी, हाँ। वेब एम्यूलेटर एज़्योर वेब एमुलेटर में है और दूसरे वेबपेज में भी वेबचैट में डायरेक्टलाइन का उपयोग कर रहा है। चैटबॉट को SharePoint पृष्ठ पर होस्ट नहीं किया गया है।
जल्द ही छे

जवाबों:


4

आपके विवरण के आधार पर, आप इससे स्थानीय स्तर पर डेटा प्राप्त कर सकते हैं। इसका मतलब है कि आपका कोड और तर्क बिलकुल ठीक है।

मैंने देखा कि आपका शेयर डेटाबेस 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 हैं।

और आपने कहा कि यह एक ऑन-प्रिमाइसेस साइट है, तो क्या आप pls इस बात की जांच कर सकते हैं कि क्या इस साइट को किसी सार्वजनिक नेटवर्क से पहुँचा जा सकता है?

मुझे लगता है कि जब आप अपने कोड का स्थानीय स्तर पर परीक्षण करते हैं, तो आप इस साइट तक पहुंच सकते हैं क्योंकि आप अपने आंतरिक नेटवर्क में हैं, जो ऑन-प्रिमाइसेस साइट पर पहुंच सकेंगे। हालाँकि, जब आप अपने कोड को Azure में प्रकाशित करते हैं, तो यह आपके आंतरिक कार्य में नहीं होता है: यह सार्वजनिक नेटवर्क में है ताकि आपके ऑन-प्रिमाइसेस शेयरपॉइंट साइट तक नहीं पहुंच सके, जिससे यह त्रुटि हुई।

जैसा कि हम जानते हैं, बॉट कोड को एज़्योर ऐप सेवा पर होस्ट किया जाता है, यदि यह त्रुटि उपरोक्त कारण से होती है, तो शायद इस परिदृश्य में एज़्योर ऐप सर्विस हाइब्रिड कनेक्शंस सुविधा उपयोगी होगी।


सही, आंतरिक SharePoint से डेटा पुनर्प्राप्त करें। क्या मुझे आंतरिक SharePoint में चैटबॉट प्रकाशित करना चाहिए?
इंग सून चाई

हाय @EngSoon यह जो इस बॉट का उपयोग करेगा पर आधारित है, अगर यह केवल आपके आंतरिक नेटवर्क उपयोगकर्ताओं के लिए है, तो सैद्धांतिक रूप से, आप इसे नेटवर्क में अपनी SharePoint साइट में प्रकाशित कर सकते हैं। यदि बाहरी उपयोगकर्ताओं को इसे एक्सेस करने की आवश्यकता है, तो आपको इसे प्रकाशित करना चाहिए। azure bot सेवा, और अपने स्थानीय साइट पर अपने bot app सेवा को जोड़ने के लिए Azure ऐप सेवा (Azure bot सेवा Azure ऐप सेवा पर आधारित है) के हाइब्रिड कनेक्शन सुविधा का उपयोग करें। मुझे लगता है कि यह डॉक्टर सहायक होगा: azuregems.io/azure-hybrid-connections
स्टेनली गोंग

हाय @EngSoon, हाँ, कैसे हो रहा है? क्या आपकी समस्या हल हो गई है?
स्टेनली गोंग

अभी भी एज़्योर हाइब्रिड कनेक्शनों की कोशिश कर रहा है।
इंग सून ची ने

@EngSoonCh हाँ, आह ... मैं देख रहा हूँ। सौभाग्य, अगर कोई अपडेट है, तो pls मुझे बताएं
स्टेनली गोंग

2

ChatBot ठीक काम करने लगता है? यह संदेश भेज रहा है और प्राप्त कर रहा है। आपके पास कुछ कोड हैं जो स्थानीय रूप से होस्ट किए जाने पर अलग-अलग व्यवहार कर रहे हैं। Xml है, क्या यह एक फ़ाइल है या उत्पन्न हुई है? आपको यह जाँचने की आवश्यकता है कि यह उसी तर्क का अनुसरण कर रहा है और स्थानीय स्तर पर चलाए जाने पर उसी डेटा का उपयोग कर रहा है। हो सकता है कि यदि आप कुछ (गैर गोपनीय) कोड पेस्ट करते हैं, जहां यह दुर्घटनाग्रस्त हो जाता है, तो हम अधिक विचार कर सकते हैं कि कैसे मदद करें


मैंने सोर्स कोड के साथ अपडेट किया था।
इंग सून चाई

DispatchBot.cs में लाइन 136 पर त्रुटि शुरू होती है। कौन सी लाइन है? इस विधि की लाइन 136 को देखने की जरूरत है ProcessRSSAsync
waleed

मैंने HttpWebResponse से स्रोत कोड, लाइन 136 को अपडेट किया था
Eng सून चाह

ठीक है। ऐसा लगता है कि स्थानीय रूप से आप शेयरपॉइंट RSS को एक्सेस कर सकते हैं, लेकिन जब होस्ट किया जाता है तो यह वही xml नहीं लौटाता है, जिसका अर्थ है कि यह HTML त्रुटि पृष्ठ पर लौटने की संभावना है। मैंने आपकी त्रुटि को खोजा और यह पाया: फ़ोरम .asp.net / t/… इससे पता चलता है कि आपको प्रॉक्सी का उपयोग करने की आवश्यकता हो सकती है, कृपया उस लिंक में कोड सैंपल आज़माएं
waleed

त्रुटि प्रदर्शन: System.PlatformNotSupportedException: ऑपरेशन इस प्लेटफ़ॉर्म पर समर्थित नहीं है।
इंग सून चाई

2

जब आप अपना बॉट प्रकाशित करते हैं, तो नीचे एक विकल्प होगा:

छवि

संपादन ऐप सेवा सेटिंग्स का चयन करें। केवल निम्नलिखित विवरण जोड़ें, और कुछ नहीं:

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

क्लिक करें, लागू करें, ठीक है।

सुनिश्चित करें कि आप appsettings.json से Microsoft App Idऔर हटा दें Microsoft App Password, ताकि यह बॉट एमुलेटर में भी काम करे।

अब बॉट प्रकाशित करें। यह दोनों जगहों पर काम करेगा।

आशा है कि यह उपयोगी है।


मैंने केवल पूर्वावलोकन और कॉन्फ़िगर देखा था क्योंकि मैं Azure पोर्टल से चैटबोट स्रोत कोड डाउनलोड करता हूं।
इंग सून ची च डिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.