defineConnectionProvider({ type: 'oauth', ... }) не потребуют миграции.
defineConnectionProvider
Определите, как в вашем приложении получаются подключения
defineConnectionProvider
Определите, как в вашем приложении получаются подключения
ConnectedAccount.Рабочей конфигурации нужны два файла — провайдер подключения и соответствующее объявление serverVariables в defineApplication, которое содержит учетные данные клиента OAuth.name— это уникальная строка-идентификатор, используемая вlistConnections({ providerName })(kebab-case, должна соответствовать^[a-z][a-z0-9-]*$).displayNameотображается на вкладке настроек приложения и в списке инструментов ИИ.clientIdVariable/clientSecretVariable— это имена, а не значения — они должны совпадать с ключами, объявленными вdefineApplication.serverVariables. Фактическиеclient_idиclient_secretвводятся администратором сервера через интерфейс регистрации приложения и никогда не коммитятся в ваш репозиторий.- Используйте
serverVariables(неapplicationVariables) — учетные данные OAuth являются общими для сервера, и на каждом сервере Twenty используется одно приложение OAuth. - Пока оба
serverVariablesне заполнены, на вкладке настроек приложения показывается подсказка “нужен администратор сервера”, а кнопка “Добавить подключение” отключена. type: 'oauth'— единственное поддерживаемое сегодня значение. Дискриминатор совместим с будущими версиями: будущие типы ('pat','api-key', …) добавят новые блоки подконфигурации рядом сoauth.
Запускайте логическую функцию при подключении
Реагируйте в момент установления соединения
Запускайте логическую функцию при подключении
Реагируйте в момент установления соединения
team_id рабочей области, по которому будут определяться входящие события. Установите onConnectLogicFunction, чтобы сослаться на логическую функцию в том же приложении (по её universalIdentifier), и она будет выполнена сразу после создания ConnectedAccount.getConnection(connectedAccountId), чтобы прочитать новый access token и вызвать API провайдера (например, Slack auth.test) или сохранить отображение с помощью key-value store.Запускайте логическую функцию при отключении
Выполняйте очистку при удалении подключения
Запускайте логическую функцию при отключении
Выполняйте очистку при удалении подключения
team_id при подключении, должна освободить это право, чтобы другое рабочее пространство могло подключить ту же Slack-команду. Установите onDisconnectLogicFunction, чтобы сослаться на логическую функцию в том же приложении, и она будет выполнена сразу после удаления ConnectedAccount.ConnectedAccount уже удалён к моменту запуска hook, поэтому getConnection(connectedAccountId) больше не возвращает результат. Всё, что требуется для очистки (например, team_id, внешний идентификатор подписки), должно быть записано в key-value store в момент подключения, с ключом connectedAccountId.Hook срабатывает, когда соединение удаляется само по себе. При удалении приложения его соединения удаляются каскадом на уровне базы данных, поэтому hook в этом случае не запускается. Объявите uninstallLogicFunction в defineApplication для этого сценария: она запускается до удаления метаданных приложения, поэтому всё ещё может вызвать listConnections и выполнить оставшуюся очистку.listConnections / getConnection
Используйте подключения из логической функции
listConnections / getConnection
Используйте подключения из логической функции
listConnections({ providerName }) возвращает записи ConnectedAccount этого приложения для указанного провайдера с обновленными токенами доступа.- Передайте
{ providerName }, чтобы отфильтровать по провайдеру; опустите, чтобы получить все подключения этого приложения у всех провайдеров. - Сервер прозрачно обновляет токен доступа перед возвратом. Ваш обработчик всегда получает рабочий токен (или установлено
authFailedAt). getConnection(id)— эквивалент для одной записи.
Индивидуальная и общая для рабочего пространства видимость
Как пользователи выбирают между приватными и общими учетными данными
Индивидуальная и общая для рабочего пространства видимость
Как пользователи выбирают между приватными и общими учетными данными
- Только для меня — учетные данные приватны для подключившегося пользователя. Любая логическая функция, вызываемая от его имени (триггер HTTP-маршрута с
isAuthRequired: true), видит их; триггеры cron и события базы данных — нет. - Общее для рабочего пространства — любой участник рабочего пространства может использовать эти учетные данные. Триггеры cron/базы данных также видят их, поскольку у них нет пользователя запроса.
Единоразовая настройка провайдера
Зарегистрируйте свое приложение OAuth у стороннего сервиса
Единоразовая настройка провайдера
Зарегистрируйте свое приложение OAuth у стороннего сервиса
- Перейдите в настройки разработчика провайдера (например, https://linear.app/settings/api/applications/new).
- Установите Redirect URI в значение
\<SERVER_URL>/auth/apps/callback. - Скопируйте сгенерированные Client ID и Client Secret.
- Откройте установленное приложение в Twenty под учетной записью администратора сервера → задайте значения в соответствующих
serverVariables. - Затем участники рабочего пространства смогут добавлять подключения в разделе Подключения конкретного приложения.