ChatBot은 웹 에뮬레이터에서는 작동하지 않지만 Local Bot Framework 에뮬레이터에서는 잘 작동합니다.


9

SharePoint On Premise와 통합되는 ChatBot을 개발했습니다. 에뮬레이터에서 ChatBot을 디버깅하면 작동합니다. 그러나 DirectLine을 사용하여 Azure의 웹 에뮬레이터 및 회사 웹 사이트에서 호스팅되는 웹 사이트에서 디버깅하면 작동하지 않습니다.

누구든지 그것을 해결하는 방법을 알고 있습니까?

내 스크린 샷과 함께. 왼쪽은 웹 에뮬레이터에서, 오른쪽은 로컬 Bot Framework 에뮬레이터에서입니다.

여기에 이미지 설명을 입력하십시오

소스 코드로 업데이트 (2019 년 12 월 9 일)

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);

2019 년 12 월 17 일 업데이트

Embedded 및 Direct Line을 사용해 보았습니다. 그러나 오류는 여전히 동일합니다.

봇은 SharePoint에서 호스팅되지 않습니다.

2020 년 1 월 6 일 업데이트 : Azure Bot Services에서 작동하지 않습니다.


웹 에뮬레이터 란 웹 채팅 테스트 기능을 의미합니까? 또는 전체 웹 채팅 번들 / 구현 입니까 ? 이것이 SharePoint 페이지 / 웹 파트 / spfx에서 호스팅되고 있습니까?
Dana V

@DanaV입니다. 웹 에뮬레이터는 Azure 웹 에뮬레이터에 있으며 다른 웹 페이지의 webchat에서 directline을 사용합니다. 챗봇은 SharePoint 페이지에서 호스팅되지 않습니다.
Eng Soon Cheah

답변:


4

설명에 따라 로컬에서 데이터를 가져올 수 있습니다. 이것은 당신의 코드와 논리가 괜찮다는 것을 의미합니다.

귀하의 sharePoint URL이 다음 https://mvponduty.sharepoint.com/sites/sg/daw/과 같은 것으로 나타났습니다. URL 에 액세스하려고 시도했으며 전체 요청 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에서 데이터를 검색하십시오. 내부 SharePoint에 ChatBot을 게시해야합니까?
Eng Soon Cheah

안녕하세요 @EngSoonCheah이 봇을 사용할 사람을 기준으로합니다. 내부 봇 사용자 만 해당하는 경우 이론적으로는 네트워크에 SharePoint 사이트를 게시 할 수 있습니다. 외부 사용자가 액세스해야하는 경우이를 게시해야합니다. Azure 봇 서비스를 사용하고 Azure 앱 서비스 (Azure 봇 서비스는 Azure 앱 서비스를 기반으로 함)의 하이브리드 연결 기능을 사용하여 봇 앱 서비스를 로컬 사이트에 연결합니다. 나는이 문서가 도움이 될 것이라고 생각 : azuregems.io/azure-hybrid-connections
스탠리 공

안녕하세요 @EngSoonCheah, 어떻게가요? 문제가 해결 되었습니까?
Stanley Gong

여전히 Azure 하이브리드 연결을 시도하고 있습니다.
Eng Soon Cheah

@EngSoonCheah, 아 ... 알겠습니다. 행운을 빌어 요, 업데이트가 있으면 알려주세요.)
Stanley Gong

2

ChatBot이 제대로 작동하는 것 같습니다. 메시지를주고받습니다. 로컬과 호스트를 실행할 때 다르게 동작하는 코드가 있습니다. Xml이 있습니다. 파일입니까, 아니면 생성 되었습니까? 로컬에서 실행될 때와 동일한 논리를 따르고 동일한 데이터를 사용하고 있는지 확인해야합니다. 충돌이 발생한 부분에 기밀이 아닌 코드를 붙여 넣으면 도움이되는 방법에 대한 더 많은 아이디어를 얻을 수 있습니다.


소스 코드로 업데이트했습니다.
Eng Soon Cheah

DispatchBot.cs의 136 행에서 오류가 시작됩니다. 어느 라인입니까? 이 메소드의 136 행을 볼 필요가 있습니다 ProcessRSSAsync
waleed

소스 코드 인 HttpWebResponse의 LINE 136을 업데이트했습니다.
Eng Soon Cheah

확인. 로컬에서 Sharepoint RSS에 액세스 할 수있는 것처럼 보이지만 호스팅 할 때 동일한 xml을 반환하지 않으므로 HTML 오류 페이지가 반환 될 가능성이 높습니다. 나는 당신의 오류를 검색하고 이걸 발견 : forums.asp.net/t/... 그것은 당신이 프록시를 사용해야 할 수도 있음을 시사 링크에서 코드 샘플을 시도하십시오
왈 리드

오류 표시 : System.PlatformNotSupportedException :이 플랫폼에서 작업이 지원되지 않습니다.
Eng Soon Cheah

2

봇을 게시하면 다음과 같은 옵션이 있습니다.

영상

앱 서비스 설정 편집을 선택하십시오. 다음 세부 정보 만 추가하십시오.

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

적용, 확인을 클릭하십시오.

를 제거 Microsoft App Id하고Microsoft App Password 이 아니라 봇 에뮬레이터에서 작동 그래서, appsettings.json에서합니다.

이제 봇을 게시하십시오. 두 곳에서 모두 작동합니다.

이것이 도움이 되길 바랍니다.


Azure Portal에서 ChatBot 소스 코드를 다운로드했기 때문에 미리보기 및 구성 만 보았습니다.
Eng Soon Cheah
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.