从Postman发送消息给Microsoft Bot

时间:2017-04-07 10:55:52

标签: botframework

我正在尝试向我创建并发布到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生成与机器人的对话。

所以当我最后调用bot时:https://skype.botframework.com/v3/conversations/.../activities我总是收到serviceError消息。

2 个答案:

答案 0 :(得分:7)

根据您的评论,您正在尝试创建自定义"频道/客户端"与机器人交谈。

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

我不确定您使用的是哪种语言,因此我会向您发送指向C#和Node的信息。

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

C#

Node.js

所有示例都使用控制台应用作为"自定义频道"。

答案 1 :(得分:3)

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

以下是您要求令牌的直线终结点的捕获,{{DLsecret}}的内容如下所示,Bearer <your-dl-secret>:  Call #1 Headers

以下是您在有效通话中收到的回复正文示例: Call #1 Response Body

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

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

这是请求正文,其中包含以下消息: Call #2 Request Body (The message)

这是响应机构: Call #3 Response Body