Atualmente é possível integrar o BPM com o Botfactory via API. Para isso é necessário que exista um serviço no meio de campo mapeando os parâmetros enviados pelo botfactory para o padrão aceito pelo BPM.
O snippet de código abaixo apresenta o exemplo de uma lambda na AWS que realiza um início de processo no BPM com base nos valores enviados pelo Botfactory. Para realizar a configuração, é possível configurar um serviço externo no Botfactory dois modos:
- Se você já possui uma conta na AWS, crie uma lambda e configure como um serviço externo conforme a documentação. Este método tem como vantagem utilizar a mesma lambda em vários tenants se assim for necessário.
- Se você não possui uma conta na AWS, é possível utilizar a SDK da Senior conforme a documentação. Neste caso, cada função será exclusiva de cada tenant. Não utilize este método se a solução será aplicada em múltiplos tenants.
const createResponse = (statusCode, message, processInstanceId) =& gt; ({
statusCode,
body: JSON.stringify({ type: 'PLAINTEXT', text: [message], processInstanceId: processInstanceId })
});
const execute = async event =& gt; {
const auth = event.headers['Authorization'];
if (!auth) {
return createResponse(401, 'No authorization provided.');
}
console.log(event.body);
console.log(JSON.parse(event.body));
const {
processId,
action,
nextResponsible,
outputMessage,
...data
} = JSON.parse(event.body || '{}');
if (!processId) {
return createResponse(400, 'processId is required.');
}
const config = {
headers: {
'Content-Type': 'application/json',
'Authorization': auth
}
}
console.log('antes de getFormAccessProperties');
const getFormAccessPropertiesParams = {
processId,
processState: 'New',
authorization: auth
};
const { data: { accessPropertiesResponse } } = await axios.get(`${process.env.PLATFORM_URL}/rest/platform/workflow/queries/getFormAccessProperties`, {
params: getFormAccessPropertiesParams,
...config,
});
console.log('antes de getNextProcessInstanceId');
const { data: { processInstanceID } } = await axios.get(`${process.env.PLATFORM_URL}/rest/platform/workflow/queries/getNextProcessInstanceId`, config);
console.log('antes de ecm_form');
if (accessPropertiesResponse.performerURI === 'com.senior.wfe.EcmForm') {
const ecmConfig = JSON.parse(accessPropertiesResponse.performerData);
const createEcmRecordParam = {
...data,
processInstanceId: processInstanceID
}
console.log(createEcmRecordParam);
await axios.post(`${process.env.PLATFORM_URL}/odata/platform/ecm_form/${ecmConfig.entityName}`, createEcmRecordParam, config);
}
const startProcessParams = {
processInstanceID,
processId,
businessData: JSON.stringify({ root: data }),
authorization: auth,
flowExecutionData: {
actionToExecute: action,
nextSubject: nextResponsible || null
}
};
console.log('antes de startProcess');
await axios.post(`${process.env.PLATFORM_URL}/rest/platform/workflow/actions/startProcess`, startProcessParams, config);
console.log(`Process instance with id ${processInstanceID} started.`);
return createResponse(200, outputMessage || 'Processo iniciado.', processInstanceID);
}
exports.lambdaHandler = async(event) =& gt; {
console.log(event);
try {
return await execute(event);
} catch (err) {
console.log(err);
const errorStatusCode = (err.response & amp;& amp; err.response.status) || 500;
const errorMsg = (err.data & amp;& amp; err.data.message) || 'ERROR';
return createResponse(errorStatusCode, errorMsg);
}
};
O serviço acima espera quatro parâmetros: processId, action, nextResponsible, outputMessage. O processId é o identificador do processo que será iniciado. A action é qual ação será executada no processo (ex.: Prosseguir). O nextResponsible será o responsável pela tarefa. O outputMessage será a mensagem a ser exibida pelo bot quando a solicitação ser iniciada.
Os dados do formulário podem ser repassados então como os parâmetros adicionais do serviço. Por exemplo, se o formulário tiver o campo_1 e campo_2, podem ser adicionados à configuração conforme exemplo abaixo: