88e816c576
Ежедневный контроль баланса DaData/Поставщик/Yandex Cloud плиткой дашборда. - Таблица external_service_balances (pgsql_supplier, BYPASSRLS, last-value upsert) - BalanceHealth: чистая логика светофора (red <floor или <3д; amber <floor или <7д) - BalanceProvider+DTO; провайдеры DaData(API)/YC(OAuth→IAM→billing)/Supplier(Playwright) - RefreshExternalBalancesJob: изоляция провайдеров (try/catch), расписание 06:30 МСК - AdminDashboardController::balances() + плитка в summary + topup_url (кнопка «Пополнить») - Тесты: BalanceHealth, 3 провайдера, джоба, endpoint (102 теста зелёные) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
117 lines
6.1 KiB
PHP
117 lines
6.1 KiB
PHP
<?php
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Third Party Services
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| This file is for storing the credentials for third party services such
|
|
| as Mailgun, Postmark, AWS and more. This file provides the de facto
|
|
| location for this type of information, allowing packages to have
|
|
| a conventional file to locate the various service credentials.
|
|
|
|
|
*/
|
|
|
|
'postmark' => [
|
|
'key' => env('POSTMARK_API_KEY'),
|
|
],
|
|
|
|
'resend' => [
|
|
'key' => env('RESEND_API_KEY'),
|
|
],
|
|
|
|
'ses' => [
|
|
'key' => env('AWS_ACCESS_KEY_ID'),
|
|
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
|
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
|
],
|
|
|
|
'slack' => [
|
|
'notifications' => [
|
|
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
|
|
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
|
|
],
|
|
],
|
|
|
|
// Капча самозаписи (G1/SP1). driver=null → NullCaptchaVerifier (dev/test).
|
|
// Реальный Yandex SmartCaptcha подключается позже (SP3/ops).
|
|
'captcha' => [
|
|
'driver' => env('CAPTCHA_DRIVER', 'null'),
|
|
'fake_passes' => filter_var(env('CAPTCHA_FAKE_PASSES', true), FILTER_VALIDATE_BOOL),
|
|
'yandex_server_key' => env('YANDEX_SMARTCAPTCHA_SERVER_KEY'),
|
|
'yandex_validate_url' => env('YANDEX_SMARTCAPTCHA_VALIDATE_URL', 'https://smartcaptcha.cloud.yandex.ru/validate'),
|
|
],
|
|
|
|
'supplier' => [
|
|
'login' => env('SUPPLIER_LOGIN'),
|
|
'password' => env('SUPPLIER_PASSWORD'),
|
|
'portal_url' => env('SUPPLIER_PORTAL_URL', 'https://crm.bp-gr.ru'),
|
|
'alert_email' => env('SUPPLIER_ALERT_EMAIL', 'ops@liderra.ru'),
|
|
// Плитка балансов (28.06): оценка расхода/день + пороги светофора + ссылка пополнения.
|
|
// avg_lead_price_rub=0 → расход неизвестен (days_left=null). topup_url по умолчанию =
|
|
// кабинет (portal_url); уточнить прямую страницу пополнения при разведке.
|
|
'avg_lead_price_rub' => (float) env('SUPPLIER_AVG_LEAD_PRICE_RUB', 0),
|
|
'red_floor_rub' => (int) env('SUPPLIER_RED_FLOOR_RUB', 5000),
|
|
'amber_floor_rub' => (int) env('SUPPLIER_AMBER_FLOOR_RUB', 15000),
|
|
'topup_url' => env('SUPPLIER_TOPUP_URL', env('SUPPLIER_PORTAL_URL', 'https://crm.bp-gr.ru')),
|
|
],
|
|
|
|
// DaData phone cleaner — резолв региона лида по телефону (lead region resolution).
|
|
// Ключи → YC Lockbox на проде; на dev/staging — .env. enabled=false до раскатки.
|
|
'dadata' => [
|
|
'api_key' => env('DADATA_API_KEY'),
|
|
'secret' => env('DADATA_SECRET'),
|
|
'timeout_ms' => (int) env('DADATA_TIMEOUT_MS', 2000),
|
|
'retries' => (int) env('DADATA_RETRIES', 1),
|
|
'daily_cap_rub' => (int) env('DADATA_DAILY_CAP_RUB', 10000),
|
|
'call_cost_kopecks' => (int) env('DADATA_CALL_COST_KOPECKS', 60), // ≈0.60 ₽/вызов, откалибровать по тарифу
|
|
'enabled' => filter_var(env('LEAD_REGION_RESOLVER_ENABLED', false), FILTER_VALIDATE_BOOL),
|
|
'cache_ttl_days' => (int) env('PHONE_REGION_CACHE_TTL_DAYS', 30),
|
|
// G1/SP2: подтяжка организации по ИНН (suggestions findById/party). Тот же api_key
|
|
// (Token), secret не нужен. Default false → NullPartyLookup (dev/тесты не ходят в сеть).
|
|
'party_enabled' => filter_var(env('DADATA_PARTY_ENABLED', false), FILTER_VALIDATE_BOOL),
|
|
// Плитка балансов (28.06): чтение баланса профиля + пороги светофора + ссылка пополнения.
|
|
'balance_url' => env('DADATA_BALANCE_URL', 'https://dadata.ru/api/v2/profile/balance'),
|
|
'red_floor_rub' => (int) env('DADATA_RED_FLOOR_RUB', 500),
|
|
'amber_floor_rub' => (int) env('DADATA_AMBER_FLOOR_RUB', 2000),
|
|
'topup_url' => env('DADATA_TOPUP_URL', 'https://dadata.ru/profile/#billing'),
|
|
],
|
|
|
|
// Плитка балансов (28.06): Yandex Cloud биллинг (серверы + Managed PG ~18к/мес).
|
|
// OAuth владельца (interim) → IAM-токен → billing API. SA billing-reader создан,
|
|
// миграция на него — follow-up (только источник токена сменится). console_billing_url
|
|
// + billing_account_id строят прямую ссылку «Пополнить» в дашборде.
|
|
'yandex_cloud' => [
|
|
'oauth_token' => env('YC_OAUTH_TOKEN'),
|
|
'billing_account_id' => env('YC_BILLING_ACCOUNT_ID'),
|
|
'iam_url' => env('YC_IAM_URL', 'https://iam.api.cloud.yandex.net/iam/v1/tokens'),
|
|
'billing_url' => env('YC_BILLING_URL', 'https://billing.api.cloud.yandex.net/billing/v1/billingAccounts'),
|
|
'console_billing_url' => env('YC_CONSOLE_BILLING_URL', 'https://console.yandex.cloud/billing/accounts'),
|
|
'daily_spend_rub' => (int) env('YC_DAILY_SPEND_RUB', 600), // оценка ~18к/мес; откалибровать
|
|
'red_floor_rub' => (int) env('YC_RED_FLOOR_RUB', 1000),
|
|
'amber_floor_rub' => (int) env('YC_AMBER_FLOOR_RUB', 5000),
|
|
],
|
|
|
|
// G7-A: клиентская «Помощь».
|
|
'support' => [
|
|
'email' => env('SUPPORT_EMAIL', 'support@liderra.ru'),
|
|
],
|
|
'jivosite' => [
|
|
'widget_id' => env('JIVO_WIDGET_ID'),
|
|
],
|
|
|
|
// Платёжный шлюз ЮKassa. webhook_ip_allowlist — CSV IP/CIDR из env (defense-in-depth
|
|
// на /api/webhook/payment). Пусто → fail-open (поток не ломается). На проде заполнить
|
|
// опубликованными ЮKassa подсетями: 185.71.76.0/27,185.71.77.0/27,77.75.153.0/25,
|
|
// 77.75.154.128/25,77.75.156.11,77.75.156.35,2a02:5180::/32.
|
|
'yookassa' => [
|
|
'webhook_ip_allowlist' => array_values(array_filter(array_map(
|
|
'trim',
|
|
explode(',', (string) env('YOOKASSA_WEBHOOK_IPS', '')),
|
|
))),
|
|
],
|
|
|
|
];
|