Change custromer-request-type in Jira ServiceDesk via REST API - jira-rest-api

I can receive the values of an created ticket using the SD API like:
GET /servicedeskapi/request/SD-4532
and within that i find something like:
{
"issueId": "71928",
"issueKey": "SD-4532",
"requestTypeId": "121",
"serviceDeskId": "5",
...
}
whereas "requestTypeId" related to the type created by the user (e.g. has a label "Common question").
Now i want to change the request type to, let's say "Hardware issue" which have the requestTypeId of "89".
When i try to change by POST /servicedeskapi/request/SD-4532
and giving a payload of
{
"requestTypeId": "89",
}
I get a "405 - Method not allowed". Also the Jira ServiceDesk REST-API doc does not state anything about a POST method for this.
So i tried the common Jira REST-API
PUT /api/2/issue/SD-4532
and give payload
{
"fields": {
"customfield_10001": {
"requestType": {
"id": "89"
}
}
}
}
but that give me an "Field 'customfield_10001' cannot be set. It is not on the appropriate screen, or unknown." error.

The reason why the Jira ServiceDesk REST API docs do not state anything about a POST method for this because.... there is no POST method for this. You cannot change a request (issue) type simply by altering the value of the field that contains the ID (metadata) of that request type.
Do a Google search on "jira rest api change issue type" to see the many other times this question has been discussed in the past in many places. In a nutshell, changing types is not possible via the REST API, only the web UI.

