标签: botframework

Docker 上的 Bot 框架模拟器以及 Bot Builder for Node.js 的其他问题

我正在努力让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”时工作正常。

这是示例代码: …

node.js botframework

5
推荐指数
1
解决办法
962
查看次数

使用 ARM 模板创建 Azure Bot 服务

我尝试使用 Azure Bot 服务进行创建并使用 Azure 中生成的默认 ARM 模板,但它只是创建资源。

我可以创建一个 ARM 模板来配置 Azure Bot 服务吗?

  1. 用于开发的语言(C# 或 NodeJS)。
  2. 关联 Microsoft 应用程序 ID 和应用程序密码。
  3. 要使用的模板,例如 Basic、Dialog、LUIS 或 Proactive bot。
  4. 路易斯集成。

它将有助于通过模板轻松地在 Azure 中创建新环境。

我还可以在 DevOps VSTS 发布步骤中使用模板,以便我可以自动化部署过程。

azure azure-rm-template botframework azure-pipelines-release-pipeline azure-bot-service

5
推荐指数
1
解决办法
1349
查看次数

我应该在哪里存储访问令牌

我目前正在为 Facebook Messenger 开发聊天机器人。我正在使用 Microsoft bot 框架,代码是用 node.js 编写的。

我正在通过 api 与数据库交互。对于每个请求,我都必须在请求标头内传递访问令牌。我在互联网上读到,您通常会将这样的令牌存储在 cookie 或网络存储中。但我还发现您无法在 Facebook Messenger 上执行此操作。我正在考虑将访问令牌存储在变量中,但我担心这可能不安全。还有其他安全的方式来存储访问令牌吗?

我对 Node.js 相当陌生,这是我第一次使用令牌。非常感谢您的帮助。

node.js facebook-messenger botframework

5
推荐指数
1
解决办法
8165
查看次数

Bot 框架 V4 Nodejs 聊天记录日志

为了审计/历史目的,我必须在 CosmosDB 中记录用户与机器人的对话。在使用 .Net 的 V3 中,我使用的是表记录器模块,如下面的代码。

builder.RegisterModule(new TableLoggerModule(account, chatHistoryTableName));

现在我们正在 NodeJS 中将机器人升级/重写到 V4。请指导是否有类似的方法可用于 NodeJS 中的 V4 来保存整个对话?

node.js botframework

5
推荐指数
1
解决办法
1467
查看次数

Bot Framework v4 - 机器人发起对话

我正在使用适用于 NodeJS 的 Bot Framework SDK v4 为 Microsoft Teams 开发一个机器人。有没有一种方法可以让机器人自动在频道中发起对话,而不是由用户发起对话?当用户发起对话时,我的机器人工作正常。关于如何继续此操作有什么建议吗?

botframework microsoft-teams

5
推荐指数
1
解决办法
3101
查看次数

Bot Framework V4 IActivityLogger

我们是否有像 IActivityLogger (V3) 这样的界面,在 V4 中记录所有用户活动?

我想在我的 Cosmos 数据库中记录所有用户查询和机器人响应。我能够使用 IActivityLogger 接口在 V3 中做到这一点。

请建议。

.net c# .net-core botframework

5
推荐指数
1
解决办法
908
查看次数

BotFramework V4:如何从机器人发送事件并在 React WebChat 中捕获它?

我从我的机器人(.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)

我无法赶上这个事件,有什么想法吗?

c# web-chat react-native botframework

5
推荐指数
1
解决办法
997
查看次数

添加 QnA Maker 资源时机器人问候语停止工作

使用 Microsoft 提供的精彩资源。\n按照https://learn.microsoft.com/en-us/composer/上的文档进行操作

\n\n
    \n
  1. 在某处创建文件夹
  2. \n
  3. 在该文件夹中执行https://learn.microsoft.com/en-us/composer/setup-yarn
  4. \n
  5. 执行https://learn.microsoft.com/en-us/composer/tutorial/tutorial-create-bot
  6. \n
  7. 在模拟器中测试:按下重新启动对话 - 新用户 ID:工作正常,响应:嗨!我\xe2\x80\x99m是一个友好的机器人,可以帮助了解天气。尝试说“天气”或“预报”。
  8. \n
  9. 执行https://learn.microsoft.com/en-us/composer/tutorial/tutorial-add-dialog
  10. \n
  11. 在模拟器中测试:呈现\xe2\x80\x9d让\xe2\x80\x99s检查天气\xe2\x80\x9d som响应p\xc3\xa5用户输入\xe2\x80\x9cweather\xe2\x80\x9d。工作正常。
  12. \n
  13. 然后使用对话框事件创建新的触发器并启动对话框并继续:https://learn.microsoft.com/en-us/composer/how-to-add-qna-to-bot,在设置中输入以下内容
  14. \n
\n\n

在此输入图像描述

\n\n
    \n
  • 请注意,为了使用设置值,必须
    在 id 后面添加一个额外的 \xe2\x80\x9c=\xe2\x80\x9d \n,例如 \xe2\x80\x9c=settings.qna.knowledgebaseid\xe2\x80 \x9d。
  • \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 才能被评估为浮点数。

    \n\n
      \n
    1. 确保根据您的 QnA 基础设置准确。\n请注意,此时 LUIS 字段大部分为空,\n除了按照中所述预先填充的值\n https://learn.microsoft.com/en -us/composer/如何将 qna 添加到机器人
    2. \n
    3. 此时未添加 LUIS。
    4. \n
    5. 重启机器人
    6. \n
    7. 单击模拟器中的测试
    8. \n
    9. 按重新启动对话 - 新用户 ID
    10. \n
  • \n
\n\n

现在存在三个问题:

\n\n

A. 不再有任何问候语。

\n\n

B. QnA …

chatbot botframework azure-qna-maker

5
推荐指数
1
解决办法
254
查看次数

TeamsBot - 如何从对话更新事件中获取团队 ID?

我正在安装 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)

c# botframework microsoft-teams

5
推荐指数
1
解决办法
406
查看次数

在哪里可以找到 Bot Framework 所需的 ID?

在大多数情况下,用于 Bot Framework 的 ID 很容易找到,因为您会在用户发起联系时发送给机器人的“活动”对象中接收它们。

但是,我正在尝试使用 Create Conversation 端点,这意味着我必须知道用户和机器人的 ID。

https://docs.microsoft.com/en-us/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference?view=azure-bot-service-4.0#create-conversation

一个简化的请求(有效!)像这样:

{
"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

5
推荐指数
2
解决办法
555
查看次数