UNPKG

@apidaze/node-red-contrib-apidaze

Version:
93 lines (76 loc) 2 kB
function prepareCallData(data) { const { caller_id_number: caller_number = '', uuid: call_uuid, sessid: call_session_id, destination_number: called_number, caller_id_name: caller_id, caller_username, dialed_digits = '', } = data; const uuid = call_uuid || call_session_id; const caller_descript = caller_id ? `${caller_id} (${caller_number})` : caller_username; const call = { caller_number: caller_number.replace(' ', ''), call_uuid: uuid, called_number, caller_id, caller_username, caller_descript, dialed_digits, custom: {}, }; return call; } async function prepareCallMessage(msg, addressBook) { const callsDb = require('./call-store'); const { payload } = msg; const { query } = payload; let call = prepareCallData(query); let isNewCall = false; let hasUpdates = false; const { call_uuid: uuid } = call; try { const calls = await callsDb.fetch(uuid); if (!calls || calls.length === 0) { call = await callsDb.add(call); isNewCall = true; } else { call = calls[0]; } } catch (err) { console.error('An error has occured.', payload, err); } if (!!query.dialed_digits && query.dialed_digits.length > 0) { call.dialed_digits = query.dialed_digits; hasUpdates = true; } // inject the associated contact out of the `addressBook` const contact = addressBook && (addressBook[call.called_number] || addressBook.default); if (contact) { call.custom = { ...call.custom, ...contact, }; hasUpdates = true; } if (hasUpdates) { call = await callsDb.update(uuid, call); } const isExiting = query.exiting === 'true'; // update the call data in the message payload msg.payload.call = call; if (isExiting) { return [null, null, msg]; } else if (isNewCall) { return [msg, null, null]; } else { return [null, msg, null]; } } module.exports = { prepareCallData, prepareCallMessage, };