Общие сведения
Надёжность и безопасность
Покупка лицензии
Начало работы
Проекты
Концепции
Компоненты
Инструкции
Задачи
Финансы
Ресурсы
Таймшиты
Клиенты
Вики
Затраты
Отчёты и аналитика
Типы отчётов
Тип отчёта «Акты»
Тип отчёта «Баланс отсутствий»
Тип отчёта «Бронирование»
Тип отчёта «Биллинг»
Тип отчёта «Версии проектов»
Тип отчёта «Задачи»
Тип отчёта «Затраты»
Тип отчёта «Заявки на затраты»
Тип отчёта «Заявки на отсутствия»
Тип отчёта «История ставок пользователей»
Тип отчёта «Запросы ресурсов»
Тип отчёта «Навыки пользователей»
Тип отчёта «Пользователи»
Тип отчёта «Проводки»
Тип отчёта «Ресурсный план»
Тип отчёта «Ресурсный план (по версиям)»
Тип отчёта «Проекты»
Тип отчёта «Сертификаты пользователей»
Тип отчёта «Счета»
Тип отчёта «Счета (строки)»
Тип отчёта «Таймшиты»
Тип отчёта «Таймшиты детально»
Тип отчёта «Финансы»
Тип отчёта «Структура работ»
Тип отчёта «Центры затрат проектов»
Тип отчёта «Задания воркфлоу»
Тип отчета Клиенты
Тип отчета «Контакты»
Тип отчёта «Сделки»
Тип отчёта «История состояний сделок»
Тип отчёта "Договоры"
Тип отчёта «Взаимодействия»
Использование отчётов
Группировка данных источника
Группировка данных в отчёте
Типы виджетов
Общие отчёты и шаблоны
Настройка отчёта
Экспорт отчётов
Пользовательские настройки отчёта
Вычисляемые поля
Особые колонки отчётов с временными рядами
Использование панелей мониторинга
Публикация панелей
Панели сущностей
Фильтры источников данных
FAQ
Настройка и администрирование
Типовой порядок настройки системы
Интеграция с Mattermost
Язык формул и выражений
Язык шаблонов
On-premises
API
Timetta MCP Server
Общие сведения
Примеры использования API
Аутентификация
Справочник API
Reporting API
Рекомендации по работе с Reporting API
Ограничения
История изменений
Термины и определения

Конфигурация приложений

Обновлено: 17.07.2025

Конфигурация сервисов

  • Замените op.timetta-test.com на ваше доменное имя или IP адрес.
  • Укажите строки соединения с БД и прочие параметры.

