Знания компании — в переписке Slack
Сотрудник пишет боту в личных сообщениях — отвечает Query Engine под его доступами, со ссылками на источники. Всё, что умеет веб-чат, не выходя из мессенджера.
ack <3с
ответ постом в тред
Slack — ещё одно тонкое окно в тот же диалог: думает и ищет Query Engine под личностью сотрудника, Slack лишь приносит реплику и уносит ответ. Нового — только края: подключение, мост личности, отложенная доставка. Одна модель диалога на все поверхности →
Admin ставит приложение Achilles в воркспейс один раз — бот-токен
и signing secret ложатся в slack_settings, как SMTP у Email. Экран —
настройки платформы, один тумблер включает бота.
Модель установки — internal-app: клиент регистрирует приложение в своём воркспейсе сам. Так и должно быть для self-hosted.
Пишущего сводит к учётке
identity_mapping
(source='slack') — личность входа, отдельная от
контент-личности Slack-источника в Knowledge Store. Совпал
provisioned-email воркспейса — связали авто; нет —
код-привязка:
вошедший в веб получает код и возвращает его боту в DM (привязывается
вернувший Slack к выдавшей учётке). Учётку заводит только админ
(приглашением) —
членство в Slack доступа не даёт.
Дальше везде только user_id → роль → ACL.
Тред — это разговор: ответы в нём продолжают беседу, новое сообщение открывает новую. Контекст усекается по токенам — общий механизм движка, не свой. «Суммируй» — обычный вопрос боту, не команда.
Каналы · @mention · slash-команда — v2.
Slack ждёт подтверждения за 3 секунды, нейросеть отвечает дольше: приём подтверждает
сразу, обработка уходит в очередь
interactive, ответ возвращается постом. Переживает рестарт и ретраи.
Повтор события Slack отсекается по event_id; публичный эндпоинт —
под rate-limit.
Какой статус релиза 4.2 и кто ведёт ajax-баг?
Релиз 4.2 в стадии регресс-тестов, выкатка плановая на пятницу. Ajax-баг ведёт Дина Сафина1.
Ответ под доступами Максима: что ему не видно — в ответ не попадёт. Продолжение — в треде той же беседы.
Первый контакт — привязка аккаунта кодом:
Привет! Какой статус релиза 4.2?
Чтобы продолжить, подтвердите аккаунт: войдите по ссылке — achilles.local/link — и пришлите код. После этого отвечу под вашими доступами.
K7P2-9XQ4
Готово — привязал к maxim@company.com. Спрашивайте
Код виден только во вошедшем браузере и возвращается в Slack — пересланная ссылка угнать учётку не даёт. Экран привязки →
source='slack' → мост личности входа
(team, channel, thread_ts)
| id | BigInteger | PKCHECK | всегда 1 · singleton |
| team | Text | NULL |
id воркспейса (T…) · NULL пока не подключён
|
| team_name | Text | NULL | имя воркспейса для UI (company.slack.com) · из auth.test |
| bot_token_enc | Text | NULL |
OAuth bot-токен (xoxb-…), шифротекст AES-256-GCM · → шифрование
|
| signing_secret_enc | Text | NULL | секрет подписи входящих запросов, шифротекст |
| bot_user_id | Text | NULL |
id бота (U…) · отсев своих сообщений и упоминаний
|
| enabled | Boolean | NOT NULLDEFAULT | мастер-выключатель · DEFAULT false · off → бот молчит |
| last_test_ok | Boolean | NULL | итог последней «Проверить соединение» |
| last_test_at | DateTime(tz) | NULL | когда проверяли · питает чип статуса на экране |
| created_at | DateTime(tz) | DEFAULT | server_default=now() |
| updated_at | DateTime(tz) | DEFAULT |
server_default=now() · триггер set_updated_at()
|
is_available() — свойство модели, не колонка:
enabled и заполнены team · bot_token_enc ·
signing_secret_enc. Зеркало SMTP у Email.
Проверки: подпись Slackack < 3 срезолв личностидедуп ретраевтред = беседаACL-проброснепривязанный пользовательsingleton настроек
Вебхук — анонимный по построению: замок — подпись Slack, окно частоты fail-closed.
identity_mapping → user_id.
→ Auth / Security
/api/v1/slack/* на общей карте поверхностей.
→ HTTP API