Você pode usar o WS ECMWorkflowEngineService para fazer a movimentação.
Eu tive uma situação assim em um processo e fizemos mais ou menos assim:
const workflowServiceUrl = `${WCMAPI.serverURL}/webdesk/ECMWorkflowEngineService?wsdl`
, username = 'login do usuário'
, password = 'senha do login do usuário'
, userId = 'matrícula do usuário que fez o movimento'
, processInstanceId = 'número da solicitação / processo'
, colleagueId = 'matrícula de quem recebe a atividade'
, nextState = 31;
let xml = `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://ws.workflow.ecm.technology.totvs.com/">
<soapenv:Header/>
<soapenv:Body>
<ws:saveAndSendTask>
<username>${username}</username>
<password>${password}</password>
<companyId>${WCMAPI.organizationId}</companyId>
<processInstanceId>${processInstanceId}</processInstanceId>
<choosedState>${nextState}</choosedState>
<colleagueIds>
<item>${colleagueId}</item>
</colleagueIds>
<comments>Movimentado pela Widget</comments>
<userId>${userId}</userId>
<completeTask>true</completeTask>
<attachments />
<cardData />
<appointment />
<managerMode>false</managerMode>
<threadSequence>0</threadSequence>
</ws:saveAndSendTask>
</soapenv:Body>
</soapenv:Envelope>`;
fetch(
workflowServiceUrl,
{
method: "POST",
redirect: "follow",
credentials: "omit",
headers: {
"Content-Type": "text/xml;charset=utf-8"
},
body: xml
}
)
.then(response => response.text())
.then(xmlText => (new DOMParser()).parseFromString(xmlText, "text/xml"))
.then(() => console.log("Tudo certo"))
.catch(() => console.error(`Erro ao movimentar a Solicitação.`));