Kommo + Zoho Books: автоматические счета из воронки продаж

Kommo + Zoho Books: автоматические счета из воронки продаж

Zoho Books — бухгалтерская платформа из экосистемы Zoho с поддержкой мультивалютных счетов, налоговой отчётности и встроенного эквайринга. В отличие от Wave, Zoho Books использует полноценный REST API без GraphQL — что упрощает интеграцию через стандартные инструменты. Связка с Kommo автоматизирует выставление счетов: сделка перешла на этап -> счёт создан в Zoho Books -> после оплаты CRM обновляется.

Zoho Books vs Wave vs Xero: когда выбирать Zoho Books

Выбор бухгалтерской платформы часто предшествует интеграции с CRM. Краткое позиционирование:

ПараметрZoho BooksWaveXero
APIRESTGraphQLREST
Бесплатный тарифДо $50k выручки/годДа (базовый)Нет
МультивалютностьДаЧастичноДа
ЭкосистемаZoho (50+ продуктов)НезависимыйНезависимый
Встроенный эквайрингДа (Stripe, PayPal)США/КанадаДа

Zoho Books выигрывает если компания уже использует Zoho CRM, Zoho Projects или другие продукты Zoho — интеграция нативная. Для компаний на Kommo интеграция строится через API.

Что синхронизируется

Kommo -> Zoho Books:
— Контакт сделки -> Customer в Zoho Books (с дедупликацией по email)
— Сумма и позиции сделки -> строки Invoice
— Срок оплаты из кастомного поля -> Payment Terms
— ID и ссылка на инвойс -> кастомное поле в карточке Kommo

Zoho Books -> Kommo:
— Статус Invoice = paid -> поле «Оплачено» в сделке Kommo
— Перевод сделки на этап «Оплата получена»
— Сумма оплаты и дата -> Note на сделке

Архитектура

Kommo Webhook: сделка перешла на этап «Выставить счёт»
  ↓ Backend
  1. GET /api/v4/leads/{id} + contacts
  2. Zoho Books API: GET /contacts?email={email}
     -> найден: использовать contact_id
     -> не найден: POST /contacts (создать)
  3. Zoho Books API: POST /invoices
     -> получить invoice_id и invoice_url
  4. Zoho Books API: POST /invoices/{id}/email
     -> отправить счёт клиенту
  5. Kommo: PATCH /leads/{id}
     -> обновить кастомные поля invoice_id, invoice_url

Zoho Books Webhook: invoice.payment_received
  ↓ Backend
  1. GET invoice details (custom_field: kommo_deal_id)
  2. Kommo: PATCH /leads/{deal_id}
     -> payment_status = paid, этап -> «Оплата получена»

Zoho Books REST API: ключевые запросы

Zoho Books использует OAuth 2.0. Все запросы требуют organization_id в параметрах.

Поиск клиента:

response = requests.get(
    'https://books.zoho.com/api/v3/contacts',
    params={
        'organization_id': ORG_ID,
        'contact_name': company_name,
        'email': email
    },
    headers={'Authorization': f'Zoho-oauthtoken {access_token}'}
)
contacts = response.json().get('contacts', [])

Создание инвойса:

invoice_data = {
    'customer_id': customer_id,
    'invoice_number': f'INV-{deal_id}',
    'date': today_str,
    'payment_terms': 30,  # Net 30
    'line_items': [
        {
            'name': deal_name,
            'quantity': 1,
            'rate': deal_price,
            'tax_id': TAX_ID  # если применимо
        }
    ],
    'custom_fields': [
        {'label': 'Kommo Deal ID', 'value': str(deal_id)}
    ]
}
response = requests.post(
    'https://books.zoho.com/api/v3/invoices',
    params={'organization_id': ORG_ID},
    json=invoice_data,
    headers={'Authorization': f'Zoho-oauthtoken {access_token}'}
)

Отправка счёта клиенту:

