Google Apps 脚本函数,可在 Pipedrive 中创建新的不存在的实体

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

您好,请帮助我使用此 Google Apps 脚本功能,该功能可根据 Google 表格中的数据在 Pipedrive CRM 中创建新实体。该函数迭代工作表中的行,检索公司和人员的数据,检查该公司是否存在于 Pipedrive 中,如果不存在则创建该公司,然后创建与该公司关联的新人员。

您能否帮助我,提供完整的代码,该代码还将检查该人是否已经存在,而不是创建它。因此,此脚本不会在 pipelinedrive 中为公司和个人创建重复项。目前,使用下面的代码不会仅为公司创建重复项。

function createPipedriveEntity() {
var sheetId = ‘My sheet Id’; // Replace “My sheet Id” with the ID of your own spreadsheet
var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(“Sheet name”); // Replace “Sheet name” with the name of your spreadsheet
var last_row = sheet.getLastRow();

for (var row = 2; row <= last_row; row++) { // Start from the second row
var company_name = sheet.getRange(‘AT’ + row).getValue();
var person_name = sheet.getRange(‘X’ + row).getValue();
var person_email = sheet.getRange(‘N’ + row).getValue();
var person_phone = sheet.getRange(‘FQ’ + row).getValue();

// Check if the company already exists in Pipedrive
var organizationExists = false;
var apiToken = "INSERT_YOUR_API_TOKEN_HERE";
var organizationsUrl = "https://api.pipedrive.com/v1/organizations/find?term=" + company_name + "&api_token=" + apiToken;
var organizationsResponse = UrlFetchApp.fetch(organizationsUrl);
var organizations = JSON.parse(organizationsResponse.getContentText()).data;
if (organizations.length > 0) {
  organizationExists = true;
  var company_id = organizations[0].id;
  Logger.log("Company found: " + company_name + " (ID: " + company_id + ")");
}

// If the company does not exist, create it in Pipedrive
if (!organizationExists) {
  var url = "https://api.pipedrive.com/v1/organizations?api_token=" + apiToken;
  var payload = {
    "name": company_name
  };
  var options = {
    "method": "post",
    "contentType": "application/json",
    "payload": JSON.stringify(payload)
  };
  var response = UrlFetchApp.fetch(url, options);
  var company = JSON.parse(response);
  var company_id = company.data.id;
  Logger.log("Company created: " + company_name + " (ID: " + company_id + ")");
}

// Add the person to the company
var url = "https://api.pipedrive.com/v1/persons?api_token=" + apiToken;
var payload = {
  "name": person_name,
  "email": person_email,
  "phone": person_phone,
  "org_id": company_id
};
var options = {
  "method": "post",
  "contentType": "application/json",
  "payload": JSON.stringify(payload)
};
var response = UrlFetchApp.fetch(url, options);
var person = JSON.parse(response);
var person_id = person.data.id;
Logger.log("Person added: " + person_name + " (ID: " + person_id + ")");
}
}

我尽了一切努力,但我不是开发人员,我和我的新朋友 chatgpt 聊了几个小时。但我现在知道......只有人类才能帮助我解决这个问题。

非常感谢!

google-apps-script google-sheets post get pipedrive-api
1个回答
0
投票

如果您仅使用名称进行搜索,这似乎有问题...可能需要考虑使用电子邮件或其他方式。

下面的内容未经测试,但应该可以帮助您...我已设置将人员 ID 更改为您在线列出的组织(如果此人存在但其组织为空或不同)。要关闭它,只需将顶部的值更改为 false。

    const sheet = SpreadsheetApp.getActive().getSheetByName('Sheet name');
const apiToken = "INSERT_YOUR_API_TOKEN_HERE";
const update_person_org = true;

