{"openapi":"3.1.0","info":{"title":"Rostelecom VATS Bridge MVP","description":"MVP-шлюз для Интеграционного API Ростелеком ВАТС: webhook, users_info, user_calls_charges, внешние исходящие вызовы и SQLite-кэш для отчётов OpenWebUI.","version":"0.6.0"},"paths":{"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Health Health Get"}}}}}}},"/rostelecom/webhook/{path}":{"patch":{"summary":"Rostelecom Webhook","operationId":"rostelecom_webhook_rostelecom_webhook__path__patch","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Rostelecom Webhook Rostelecom Webhook  Path  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Rostelecom Webhook","operationId":"rostelecom_webhook_rostelecom_webhook__path__patch","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Rostelecom Webhook Rostelecom Webhook  Path  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Rostelecom Webhook","operationId":"rostelecom_webhook_rostelecom_webhook__path__patch","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Rostelecom Webhook Rostelecom Webhook  Path  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Rostelecom Webhook","operationId":"rostelecom_webhook_rostelecom_webhook__path__patch","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Rostelecom Webhook Rostelecom Webhook  Path  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/rostelecom/webhook":{"patch":{"summary":"Rostelecom Webhook","operationId":"rostelecom_webhook_rostelecom_webhook_patch","parameters":[{"name":"path","in":"query","required":false,"schema":{"type":"string","default":"","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Rostelecom Webhook Rostelecom Webhook Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"summary":"Rostelecom Webhook","operationId":"rostelecom_webhook_rostelecom_webhook_patch","parameters":[{"name":"path","in":"query","required":false,"schema":{"type":"string","default":"","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Rostelecom Webhook Rostelecom Webhook Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Rostelecom Webhook","operationId":"rostelecom_webhook_rostelecom_webhook_patch","parameters":[{"name":"path","in":"query","required":false,"schema":{"type":"string","default":"","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Rostelecom Webhook Rostelecom Webhook Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Rostelecom Webhook","operationId":"rostelecom_webhook_rostelecom_webhook_patch","parameters":[{"name":"path","in":"query","required":false,"schema":{"type":"string","default":"","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Rostelecom Webhook Rostelecom Webhook Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events/recent":{"get":{"summary":"Recent Events","operationId":"recent_events_api_events_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Recent Events Api Events Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/calls/recent":{"get":{"summary":"Recent Calls","operationId":"recent_calls_api_calls_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Recent Calls Api Calls Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/users-info":{"post":{"summary":"Users Info","operationId":"users_info_api_rt_users_info_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsersInfoRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Users Info Api Rt Users Info Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/users":{"get":{"summary":"Users Short","operationId":"users_short_api_rt_users_get","parameters":[{"name":"user_name","in":"query","required":false,"schema":{"type":"string","default":"","title":"User Name"}},{"name":"user_pin","in":"query","required":false,"schema":{"type":"string","default":"","title":"User Pin"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Users Short Api Rt Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/user-calls-charges":{"post":{"summary":"User Calls Charges","operationId":"user_calls_charges_api_rt_user_calls_charges_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCallsChargesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response User Calls Charges Api Rt User Calls Charges Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/user-calls-summary":{"post":{"summary":"User Calls Summary","operationId":"user_calls_summary_api_rt_user_calls_summary_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallsSummaryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response User Calls Summary Api Rt User Calls Summary Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/external-outgoing-calls-summary":{"post":{"summary":"Outgoing Calls Summary","description":"Сводка по внешним исходящим вызовам клиентам.\n\nМетод Ростелекома user_calls_charges возвращает исходящие вызовы пользователя домена,\nа bridge дополнительно исключает внутренние номера и служебные SIP-пользователи.","operationId":"outgoing_calls_summary_api_rt_external_outgoing_calls_summary_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutgoingCallsSummaryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Outgoing Calls Summary Api Rt External Outgoing Calls Summary Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/outgoing-calls-summary":{"post":{"summary":"Outgoing Calls Summary","description":"Сводка по внешним исходящим вызовам клиентам.\n\nМетод Ростелекома user_calls_charges возвращает исходящие вызовы пользователя домена,\nа bridge дополнительно исключает внутренние номера и служебные SIP-пользователи.","operationId":"outgoing_calls_summary_api_rt_outgoing_calls_summary_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutgoingCallsSummaryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Outgoing Calls Summary Api Rt Outgoing Calls Summary Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/external-outgoing-calls-details":{"post":{"summary":"Outgoing Calls Details","description":"Детальный список исходящих вызовов по пользователям за период.","operationId":"outgoing_calls_details_api_rt_external_outgoing_calls_details_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutgoingCallsDetailsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Outgoing Calls Details Api Rt External Outgoing Calls Details Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/outgoing-calls-details":{"post":{"summary":"Outgoing Calls Details","description":"Детальный список исходящих вызовов по пользователям за период.","operationId":"outgoing_calls_details_api_rt_outgoing_calls_details_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutgoingCallsDetailsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Outgoing Calls Details Api Rt Outgoing Calls Details Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/domain-call-history/request":{"post":{"summary":"Domain Call History Request","operationId":"domain_call_history_request_api_rt_domain_call_history_request_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCallHistoryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Domain Call History Request Api Rt Domain Call History Request Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/domain-call-history/download":{"post":{"summary":"Download Call History","operationId":"download_call_history_api_rt_domain_call_history_download_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DownloadCallHistoryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/call-info":{"post":{"summary":"Call Info","operationId":"call_info_api_rt_call_info_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallInfoRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Call Info Api Rt Call Info Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/rt/get-record":{"post":{"summary":"Get Record","operationId":"get_record_api_rt_get_record_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRecordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Get Record Api Rt Get Record Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/export/events.csv":{"get":{"summary":"Export Events Csv","operationId":"export_events_csv_api_export_events_csv_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10000,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/export/calls.csv":{"get":{"summary":"Export Calls Csv","operationId":"export_calls_csv_api_export_calls_csv_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10000,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/logs/events.tail":{"get":{"summary":"Events Tail","operationId":"events_tail_api_logs_events_tail_get","parameters":[{"name":"lines","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Lines"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/external-outgoing-summary":{"post":{"summary":"Report Manager Outgoing Summary","description":"Готовый отчёт для OpenWebUI: внешние исходящие вызовы клиентам по менеджерам.\nВозвращает totals, managers, топы и подсказки для LLM.","operationId":"report_manager_outgoing_summary_api_reports_external_outgoing_summary_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerOutgoingReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Report Manager Outgoing Summary Api Reports External Outgoing Summary Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/manager-outgoing-summary":{"post":{"summary":"Report Manager Outgoing Summary","description":"Готовый отчёт для OpenWebUI: внешние исходящие вызовы клиентам по менеджерам.\nВозвращает totals, managers, топы и подсказки для LLM.","operationId":"report_manager_outgoing_summary_api_reports_manager_outgoing_summary_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagerOutgoingReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Report Manager Outgoing Summary Api Reports Manager Outgoing Summary Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/external-outgoing-quality":{"post":{"summary":"Report Call Quality Basic","description":"Базовая оценка качества без транскрибации: короткие/обычные/длинные исходящие,\nменеджеры с высокой долей коротких звонков.","operationId":"report_call_quality_basic_api_reports_external_outgoing_quality_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallQualityBasicRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Report Call Quality Basic Api Reports External Outgoing Quality Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/call-quality-basic":{"post":{"summary":"Report Call Quality Basic","description":"Базовая оценка качества без транскрибации: короткие/обычные/длинные исходящие,\nменеджеры с высокой долей коротких звонков.","operationId":"report_call_quality_basic_api_reports_call_quality_basic_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallQualityBasicRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Report Call Quality Basic Api Reports Call Quality Basic Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/external-outgoing-daily-dynamics":{"post":{"summary":"Report Daily Dynamics","description":"Динамика исходящих вызовов по дням: звонки, длительность, активные менеджеры, короткие звонки.","operationId":"report_daily_dynamics_api_reports_external_outgoing_daily_dynamics_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyDynamicsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Report Daily Dynamics Api Reports External Outgoing Daily Dynamics Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports/daily-dynamics":{"post":{"summary":"Report Daily Dynamics","description":"Динамика исходящих вызовов по дням: звонки, длительность, активные менеджеры, короткие звонки.","operationId":"report_daily_dynamics_api_reports_daily_dynamics_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DailyDynamicsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Report Daily Dynamics Api Reports Daily Dynamics Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sync/external-outgoing/range":{"post":{"summary":"Sync External Outgoing Range","operationId":"sync_external_outgoing_range_api_sync_external_outgoing_range_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncExternalOutgoingRangeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Sync External Outgoing Range Api Sync External Outgoing Range Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sync/external-outgoing/day":{"post":{"summary":"Sync External Outgoing Day","operationId":"sync_external_outgoing_day_api_sync_external_outgoing_day_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncExternalOutgoingDayRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Sync External Outgoing Day Api Sync External Outgoing Day Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sync/external-outgoing/yesterday":{"post":{"summary":"Sync External Outgoing Yesterday","operationId":"sync_external_outgoing_yesterday_api_sync_external_outgoing_yesterday_post","parameters":[{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Page Size"}},{"name":"short_call_sec","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Short Call Sec"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Sync External Outgoing Yesterday Api Sync External Outgoing Yesterday Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sync/status":{"get":{"summary":"Sync Status","operationId":"sync_status_api_sync_status_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Sync Status Api Sync Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/db/external-outgoing-summary":{"post":{"summary":"Db External Outgoing Summary","operationId":"db_external_outgoing_summary_api_db_external_outgoing_summary_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Db External Outgoing Summary Api Db External Outgoing Summary Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/db/external-outgoing-details":{"post":{"summary":"Db External Outgoing Details","operationId":"db_external_outgoing_details_api_db_external_outgoing_details_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbDetailsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Db External Outgoing Details Api Db External Outgoing Details Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/db/external-outgoing-daily-dynamics":{"post":{"summary":"Db External Outgoing Daily Dynamics","operationId":"db_external_outgoing_daily_dynamics_api_db_external_outgoing_daily_dynamics_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Db External Outgoing Daily Dynamics Api Db External Outgoing Daily Dynamics Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/db/external-outgoing-short-calls":{"post":{"summary":"Db External Outgoing Short Calls","operationId":"db_external_outgoing_short_calls_api_db_external_outgoing_short_calls_post","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"x-api-key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Db External Outgoing Short Calls Api Db External Outgoing Short Calls Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CallInfoRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["session_id"],"title":"CallInfoRequest"},"CallQualityBasicRequest":{"properties":{"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"short_call_sec":{"type":"integer","title":"Short Call Sec","description":"Короткий звонок, секунд","default":20},"long_call_sec":{"type":"integer","title":"Long Call Sec","description":"Длинный содержательный звонок, секунд","default":180},"short_call_rate_warning":{"type":"number","title":"Short Call Rate Warning","description":"Доля коротких звонков для предупреждения","default":0.35},"min_calls_for_warning":{"type":"integer","title":"Min Calls For Warning","description":"Минимум звонков менеджера для попадания в предупреждения","default":10}},"type":"object","required":["date_start","date_end"],"title":"CallQualityBasicRequest"},"CallsSummaryRequest":{"properties":{"date_start":{"type":"string","title":"Date Start"},"date_end":{"type":"string","title":"Date End"},"user_names":{"items":{"type":"string"},"type":"array","title":"User Names","description":"Если пусто, сначала получим users_info и пройдем по всем users.name"},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","default":100}},"type":"object","required":["date_start","date_end"],"title":"CallsSummaryRequest"},"DailyDynamicsRequest":{"properties":{"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"short_call_sec":{"type":"integer","title":"Short Call Sec","description":"Порог короткого звонка в секундах","default":20}},"type":"object","required":["date_start","date_end"],"title":"DailyDynamicsRequest"},"DbDetailsRequest":{"properties":{"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"manager":{"type":"string","title":"Manager","description":"Фильтр по display_name или user_name; пусто = все","default":""},"min_duration_sec":{"type":"integer","title":"Min Duration Sec","default":0},"max_duration_sec":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Duration Sec"},"limit":{"type":"integer","maximum":5000.0,"minimum":1.0,"title":"Limit","default":100},"offset":{"type":"integer","minimum":0.0,"title":"Offset","default":0},"order_by":{"type":"string","title":"Order By","description":"start_call_date_desc|duration_desc|duration_asc","default":"start_call_date_desc"}},"type":"object","required":["date_start","date_end"],"title":"DbDetailsRequest"},"DbReportRequest":{"properties":{"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"short_call_sec":{"type":"integer","title":"Short Call Sec","default":20},"include_inactive":{"type":"boolean","title":"Include Inactive","default":false}},"type":"object","required":["date_start","date_end"],"title":"DbReportRequest"},"DomainCallHistoryRequest":{"properties":{"date_start":{"type":"string","title":"Date Start"},"date_end":{"type":"string","title":"Date End"},"direction":{"type":"integer","title":"Direction","description":"0 все, 1 входящие, 2 исходящие, 3 внутренние","default":0},"state":{"type":"integer","title":"State","description":"0 все, 1 принят, 2 не принят","default":0},"phone_number":{"type":"string","title":"Phone Number","default":""}},"type":"object","required":["date_start","date_end"],"title":"DomainCallHistoryRequest"},"DownloadCallHistoryRequest":{"properties":{"order_id":{"type":"string","title":"Order Id"},"save_to_file":{"type":"boolean","title":"Save To File","default":true}},"type":"object","required":["order_id"],"title":"DownloadCallHistoryRequest"},"GetRecordRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"ip_adress":{"type":"string","title":"Ip Adress","description":"Публичный IP внешней системы; поле в документации написано ip_adress","default":""}},"type":"object","required":["session_id"],"title":"GetRecordRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ManagerOutgoingReportRequest":{"properties":{"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"short_call_sec":{"type":"integer","title":"Short Call Sec","description":"Порог короткого звонка в секундах","default":20},"include_inactive":{"type":"boolean","title":"Include Inactive","description":"Включать пользователей без звонков","default":false}},"type":"object","required":["date_start","date_end"],"title":"ManagerOutgoingReportRequest"},"OutgoingCallsDetailsRequest":{"properties":{"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"user_names":{"items":{"type":"string"},"type":"array","title":"User Names","description":"Если пусто, запросить по всем пользователям"},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","default":100},"min_duration_sec":{"type":"integer","title":"Min Duration Sec","description":"Фильтр минимальной длительности","default":0},"max_duration_sec":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Duration Sec","description":"Фильтр максимальной длительности"},"limit":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Limit","default":1000},"only_external":{"type":"boolean","title":"Only External","description":"Оставлять только внешние исходящие звонки клиентам","default":true}},"type":"object","required":["date_start","date_end"],"title":"OutgoingCallsDetailsRequest"},"OutgoingCallsSummaryRequest":{"properties":{"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"user_names":{"items":{"type":"string"},"type":"array","title":"User Names","description":"Если пусто, сначала получим users_info и пройдем по всем users.name"},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","default":100},"include_zero_users":{"type":"boolean","title":"Include Zero Users","description":"Включать пользователей без исходящих звонков","default":false},"include_calls":{"type":"boolean","title":"Include Calls","description":"Добавить в ответ детальный список звонков по каждому пользователю","default":false},"short_call_sec":{"type":"integer","title":"Short Call Sec","description":"Порог короткого звонка в секундах","default":20},"only_external":{"type":"boolean","title":"Only External","description":"Оставлять только внешние исходящие звонки клиентам; внутренние номера исключаются","default":true}},"type":"object","required":["date_start","date_end"],"title":"OutgoingCallsSummaryRequest"},"SyncExternalOutgoingDayRequest":{"properties":{"date":{"type":"string","title":"Date","description":"Дата в формате YYYY-MM-DD"},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","default":100},"short_call_sec":{"type":"integer","title":"Short Call Sec","default":20},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["date"],"title":"SyncExternalOutgoingDayRequest"},"SyncExternalOutgoingRangeRequest":{"properties":{"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"user_names":{"items":{"type":"string"},"type":"array","title":"User Names","description":"Если пусто, синхронизировать всех пользователей users_info"},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","default":100},"short_call_sec":{"type":"integer","title":"Short Call Sec","default":20},"dry_run":{"type":"boolean","title":"Dry Run","description":"Если true, только посчитать, без записи в БД","default":false}},"type":"object","required":["date_start","date_end"],"title":"SyncExternalOutgoingRangeRequest"},"UserCallsChargesRequest":{"properties":{"user_name":{"type":"string","title":"User Name"},"date_start":{"type":"string","title":"Date Start","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"date_end":{"type":"string","title":"Date End","description":"МСК datetime yyyy-MM-dd HH:mm:ss"},"shift":{"type":"integer","title":"Shift","default":0},"page_size":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Page Size","default":100},"fetch_all":{"type":"boolean","title":"Fetch All","description":"Если true, автоматически забрать все страницы","default":true}},"type":"object","required":["user_name","date_start","date_end"],"title":"UserCallsChargesRequest"},"UsersInfoRequest":{"properties":{"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Домен ВАТС. Если пусто, берется ROSTELECOM_DOMAIN из .env"},"user_name":{"type":"string","title":"User Name","description":"Логин пользователя. Пусто + пустой user_pin = все пользователи","default":""},"user_pin":{"type":"string","title":"User Pin","description":"PIN/внутренний номер. Пусто + пустой user_name = все пользователи","default":""}},"type":"object","title":"UsersInfoRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}