AAGO Android Design

модули / faq

Модули и база знаний

Один экран, две независимые панели: Модули — только-чтение, какие модули подключены на сайте (ago-chat); и База знаний — чтение и правка текста, которым отвечает AI-FAQ (ago-faq, отдельный бэкенд). Ровно как консоль рисует две формы на одной странице — у каждой своя загрузка, сохранение и ошибки, потому что это два разных бэкенда.

чтениеПанель «Модули» — только чтение: /sites/{id}/modules стал GET-only (adr/0151)
ago-faqБаза знаний — отдельный бэкенд, свой baseUrl, который может быть не задан
ЕщёАвтоматизация → «База знаний», под правом site:configure

Регистрация модуля — не действие тенанта

adr/0151/23-83 убрали все записи тенанта в /modules (регистрация, ротация, отзыв, проверка) — остался только GET. Подключает модуль владелец платформы, не тенант. Поэтому панель «Модули» — чтение, а не форма; это и есть паритет с консолью, а не урезание.

01

Точка входа — Ещё → Автоматизация

navigation.md называет эту строку «База знаний» в разделе Автоматизация. Строка рисуется только под правом site:configure (весь маршрут /automation/faq в консоли под ним). Открывает экран-вкладыш тем же способом openRowId, что и «Установка виджета».

9:41
Ещё
АГ
Каналы
Установка виджета
Работает · последний запрос 4 мин назад
OK
Автоматизация
Готовые ответы
6 шаблонов
Автоответ вне смены
Включён · 3 правила
База знаний
Модуль FAQ · редактирование ответов ассистента
/automation/faq · строка «База знаний», под site:configure

Раздел без строк не рисуется (buildMoreSections), поэтому оператор без site:configure не видит и заголовка «Автоматизация».

02

Экран — две панели

Панель «Модули» сверху — читаемый список подключённых модулей. Панель «База знаний» ниже — редактор текста с кнопкой «Сохранить» и отметкой последнего сохранения. Две панели, две разные загрузки/сохранения — общей кнопки нет, потому что сохранение одной не сохраняет другую.

9:41
Модули и база знаний
Модули
faq Подключён
Триггеры/faq, /помощь
Точка входаfaq.example.com
База знаний
Мы работаем с 9:00 до 20:00 по будням. Доставка по городу — в течение дня, при заказе до 16:00. Возврат — в течение 14 дней с чеком. На вопросы про наличие отвечает менеджер в чате…
Последнее сохранение 18 апр, 14:02
Сохранить
GET/PUT /sites/{id}/modules (ago-chat) + …/knowledge-base (ago-faq)

Панель «Модули» — только чтение. Показывает подключённые модули как есть из ответа GET: ключ, триггеры, точка входа, а также «Включено владельцем» и срок, если они есть. Правки нет — регистрация не действие тенанта (adr/0151).

Панель «База знаний» бьёт в ago-faq — другой бэкенд, тот же токен. Правит текст, сохраняет (эхо-ответ пересеивает поле), показывает время сохранения.

9:41
Модули и база знаний
Модули
faqПодключён
Триггеры/faq
База знаний
Бэкенд AI-FAQ ещё не настроен для этого развёртывания. Редактор базы знаний появится, когда ago-faq будет развёрнут.
config.faqApiBaseUrl == null → «не настроено»

У ago-faq нет боевого развёртывания. Новый nullable AGO_FAQ_API_BASE_URL (по образцу calendarApiBaseUrl): адаптер всегда создаётся, а null отвечает NotConfigured первой же строкой — как KtorBookingsApi. Панель «Модули» при этом работает: другой бэкенд.

9:41
Модули и база знаний
Модули
Ни один модуль не подключён на этом аккаунте. AGO подключает их — напишите нам.
База знаний
Опишите здесь, что ассистент должен знать о вашем бизнесе: часы работы, доставка, оплата, частые вопросы…
Ещё не сохранялось.
Сохранить
modules = [] · knowledge-base пустой

Пустой список модулей — копия консоли: «Ни один модуль не подключён — напишите нам», не ошибка. База знаний может редактироваться независимо — она на другом бэкенде и не требует подключённого модуля в ago-chat.

Новая конфигурация: AGO_FAQ_API_BASE_URL

База знаний живёт на ago-faq — отдельном бэкенде. Приложению нужен новый nullable базовый URL, по образцу AGO_CALENDAR_API_BASE_URL: buildConfigField через agoOptionalProperty без дефолтного хоста; поле OidcConfig.faqApiBaseUrl: String?; проброс в provideOidcConfig. Адаптер KtorFaqKnowledgeBaseApi всегда создаётся; null отвечает NotConfigured, а не заставляет Hilt инжектить nullable-порт.

X-Ago-Active-Site общего клиента уходит и в ago-faq: на вебе консоль его туда не шлёт (CORS-preflight против чужой политики), но Android — не браузер, preflight нет, лишний заголовок безвреден, и переиспользовать один общий клиент здесь правильно.