function checkPerson(name) {
  var personsUrl =  'https://api.pipedrive.com/v1/persons/search?&term='+name.replace(' ', '%20')+'&fields=name&exact_match=true&api_token='+apiToken;
  Logger.log(personsUrl)
  var personResponse = UrlFetchApp.fetch(personsUrl);
  var persons = JSON.parse(personResponse.getContentText()).data.items;
  if (persons.length > 0) {
    person_org_id = '';
    var first_person = persons[0]['item']
    person_id = first_person.id;
    if (first_person['organization']){person_org_id = first_person['organization']['id'];}
    return {personExists: true, person_id: person_id, person_org_id: person_org_id};
  }
  else {return {personExists: false, person_id: '', person_org_id: ''};}
}


function UpdatePerson(person_id, data){
  var url = 'https://api.pipedrive.com/v1/person/' + person_id+ '?api_token=' + apiToken;
  // var data = { [field_name]: todays_date };
  console.log(url);
  var options = {
    'method': 'put',
    'contentType': 'application/json',
    'payload': JSON.stringify(data)
  };
  var response = UrlFetchApp.fetch(url, options);
  return response.getResponseCode();
}


function createPipedriveEntity() {
  // var sheetId = ‘My sheet Id’; // Replace “My sheet Id” with the ID of your own spreadsheet
  // var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(“Sheet name”); // Replace “Sheet name” with the name of your spreadsheet
  var last_row = sheet.getLastRow();
  for (var row = 2; row <= last_row; row++) { // Start from the second row
    var company_name = sheet.getRange("AT" + row).getValue();
    var person_name = sheet.getRange("X" + row).getValue();
    var person_email = sheet.getRange("N" + row).getValue();
    var person_phone = sheet.getRange("FQ" + row).getValue();

      // Check if the company already exists in Pipedrive
    var organizationExists = false;
    var organizationsUrl = "https://api.pipedrive.com/v1/organizations/find?term=" + company_name + "&api_token=" + apiToken;
    var organizationsResponse = UrlFetchApp.fetch(organizationsUrl);
    var organizations = JSON.parse(organizationsResponse.getContentText()).data;

    if (organizations.length > 0) {
      organizationExists = true;
      var company_id = organizations[0].id;
      Logger.log("Company found: " + company_name + " (ID: " + company_id + ")");
    }
      // If the company does not exist, create it in Pipedrive
    else {
      var url = "https://api.pipedrive.com/v1/organizations?api_token=" + apiToken;
      var payload = {
        "name": company_name
      };
      var options = {
        "method": "post",
        "contentType": "application/json",
        "payload": JSON.stringify(payload)
      };
      var response = UrlFetchApp.fetch(url, options);
      var company = JSON.parse(response);
      var company_id = company.data.id;
      Logger.log("Company created: " + company_name + " (ID: " + company_id + ")");
    }

    if (person_name && company_id) {
      var personCheck= checkPersonExists(person_name);
      Logger.log("Person Check: " + personCheck);
        // Add the person to the company
      if (!personCheck['personExists']) {
        var url = "https://api.pipedrive.com/v1/persons?api_token=" + apiToken;
        var payload = {
            "name": person_name,
            "email": person_email,
            "phone": person_phone,
            "org_id": company_id
          };
        var options = {
        "method": "post",
        "contentType": "application/json",
        "payload": JSON.stringify(payload)
        };
        var response = UrlFetchApp.fetch(url, options);
        var person = JSON.parse(response);
        var person_id = person.data.id;
        Logger.log("Person added: " + person_name + " (ID: " + person_id + ")");
      }
      // If you have update_person_org set to true + the person was found but has either no org id or the org id is different --> update the persons org to the company id
    else 
      if (update_person_org && personCheck['personExists'] && personCheck['person_or g_id'] != company_id) {
        Logger.log('Updating Person Org from ' + person_org + ' to ' + company_id)
        var person_update = {id: person_id, org_id: company_id};
        var putResponse = UpdatePerson(person_id, person_update);
        Logger.log('Person Update Response Code: ' + putResponse);
      }
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.