🧩 Кастомная интеграция Zoho CRM и Zoho Books: когда стандартных решений недостаточно
Интеграция Zoho CRM и Zoho Books — задача, которая вроде бы уже решена внутри самой экосистемы Zoho. Есть стандартные подключения, автоматическая синхронизация контактов и инвойсов. Но на практике часто возникают сценарии, где этого недостаточно:
В таких случаях на помощь приходит Deluge и Zoho API. Сегодня я покажу, как можно реализовать передачу счета из модуля Invoices в Zoho CRM напрямую в Zoho Books, по собственному сценарию. Код полностью готов к использованию — вы можете скопировать его, настроить под себя и внедрить.
- В счет нужно передавать дополнительные поля.
- Требуется особая логика работы с валютами.
- Клиент хочет, чтобы передавались только активные контакты или специфические товары.
- Необходимо выбирать, когда именно создавать инвойс, и делать это вручную через кнопку.
В таких случаях на помощь приходит 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");
}🛠 Как подключить
- Настройте соединения (crm и books) в разделе Connections.
- Замените organization_id и currency_id на ваши.
- Добавьте функцию как кнопку на модуле Invoices.
- Убедитесь, что у товаров в CRM указано корректное имя и цена.
📚 Заключение
Интеграция Zoho CRM и Books через Deluge даёт полный контроль над процессом. Такой подход особенно полезен, когда стандартная интеграция не учитывает вашу бизнес-логику. Код из этой статьи вы можете адаптировать под любые задачи: учёт налогов, кастомные статусы, дополнительную проверку и т.д.
Если вам нужно более сложное решение или интеграция с другими Zoho-продуктами — напишите нам. Мы помогаем компаниям настраивать Zoho под реальный бизнес, а не наоборот.
Если вам нужно более сложное решение или интеграция с другими Zoho-продуктами — напишите нам. Мы помогаем компаниям настраивать Zoho под реальный бизнес, а не наоборот.