Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Configure Outbound REST Message API

mirza2
Kilo Contributor

Hi,

I have been stuck for a while to configure the HTTP method for Post using the Outbound REST Message.

Since the API will need me to send some information on the request body, such as: grant_type, resource, client_id, etc.

So, I made the configuration as below.

Screen Shot 2017-08-18 at 8.58.31 PM.png

But when I tested it, it looks like the Azure endpoint cannot recognize the Content to get the parameter for the request body with this error:

"error":"invalid_request","error_description":"AADSTS90014: The request body must contain the following parameter: 'grant_type'.

Screen Shot 2017-08-18 at 9.04.08 PM.png

I strongly believe this is because the problem on the Content-type, since I also got the same exact error when I am changing the Content-Type in another Content-type in Postman.

Screen Shot 2017-08-18 at 9.10.00 PM.png

Just for the info, this API have been tested working correctly if I use the Postman standard content-type with form data.

Screen Shot 2017-08-18 at 9.20.26 PM.png

Any suggestion or clue will much appreciated.

1 ACCEPTED SOLUTION

jarodm
Mega Guru

I think you just need to remove the curly brackets from your body and change the content-type to 'application/x-www-form-urlencoded'.



Example, using only code (no Outbound REST Message forms)


var restMessage = new sn_ws.RESTMessageV2();


restMessage.setEndpoint('http://httpbin.org/post');


restMessage.setHttpMethod('post');


//restMessage.setMIDServer('midserverbyname');


restMessage.setRequestHeader('content-type','application/x-www-form-urlencoded');


restMessage.setRequestHeader('accept','application/json');




restMessage.setRequestBody('form1=value1&form2=value2');




var response = restMessage.execute();


var httpStatus = response.getStatusCode();


var responseBody = response.haveError() ? response.getErrorMessage() : response.getBody();




if (httpStatus == '200'){


gs.info('Body: '+responseBody);




}else{


gs.info('HTTP Status: '+httpStatus);


gs.info('Error: '+responseBody);


}


View solution in original post

16 REPLIES 16

mirza2
Kilo Contributor

Hi Renuka,

 

I simply modified the HTTP POST method as below. 

 

find_real_file.png

 

Just note I put the variable substitute in the curly bracket.

 

Hope this helps.

 

Regards,

Mirza Akbar

 

Thanks Mirza, let me try with this.

Also, my requirement is to Send the server details [like org, legal entity details) per resource group back to Azure.

Since i am new using this REST, can you tell me which method would be good "POST" or "PUT" should i be using to send the details to the Azure per resource group?

 

Also, for testing connection do i need to set up the Bearer token as well or is it not required.

Thanks a lot in advance for your response.

 

@mirza

mirza2
Kilo Contributor

Hi Renuka,

 

It should be depend on what API that Azure provides. I assume you're working with Azure Resource Manager, you can find out the list of available API in this link: https://docs.microsoft.com/en-us/rest/api/resources/, and choose the most suitable action that you need.

 

Regards,

Mirza

Renuka8
Kilo Guru

Hi Mirza,

 

I have made the changes as per your screenshot, but i still get only the status code as 200 and dont  get any response.

 

Can you please guide me here.

 

@mirza

mirza2
Kilo Contributor

Hi Renuka,

 

What REST API you're using? In this thread I were using the API to get the bearer token from Azure. And then, I can use the token to interact with other Azure APIs.

 

Regards,

Mirza