ChatBot не працював у веб-емуляторі, але добре працював у емуляторі Local Bot Framework


9

Я розробив ChatBot, який інтегрується з SharePoint On Premise. Коли я налагоджую ChatBot в емуляторі, він працює. Але коли я налагоджував веб-емулятор у Azure та веб-сайт, розміщений на веб-сайті компанії за допомогою DirectLine, це не працювало.

Хтось знає, як це вирішити?

При цьому мій скріншот. Ліва частина - від веб-емулятора, права - від локального емулятора Bot Framework

введіть тут опис зображення

Оновлення з вихідним кодом (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 року

Я намагався використовувати вбудовану та пряму лінію. Але Помилка все одно.

Bot не розміщується в SharePoint.

Оновлення 06 січня 2020 року. У Azure Bot Services не працює


Під веб-емулятором ви маєте на увазі функцію «Тест у веб-чаті»? Або це повний пакет / реалізація webchat . Чи розміщено це на сторінці SharePoint / веб-частині / spfx?
Дана V

@DanaV, так. Веб-емулятор знаходиться в веб-емуляторі Azure, а також використовує пряму лінію у веб-чаті на іншій веб-сторінці. Чат-бот не розміщується на сторінці SharePoint.
Eng Soon

Відповіді:


4

Виходячи з вашого опису, ви можете отримувати дані з нього локально. Це означає, що ваш код і логіка в порядку.

Я помітив, що ваша URL-адреса SharePoint така: 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 .


Виправте, отримайте дані з внутрішнього SharePoint. Чи слід публікувати ChatBot у внутрішній SharePoint?
Eng Soon

Привіт @EngSoonCheah, це базується на тому, хто буде використовувати цей бот, якщо він призначений лише для ваших користувачів внутрішньої мережі, теоретично ви можете опублікувати його в мережі, на якій розміщений ваш сайт SharePoint. Якщо зовнішнім користувачам потрібно отримати доступ до нього, вам слід опублікувати його на сервіс azure bot і використовуйте функцію гібридних з'єднань служби додатків Azure (послуга бота Azure заснована на службі додатків Azure) для підключення служби бот-додатків до вашого локального сайту. Я думаю, цей документ буде корисним: azuregems.io/azure-hybrid-connections
Стенлі Гонг

Привіт @EngSoonCheah, як справи? Чи вирішено ваше питання?
Стенлі Гонг

все ще пробують гібридні з'єднання Azure.
Eng Soon

@EngSoonCheah, Ах ... бачу. Удачі, якщо є якісь оновлення, будь ласка, повідомте мене:)
Стенлі Гонг

2

Здається, ChatBot працює нормально? це надсилання та отримання повідомлень. У вас є якийсь код, який поводиться по-різному, коли працює локально проти розміщеного. Там Xml, це файл чи генерується? Вам потрібно перевірити, чи він дотримується тієї самої логіки та використовує ті самі дані, що і при локальному запуску. Можливо, якщо ви вставите якийсь (не конфіденційний) код, де він виходить з ладу, ми можемо мати більше ідей, як допомогти


У мене було оновлення з вихідним кодом.
Eng Soon

Помилка починається з рядка 136 у DispatchBot.cs. Яка лінія? Необхідно , щоб побачити лінію 136 цього методу ProcessRSSAsync
Валід

У мене було оновлено вихідний код, LINE 136 від HttpWebResponse
Eng Soon

Добре. Здається, що на місцевому рівні ви можете отримати доступ до RSS-файлу Sharepoint RSS штрафом, але коли він розміщений, він не повертає той же xml, що означає, що він, швидше за все, повертає сторінку HTML-помилки. Я шукав свою помилку і знайшов це: forums.asp.net/t / ... Це говорить про те , що вам може знадобитися використовувати проксі - сервер, будь ласка , спробуйте приклад коду в цьому посиланню
Валід

Відображення помилок: System.PlatformNotSupportedException: Операція не підтримується на цій платформі.
Eng Soon

2

Коли ви публікуєте свого бота, з'явиться наступний варіант:

Зображення

Виберіть Редагувати параметри служби додатків. Додайте лише такі деталі, більше нічого:

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

Клацніть Застосувати, Гаразд.

Переконайтесь, що ви вилучили Microsoft App Idта Microsoft App Passwordз appsettings.json, щоб він працював і в емуляторі бота.

Тепер опублікуйте бота. Він працюватиме в обох місцях.

Сподіваюся, це корисно.


Я бачив лише попередній перегляд та налаштування, тому що завантажую вихідний код ChatBot з порталу Azure.
Eng Soon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.