I have not yet succeeded in updating an existing engagement from nodejs. Specifically, I am simply trying to update a specific task status to COMPLETED.
I don’t see any samples that update engagements.
My code looks like this:
const apiOptions = {
path: '/engagements/v1/engagements/'+id,
method: 'POST',
body: {
"metadata": {
status: 'COMPLETED',
}
}
}
await this._client.apiRequest(apiOptions)
Anyone see anything I’m doing wrong?
Thanks
Phil
Heyo @PCarlson
Wonder if you need to wrap status.
"status": "COMPLETED"
Wrapping status does not fix. I’ll do more experiments today.
Not making much progress. Per Update an Engagement in the legacy api docs, engagement is required in the JSON body, so I tried adding an engagement with various info from the existing engagement and even an empty engagement section like this:
const apiOptions = {
path: '/engagements/v1/engagements/'+id,
method: 'POST',
body: {
"engagement": {
},
"metadata": {
"status": 'COMPLETED',
}
}
}
But no matter what I try, the response is always: “HttpError: HTTP request failed” giving no clues to what is wrong with the request. So it seems to be a matter of empirical testing to guess what might be expected. But I have not found the magic incantation yet.
Phil
I get the same “HttpError: HTTP request failed” trying to update the engagement due date “timestamp”, so it appears all my updates are failing. Here is my JSON for that attempt:
const apiOptions = {
path: '/engagements/v1/engagements/'+id,
method: 'POST',
body: {
"engagement": {
"timestamp": moment(dueDate).valueOf(), // HubSpot requires timestamp in milliseconds
},
}
}
await this._client.apiRequest(apiOptions)
So I’m either doing something fundamentally wrong or this api through nodejs is broken.
Note I can successfully get activity information using the id in the same manner with this code:
const apiOptions = {
path: '/engagements/v1/engagements/' + id,
}
await this._client.apiRequest(apiOptions)
I can also create an engagement note (and task and call and email) successfully like this:
const apiOptions = {
path: '/engagements/v1/engagements',
method: 'POST',
body: {
engagement: {
active:true,
type:"NOTE",
timestamp: moment().valueOf(),
},
associations: {
contactIds: [ whoId ],
},
metadata: {
body:newDescription,
}
}
};
await this._client.apiRequest(apiOptions)
So both GET and POST calls are working and my oauth token is getting passed by nodejs without putting anything in the JSON. It seems to be specific to Update.
Phil
@kierana loves to be distracted so he can procrastinate on. Maybe he has some thoughts
Looks like you’re using POST when the API mentions that you need to PATCH.
Thanks @kierana , I’ll play with that this weekend. I have seen PATCH referenced in the API docs, but I did not understand it as a method in the endpoints. I’ll post what I find.
Phil
PATCH did the trick. Thanks @kierana
For reference, my apiOptions looked like this:
const apiOptions = {
path: '/engagements/v1/engagements/'+id,
method: 'PATCH',
body: {
"engagement": {
},
"metadata": {
"status": "COMPLETED",
}
}
}
Phil