如何将基本HTML文件部署到Azure Bot功能应用程序的根目录?

时间:2017-03-30 13:55:07

标签: .net botframework azure-functions azure-bot-service

我从LUIS模板在Azure中创建了一个Bot App Service,并配置了持续集成。 Bot服务是一个功能应用程序,可以在本地和Azure的Web窗口中以及dev.botframework.com上运行。

我的目标是将基本HTML页面部署到我的应用服务的根目录BOT_NAME.azurewebsites.net

当前尝试解决:

我已经配置了Web Chat,并且有一个I-Frame:

<iframe src='https://webchat.botframework.com/embed/<BOT_NAME>?s=<SECRET>'></iframe>

我尝试使用以下内容修改run.csx文件:

var response = req.CreateResponse(HttpStatusCode.OK);
var stream = new FileStream(@"index.html", FileMode.Open);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return req.CreateResponse(HttpStatusCode.Accepted);

这会在index.html正确显示localhost:3979/api/messages。部署到Azure后,我尝试将index.html完全限定为d:\home\site\wwwroot\index.html,但<BOT_NAME>.azurewebsites.com/api/messages会返回以下内容:

The HTTP 'GET' method is not supported by the 'GenericJsonWebHookReceiver' WebHook receiver

我创建了一个新的功能应用程序( not bot app),以便启动基本HTML文件并利用Azure的网络代理功能将网址\wwwroot\index.html映射到{{ 1}}。这有效,但它将应用程序隔离到两个存储库中,因此感觉不适用。

我还尝试修改\以包含function.json无效。

请帮忙!我真的很感激,因为我不知道实施这种解决方案的最佳实践。在Azure中,所有开箱即用的Bot模板现在都是功能应用程序,因此任何希望启动HTML机器人页面的人都可能需要详细信息。谢谢!

示例解决方案包含以下内容:

Current solution contents

1 个答案:

答案 0 :(得分:4)

您是对的,Bot Services UI不会公开Azure功能代理部分。但是,您仍然可以使用它,因为Bot服务仍然是一个功能应用程序。

这是你可以做的。

启用功能代理

要启用功能代理,请将以下内容添加到功能应用程序的应用程序设置中。

ROUTING_EXTENSION_VERSION ~0.2

您可以通过Bot服务&gt;访问标签页设置&gt;应用程序设置&gt;应用设置

添加Index.html

在wwwroot / index.html

添加带有iframe的index.html

添加新功能以公开index.html

创建一个新的HTTP Trigger函数,该函数读取index.html并将其作为http响应返回。 Directory structure

Function.json

{
 "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

run.csx

using System.Net;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.IO;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    var response = new HttpResponseMessage(HttpStatusCode.OK);
    var stream = new FileStream(@"d:\home\site\wwwroot\index.html", FileMode.Open);
    response.Content = new StreamContent(stream);
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return response;
}

添加proxies.json

最后添加一个代理,让函数app的根指向新函数。

{
    "proxies":{
        "home":{
            "matchCondition": {
                "route": "/"
            },
            "backendUri": "https://<<FUNCTION_APP_NAME>>.azurewebsites.net/api/home"
        }
    }
}

请注意,我使用App Service Editor添加功能应用和代理文件。你可以在Bot Service&gt;找到它。设置&gt;高级设置&gt;开发工具&gt; App Service Editor。