EJEMPLO CODIGO INTEGRACION WINTOOK CRMZEUS PARA ENVIO POR WHATSAPP UNA COTIZACIÓN
//*** ESTA FUNCION ES LA QUE SE MANDA LLAMAR PARA EL ENVIO POR WHATSAPP..
Ctr.sendQuotationWA = async (req, res) => {
try {
let b = req.body;
let config = {
method: "get",
url: `${urlWA}api/v1/accounts/${b.account_id}/contacts/search?include_contact_inboxes=true&q=${b.CELULAR}`,
headers: {
"Content-Type": 'application/json',
api_access_token: `${b.token}`,
},
};
let payload = {};
let conversation = {};
//*** EN ESTA LLAMADA SE RECUPERA LA INFORMACION DEL CONTACTO..
let data = (await axios(config)).data;
//*** SI NO EXISTE EL CONTACTO LO REGISTRA.. SI SI EXISTE ASIGNA LA INFORMACION DEL PRIMER CONTACTO EN LA VARIABLE PAYLOAD…
if (data.payload.length == 0) {
//data = { error: 'No se encontró información del contacto' };
config = {
method: 'POST',
url: `${urlWA}api/v1/accounts/${b.account_id}/contacts`,
headers: {
"Content-Type": 'application/json',
api_access_token: `${b.token}`,
},
data: {inbox_id: b.inbox_Id, name: b.NOMBRE, phone_number: b.CELULAR}
};
data = (await axios(config)).data;
payload = await data.payload.contact;
}else{ payload = await data.payload[0]; }
config.method = await "get";
// config.data = await {inbox_id: b.inbox_Id};
config.url = await `${urlWA}api/v1/accounts/${b.account_id}/contacts/${payload.id}/conversations`;
//*** EN ESTA PARTE RECUPERA LAS CONVERSACIONES DEL CONTACTO..
data = (await axios(config)).data;
data.payload = await data.payload.filter(a => a.inbox_id == b.inbox_Id );
//*** SI NO EXISTEN CONVERSACIONES REGISTRA UNA.. SI SI EXISTEN ASIGNA LA INFORMACION DE LA PRIMER CONVERSACION EN LA VARIABLE CONVERSATION..
if (!data.payload || data.payload.length == 0) {
// data = { error: 'No se encontraron conversaciones del contacto' };
// Segunda sección del documento (id es el identificador de la conversación)
config = {
method: 'POST',
url: `${urlWA}api/v1/accounts/${b.account_id}/conversations`,
headers: {
"Content-Type": 'application/json',
api_access_token: `${b.token}`,
},
data: {
source_id: await utils.createGuid(),
inbox_id: b.inbox_Id,
contact_id: payload.id
}
};
data = [];
conversation = (await axios(config)).data;
}else{
conversation = data.payload[0];
}
// await sendMessage(b.token, b.account_id, conversation.id, messageTemplates.quotations);
//*** AQUI MANDA LLAMAR LA FUNCION SENDMESSAGE DEFINIDA ABAJO..
data = await sendMessage(b.token, b.account_id, conversation.id, b.fileContent, b.fileName);
return res.status(200).json(data);
} catch (error) { onError(error, req, res); }
};
---------------------------------------------
const sendMessage = async (token, account_id, conversation_id, messageData, fileName = '') => {
let frmData = new FormData();
let headers = {};
if (fileName != '') {
//*** ENTRA AQUI SI SE ESTA MANDANDO UN ARCHIVO ADJUNTO..
let bufferData = Buffer.from(messageData, 'base64');
let readableStream = new Readable();
readableStream._read = () => {};
readableStream.push(bufferData);
readableStream.push(null);
frmData.append("attachments[]", readableStream, { filename: fileName });
headers = {
api_access_token: token,
file_type: "application/pdf",
"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundary",
...frmData.getHeaders(),
}
} else {
//*** ENTRA AQUI SI SOLO SE ESTA MANDANDO UN TEXTO..
frmData.append('content', messageData)
headers = {
api_access_token: token,
...frmData.getHeaders(),
}
}
let config = {
method: "post",
url: `${urlWA}api/v1/accounts/${account_id}/conversations/${conversation_id}/messages`,
headers,
data: frmData,
};
//*** EN ESTA LLAMADA HACE YA EL ENVIO DEL MENSAJE A LA CUENTA ESPECIFICADA EN ACCOUNT_ID Y LA CONVERSACION CONVERSATION_ID, ..
let data = (await axios(config)).data;
return data;
};