Перейти к основному содержанию
Автоматически отправляйте данные по сделке в вашу систему выставления счетов (Stripe, QuickBooks, Xero и т. д.). когда сделка выиграна.

Структура рабочего процесса

  1. Триггер: Запись обновлена (объект ‘Сделка’)
  2. Фильтр: Этап = Закрыто — выиграно
  3. Поиск записи: Получить сведения о компании
  4. Код (необязательно): Сформатировать полезную нагрузку
  5. HTTP-запрос: Отправить в систему выставления счетов

Шаг 1: Настройте триггер

  1. Создайте новый рабочий процесс
  2. Выберите триггер Запись обновлена
  3. Выберите Сделка в качестве объекта

Шаг 2: Отфильтруйте по «Закрыто — выиграно»

Добавьте действие Фильтр, чтобы продолжать только когда сделка выиграна:
НастройкаЗначение
ПолеЭтап
УсловиеРавно
ЗначениеCLOSED_WON (или название вашего этапа)
Триггер срабатывает при любом обновлении Сделки. Фильтр гарантирует, что рабочий процесс продолжится только когда этап изменится на «Закрыто — выиграно».

Шаг 3: Получите сведения о компании

Запись Сделки может не содержать всех полей Компании, которые нужны для счёта. Добавьте действие Поиск записи:
НастройкаЗначение
ОбъектКомпания
Сопоставление поID равен {{trigger.object.companyId}}
Это вернёт полную запись Компании с платёжным адресом, налоговым идентификатором и т. д.

Шаг 4: Сформатируйте полезную нагрузку (необязательно)

Если ваша система выставления счетов ожидает определённый формат, добавьте действие Код:
export const main = async (params: {
  opportunity: any;
  company: any;
}): Promise<object> => {
  const { opportunity, company } = params;

  return {
    invoice: {
      // Customer info from Company
      customer_name: company.name,
      customer_email: company.email || "",
      billing_address: {
        line1: company.address?.street || "",
        city: company.address?.city || "",
        postal_code: company.address?.postalCode || "",
        country: company.address?.country || ""
      },
      tax_id: company.taxId || null,

      // Invoice details from Opportunity
      amount: opportunity.amount,
      currency: opportunity.currency || "USD",
      description: `Invoice for ${opportunity.name}`,
      due_days: 30,

      // Reference back to Twenty
      metadata: {
        opportunity_id: opportunity.id,
        company_id: company.id
      }
    }
  };
};

Шаг 5: Отправьте в систему выставления счетов

Добавьте действие HTTP-запрос:
НастройкаЗначение
МетодPOST
URL-адресКонечная точка API вашей системы выставления счетов
ЗаголовкиAuthorization: Bearer YOUR_API_KEY
Содержимое{{code.invoice}} или сопоставьте поля напрямую

Пример: счёт Stripe

POST https://api.stripe.com/v1/invoices
Headers:
  Authorization: Bearer sk_live_xxx
  Content-Type: application/x-www-form-urlencoded

Body:
  customer: {{company.stripeCustomerId}}
  collection_method: send_invoice
  days_until_due: 30

Пример: счёт QuickBooks

POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
Headers:
  Authorization: Bearer YOUR_ACCESS_TOKEN
  Content-Type: application/json

Body: {{code.invoice}}

Итоговая сводка рабочего процесса

ШагДействиеНазначение
1Триггер: запись обновленаСрабатывает при любых изменениях в Сделке
2ФильтрПродолжать только если Этап = Закрыто — выиграно
3Поиск записиПолучить полные сведения о компании для выставления счёта
4КодСформатировать данные для API выставления счетов
5HTTP-запросСоздать счёт во внешней системе

Советы

  • Сохраняйте внешние ID: Сохраните идентификатор счёта, возвращённый API, обратно в Сделку с помощью действия Обновить запись
  • Обработка ошибок: Добавьте ветку, чтобы отправлять уведомление, если HTTP-запрос завершится ошибкой
  • Сначала протестируйте: Используйте песочницу/тестовый режим вашей системы выставления счетов перед запуском в рабочую среду

Связанные материалы