requests.post(
    f'https://books.zoho.com/api/v3/invoices/{invoice_id}/email',
    params={'organization_id': ORG_ID},
    json={
        'send_from_org_email_id': True,
        'to_mail_ids': [client_email],
        'subject': f'Счёт {invoice_number} от {company_name}'
    },
    headers={'Authorization': f'Zoho-oauthtoken {access_token}'}
)

Обработка налогов

Zoho Books поддерживает налоговые профили (НДС, GST, Sales Tax). Если компания работает с клиентами в разных юрисдикциях — налог определяется по стране клиента:

TAX_MAP = {
    'DE': 'VAT_19',      # Германия - НДС 19%
    'UK': 'VAT_20',      # Великобритания - НДС 20%
    'US': None,           # США - без VAT
    'AU': 'GST_10',      # Австралия - GST 10%
}

def get_tax_id(country_code: str) -> str | None:
    return TAX_MAP.get(country_code)

Страна клиента берётся из кастомного поля Kommo или из данных контакта.

Реальный кейс

Консалтинговая компания (EU-рынок, 15–20 проектов в месяц, клиенты в 6 странах):

  • До: бухгалтер вручную создавал счета в Zoho Books, запрашивая данные у менеджеров. Среднее время от Won до выставления счёта — 3 дня.
  • После: Won в Kommo -> счёт в Zoho Books с правильным налогом по стране клиента -> отправлен клиенту -> в течение 30 минут после закрытия сделки.
  • Дополнительный эффект: бухгалтер перестал запрашивать данные у менеджеров — всё приходит автоматически.

Аналогичную логику реализовывали в интеграции Kommo и Wave — там другой API (GraphQL), но паттерн идентичен.

Для кого актуально

  • Используется Zoho Books (или планируется переход на Zoho-экосистему)
  • Клиенты в нескольких странах с разными налоговыми требованиями
  • Объём: 10+ инвойсов в месяц
  • Важно замкнуть цикл: Won -> счёт -> оплата -> CRM

Часто задаваемые вопросы

Zoho Books OAuth — сложнее ли настройки чем у Wave?

Zoho OAuth стандартный: Authorization Code Flow через accounts.zoho.com. Нужно зарегистрировать приложение в Zoho API Console, получить client_id и client_secret. Дополнительная особенность: токены Zoho региональные — EU-аккаунты используют accounts.zoho.eu, не .com. Это частая причина ошибок при первом подключении.

Zoho Books поддерживает recurring invoices — можно ли автоматизировать ретейнеры?

Да. Zoho Books имеет Recurring Invoice API: создаётся шаблон с интервалом (monthly, quarterly) и датой начала. Интеграция с Kommo создаёт recurring invoice при переходе сделки на этап «Ретейнер активен» и отменяет при переходе на «Завершено».

Нужна ли платная подписка Zoho Books?

Zoho Books бесплатен для бизнеса с выручкой до $50,000/год. API доступен на всех тарифах. При превышении лимита — от $15/мес. Значительно дешевле Xero или QuickBooks.

Как передать несколько позиций из Kommo?

Через кастомные поля типа multilist или через отдельные поля «Позиция / Количество / Цена». Каждая позиция маппируется в строку line_items. Если детальных позиций нет — вся сумма сделки идёт одной строкой.

Итого

  • Zoho Books REST API проще в интеграции чем Wave GraphQL — стандартный OAuth, понятные endpoint’ы
  • Поддержка мультивалютности и налоговых профилей по стране клиента — важно для EU-рынка
  • Паттерн: Won -> инвойс -> отправка -> оплата -> обновление Kommo
  • Бесплатный тариф до $50k выручки — актуально для малого бизнеса
  • Типовой срок разработки — 2–3 недели

Если вы используете Zoho Books и Kommo и хотите автоматизировать выставление счетов — опишите вашу налоговую структуру и схему выставления. Exceltic.dev разберёт маппинг и предложит архитектуру.

Ещё статьи

Все →