1

Я работаю над приложением, использующим Microsoft Bot Framework. Мое приложение написано в узле. В это время я пытаюсь POST деятельности, используя следующий код:Ошибка MissingProperty в запросе Microsoft Bot Framework

var https = require('https'); 

var token = '[receivedToken]'; 
var conversationId = '[conversationId]'; 

var options = { 
    host: 'directline.botframework.com', 
    port: 443, 
    headers: { 
    'Authorization': 'Bearer ' + token' 
    }, 
    path: '/v3/directline/conversations/' + conversationId + '/activities', 
    method: 'POST'         
}; 

var request = https.request(options, (res) => { 
    console.log(res.statusCode); 
    var body = []; 
    res.on('data', (d) => { 
    body.push(d); 
    }); 

    res.on('end',() => { 
    var result = JSON.parse(Buffer.concat(body).toString()); 
    console.log(result); 
    }); 
}); 

var info = { 
    type: 'message', 
    text: 'test', 
    from: { id: 'user_' + conversationId } 
}; 

request.write(querystring.stringify(info)); 
request.end(); 

request.on('error', (err) => { 
    console.log(err); 
}); 

Когда этот код побежало, я получаю сообщение об ошибке. Это ошибка кода состояния 400, которая имеет следующее:

{ 
    error: { 
    code: 'MissingProperty', 
    message: 'Invalid or missing activities in HTTP body' 
    } 
} 

Я не понимаю, какое свойство отсутствует. Все выглядит правильно.

ответ

1

Вы пропустили Content-Type и Content-Length в ваших запросах.

Пожалуйста, обратите внимание на следующий фрагмент кода:

var https = require('https'); 

var token = '[receivedToken]'; 
var conversationId = '[conversationId]'; 

var info = JSON.stringify({ 
    type: 'message', 
    text: 'test', 
    from: { id: 'user_' + conversationId } 
}) 

var options = { 
    host: 'directline.botframework.com', 
    port: 443, 
    headers: { 
    'Authorization': 'Bearer ' + token, 
    'Content-Type': 'application/json', 
    'Content-Length': Buffer.byteLength(info) 
    }, 
    path: '/v3/directline/conversations/' + conversationId + '/activities', 
    method: 'POST'         
}; 

var request = https.request(options, (res) => { 
    console.log(res.statusCode); 
    var body = []; 
    res.on('data', (d) => { 
    body.push(d); 
    }); 

    res.on('end',() => { 
    var result = JSON.parse(Buffer.concat(body).toString()); 
    console.log(result); 
    }); 
}); 

request.write(info); 
request.end(); 

request.on('error', (err) => { 
    console.log(err); 
});