我开发了与 SharePoint On Premise 集成的 ChatBot。当我在模拟器中调试 ChatBot 时,它可以工作。但是,当我使用 DirectLine 在 Azure 中的 Web 模拟器和公司网站中托管的网站上进行调试时,它不起作用。
有谁知道如何解决它?
附上我的截图。左侧来自 Web Emulator,右侧来自本地 Bot Framework Emulator
更新源代码(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 …
Run Code Online (Sandbox Code Playgroud) sharepoint-2013 botframework direct-line-botframework azure-bot-service
我有一个用 C# 编写的机器人框架技能,它将消息从后端服务中继到使用 Bot Framework Composer 制作的消费者机器人。Skill Bot 在单独的控制器 api/message/BackendMessage 上接收来自后端服务的消息。
[Route("api/message")]
[ApiController]
public class SkillBotBackendController : ControllerBase
{
...
Run Code Online (Sandbox Code Playgroud)
当技能机器人收到消息时,它会将其发送到与消费者机器人的对话中,如下所示......
[HttpPost]
[Route("BackendMessage")]
public async Task PostAsync([FromBody] BackendMessage content)
{
...
await _botFrameworkAdapter.ContinueConversationAsync(
msAppId,
conversationRec.ConversationReference,
(ITurnContext turnContext, CancellationToken cancellationToken) =>
turnContext.SendActivityAsync(MessageFactory.Text(backendMessage),
cancellationToken), default(CancellationToken));
Run Code Online (Sandbox Code Playgroud)
消费者机器人可以看到直接来自技能机器人的所有消息,但看不到技能机器人从后端服务接收的消息。这是一些 ngrok 条目,显示...
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/e13d97b4-c715-4572-8d 200 OK
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/e13d97b4-c715-4572-8d 200 OK
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 401 Unauthorized
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 401 Unauthorized
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 401 Unauthorized
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 401 Unauthorized
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 200 OK
POST /api/skills/v3/conversations/ba72ce2d-3a86-4d86-b640-9a4f3c4d5996/activities/52e6e511-8f72-4b55-97 200 OK …
Run Code Online (Sandbox Code Playgroud) c# botframework direct-line-botframework bot-framework-composer
我创建了一个简单的Android应用程序,它使用restfull jersey WS通过JSON格式发送消息
我应该在连接机器人的应用程序中输入哪个URL?
以及该机器人如何接收消息并发回响应?
截至目前,我正在使用微软的bot模拟器
提前致谢.
我们构建了一个MS Bot Framework bot,它在会话期间使用我们现有的内部本地API.我们想通过将Web Chat组件放入我们现有的面向内部的本地应用程序的DOM中来发布此bot .
使用我们现有的架构,我们自然也希望在内部托管这个机器人 -利用我们现有的所有配置和部署流程.我们理解,无论如何,机器人都必须与LUIS沟通 - 这对我们来说很好; 它不需要Azure的更复杂(更大的攻击面,更少的中央IT支持)设置直接连接到我们的内部业务数据API.
我认为这个图表更加清晰:
编辑1:我们是否可以在本地托管直接线路或类似的连接器而无需编写自定义连接器?另外,我们可以通过这样的连接器与我们的机器人聊天,而无需为DOM编写自定义聊天组件/小部件吗?(只要指向我们的频道,网络聊天组件就可以正常工作.)
这里的最终目标是让我们的所有聊天流量保持在本地,因为这是一个数据驱动的聊天机器人,提供敏感数字.在另一个可以完全在本地运行的框架中重新开发它,而不是从我们的中央IT部门获得批准,这将花费更少的时间.
附注:我知道Azure Stack Preview.最低硬件要求(也可能是订阅成本)极端矫枉过正.(毕竟我们正在谈论一个Node应用程序.)
这不是这个问题的重复,因为这个问题还解决了直接/线路连接器本地托管的关键元素,其他问题假设连接器仍然可以在Azure上运行.
azure node.js botframework azure-language-understanding direct-line-botframework
我一直在尝试在应用程序中设置 MS Bot。到目前为止,我做了以下。
为 Bot 设置一个 REST 端点,该连接器会监听它。
app.post("/botapi/messages", connector);
Run Code Online (Sandbox Code Playgroud)获取APP_ID和APP_PASSWORD,模拟器成功连接如下,
http://localhost:4000/botapi/messages
APP_ID
APP_PASSWORD
Run Code Online (Sandbox Code Playgroud)
这是成功的,机器人按预期回复。
尝试使用 Direct Line API 与 Bot 对话。已成功开始对话。回应之一如下。
{
"conversationId": "3JYZyAn5VYB3HNcO3tcgtn",
token: ....
.....
}
Run Code Online (Sandbox Code Playgroud)
正如文档所说,我使用“node-fetch”包来发出 POST 请求。
但是,我无法使用 Direct Line API 发送活动,已收到
internal server error 500
Run Code Online (Sandbox Code Playgroud)
文档说 POST 请求应该如下所示。
POST
https://directline.botframework.com/v3/directline/conversations
Authorization: Bearer my_secret
Run Code Online (Sandbox Code Playgroud)
这非常适合开始对话,但不适用于发送活动。
我发送的活动是:
{
"type": "message",
"from": {
"id": "user1"
},
"text": "hello Bot, say something"
}
Run Code Online (Sandbox Code Playgroud)
我不认为“id”很重要,所以这就是我发布的内容
https://directline.botframework.com/v3/directline/conversations/{conversationId}/activities
Run Code Online (Sandbox Code Playgroud)
我使用了从开始对话时收到的对话 ID。我用谷歌搜索,但没有找到我的问题的答案。此外,我的问题很少,也许他们的回答会对我有所帮助。
Q1:使用 Direct Line API 的每个人的 url " https://directline.botframework.com/v3/directline/ " 都一样吗?当我用机器人的端点“ http://localhost:3000/botapi/messages/conversations …
我正在开发基于MS Bot Framework的chatbot应用程序.我需要实现聊天对话的长期历史功能.
在阅读了大量的手册之后,我发现了两种方法,我该怎么做呢.
使用此处描述的方法.此方法使用DirectLine api-endpoint https://directline.botframework.com/v3/directline/conversations/{convId}/activities
.
实现自定义功能,它将:
变体№1看起来不错,但我有一些担忧.我找不到有关规范DirectLine缓存/缓冲区的详细信息.
我刚刚开始使用line-bot
并遵循这里的教程:https : //developers.line.biz/en/docs/messaging-api/building-bot/
但是,我仍然不明白如何与我的line app account
进行连接以发送消息,并使这些消息重新出现在python中。
以下是我从line
教程中复制的脚本。
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
app = Flask(__name__)
line_bot_api = LineBotApi('foo', timeout=20)
handler = WebhookHandler('bar')
user_profile = 'far'
@app.route("/", methods=['GET'])
def home():
profile = line_bot_api.get_profile(user_profile)
print(profile.display_name)
print(profile.user_id)
print(profile.picture_url)
print(profile.status_message)
return '<div><h1>ok</h1></div>'
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = request.headers['X-Line-Signature']
# get request body as text
body …
Run Code Online (Sandbox Code Playgroud) 我需要在本地运行microsoft botframework v4,因为公司内部限制禁止我在 Microsoft Azure 上注册机器人或在云中使用连接器。我的想法是使用offline-directline在本地模拟连接器。据我所知,该软件包是为 Microsoft Botframework V3 而不是 v4 构建的。有没有人设法将它用于 v4?
我按照说明进行操作,但是在尝试实现网络聊天客户端时遇到了困难。我在哪里以及如何实施
BotChat.App({
directLine: {
secret: params['s'],
token: params['t'],
domain: params['domain'],
webSocket: false // defaults to true
},
Run Code Online (Sandbox Code Playgroud)
在直达线 v4 的 index.html 文件中?“offline-directline”的文档仅适用于 Botframework v3。
是否有示例存储库可以从中找到一些信息?
我想将聊天控件嵌入到许多网站中,我想获取我嵌入的网站的Url,以便我的机器人可以获得与网站URL匹配的数据.但是,当我嵌入从WebChat生成的iframe时,我总是得到相同的ServiceUrl,那就是https://webchat.botframework.com/,它不是网站的Url,所以如何将聊天控件嵌入到任何网站中网站和我的机器人可以获取网站Url而不是WebChat或DirectLine的网址.
这是我尝试过的:直线聊天控制
我注意到,当我使用Bot框架模拟器测试我的僵尸程序时,它总是返回发件人的确切URL(如果是本地测试,它将返回http:// localhost:XXXX /).那我们怎么能这样做呢?
我一直在尝试将Azure Direct Line API v3.0用于机器人.然而,似乎我不再启用对话,因为我在APi呼叫上收到403消息.这是我的电话:
$.ajax({
url: "https://directline.botframework.com/v3/directline/tokens/generate",
method: "POST",
crossDomain: true,
cache: false,
beforeSend: function (xhr) {
/* Authorization header */
xhr.setRequestHeader ("Authorization", "Basic " + btoa("Bearer:GI3UQr2GYoA.cwA.wHo.h1AyNQKXSESWZGFrf-yf_Cm3XwDRy38Yn-xzgUton-E"));
},
success: function (data) {
},
error: function (jqXHR, textStatus, errorThrown) {
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,这曾经是几天前的工作.我有通过此API创建的活动的几个活动记录.
但是现在我甚至在获取令牌时不断收到此错误消息:
{
"error": {
"code": "BadArgument",
"message": "Missing token or secret"
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用免费订阅计划,我还有7天时间.此外,我已检查订阅状态,其活动状态.我也有超过140美元的信贷.
请让我知道我做错了什么,为什么它会突然停止工作?
提前致谢.
botframework ×9
azure ×3
c# ×2
.net ×1
azure-language-understanding ×1
chatbot ×1
html ×1
node.js ×1
python ×1