标签: botframework

Bot Framework总是得到未经授权的响应

我开始使用Microsoft Bot Framework并一步一步地遵循所有教程.我已经能够注册一个新的机器人,并部署它与模拟器一起工作,但除了没有其他工作. 测试与机器人聊天的连接不起作用,尽管我从模拟器和所有连接的通道得到答案,在正确创建和注册的地方我总是得到未经授权的响应或类似的东西,无论如何没有响应,所以没有任何作用.我尝试使用Twilio,Web Chat,Telegram(Skype auth正在等待)获得始终相同的响应.由于我似乎严格遵循教程,还有其他事情要做或被批准吗?或者只是因为太年轻,服务仍然不能100%工作?

谢谢

botframework

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

Microsoft Bot Framework Client sdk

我希望在我的应用程序中使用Microsoft Bot Framework.但是,我有一个自定义UI聊天控件(根据我的要求设计),我需要连接这个机器人.(而不是像slack或skype这样的预配置通道).

是否有用于此目的的Web(最好是有角度的)和/或移动的客户端sdk?

botframework botconnector

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

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 Framework中从Skype接收传入消息时,除了消息文本之外没有ChannelData

当我收到来自Telegram的消息时,我会在Activity.ChannelData字段中获得有关帐户的详细信息(例如用户名,conversation_id等).

{
  "update_id": ,
  "callback_query": {
    "id": "",
    "from": {
      "id": ,
      "is_bot": false,
      "first_name": "",
      "last_name": "",
      "username": "",
      "language_code": ""
    },
    "message": {
      "message_id": ,
      "from": {
        "id": ,
        "is_bot": true,
        "first_name": "",
        "username": ""
      },
      "chat": {
        "id": ,
        "first_name": "",
        "last_name": "",
        "username": "",
        "type": "private"
      },
      "date": ,
      "text": "Example text"
    },
    "chat_instance": "",
    "data": ""
  }
}
Run Code Online (Sandbox Code Playgroud)

但是当涉及到Skype时,我所看到的只是消息文本,而不是其他内容.

{  "text": "Example text"}
Run Code Online (Sandbox Code Playgroud)

怎么知道,谁给我发了消息呢?

Upd:这不应该是用户的名字,任何其他数据,如用户唯一ID都适合.

bots skype botframework

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

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
查看次数

Google Dialogflow 中的多租户

我的公司目前正在尝试使用 Google Dialogflow 构建一个多租户聊天机器人。我们正在探索我们可以使用的工具,但关于该主题的文档仍然有点稀缺。在这种情况下,我们对多租户的理解和定义将允许我们根据最终用户工作的公司拥有略有不同的对话流程。例如:

Foo 公司的用户 A 想要订购冰淇淋。Foo 公司提供了一系列口味(巧克力、香草、薄荷)并且只提供蛋卷冰淇淋,但允许用户在他们的冰淇淋中添加装饰物(巧克力片、糖屑)。

Bar 公司的用户 B 想要订购冰淇淋。Company Bar 提供一系列口味(草莓、开心果、柠檬)并供应冰淇淋蛋筒和杯子,但不提供配菜。

两个用户应该有完全相同的对话,除了口味和冰淇淋容器的可用列表取决于租户。此外,还应该可以选择扩展此对话流程的一部分,例如 A 公司提供添加装饰的功能。两个对话应该以相同的意图开始和结束(我想要一个冰淇淋/我准备付钱)。

我们的次要目标是最小化 Dialogflow 端的冗余:理想情况下,只有一个代理,理想情况下,不需要重复的意图不应该被复制。

我们的架构不是客户驱动的;客户端总是被我们的后端服务器 (C#) 拦截,它负责处理与 Dialogflow 的互操作。我们认为这为我们提供了更大的灵活性并更好地与我们现有的堆栈集成。

我们已经确定了这些有前途的功能:

  • 子意图
  • 输入上下文
  • 可覆盖的实体
  • Mega/Sub 代理

但我们还没有确定明确的路径。我们也在考虑可用的替代方案,例如微软的 BotBuilder、亚马逊的 AWS Chatbot 和开源 ChatterBot。

简而言之,在这方面有最佳实践吗?如果没有,将非常欢迎有关此事的任何想法和想法。

chatbot multi-tenant botframework chatterbot dialogflow-es

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

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
查看次数