Автоматически отправляйте данные по сделке в вашу систему выставления счетов (Stripe, QuickBooks, Xero и т. д.). когда сделка выиграна.
Структура рабочего процесса
- Триггер: Запись обновлена (объект ‘Сделка’)
- Фильтр: Этап = Закрыто — выиграно
- Поиск записи: Получить сведения о компании
- Код (необязательно): Сформатировать полезную нагрузку
- HTTP-запрос: Отправить в систему выставления счетов
Шаг 1: Настройте триггер
- Создайте новый рабочий процесс
- Выберите триггер Запись обновлена
- Выберите Сделка в качестве объекта
Шаг 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 выставления счетов |
| 5 | HTTP-запрос | Создать счёт во внешней системе |
Советы
- Сохраняйте внешние ID: Сохраните идентификатор счёта, возвращённый API, обратно в Сделку с помощью действия Обновить запись
- Обработка ошибок: Добавьте ветку, чтобы отправлять уведомление, если HTTP-запрос завершится ошибкой
- Сначала протестируйте: Используйте песочницу/тестовый режим вашей системы выставления счетов перед запуском в рабочую среду
Связанные материалы