【问题标题】:Send message from Postman to Microsoft Bot从 Postman 向 Microsoft Bot 发送消息
【发布时间】:2017-04-07 10:55:52
【问题描述】:

我正在尝试向我创建并发布到 azure 服务的机器人发送消息,以便机器人可以开始向其部分用户发送消息。

我正在尝试首先在 Postman 上发出请求,以便我可以为该交互构建一个控制器。

我正在执行以下请求:

POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
Body:
grant_type:client_credentials
client_id: my_ms_app_id
client_secret: my_ms_app_secret
scope: https://api.botframework.com/.default

由此我得到承载授权的响应:

{
  "token_type": "Bearer",
  "expires_in": 3599,
  "ext_expires_in": 0,
  "access_token": "eyJ0eXA..."
}

然后我继续以下请求:

POST https://skype.botframework.com/v3/conversations
Content-Type: application/json
Authorization: Bearer eyJ0eXAi....

{
    "bot": {
        "id": "i don't have this id so i pass some string",
        "name": "connector controller"
    },
    "isGroup": false,
    "members": [
        {
            "id": "28:...", //ID of the bot I want to send the message to
            "name": "Sp Bot"//Name of the bot I want to talk to
        },
       {
            "id": "i don't have this id so i pass some string",
            "name": "connector controller"
        }
    ],
    "topicName": "News Alert"
}

作为回应,我得到了与“id”匹配的对话 id:“我没有这个 id,所以我传递了一些字符串”: { “id”:“我没有这个 id,所以我传递了一些字符串” }

然后我继续执行以下 POST 请求:

POST. https://skype.botframework.com/v3/conversations/i don't have this id so i pass some string/activities
Authorization: Bearer eyJ0...
Content-Type:application/json

我收到以下回复:

400 Bad Request

{
  "error": {
    "code": "ServiceError",
    "message": "The conversationId 29... and bot .... doesn't match a known conversation"
  }
}

看起来问题出现在第二个和第三个 post 方法之间。看起来https://skype.botframework.com/v3/conversations 没有与我输入的 Id 的机器人生成对话。

所以当我对机器人进行最后一次调用时:https://skype.botframework.com/v3/conversations/.../activities 我总是会收到 serviceError 消息。

【问题讨论】:

  • 你没有机器人的ID?我假设您的机器人已在 dev.botframework.com 中注册,因此您应该拥有该机器人的 ID。
  • 我确实有我想与之通信的机器人的 ID。但我这样做的全部原因是因为要与我的机器人交谈的应用程序不是机器人......而是另一个 c# 应用程序。这不可能吗? @Ezequiel
  • 所以你有一个需要与你的机器人对话的应用程序?所以基本上,您正在创建一个自定义“频道”,对吧?您是否考虑过使用 DirectLine?
  • @EzequielJadib 是的,我想创建一个自定义频道。我还没有找到有关如何通过直接线路做到这一点的信息
  • 在下面查看我的答案

标签: botframework


【解决方案1】:

根据您的 cmets,您正在尝试创建一个自定义“通道/客户端”来与机器人交谈。

为此,我建议您查看 Direct Line,这似乎是实现您的要求的方法。

我不确定您使用的是哪种语言,所以我将向您发送指向 C# 和 Node 的指针。

这些示例将向您展示如何使用 Direct Line 创建自定义客户端以与您的机器人交互:

C#

Node.js

所有示例都使用控制台应用作为“自定义通道”。

【讨论】:

【解决方案2】:

由于您要让应用程序与您的机器人对话,并且很可能在您和 Ezequiel 聊天后使用DirectLine,因此我创建了一系列关于通过 Potsman 连接到 DirectLine 端点的屏幕截图。我将假设您知道如何在 Postman 中使用环境变量和全局变量,here 是 Postman 为他人提供的文档。此外,DirectLine v3.0 文档是here

下面是您将从{{DLsecret}} 请求令牌的直达端点的捕获,Bearer <your-dl-secret> 的内容如下所示:

以下是您在有效呼叫中收到的响应正文示例:

您可能已经注意到我有一些测试结果,在下面的屏幕显示中它有五个(vs 四个)测试,因为我添加了测试以验证在环境变量中设置了 conversationId

这是发送的第二个查询,其中包含一条实际消息:

这是包含以下消息的请求正文:

这是响应正文:

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 2017-08-20
    相关资源
    最近更新 更多