1

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

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

当前解决的尝试:

我已经配置了网络聊天并有一个这样的 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.htmllocalhost:3979/api/messages。部署到 Azure 时,我尝试完全限定index.htmld:\home\site\wwwroot\index.html,但<BOT_NAME>.azurewebsites.com/api/messages返回以下内容:

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

我创建了一个新的函数应用程序(不是机器人应用程序),以启动基本 HTML 文件并利用 Azure 的网络代理功能将 URL 映射\wwwroot\index.html\. 这可行,但它将应用程序隔离到两个存储库中,因此感觉不实用。

我也尝试修改function.json以包含"authLevel": "anonymous"无济于事。

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

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

当前解决方案内容

4

1 回答 1

4

没错,机器人服务 UI 没有公开 Azure Function Proxies 部分。但是,您仍然可以使用它,因为 Bot Service 仍然是一个功能应用程序。

这是你可以做的。

启用函数代理

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

ROUTING_EXTENSION_VERSION ~0.2

您可以通过 Bot Service > Settings > Application settings > App settings 访问该选项卡

添加索引.html

在 wwwroot/index.html 添加带有 iframe 的 index.html

添加一个新函数以公开 index.html

创建一个新的 HTTP 触发器函数,该函数读取 index.html 并将其作为 http 响应返回。 目录结构

函数.json

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

运行.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;
}

添加代理.json

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

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

请注意,我使用应用服务编辑器添加了函数应用和代理文件。您可以在机器人服务 > 设置 > 高级设置 > 开发工具 > 应用服务编辑器中找到它。

于 2017-03-31T20:14:44.837 回答