Пост Gupshup - пустое тело

Я создаю простого бота, который отправляет HTTP-пост-вызов в JSON-объектах. Сервер отвечает обратно с ошибкой - {"detail":"Ошибка синтаксического анализа JSON - Ожидаемое значение: строка 1, столбец 1 (символ 0)"}:

Я не думаю, что проблема на стороне сервера; Я попытался запрос с использованием httpie.

Код в гупшуп

    var contextParam = {
        "botname": event.botname, 
        "channel": event.channel, 
        "sender": event.sender,
        "message":event.message
    };
    var url = "https://abcserver.com/sm/postData";
    var param = JSON.stringify(contextParam);
    var header = {"Content-Type": "application/json"};
    context.simplehttp.makePost(url, param, header) 

Соответствующий звонок от httpie

http POST https://abcserver.com/sm/postData имя_бота = канал MrBot = отправитель Skype = сообщение MrSender = Привет

На стороне сервера: logger.debug("Тело запроса: " + str(request.body)) помещает - "Тело запроса: b'" в файл журнала.

PS: я использую Django, Django Rest Framework

1 ответ

Решение

[Обновление ответа 21.08.2017]

Синтаксис для выполнения вызова HTTP POST с использованием IDE Bot Builder из Gupshup является правильным. Посмотрите на этот пост: /questions/18931400/delat-http-post-zapros-na-gupshup-ide-rabotaet на SO, где присутствует рабочий код.

Полный рабочий код:

 var url_ = 'http://p-curl-i.herokuapp.com/getresponse/';
var body = {
    "botname": event.botname,
    "channel": event.channel,
    "sender": event.sender,
    "message": event.message
};
  var headers = {
'cache-control': 'no-cache',
    'content-type': 'application/json',
    'Content-Length' : JSON.stringify(body).length 
};
   context.simplehttp.makePost(url_, JSON.stringify(body), headers);

Вам необходимо отправить "Content-Length", потому что на вашем сервере это является обязательным, а бэкенд Gupshup не отправляет длину содержимого по умолчанию, как это делает Postman или httpie.

Другие вопросы по тегам