Use Jira Rest API to update Jira issue information. https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-issues/#api-rest-api-3-issue-issueidorkey-put
// This code sample uses the 'node-fetch' library:
// https://www.npmjs.com/package/node-fetch
const fetch = require('node-fetch');
const bodyData = `{
"fields": {
"customfield_10010": "ABC-09",
"customfield_10000": {
"air": "",
"type": "doc",
"name": "Sample Process",
"avatarUrl": null
}
}
}`;
fetch('https://your-domain.atlassian.net/rest/api/3/issue/{issueIdOrKey}', {
method: 'PUT',
headers: {
'Authorization': `Basic ${Buffer.from(
'email#example.com:<api_token>'
).toString('base64')}`,
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: bodyData
})
.then(response => {
console.log(
`Response: ${response.status} ${response.statusText}`
);
return response.text();
})
.then(text => console.log(text))
.catch(err => console.error(err));
email#example.com --> Your Jira emailid
<api_token> --> This is from your account token generated
Note:- Before using any API check if it's not experimental as this may cause issues in future due to sudden change in req/resp from Jira.
Try to inspect Jira dashboard network tab to understand more.

Related

How to Re-use auth token across multiple pages in cypress

I have a Rest API that generates token which is used in multiple REST API's as an authorization Bearer token.
I used it as seen in my code below and it worked fine.
/// <reference types="Cypress" />
const user = {
url_01: ("/"),
token: "Hardcoded token from postman here"
};
describe('some text here', () => {
it('some text here', () => {
cy.request({
method: 'POST',
url: user.url_01,
headers: {
"authorization": user.token
},
body: {
"name": "John Doe",
"createdBy" : "John",
"services":"services",
}
}).then((res)=>{
expect(res.status).to.eq(201)
})
})
But my challenge is that I want to use same token on different pages and I don't want to be hardcoding it as I did on first page.
I want it hardcoded in one place, say support/command.js or somewhere else; then I can call it from there and use it anywhere I want.
But I can't seem to work my way through that on support/command.js.
I've googled and even attempted the answer given on "Cypress:Re-use auth token across multiple API tests" on this platform, still, it isn't working for me.
Please any help would be appreciated.

People api of People.get doesn't get names, photos for other user

Dear Google People API developers,
I am using https://developers.google.com/people/api/rest/v1/people/get api, but it couldn't get other user information of names, photos and etc., using resourceName="people/account_id".
But I could get my profile information of names, photos and etc when I use resourceName="people/me"
I have also tried both web and flutter, it is the same result.
{
"resourceName": "people/110971898718679553920",
"etag": "%EgYBAgMuNz0aBAECBQc=",
"photos": [
{
"metadata": {
"primary": true,
"source": {
"type": "PROFILE",
"id": "110971898718679553920"
}
},
"url": "https://lh3.googleusercontent.com/a-/AOh14GgB8WckrOhYHm-R_Y6hugAEu7XxQ-ktNsmzYUQW=s100",
"default": true
}
]
}
How can I get that information?
My code sample as below
Calling people API by library
Future<Person> getPersonDetails(String peopleId) async {
final GoogleAuthClient googleAuthClient =
await GoogleProvider.provideGoogleAuthClient();
final PeopleServiceApi peopleServiceApi =
peopleDataProvider.getPeopleApi(googleAuthClient);
Person person = await peopleServiceApi.people
.get(peopleId, personFields: '(names,photos,urls,emailAddresses)');
return person;
}
Calling People API by HttpClient
Future<http.Response> getByPeopleAPI(String accountId) async {
GoogleSignInAccount googleSignInAccount =
await GoogleProvider.provideGoogleSignInAccount();
GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
http.Client _client = http.Client();
_client.get(
Uri.parse(
"https://people.googleapis.com/v1/$accountId?personFields=names,photos"),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ${googleSignInAuthentication.accessToken}',
},
).then((value) {
print(value?.body.toString());
});
}
Note: I got people/account_id from google activity API's of actor attribute.
I am looking forward to your support and reply.
Thank you very much in advance!
I've noticed this too in a few parts of the newer People API. The people.listDirecory endpoint seems broken. The older deprecated olderContacts.list works better but is deprecated.
Oddly enough people.searchDirectoryPeople works as expected and shows every field in readMask but you need to provide a search (no wildcard option apparently). Calling people.listDirectoryPeople with exactly the same readMask omits most fields. I'm not sure if there's a different scope required for people.listDirectoryPeople or what but it seems there's definitely something wrong with this api as documented - unless someone can point out another doc we're missing somewhere?

HTTP Response Error with Post to LinkedIn using Share API v2

I am trying to post a Share to LinkedIn using OAuth v2 - I have got authorisation correctly and have the appropriate access keys.
This code is supposed to share a link on LinkedIn, but for some reason it's not working - I'm not sure why. Can anyone help?
this is my request body:
{
"distribution": {
"linkedInDistributionTarget": {}
},
"owner": "urn:li:person:XXXXXX",
"subject": "Test Share Subject",
"text": {
"text": "Hello !"
}
And this my call API shares :
publishPostLink(body : any, token : any){
this.headers = new HttpHeaders(
{
'Content-Type': 'application/json',
'Authorization':'Bearer '+token,
'cache-control': 'no-cache',
'X-Restli-Protocol-Version':'2.0.0', });
return this.http.post("https://api.linkedin.com/v2/shares" , body, {headers: this.headers});}
I get this issue:
I've already installed the Moesif CORS and it didn't worked
I fixed the error using this post..
it should use REST API from the backend and not from frontend
http://localhost is an insecure request origin so its not supportted in many cases.
Try using tunneling software like Ngork https://ngrok.com/

Github API v3, post issues / authentication

I am working on a project making a Kanban board using the Github API v3.
I have no problem with get methods, but when it comes to post methods i get a 404 response, and from what i read in the documentation, this seems to be a authentication error.
I am using personal token for authentication, and have successfully posted through postman, but when i try to post through my own application i get the error.
Link to project if anyone's interested : https://github.com/ericyounger/Kanban-Electron
Below is the code used for posting to github.
Might there be a problem with my code below? Or might it be settings in relation with the token?
postIssue(json){
let packed = this.packPost(json);
return Axios.post(`https://api.github.com/repos/${this.user}/${this.repo}/issues`, packed);
}
packPost(json) {
return {
method: "POST",
headers: {
"Authorization": `token ${this.tokenAuth}`,
"Content-Type": "application/json"
},
body: JSON.stringify({title: json.title})
};
}
This is what i receive:
{message: "Not Found", documentation_url: "https://developer.github.com/v3/issues/#create-an-issue"}
message: "Not Found"
documentation_url: "https://developer.github.com/v3/issues/#create-an-issue"
Console log error message
Without seeing any detailed logs, my first attempt would be to set body to not send the string representation of the body
body: {title: json.title}
This did the trick :)
postIssue(json){
const headers = {
'Content-Type': 'application/json',
'Accept': 'application/vnd.github.v3.raw',
"Authorization": `token ${this.tokenAuth}`,
};
return Axios.post(`https://api.github.com/repos/${this.user}/${this.repo}/issues`, json , {headers: headers});
}

Getting Code 400 using Dialogflow on API request

this is my very first time using Dialogflow, so probably my mistake is very stupid.
here is my problem:
1) I created a sample agent "small-talk'.
2) I enabled the Webhook in the fulfilment section. I setup the URL of the web server making the request and the auth (username, password) of the that web server.
3) I uploaded a simple webpage on that web server with an API request that looks like this one below (this is the sample json referenced in their guide):
axios({
method: 'POST',
url: 'https://api.dialogflow.com/v1/query?v=20150910',
headers: {
'Authorization': 'Bearer ad7829588896432caa8940a291b66f84',
'Content-Type': 'application/json',
},
body: {
"contexts": [
"shop"
],
"lang": "en",
"query": "I need apples",
"sessionId": "12345",
"timezone": "America/New_York"
}
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.log(error);
})
I keep getting this error:
Cannot parse json. Please validate your json. Code: 400"
The only thing I can thing of, is that I noticed that Dialogflow is now working with the API V2 enabled by default in the agent settings and it seems there is no selection to V1 available anymore. But maybe this has nothing to do with my problem.
Thanks in advance!
Solved it!
In the json request, instead of
body: {...}
I replaced it with
data: {...}
Probably it was obvious, but I am an absolute newbie on these things!
By the way, Google has shutdown Dialogflow V1 starting from 12th July 2021 as per this URL - https://cloud.google.com/dialogflow/docs/release-notes#June_15_2021
In case you are getting http response code 400 (bad request), it means that it is time to migrate :-)