负载testing机器人生成器机器人

更新

使用模拟器作为channelId和更新到SDK 3.13.1为我工作。


  • 应用程序ID:8c082f92-fb38-4841-a29f-339eb315f7aa
  • SDK平台:Node.js
  • SDK版本:3.13.1
  • 有效频道:Facebook
  • 部署环境:ngrok

问题描述

我尝试了下面这个链接中提到的步骤。 这有两个部分。 一个是创build令牌,第二个是发送消息给机器人。 POSTMAN请求导致500内部服务器错误和ERROR:ChatConnector:接收 – 代码中的无效签名密钥或OpenId元数据文档。

代码示例

  1. 创build令牌

    curl -X POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token -H 'cache-control: no-cache' -H 'content-type: application/x-www-form-urlencoded' -H 'postman-token: 792660ab-b1aa-0cbd-edab-9b3847c170d5' -d 'grant_type=client_credentials&client_id=8c082f92-fb38-4841-a29f-339eb315f7aa&client_secret=vxcihBT2679%7C(%23puEXBPT1!&scope=8c082f92-fb38-4841-a29f-339eb315f7aa%2F.default' 
  2. 发送一个消息

     curl -X POST https://1c36f336.ngrok.io/api/messages -H 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ing0Nzh4eU9wbHNNMUg3TlhrN1N4MTd4MXVwYyJ9.eyJhdWQiOiI4YzA4MmY5Mi1mYjM4LTQ4NDEtYTI5Zi0zMzllYjMxNWY3YWEiLCJpc3MiOiJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vZDZkNDk0MjAtZjM5Yi00ZGY3LWExZGMtZDU5YTkzNTg3MWRiL3YyLjAiLCJpYXQiOjE1MTIxOTg2NjcsIm5iZiI6MTUxMjE5ODY2NywiZXhwIjoxNTEyMjAyNTY3LCJhaW8iOiJZMk5nWUZEOHRySzgvZk9XcDF2L1BMM2JibnRGRGdBPSIsImF6cCI6IjhjMDgyZjkyLWZiMzgtNDg0MS1hMjlmLTMzOWViMzE1ZjdhYSIsImF6cGFjciI6IjEiLCJ0aWQiOiJkNmQ0OTQyMC1mMzliLTRkZjctYTFkYy1kNTlhOTM1ODcxZGIiLCJ1dGkiOiJXLWdYbXpPSkxVYWdzSFZUbXBJd0FBIiwidmVyIjoiMi4wIn0.G705tzQIU5Mh6IROtXkIwm8Q9AKZ_q-VOtJuuozqP-ekhWoKc0HpcdhgBlnaMsMHKoM0RWhUlXn27xCfK46vEE9IZlkjcAh7huhvlWNtW8IP5w7QiL3JCSTYKCtBXZq-VKeWctNWR9M8Y9Ry4dyiEdcDMcHWrbOUqR6nXvlwG76GSR4YilqzMWdSW6t5Pep3hwOw07DSargYP0pDAnWAg3pWHnhcJ185533I1VVXEIuc_CK-RmP9qhUAScEbYkpp_7l75bVWzxKv-3E1UOG4SBj6UzfH47X5kwz_njn1kAJcrqBvP3s_CjS4qUdDSNARtxGZ3UQWj49UBKosqar0dg' -H 'cache-control: no-cache' -H 'content-type: application/json' -H 'postman-token: 3a74ce00-2da7-d674-5e4c-083f54ed30ff' -d '{ "type": "message", "id": "mid.$cAAGEkG8MNm1mOEBe-lgBvsWZbQUc", "channelId" : "test", "conversation": { "id": "100023023852067-526013297749070"}, "from": { "id": "100023023852067" }, "recipient": { "id": "526013297749070" }, "serviceUrl": "https://1c36f336.ngrok.io", "text": "Hi message from postman !!!" }' 

复制步骤

  1. 使用上面提到的两个curl请求。 这应该导致提到的问题。

预期的行为

POSTMAN请求应该导致202 Accepted和bot收到消息。 我是否错过了一些东西,或者在这个过程中有什么不对吗? 我看到一些关于负载testing的问题 ,但没有一个能够帮助。

实际结果

POSTMAN请求导致500内部服务器错误和ERROR:ChatConnector:接收 – 代码中的无效签名密钥或OpenId元数据文档。

之后我能够得到这个工作:

1)使用botbuilder-azure将自定义状态客户端添加到机器人

2)暴露消息接收器,接收机器人响应

3)将channelId更改为“emulator”(显然,节点sdk不处理'test'通道)

 curl -X POST https://login.microsoftonline.com/botframework.com/oauth2/v2.0/token -H "content-type: application/x-www-form-urlencoded" -d "grant_type=client_credentials&client_id=MyMicrosoftAppId&client_secret=MyMicrosoftAppPassword&scope=MyMicrosoftAppId%2F.default" curl -X POST https://e84a2f49.ngrok.io/api/messages -H "authorization: Bearer TokenFromPreviousCall" -d "{ \"type\": \"message\", \"id\": \"mid.$cAAGEkG8MNm1mOEBe-lgBvsWZbQUc\", \"channelId\" : \"emulator\", \"conversation\": { \"id\": \"100023023852067-526013297749070\"}, \"from\": { \"id\": \"100023023852067\" }, \"recipient\": { \"id\": \"526013297749070\" }, \"serviceUrl\": \"https://e84a2f49.ngrok.io\", \"text\": \"Hi message from postman !!!\" }" 

这里是应用程序,供参考:

 var restify = require('restify'); var builder = require('botbuilder'); var azure = require('botbuilder-azure'); var sqlConfig = { userName: 'SqlServerUserId', password: 'SqlServerPassword', server: 'mySqlServer.net', enforceTable: true, options: { database: 'BotDatabaseName', table: 'BotDataTableName', encrypt: true, rowCollectionOnRequestCompletion: true } } var sqlClient = new azure.AzureSqlClient(sqlConfig); var sqlStorage = new azure.AzureBotStorage({ gzipData: false }, sqlClient); var server = restify.createServer(); server.listen(process.env.port || process.env.PORT || 3980, function () { console.log('%s listening to %s', server.name, server.url); }); var connector = new builder.ChatConnector({ appId: "MyAppId", appPassword: "MyAppPassword" }); server.post('/api/messages', connector.listen()); var bot = new builder.UniversalBot(connector, function (session) { session.send("You said: %s", session.message.text); }).set('storage', sqlStorage);; //message sink server.post("/v3/conversations/:conversationId/activities/:activityId", function(Request, Response, next) { next(); }); 

不知道这是否会有所帮助,但如果您在负载testing的每个请求中使用相同的“fromId”,则可能是相关的。

以前我有类似的问题,要求我在每个请求中使用唯一的“fromId”,否则快速连续的一系列请求开始失败。

我在github上提出了这个问题,虽然它说“跟随脱机”和“问题是与bot代码”,实际上是由于在每个请求中使用相同的“fromId”。

问题在这里: https : //github.com/Microsoft/BotBuilder/issues/1176