Ejemplo codigo integracion wintook crmzeus para envio por whatsapp una cotización

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;
};