Skip to Content
Руководство для пользователейВозможностиКаналыDingTalk Workspace

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, или опустите его, чтобы закрепить запись, помеченную как isCurrent. Канал обрабатывает каждый логин DWS одинаково и не зависит от метаданных user_id.

Конфигурация

Добавьте канал в ~/.qwen/settings.json:

{ "channels": { "dws-work": { "type": "dws", "profile": "profile-name-or-corp-id", "senderPolicy": "pairing", "groupPolicy": "pairing", "watchTodos": true, "startReaction": "🤔", "endReaction": "赞", "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 CODE

senderPolicy управляет отправителями личных сообщений, авторами уведомлений документов, создателями нативных todo и отправителями в группах с политикой open или allowlist. groupPolicy управляет групповыми беседами. Одобренная группа с сопряжением следует поведению общего канала и авторизует своих участников; группы с политикой open и allowlist также должны пройти senderPolicy.

groups управляет поведением упоминаний. Конкретный ID группы переопределяет "*". При requireMention: true только сообщение с @упоминанием активирует канал. При requireMention: false обычные сообщения также принимаются после прохождения политик группы и отправителя.

Групповые упоминания используют поток персональных событий в реальном времени. Канал также проверяет историю недавних @-сообщений каждые пять секунд, поэтому упоминания из внешних групп восстанавливаются, когда DingTalk не включает их в поток персональных событий. Сообщения дедуплицируются по беседе и ID сообщения на обоих путях.

Обычные личные сообщения восстанавливаются тем же способом: пяти-секундная проверка истории повторно доставляет любое личное сообщение, пропущенное потоком в реальном времени, с дедупликацией по беседе и ID сообщения на обоих путях.

Когда сообщение цитирует другое сообщение DingTalk, цитируемый текст включается как контекст ответа для агента на обоих путях — в реальном времени и через историю.

startReaction — это символ эмодзи или имя реакции DingTalk, добавляемое во время выполнения принятой задачи; пропущенное или ��устое значение использует стандартную 🤔. endReaction заменяет её после завершения, сбоя или отмены задачи; пропущенное или пустое значение отключает реакцию завершения.

Доставка ответов в IM

Завершённый ответ на @упоминание в группе или личное сообщение сохраняется в контрольную точку перед первой отправкой и повторно отправляется в фоне без повторного выполнения задачи. Задержка начинается с пяти секунд, удваивается и достигает максимума в пять минут. Ответ прекращается после 16 неудачных попыток доставки. Локальные отложения, вызванные отключённым каналом или непрочитанным одобрением сопряжения, используют отдельный лимит в 32 последовательные проверки, чтобы не расходовать бюджет попыток транспорта. Ответ удаляется немедленно, когда авторизация отправителя, группы или личного сообщения окончательно отозвана. Очередь вмещает до 100 ответов и вытесняет самую старую запись независимо от количества попыток при заполнении; переключение настроенного профиля DWS очищает очередь. Эти удаления сообщаются в stderr канала, а не отправляются как уведомления в чате.

Очередные ответы IM длиннее 12 000 кодовых точек обрезаются, с добавлением [Response truncated for DWS delivery.] к сообщению, которое видит получатель. Ответы на комментарии к документам и нативным задачам не используют этот путь повторных попыток и обрезки: каждый ход делает один вызов отправки комментария, неизвестные результаты проглатываются, а окончательные сбои передаются в существующую политику повторных попыток входных ходов. Реакция завершения отмечает выполнение задачи, а не доставку ответа, поэтому повторный ответ IM может прийти после появления этой реакции.

Упоминания документов

Нет списка наблюдения за документами или базой знаний. Чтобы начать задачу по документу:

  1. Добавьте комментарий к документу DingTalk с @упоминанием аутентифицированного аккаунта.
  2. Включите опцию отправки уведомления DingTalk этому аккаунту.
  3. DWS доставляет карточку уведомления через историю личных сообщений аккаунта.

Канал извлекает ID документа, ключ комментария и запрос из этого уведомления. Он читает указанный документ для контекста, добавляет настроенную реакцию начала во время выполнения задачи и отвечает на исходный комментарий к документу. Поток событий 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 собственных отправителей.

Last updated on