ChatBotはWebエミュレーターでは機能しませんでしたが、ローカルボットフレームワークエミュレーターでは適切に機能しました


9

SharePoint On Premiseと統合するChatBotを開発しました。チャットボットをエミュレータでデバッグすると、動作します。しかし、DirectLineを使用してAzureのWebエミュレーターと企業のWebサイトでホストされているWebサイトでデバッグすると、機能しませんでした。

誰かがそれを解決する方法を知っていますか?

これで私のスクリーンショット。左側はWebエミュレーターから、右側はローカルボットフレームワークエミュレーターから

ここに画像の説明を入力してください

ソースコードで更新(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では機能しませんでした


Webエミュレータとは、Test in Web Chat機能を意味しますか?それとも完全なWebchatバンドル/実装ですか?これはSharePointページ/ webpart / spfxでホストされていますか?
Dana V

@DanaV、はい。WebエミュレーターはAzure Webエミュレーターにあり、別のWebページのWebチャットでdirectlineも使用しています。チャットボットはSharePointページでホストされていません。
Eng Soon 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'2つの応答はすべて404です。

そして、あなたはこれがオンプレミスのサイトだと言ったので、このサイトがパブリックネットワークから到達できるかどうかを確認してもらえますか?

コードをローカルでテストすると、オンプレミスサイトにアクセスできる内部ネットワークにいるので、このサイトにアクセスできると思います。ただし、Azureにコードを公開すると、内部の作業ではなくなります。これはパブリックネットワークにあるため、このエラーの原因となったオンプレミスのSharePointサイトにアクセスできません。

ご存知のように、ボットコードはAzureアプリサービスでホストされています。このエラーが上記の理由で発生した場合、Azure App Serviceハイブリッド接続機能がこのシナリオで役立つ可能性があります。


修正、内部SharePointからデータを取得します。ChatBotを内部SharePointで公開する必要がありますか?
Eng Soon Cheah

こんにちは@EngSoonCheahこれは、このボットを使用するユーザーに基づいています。それが内部ネットワークユーザーのみを対象としている場合は、理論的には、SharePointサイトのネットワークで公開できます。外部ユーザーがアクセスする必要がある場合は、 Azureボットサービス、およびAzureアプリサービスのハイブリッド接続機能を使用して(AzureボットサービスはAzureアプリサービスに基づいています)、ボットアプリサービスをローカルサイトに接続します。このドキュメントは役に立つと思います:azuregems.io/azure-hybrid-connections
Stanley Gong

こんにちは@EngSoonCheah、元気ですか?問題は解決しましたか?
スタンリーゴン、

まだAzureハイブリッド接続を試しています。
Eng Soon Cheah

@EngSoonCheah、ああ...なるほど。幸運、更新がある場合はお知らせください:)
Stanley Gong

2

ChatBotは正常に動作しているようですか?メッセージを送受信しています。ローカルで実行された場合とホストされた場合で動作が異なるコードがいくつかあります。Xmlがあります。それはファイルですか、それとも生成されますか?ローカルで実行する場合と同じロジックに従い、同じデータを使用していることを確認する必要があります。おそらく、(機密ではない)コードの一部を貼り付けると、クラッシュする可能性があるため、さらに多くのアイデアを得ることができます


ソースコードを更新しました。
Eng Soon Cheah

エラーはDispatchBot.csの136行目から始まります。どっち?このメソッドの136行目を確認する必要がありますProcessRSSAsync
ウェールズ

ソースコードを更新しました。HttpWebResponseのLINE 136
Eng Soon Cheah

OK。ローカルでシェアポイントRSSにアクセスできるようですが、ホストされている場合は同じxmlを返さないため、HTMLエラーページが返される可能性が高くなります。私はあなたのエラーを検索し、これを見つけました: forums.asp.net/t/… プロキシを使用する必要があるかもしれないことを示唆しています。そのリンクのコードサンプルを試してください
更新

エラー表示:System.PlatformNotSupportedException:このプラットフォームでは操作はサポートされていません。
Eng Soon Cheah

2

ボットを公開すると、次のようなオプションが表示されます。

画像

[App Service設定の編集]を選択します。次の詳細のみを追加し、それ以外は何も追加しません。

MicrosoftAppId : <xxxxx>
MicrosoftAppPassword : <xxxxx>

[OK]をクリックします。

必ず削除してください Microsoft App IdMicrosoft App Passwordをappsettings.jsonから、ボットエミュレータでも機能するようにしてください。

次にボットを公開します。両方の場所で機能します。

これがお役に立てば幸いです。


ChatBotソースコードをAzure Portalからダウンロードしたので、プレビューと構成を見ただけです。
Eng Soon Cheah
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.