如何使 Google Apps 脚本发送 URL?

问题描述 投票:0回答:1

使用 Google Apps 脚本,我创建了一个系统,该系统根据 Google 表中输入的数据创建 Google 文档和 PDF 文档。我需要这样做,以便在创建 PDF 文档后,将其通过链接发送到 webhook。我通过“UrlFetchApp.fetch”方法实现了这一点,但是当我将数据输入表并运行脚本时,此方法没有任何作用,甚至不想创建文档。我尝试了所有可能的方法,但没有任何效果,请帮忙。

function onEdit(e) {
  if (!e) {
    Logger.log("Script run manually or event object missing.");
    return;
  }

  const sheet = e.source.getActiveSheet();
  if (sheet.getName() !== 'Заключение') return;

  const row = e.range.getRow();
  const column = e.range.getColumn();

  if (row === 1 || column < 1 || column > 13) return;

  const rowData = sheet.getRange(row, 1, 1, 13).getValues()[0];
  if (sheet.getRange(row, 14).getValue()) return;

  const googleDocTemplate = DriveApp.getFileById('1mlrBqdDpziTCT3JbSbX-RdvGjwyt4Me4TYR4FkVAFTQ');
  const destinationFolder = DriveApp.getFolderById('1cdzw03Zt1BtPEXLWFUWsir1YEylkpgNd');

  // Создание копии документа
  const copy = googleDocTemplate.makeCopy(`Заключение ${rowData[3]} ${rowData[4]} ${rowData[5]}`, destinationFolder);
  const doc = DocumentApp.openById(copy.getId());
  const body = doc.getBody();
  const formattedDate = Utilities.formatDate(new Date(rowData[2]), Session.getScriptTimeZone(), 'dd.MM.yyyy');

  // Замена текста шаблона
  body.replaceText("{{stuff_id}}", rowData[0]);
  body.replaceText("{{lead_id}}", rowData[1]);
  body.replaceText("{{currentdate}}", formattedDate);
  body.replaceText("{{Surname}}", rowData[3]);
  body.replaceText("{{Name}}", rowData[4]);
  body.replaceText("{{Patronymic}}", rowData[5]);
  body.replaceText("{{debtamount}}", rowData[6]);
  body.replaceText("{{contract}}", rowData[7]);
  body.replaceText("{{loan}}", rowData[8]);
  body.replaceText("{{paymentsize}}", rowData[9]);

  // Обработка ключевых слов и замена их на соответствующие тексты
  const imvoKeywords = {
    "Авто (не сохр)": "Имеющийся у вас в собственности автомобиль, на который уже наложены обеспечительные меры или залог будет реализован в любом случае: вы ограничены в праве сделать это самостоятельно." + "\n",
    "ЮЛ (ООО и пр.)": "Юридические лица, а так же доля в них являются имуществом. Даже если предприятие 'пустое' или убыточное, оно подлежит оценке и последующей реализации." + "\n",
    "Доп жильё": "Объекты недвижимости, не являющиеся единственным жильём, о которых вы сообщили в ходе консультации будут подлежать реализации. К сожалению, Закон предоставляет право сохранить только один объект недвижимости." + "\n",
    "Комм помещение": "Нежилые помещения, в т.ч. коммерческие помещения так же подлежат реализации - вне зависимости от их фактического состояния. К таким помещениям относятся офисные помещения, магазины, ларьки, гаражи и иные нежилые помещения." + "\n",
    "Спецтехника": "Вообще, любое имущество, которое подлежит обязательной государственной регистрации (специальная техника, суда, оружие и пр.) будет реализовано в процедуре банкротства. Поскольку такое имущество стоит на государственном учёте - на него могут быть наложены обеспечительные меры, а значит оно может быть реализовано в ходе процесса взыскания задолженности." + "\n"
  };

  const imvoSohr = {
    "Ед жильё": "Единственное жильё, в соответствии с действующим Законодательством, не подлежит реализации в ходе процедуры банкротства физического лица. Оно будет исключено из конкурсной массы и не будет подлежать реализации." + "\n",
    "Авто (сохр)": "Порядок действий по поводу автомобиля с отсутствующими обеспечительными мерами вам сообщит ваш персональный юрист в ходе начала работы." + "\n"
  }

  const deals = {
    "Продажа (риск)": "Осуществленная вами сделка по отчуждению имущества имеет признаки оспаривания, однако, мы подготовим и заявим в Суд правовую позицию, подтверждающую законность сделки. Иные сделки (в случае их наличия и документального подтверждения) не имеют признаков оспаривания." + "\n",
    "Продажа (не риск)": "Совершенные вами сделки не имеют признаков оспаривания, а значит ваша процедура не будет затянутой по причине рассмотрения обособленных споров." + "\n",
    "Дарение": "Сделки дарения, осуществленные в 3-х летний срок оспариваются в обязательном порядке. Таким образом, осуществленная вами сделка дарения будет оспорена в рамках процедуры банкротства: имущество или право требования на него будет реализовано в ходе процедуры банкротства." + "\n"
  }

  const imvoValue = rowData[10]; // Значение из столбца 'imvo(real)'
  const imvosohrValue = rowData[11]; // Значение из столбца 'imvo(save)'
  const dealsValue = rowData[12]; // Значение из столбца 'deals'

  const keywordsArray = imvoValue.split(", ").map(word => word.trim());
  const keywordsSohrArray = imvosohrValue.split(", ").map(word => word.trim());
  const keywordsDealsArray = dealsValue.split(", ").map(word => word.trim());

  // Функция для замены текста по ключевым словам, с удалением переменной, если слово не указано
  function replaceKeywords(keywordsArray, keywordDict, prefix, totalCount) {
    for (let i = 1; i <= totalCount; i++) {
      const variableName = `{{${prefix}_${i}}}`;
      const keyword = keywordsArray[i - 1]; // Получаем ключевое слово (если оно есть)

      if (keyword && keywordDict[keyword]) {
        body.replaceText(variableName, keywordDict[keyword]);  // Заменяем переменную на текст
      } else {
        body.replaceText(variableName, "-");  // Удаляем переменную, если ключевое слово отсутствует
        const paragraphs = body.getParagraphs();
paragraphs.forEach(paragraph => {
  if (paragraph.getText().trim() === "-") {
    paragraph.removeFromParent();  // Удаляем абзац, если он пустой
  }
});
      }
    }
  }

  // Определяем общее количество переменных для каждой категории
  const totalImvoCount = 5;
  const totalSohrCount = 2;
  const totalDealsCount = 3;

  // Заменяем ключевые слова для IMVO, SOHR и DEALS
  replaceKeywords(keywordsArray, imvoKeywords, 'imvo', totalImvoCount);
  replaceKeywords(keywordsSohrArray, imvoSohr, 'imvoSohr', totalSohrCount);
  replaceKeywords(keywordsDealsArray, deals, 'deals', totalDealsCount);

  // Дополнительный текст
  let includeAdditionalText = keywordsArray.some(keyword => imvoKeywords[keyword]);
  const imvoReplace = "На указанные выше объекты имущества в любом случае будут наложены обеспечительные меры, из-за которых реализовать или сохранить имущество самостоятельно не представляется возможным. Либо указанные объекты будут изъяты и реализованы с торгов ФССП, либо, в случае если объекты находятся в залоге - будут переданы залоговому кредитору. Поскольку суммарная стоимость вашего имущества не покрывает общую сумму долга, то в этом случае имеет смысл реализовать имущество в ходе процедуры банкротства. Как правило, такие торги наступают и проходят быстрее, чем долги у приставов. От выполнения обязательств на оставшуюся сумму вас освободит Суд. В случае, если имущество реализуется на торгах ФССП - оставшаяся сумма долга подлежит дальнейшему взысканию." + "\n";
  if (includeAdditionalText) {
    body.replaceText("{{imvo_replace}}", imvoReplace);
  } else {
        body.replaceText("{{imvo_replace}}", "-");  // Удаляем переменную, если ключевое слово отсутствует
        const paragraphs = body.getParagraphs();
paragraphs.forEach(paragraph => {
  if (paragraph.getText().trim() === "-") {
    paragraph.removeFromParent();  // Удаляем абзац, если он пустой
  }
});
  }

  // Сохранение документа
  doc.saveAndClose();

  // Небольшая задержка
  Utilities.sleep(500);

  // Создание PDF
  const pdfBlob = DriveApp.getFileById(copy.getId()).getAs('application/pdf');
  const pdfFile = destinationFolder.createFile(pdfBlob);
  pdfFile.setName(`Заключение ${rowData[3]} ${rowData[4]} ${rowData[5]}.pdf`);

  // Сохранение ссылок на документ и PDF в ячейках
  const docUrl = doc.getUrl();
  const pdfUrl = pdfFile.getUrl();

  sheet.getRange(row, 14).setValue(docUrl);  // Ссылка на Google Документ в 14-й столбец
  sheet.getRange(row, 15).setValue(pdfUrl);  // Ссылка на PDF в 15-й столбец

  Logger.log("Document and PDF created successfully: " + pdfUrl);

  const webhookUrl = 'https://webhook.site/cef34a00-844b-4f51-8c72-dae4bcf79239';
  // Создание JSON-объекта с ссылкой на PDF
  const payload = {
    'pdfUrl': pdfBlob,
    'message': "PDF created successfully"
  };

  const jsonpdf = JSON.stringify(payload);
  // Параметры для запроса
  const options = {
    'method': 'post',
    'contentType': 'application/json',  // Устанавливаем тип контента как JSON
    'payload': jsonpdf  // Преобразуем объект в строку JSON
  };
  
  const response = UrlFetchApp.fetch(webhookUrl, options);
  
  Logger.log(response.getContentText());
}
javascript google-apps-script urlfetch
1个回答
0
投票

Blob
包含完整文件。改为发送网址
payload
:

const payload = {
 'pdfUrl': pdfUrl/*removed pdfBlob*/,
 'message': "PDF created successfully"
};
© www.soinside.com 2019 - 2024. All rights reserved.