Блог

Когда стандартной интеграции Zoho CRM и Books недостаточно: готовый скрипт для кастомного решения

🧩 Кастомная интеграция Zoho CRM и Zoho Books: когда стандартных решений недостаточно

Интеграция Zoho CRM и Zoho Books — задача, которая вроде бы уже решена внутри самой экосистемы Zoho. Есть стандартные подключения, автоматическая синхронизация контактов и инвойсов. Но на практике часто возникают сценарии, где этого недостаточно:

  • В счет нужно передавать дополнительные поля.
  • Требуется особая логика работы с валютами.
  • Клиент хочет, чтобы передавались только активные контакты или специфические товары.
  • Необходимо выбирать, когда именно создавать инвойс, и делать это вручную через кнопку.

В таких случаях на помощь приходит Deluge и Zoho API. Сегодня я покажу, как можно реализовать передачу счета из модуля Invoices в Zoho CRM напрямую в Zoho Books, по собственному сценарию. Код полностью готов к использованию — вы можете скопировать его, настроить под себя и внедрить.

📌 Что делает скрипт?

  • Получает данные инвойса из Zoho CRM по ID.
  • Ищет контакт в Zoho Books по имени клиента.
  • Подбирает товар по названию и валюту по ISO-коду.
  • Формирует структуру line_items для Zoho Books.
  • Создаёт новый инвойс в Zoho Books с нужными полями.

🧠 Что нужно знать перед использованием

  • Скрипт использует Deluge и выполняется в функции кнопки.
  • Подключения (connection:"crm" и connection:"books") должны быть настроены заранее через Zoho Connections.
  • Указан organization_id вашей организации в Zoho Books — его нужно получить из настроек и заменить на свой.
  • Работает с полями из стандартного модуля Invoices, при необходимости адаптируйте под свою структуру.
string button.SendInvoieToBooks(String ID)
{
    info ID;

    // Получаем инвойс из CRM
    Invoice = invokeurl
    [
        url :"https://www.zohoapis.com/crm/v8/Invoices/" + ID
        type :GET
        connection:"crm"
    ];
    Invoice = Invoice.get("data").get(0);

    AccountName = Invoice.get("Account_Name").get("name");
	
    // Ищем контакт в Zoho Books
    organization_id = "ВАШ_ORG_ID";
    response = invokeurl
    [
        url :"https://www.zohoapis.com/books/v3/contacts?organization_id=" + organization_id + "&contact_name=" + AccountName
        type :GET
        connection:"books"
    ];
    response = response.get("contacts");
    for each  rec in response
    {
        if(rec.get("status").contains("inactive") == false)
        {
            contactID = rec.get("contact_id");
        }
    }

    // Подготовка данных
    invoice_number = Invoice.get("Invoice_Number");
    date = Invoice.get("Invoice_Date");
    due_date = Invoice.get("Due_Date");
    Product_Details = Invoice.get("Invoiced_Items");
    Currency = Invoice.get("Currency");

    if(Currency == "USD") currency_id = "ID_ДЛЯ_USD";
    if(Currency == "RUB") currency_id = "ID_ДЛЯ_RUB";
    if(Currency == "EUR") currency_id = "ID_ДЛЯ_EUR";
    if(Currency == "AED") currency_id = "ID_ДЛЯ_AED";

    listVar = List();
    for each  rec in Product_Details
    {
        ProductName = rec.get("Product_Name").get("name");
        response = invokeurl
        [
            url :"https://www.zohoapis.com/books/v3/items?organization_id=" + organization_id + "&name_startswith=" + ProductName
            type :GET
            connection:"books"
        ];
        ProductID = response.get("item_id");

        mapVar = Map();
        mapVar.put("item_id",ProductID);
        mapVar.put("name",ProductName);
        mapVar.put("rate",rec.get("List_Price"));
        mapVar.put("quantity",rec.get("Quantity"));
        listVar.add(mapVar);
    }

    // Создаём инвойс в Zoho Books
    values = Map();
    values.put("invoice_number",invoice_number);
    values.put("customer_id",contactID);
    values.put("currency_id",currency_id);
    values.put("date",date);
    values.put("due_date",due_date);
    values.put("line_items",listVar);

    response = zoho.books.createRecord("Invoices",organization_id,values,"books");
    return response.get("message");
}

🛠 Как подключить

  1. Настройте соединения (crm и books) в разделе Connections.
  2. Замените organization_id и currency_id на ваши.
  3. Добавьте функцию как кнопку на модуле Invoices.
  4. Убедитесь, что у товаров в CRM указано корректное имя и цена.

📚 Заключение

Интеграция Zoho CRM и Books через Deluge даёт полный контроль над процессом. Такой подход особенно полезен, когда стандартная интеграция не учитывает вашу бизнес-логику. Код из этой статьи вы можете адаптировать под любые задачи: учёт налогов, кастомные статусы, дополнительную проверку и т.д.

Если вам нужно более сложное решение или интеграция с другими Zoho-продуктами — напишите нам. Мы помогаем компаниям настраивать Zoho под реальный бизнес, а не наоборот.