settings.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  },
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information",
        "Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware": "Error",
        "Microsoft.AspNetCore.Authentication": "Information",
        "Microsoft.AspNetCore.Server.Kestrel": "Information",
        "Microsoft.Extensions.Hosting": "Information",
        "Microsoft.EntityFrameworkCore": "Warning",
        "Npgsql": "Warning",
        "Npgsql.Command": "Information",
        "System.Net.Http": "Information",
        "System.Net.NameResolution": "Information",
        "System.Net.Sockets": "Information"
      }
    }
  },
  "ConnectionStrings": {
    "TimettaDB": "host=postgres;Port=5432;Username=dba;Password=1;Database=data",
    "PassportDB": "host=postgres;Port=5432;Username=dba;Password=1;Database=passport",
    "SchedulerDB": "host=postgres;Port=5432;Username=dba;Password=1;Database=scheduler",
    "Redis": "redis:6379,allowAdmin=true,password=1,abortConnect=false"
  },

  // Tenant settings.
  "Tenant": {
    "PrimaryDomain": "gazprom.com",
    "ActiveDomains": ["myOtherCompany.ru"],
    "TenantCulture": "ru-RU",
    "TimeZone": "Russian Standard Time",
    "DisplayName": "Sterling Cooper",
    "LanguageCode": "ru-RU",
    "CultureCode": "ru-RU",
    "CurrencyCode": "RUB"
  },

  "RabbitMqServiceBusOptions": {
    "ConnectionString": "amqp://admin:1@rabbitmq:5672/",
    "QueueName": "events"
  },

  // SMTP Server settings.
  "EmailSenderOptions": {
    "SenderEmail": "system@timetta.com",
    "SenderName": "system@timetta.com",
    "ServerPort": "465",
    "ServerAddress": "smtp.my-domain.com",
    "UseStartTls": true,
    "UseSsl": false,
    "DisableCertificateValidation": true,
    "Login": "****",
    "Password": "****"
  },

  "SessionManager": {
    "RedisDbNumber": "1"
  },

  "TenantManager": {
    "RedisDbNumber": "1"
  },

  "UndoRedo": {
    "UndoSize": "80",
    "RedoSize": "20",
    "SessionLifetimeMinutes": "30",
    "RedisDbNumber": "1"
  },

  "PassportUrl": "http://passport",
  "AppUrl": "https://op.timetta-test.com",
  "AllowedCorsOrigins": "https://op.timetta-test.com,https://op.timetta-test.com:5402",
  "TokenIssuer": "https://op.timetta-test.com:5401",

  "WepAppClient": {
    "RedirectUris": "https://op.timetta-test.com,https://op.timetta-test.com/auth-callback,https://op.timetta-test.com/assets/silent-refresh.html,https://op.timetta-test.com:5401/login-successful,https://op.timetta-test.com:5402/auth-callback,https://op.timetta-test.com:5402/auth-callback.html,https://op.timetta-test.com:5402/assets/silent-refresh.html",
    "PostLogoutRedirectUris": "https://op.timetta-test.com:5401/logout-successful,https://op.timetta-test.com:5402/logout-successful",
    "AllowedCorsOrigins": "https://op.timetta-test.com,https://op.timetta-test.com:5402"
  },

  // Certificate for Passport (to sign JWT Tokens) in PFX format,
  "Certificate": "/app/secrets/certificate.pfx",
  "CertificatePassword": "1",
  "AES256HelperPassword": "***",
  "LicenseKey": "***",

  "HelpSearch": {
    "Endpoint": "https://timetta.com/api/rag/search",
    "MaxContentCharacters": 12000
  },

  "AI": {
    "Embeddings": {
      "Endpoint": "http://embeddings:8080",
      "ApiKey": null,
      "Model": "e5-large",
      "Dimensions": 1024
    },
    "TextCommands": [
      {
        "Id": "fix-errors",
        "Name": "Исправить ошибки",
        "Prompt": "Исправь орфографические, пунктуационные и грамматические ошибки в тексте. Не меняй смысл, тон и стиль без необходимости. Не добавляй новый контент. Сохрани исходную структуру, порядок предложений и формат Markdown. Возвращай только исправленный текст без комментариев."
      },
      {
        "Id": "more-formal",
        "Name": "Более формально",
        "Prompt": "Перепиши текст в формальном и деловом стиле. Убери разговорные выражения, жаргон и эмоциональные формулировки. Используй нейтральную лексику и четкие формулировки. Не изменяй факты и смысл. Сохрани структуру и формат Markdown. Возвращай только результат без пояснений."
      },
      {
        "Id": "paraphrase",
        "Name": "Другими словами",
        "Prompt": "Перефразируй текст, используя другие формулировки и синонимы. Сохрани исходный смысл и объем (±10%). Не добавляй новую информацию. Сохрани структуру и формат Markdown. Возвращай только результат без пояснений."
      },
      {
        "Id": "shorter",
        "Name": "Кратко",
        "Prompt": "Сократи текст на 10–20%, убрав повторы, вводные конструкции и второстепенные детали. Сохрани ключевой смысл и факты. Не искажай информацию. Сохрани структуру и формат Markdown. Возвращай только сокращенный текст без пояснений."
      },
      {
        "Id": "simpler",
        "Name": "Проще",
        "Prompt": "Упрости текст: замени сложные и длинные конструкции на более короткие и понятные, используй простые слова и активный залог. Сохрани смысл и факты. Не упрощай терминологию, если она критична для понимания. Сохрани структуру и формат Markdown. Возвращай только результат без пояснений."
      },
      {
        "Id": "more-complex",
        "Name": "Сложнее",
        "Prompt": "Сделай текст более формальным и профессиональным: используй более точную лексику, сложные синтаксические конструкции и терминологию. При необходимости слегка расширь формулировки (до +15%), но не добавляй новых фактов. Сохрани смысл, структуру и формат Markdown. Возвращай только результат без пояснений."
      }
    ],
    "Chat": {
      "Enabled": true,
      "DefaultModelKey": "system:deepseek-v4",
      "ChatApiDefaultModelKey": "system:deepseek-v4",
      "ServicesDefaultModelKey": "system:deepseek-v4",
      "SystemProviders": [
        {
          "ProviderName": "yandex",
          "BaseUrl": "https://ai.api.cloud.yandex.net/v1",
          "ApiKey": "<api-key>",
          "Models": [
            {
              "Key": "deepseek-v4",
              "ExternalModelId": "gpt://<folder-id>/deepseek-v4-flash",
              "DisplayName": "DeepSeek V4 Flash",
              "SupportsStreaming": true,
              "SupportsTools": true,
              "SupportsVision": false
            }
          ]
        }
      ]
    }
  }
}

TextCommands задает команды обработки текста и не относится к embeddings. Список команд можно изменять и дополнять.

Значения DefaultModelKey, ChatApiDefaultModelKey и ServicesDefaultModelKey имеют формат system:<Key> и должны ссылаться на поле Key существующей модели в SystemProviders.

При AI:Chat:Enabled = true необходимо настроить хотя бы одного системного провайдера, его API-ключ и модель по умолчанию. API-ключ указывается непосредственно в защищенном settings.json; не сохраняйте реальный ключ в системе контроля версий.

Yandex Cloud приведен как пример. Можно использовать другой доступный из контура LLM-провайдер с OpenAI-совместимым API. Для функций AI, использующих инструменты, модель должна поддерживать tools.

Параметр HelpSearch:Endpoint задает внешний сервис поиска по официальной справке Timetta. Для его использования backend должен иметь исходящий HTTPS-доступ к timetta.com.

Конфигурация клиентского приложения

client-settings.json:

{
  "api": {
    "url": "https://op.timetta-test.com:5400"
  },
  "passport": {
    "url": "https://op.timetta-test.com:5401"
  },
  "websocket": {
    "url": "https://op.timetta-test.com:5404"
  },
  "aiBotLoader": "https://op.timetta-test.com:5402/loader.js"
}

Конфигурация клиентского приложения AI

Создайте файл ai-client-settings.json:

{
  "passportUrl": "https://op.timetta-test.com:5401",
  "apiUrl": "https://op.timetta-test.com:5400",
  "aiBotUrl": "https://op.timetta-test.com:5402",
  "webSocketUrl": "https://op.timetta-test.com:5404",
  "apiTimettaUrl": "https://op.timetta-test.com:5400",
  "baseAppUrl": "https://op.timetta-test.com"
}

Все параметры обязательны. Файл подключается к контейнеру AI-клиента ai-bot как /usr/share/nginx/html/config.json и /usr/share/nginx/html/assets/config.json.

Содержание

Конфигурация сервисов Конфигурация клиентского приложения Конфигурация клиентского приложения AI
Спросить ИИ Получить ответ по материалам документации
Введите запрос для поиска по документации
Ничего не найдено, уточните запрос
AI

Похоже, вам удобнее русский язык. Перейти на русскую версию?