我正在努力让bot-framework-emulator和 Bot Builder for Node.js Builder 在 Linux 下工作。
由于 Linux 的 bot-framework-emulator 需要 mono,我决定使用以下 Dockerfile 在 Docker 下运行它:
FROM mono:latest
EXPOSE 9000
COPY . BotFrameworkEmulator-Console/
CMD [ "mono", "./BotFrameworkEmulator-Console/BFEmulator.exe" ]
Run Code Online (Sandbox Code Playgroud)
我用命令启动它(也公开端口 9000):
docker run -it --rm -p 9000:9000 bfemulator
它开始得很好并且看起来很有效。这是第一个问题。bot-framework-emulator页面声明:
对于在 Mac 和 Linux 上进行开发的人们,我们创建了一个仅使用单声道运行的控制台版本。
这是否意味着它不包含作为 bot emu 的 Windows 变体的 Web 界面?因为netstat -al报告 BFEmulator.exe 正在侦听端口 9000,但当我访问 localhost:9000 时无法从 docker 主机访问。从 docker 容器内部也无法访问它。
第二个问题是我什至无法使用 BFEmulator 的控制台模式。在我的主机上,我正在运行 nodejs docker bot 示例,该示例在部署到“Microsoft Bot Framework”时工作正常。
这是示例代码: …
我尝试使用 Azure Bot 服务进行创建并使用 Azure 中生成的默认 ARM 模板,但它只是创建资源。
我可以创建一个 ARM 模板来配置 Azure Bot 服务吗?
它将有助于通过模板轻松地在 Azure 中创建新环境。
我还可以在 DevOps VSTS 发布步骤中使用模板,以便我可以自动化部署过程。
azure azure-rm-template botframework azure-pipelines-release-pipeline azure-bot-service
我目前正在为 Facebook Messenger 开发聊天机器人。我正在使用 Microsoft bot 框架,代码是用 node.js 编写的。
我正在通过 api 与数据库交互。对于每个请求,我都必须在请求标头内传递访问令牌。我在互联网上读到,您通常会将这样的令牌存储在 cookie 或网络存储中。但我还发现您无法在 Facebook Messenger 上执行此操作。我正在考虑将访问令牌存储在变量中,但我担心这可能不安全。还有其他安全的方式来存储访问令牌吗?
我对 Node.js 相当陌生,这是我第一次使用令牌。非常感谢您的帮助。
为了审计/历史目的,我必须在 CosmosDB 中记录用户与机器人的对话。在使用 .Net 的 V3 中,我使用的是表记录器模块,如下面的代码。
builder.RegisterModule(new TableLoggerModule(account, chatHistoryTableName));
现在我们正在 NodeJS 中将机器人升级/重写到 V4。请指导是否有类似的方法可用于 NodeJS 中的 V4 来保存整个对话?
我正在使用适用于 NodeJS 的 Bot Framework SDK v4 为 Microsoft Teams 开发一个机器人。有没有一种方法可以让机器人自动在频道中发起对话,而不是由用户发起对话?当用户发起对话时,我的机器人工作正常。关于如何继续此操作有什么建议吗?
我们是否有像 IActivityLogger (V3) 这样的界面,在 V4 中记录所有用户活动?
我想在我的 Cosmos 数据库中记录所有用户查询和机器人响应。我能够使用 IActivityLogger 接口在 V3 中做到这一点。
请建议。
我从我的机器人(.NET SDK)发送一个名为“locationRequest”的事件
Activity activity = new Activity
{
Type = ActivityTypes.Event,
Name = "locationRequest"
};
await stepContext.Context.SendActivityAsync(activity, cancellationToken);
Run Code Online (Sandbox Code Playgroud)
我想根据 React 中编码的 minizable-web-chat 在 WebChat 客户端应用程序中捕获此事件,并将布尔 locationRequested 设置为 True:
const store = createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'webchat/join',
}
});
}
else if(action.name == 'locationRequest'){
this.setState(() => ({
locationRequested: true
}));
}
return next(action);
});
Run Code Online (Sandbox Code Playgroud)
我无法赶上这个事件,有什么想法吗?
使用 Microsoft 提供的精彩资源。\n按照https://learn.microsoft.com/en-us/composer/上的文档进行操作
\n\n另请注意,为了在欧洲实现此功能,使用我们的
\n\xe2\x80\x9c,\xe2\x80\x9d 而不是 \xe2\x80\x9c.\xe2\x80\x9d 作为十进制标记,阈值必须设置为\n\xe2\x80\x9cfloat(\xe2\x80\x980.3\xe2\x80\x99)\xe2\x80\x9d 才能被评估为浮点数。
A. 不再有任何问候语。
\n\nB. QnA …
我正在安装 Teams 机器人并将其添加到团队中。当我将它添加到团队时,在初始调用时,我在 OnTurnAsync 中正确地获得了“conversationUpdate”事件。我遇到的问题是,任何获取团队本身的调用都失败了,因为那里没有任何东西,我可以看到,用于获取调用以获取团队数据的 Id。
我希望能够将其添加到团队中,获取该事件,然后获取与添加到的团队相关的数据。
这是我正在尝试的。
private const string ActOnType = "conversationUpdate";
public override async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default)
{
if (IsConversationUpdate(turnContext))
{
// This fails because TeamsGetInfo is returning null
var teamDetails = await TeamsInfo.GetTeamDetailsAsync(turnContext, turnContext.Activity.TeamsGetTeamInfo().Id, cancellationToken);
}
}
private bool IsConversationUpdate(ITurnContext turnContext) => string.Equals(turnContext.Activity.Type,
ActOnType, StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
其他注释...
turnContext.Activity.TeamsGetChannelId()为空,ChannelData 也是如此。任何进一步的调用都有通道数据,但我将机器人添加到团队的初始调用没有。
从调用中添加我的 JSON
{
"membersAdded": [
{
"id": "29:1HqtPeQvYpNL682R_NeBMndg6kYbZbBHsZliZdAT2xWsJWzS0_b50S1ijo2hmPu5i0HTrvqPiOBxqpbtJjS7zyja",
"aadObjectId": "{valid guid}"
},
{
"id": "28:{valid guid}"
}
],
"type": "conversationUpdate",
"timestamp": "2021-01-11T18:15:49.9118003Z",
"id": …Run Code Online (Sandbox Code Playgroud) 在大多数情况下,用于 Bot Framework 的 ID 很容易找到,因为您会在用户发起联系时发送给机器人的“活动”对象中接收它们。
但是,我正在尝试使用 Create Conversation 端点,这意味着我必须知道用户和机器人的 ID。
一个简化的请求(有效!)像这样:
{
"bot": {
"id": "28:4a4f500c-4897-4eaf-a364-c67942f41f6f"
},
"members":[{
"id": "29:1DUjC5z4ttsBQa0fX2O7B0IDu30R_6SfPMhwj-E1BwWmvYzb_IElqJwzPDocwPxTS0j8clYeb8gZx67V8TuChbA"
}],
"tenantId": "c7392b95-d07b-4653-87a7-6c709f527c42"
}
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式找到用户 ID(会员 ID),也许是通过 Graph API?或者也许通过 Bot Framework API?但是如何?
此外,我还希望能够以编程方式找到 Bot ID,因为我会将这个 bot 部署到许多租户,它会大大简化配置。但是,我在哪里可以找到 Bot ID,即使是手动的?它看起来不像是来自 Azure 的应用程序 ID 或对象 ID。
(我理解 28 和 29 的前缀,所以这与我的问题无关)
更新:
接受的答案的关键要点如下:
The userId is unique to your bot ID and a particular user. You cannot reuse the userId between bots. The channelId is global.
Run Code Online (Sandbox Code Playgroud)
这意味着我不能希望在其他地方找到 userId,这是一条非常重要的信息。
When your …Run Code Online (Sandbox Code Playgroud) azure botframework microsoft-teams azure-bot-service microsoft-graph-api
botframework ×10
c# ×3
node.js ×3
azure ×2
.net ×1
.net-core ×1
azure-pipelines-release-pipeline ×1
chatbot ×1
react-native ×1
web-chat ×1