我从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机器人页面的人都可能需要详细信息。谢谢!
示例解决方案包含以下内容:
答案 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。