自定义域中的直线活动 - 502 错误网关 - 节点 js/java 脚本 - 天蓝色聊天机器人
Directline activities in custom domain - 502 Bad gateway - node js/java script - azure chatbot
由于公司内部限制,我已经在我的自定义域 test.com 中部署了 Azure 应用程序服务。因此,当我在通过直线部署后尝试访问聊天机器人时,我看到 502 bad gateway error
customChatbot.html
<!DOCTYPE html>
<html>
<body>
<div id="webchat" role="main"></div>
<script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<script>
const styleOptions = {
bubbleBackground: '#E5E8E8',
bubbleFromUserBackground: '#D9EDF9',
hideUploadButton: true,
sendBoxTextWrap: true
};
const store = window.WebChat.createStore({}, function (_ref) {
var dispatch = _ref.dispatch;
return function (next) {
return function (action) {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
console.log("inside conversation history");
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'conversationHistory',
value: { id: 'me', name: 'XXX@test.com' },
}
});
}
return next(action);
}
}
});
window.WebChat.renderWebChat(
{
directLine: window.WebChat.createDirectLine({
token: 'XXXXXXXXXXXXXXXXXXXXXXXXX'
}),
userID: 'shivakumar.kandasamy@test.com',
bot: { id: 'hpusstoredevbot' },
username: 'Sivakumar Kandasamy',
locale: 'en-US',
botAvatarInitials: 'WC',
userAvatarInitials: 'WW',
store: store,
styleOptions: styleOptions
},
document.getElementById('webchat')
);
</script>
</body>
</html>
回应
{
“错误”: {
“代码”:“BotError”,
“消息”:“发送失败 activity:机器人返回错误”
}
}
请求Header
我为此应用程序启用了 Azure AD,但我不确定如何将它与直线集成或它如何与直线一起工作。我知道直线需要 secret/token 但为了进入自定义域,它可能需要一些身份验证,但如何使用直线实现这一点?这是身份验证的问题吗?有人可以给我一些指示吗?我正在使用节点 js。
我在应用程序洞察中看到的异常
向 devbot 发送消息 POST 失败:发送请求时发生错误。发送请求时出错。无法解析远程名称:'devbot.corp.xxcloud.net'
异常类型:System.Net.WebException
失败的方法:System.Net.HttpWebRequest.EndGetRequestStream
自定义属性
对话 ID XXXXXXX-c
关联 ID |XXXXXXX
Activity 输入 conversationUpdate
机器人端点 https://devbot.corp.xxcloud.net/api/messages
收件人 ID devbot@NWGv3oCIAyXMXX
Activity ID JiR6p5WTnLOXXX
频道ID直线
来自 ID XXXXXXX-c
机器人 ID devbot
背景 |XXXXXXX
Microsoft.Bot.Schema.BotException:
at Microsoft.Bot.ChannelConnector.BotAPI+<PostActivityToBotAsync>d__36.MoveNext (Microsoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=nullMicrosoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=null: D:\a\s\ChannelSDK\Microsoft.Bot.Base.ChannelConnector\API\BotAPI.csMicrosoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=null: 480)
Inner exception System.Net.Http.HttpRequestException handled at Microsoft.Bot.ChannelConnector.BotAPI+<PostActivityToBotAsync>d__36.MoveNext:
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at Microsoft.Bot.ChannelConnector.BotAPI+<PostActivityToBotAsync>d__36.MoveNext (Microsoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=nullMicrosoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=null: D:\a\s\ChannelSDK\Microsoft.Bot.Base.ChannelConnector\API\BotAPI.csMicrosoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=null: 452)
Inner exception System.Net.WebException handled at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw:
at System.Net.HttpWebRequest.EndGetRequestStream (System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at System.Net.Http.HttpClientHandler.GetRequestStreamCallback (System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
按照官方文档,可以解决问题。
注意Authorization
的格式。
问题是我们的 node js SDK。我们的 SDK 是 V3。根据微软团队的说法,只有当您的节点 js SDK 版本为 V4 或更高版本时,您才能在内部访问 ILB ASE 中的机器人(使用直接应用服务扩展)。这很奇怪,但它只发生在 node js 而不是 .NET 。 .NET sdk 仍然可以在内部使用 ILB ASE 访问服务,因为 sdk V3.They 尚未在其文档中发布。由于问题仅在于在我们的场所内部访问它所以我们使用带有 public dns
的应用程序网关访问机器人
由于公司内部限制,我已经在我的自定义域 test.com 中部署了 Azure 应用程序服务。因此,当我在通过直线部署后尝试访问聊天机器人时,我看到 502 bad gateway error
customChatbot.html
<!DOCTYPE html>
<html>
<body>
<div id="webchat" role="main"></div>
<script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script>
<script>
const styleOptions = {
bubbleBackground: '#E5E8E8',
bubbleFromUserBackground: '#D9EDF9',
hideUploadButton: true,
sendBoxTextWrap: true
};
const store = window.WebChat.createStore({}, function (_ref) {
var dispatch = _ref.dispatch;
return function (next) {
return function (action) {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
console.log("inside conversation history");
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'conversationHistory',
value: { id: 'me', name: 'XXX@test.com' },
}
});
}
return next(action);
}
}
});
window.WebChat.renderWebChat(
{
directLine: window.WebChat.createDirectLine({
token: 'XXXXXXXXXXXXXXXXXXXXXXXXX'
}),
userID: 'shivakumar.kandasamy@test.com',
bot: { id: 'hpusstoredevbot' },
username: 'Sivakumar Kandasamy',
locale: 'en-US',
botAvatarInitials: 'WC',
userAvatarInitials: 'WW',
store: store,
styleOptions: styleOptions
},
document.getElementById('webchat')
);
</script>
</body>
</html>
回应 { “错误”: { “代码”:“BotError”, “消息”:“发送失败 activity:机器人返回错误” } }
请求Header
我为此应用程序启用了 Azure AD,但我不确定如何将它与直线集成或它如何与直线一起工作。我知道直线需要 secret/token 但为了进入自定义域,它可能需要一些身份验证,但如何使用直线实现这一点?这是身份验证的问题吗?有人可以给我一些指示吗?我正在使用节点 js。
我在应用程序洞察中看到的异常
向 devbot 发送消息 POST 失败:发送请求时发生错误。发送请求时出错。无法解析远程名称:'devbot.corp.xxcloud.net'
异常类型:System.Net.WebException
失败的方法:System.Net.HttpWebRequest.EndGetRequestStream
自定义属性
对话 ID XXXXXXX-c
关联 ID |XXXXXXX
Activity 输入 conversationUpdate
机器人端点 https://devbot.corp.xxcloud.net/api/messages
收件人 ID devbot@NWGv3oCIAyXMXX
Activity ID JiR6p5WTnLOXXX
频道ID直线
来自 ID XXXXXXX-c
机器人 ID devbot
背景 |XXXXXXX
Microsoft.Bot.Schema.BotException:
at Microsoft.Bot.ChannelConnector.BotAPI+<PostActivityToBotAsync>d__36.MoveNext (Microsoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=nullMicrosoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=null: D:\a\s\ChannelSDK\Microsoft.Bot.Base.ChannelConnector\API\BotAPI.csMicrosoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=null: 480)
Inner exception System.Net.Http.HttpRequestException handled at Microsoft.Bot.ChannelConnector.BotAPI+<PostActivityToBotAsync>d__36.MoveNext:
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at Microsoft.Bot.ChannelConnector.BotAPI+<PostActivityToBotAsync>d__36.MoveNext (Microsoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=nullMicrosoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=null: D:\a\s\ChannelSDK\Microsoft.Bot.Base.ChannelConnector\API\BotAPI.csMicrosoft.Bot.Base.ChannelConnector, Version=3.2.3.11, Culture=neutral, PublicKeyToken=null: 452)
Inner exception System.Net.WebException handled at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw:
at System.Net.HttpWebRequest.EndGetRequestStream (System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)
at System.Net.Http.HttpClientHandler.GetRequestStreamCallback (System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a)
按照官方文档,可以解决问题。
注意Authorization
的格式。
问题是我们的 node js SDK。我们的 SDK 是 V3。根据微软团队的说法,只有当您的节点 js SDK 版本为 V4 或更高版本时,您才能在内部访问 ILB ASE 中的机器人(使用直接应用服务扩展)。这很奇怪,但它只发生在 node js 而不是 .NET 。 .NET sdk 仍然可以在内部使用 ILB ASE 访问服务,因为 sdk V3.They 尚未在其文档中发布。由于问题仅在于在我们的场所内部访问它所以我们使用带有 public dns
的应用程序网关访问机器人