DingTalk Workspace (DWS)
Канал DWS использует учётную запись, уже аутентифицированную через DingTalk Workspace CLI. Он принимает личные и групповые сообщения, распознаёт карточки уведомлений об упоминаниях документов DingTalk и публикует ответ агента в исходное сообщение или комментарий к документу.
Это отличается от канала бота DingTalk. Продолжайте использовать type: "dingtalk" для выделенного бота приложения; используйте type: "dws", когда Qwen Code должен работать через существующий логин DWS.
Предварительные требования
Установите DWS CLI версии 1.0.57 или новее на хосте, где работает Qwen Code, и убедитесь, что dws доступен в PATH этого процесса:
dws version --format jsonВыполните аутентификацию на том же хосте:
dws auth login
dws profile list --format json
dws auth status --format jsonНа headless-сервере используйте dws auth login --device. Канал закрепляет ровно один существующий профиль при запуске. Установите profile в точное имя профиля или corpId, или omit’ьте его, чтобы закрепить запись, помеченную как isCurrent. Канал обрабатывает каждый логин DWS одинаково и не зависит от метаданных user_id.
Конфигурация
Добавьте канал в ~/.qwen/settings.json:
{
"channels": {
"dws-work": {
"type": "dws",
"profile": "profile-name-or-corp-id",
"senderPolicy": "pairing",
"groupPolicy": "pairing",
"watchTodos": true,
"groups": {
"*": { "requireMention": true }
},
"sessionScope": "chat_thread",
"cwd": "/path/to/your/project"
}
}
}Режим одобрения YOLO доступен для ботов ответов, которые должны выполнять вызовы инструментов без интерактивных подтверждений:
{
"channels": {
"dws-answers": {
"type": "dws",
"senderPolicy": "pairing",
"groupPolicy": "pairing",
"approvalMode": "yolo",
"cwd": "/path/to/answer-bot"
}
}
}Режим YOLO автоматически одобряет каждый вызов инструмента. Используйте его только для доверенного аккаунта бота и рабочего пространства.
senderPolicy и groupPolicy по умолчанию равны pairing для нового управляемого канала DWS. Одобрите пользователя или группу с помощью кода, возвращённого каналом:
qwen channel pairing approve dws-work CODEsenderPolicy управляет отправителями личных сообщений, авторами уведомлений документов, создателями нативных todo и отправителями в группах с политикой open или allowlist. groupPolicy управляет групповыми беседами. Одобренная группа с сопряжением следует поведению общего канала и авторизует своих участников; группы с политикой open и allowlist также должны пройти senderPolicy.
groups управляет поведением упоминаний. Конкретный ID группы переопределяет "*". При requireMention: true только сообщение с @упоминанием активирует канал. При requireMention: false обычные сообщения также принимаются после прохождения политик группы и отправителя.
Групповые упоминания используют поток персональных событий в реальном времени. Канал также проверяет историю недавних @-сообщений каждые пять секунд, поэтому упоминания из внешних групп восстанавливаются, когда DingTalk не включает их в поток персональных событий. Сообщения дедуплицируются по беседе и ID сообщения на обоих путях.
Когда сообщение цитирует другое сообщение DingTalk, цитируемый текст включается как контекст ответа для агента на обоих путях — в реальном времени и через историю.
Упоминания документов
Нет списка наблюдения за документами или базой знаний. Чтобы начать задачу по документу:
- Добавьте комментарий к документу DingTalk с @упоминанием аутентифицированного аккаунта.
- Включите опцию отправки уведомления DingTalk этому аккаунту.
- DWS доставляет карточку уведомления через историю личных сообщений аккаунта.
Канал извлекает ID документа, ключ комментария и запрос из этого уведомления. Он читает указанный документ для контекста, добавляет реакцию 暗中观察 (глаза) DingTalk во время выполнения задачи и отвечает на исходный комментарий к документу. Поток событий DWS в реальном времени используется, когда он содержит карточку; пяти секундная инкрементная проверка истории покрывает карточки, пропущенные текущим потоком событий.
Комментарии, не генерирующие уведомление, игнорируются по дизайну. Дублирующиеся сообщения уведомлений для одного и того же комментария к документу выполняются только один раз. Задачи документов следуют senderPolicy и поддерживают approvalMode default, plan или yolo; default используется при отсутствии значения.
Нативные изменения Todo
Установите watchTodos: true для опроса ожидающих нативных todo выбранного профиля DWS, где аккаунт является исполнителем. Опция по умолчанию равна false, поэтому добавление канала DWS никогда неявно не выполняет существующие todo.
Первое успешное сканирование устанавливает базовый уровень и не запускает исторические todo. Последующие сканирования запускают задачу, когда todo назначается впервые, переоткрывается или его actionable-поля изменяются, включая заголовок, приоритет, дедлайн или исполнителей. Финальный ответ добавляется как комментарий к исходному todo. Метаданные только комментариев и временные метки изменений исключаются из обнаружения изменений, поэтому собственный ответ канала не может вызвать цикл. Завершение или удаление удаляет todo из набора ожидающих; повторное открытие создаёт новый триггер.
Нативные todo следуют senderPolicy, используя идентичность создателя todo. При pairing канал добавляет один комментарий с кодом сопряжения и оставляет todo ожидающим; после одобрения создателя локально, последующий опрос может обработать неизменённое todo. Опрос выполняется каждые 30 секунд и ограничен текущей организацией закреплённого профиля.
Запуск и проверка
Запустите канал напрямую:
qwen channel start dws-workИли поручите его демону:
qwen serve --workspace /path/to/your/project --channel dws-workНе запускайте обе формы одновременно, потому что они используют одну аренду службы каналов.
Для локальной проверки отправьте личное сообщение с другого аккаунта, одобрите сопряжение, если требуется, и убедитесь, что реакция с глазами появляется во время выполнения задачи. Затем добавьте комментарий к документу с включённым уведомлением @упоминания. Канал должен отреагировать на сообщение уведомления, прочитать документ и опубликовать финальный ответ под исходным комментарием. Комментарий с отключённым уведомлением не должен создавать задачу.
Канал игнорирует события от ID отправителей, которых DWS идентифицирует как аутентифицированный аккаунт, предотвращая циклы ответов и сопряжения без вывода идентичности из текста сообщения. Запуск IM-источников требует эту авторитетную самоидентификацию: если аутентифицированный аккаунт не предоставляет openDingTalkId и ни одна более ранняя сессия под тем же профилем не записала его, канал отказывается от подключения. Переподключение, временно потерявшее ID, продолжает фильтрацию по ранее записанным ID собственных отправителей.