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

DingTalk (Dingtalk)

В этом руководстве описывается настройка канала Qwen Code в DingTalk (钉钉).

Предварительные требования

  • Учетная запись организации DingTalk
  • Приложение-бот DingTalk с AppKey и AppSecret (см. ниже)

Создание бота

  1. Перейдите на портал разработчиков DingTalk 
  2. Создайте новое приложение (или используйте существующее)
  3. В настройках приложения включите возможность Robot
  4. В настройках Robot включите Stream Mode (机器人协议 → Stream 模式)
  5. Запишите AppKey (Client ID) и AppSecret (Client Secret) со страницы учетных данных приложения

Stream Mode

Режим Stream в DingTalk использует исходящее WebSocket-соединение — публичный URL или сервер не требуются. Бот подключается к серверам DingTalk, которые отправляют сообщения через WebSocket. Это самая простая модель развертывания.

Настройка

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

{ "channels": { "my-dingtalk": { "type": "dingtalk", "clientId": "$DINGTALK_CLIENT_ID", "clientSecret": "$DINGTALK_CLIENT_SECRET", "senderPolicy": "open", "sessionScope": "user", "cwd": "/path/to/your/project", "instructions": "You are a concise coding assistant responding via DingTalk.", "groupPolicy": "open", "groups": { "*": { "requireMention": true } } } } }

Укажите учетные данные в переменных окружения:

export DINGTALK_CLIENT_ID=<your-app-key> export DINGTALK_CLIENT_SECRET=<your-app-secret>

Или определите их в разделе env файла settings.json:

{ "env": { "DINGTALK_CLIENT_ID": "your-app-key", "DINGTALK_CLIENT_SECRET": "your-app-secret" } }

Запуск

# Start only the DingTalk channel qwen channel start my-dingtalk # Or start all configured channels together qwen channel start

Откройте DingTalk и отправьте сообщение боту. Во время обработки агентом вы должны увидеть реакцию в виде эмодзи 👀, после чего появится ответ.

Групповые чаты

Боты DingTalk работают как в личных сообщениях (DM), так и в групповых чатах. Чтобы включить поддержку групп:

  1. Установите для groupPolicy значение "allowlist" или "open" в конфигурации канала
  2. Добавьте бота в группу DingTalk
  3. Упомяните бота через @ в группе, чтобы вызвать ответ

По умолчанию бот требует упоминания через @ в групповых чатах (requireMention: true). Установите "requireMention": false для конкретной группы, чтобы он отвечал на все сообщения. Полные сведения см. в разделе Group Chats.

Поиск Conversation ID группы

DingTalk использует conversationId для идентификации групп. Его можно найти в логах сервиса канала, когда кто-то отправляет сообщение в группу — ищите поле conversationId в выводе логов.

Изображения и файлы

Боту можно отправлять не только текст, но и фотографии и документы.

Фотографии: Отправьте изображение (скриншот, диаграмму и т. д.), и агент проанализирует его с помощью своих возможностей компьютерного зрения. Для этого требуется мультимодальная модель — добавьте "model": "qwen3.5-plus" (или другую модель с поддержкой зрения) в конфигурацию канала. DingTalk поддерживает отправку изображений напрямую или в составе сообщений с расширенным форматированием (текст + изображения).

Файлы: Отправьте PDF, файл с кодом или любой другой документ. Бот загрузит его с серверов DingTalk и сохранит локально, чтобы агент мог прочитать его с помощью файловых инструментов. Также поддерживаются аудио- и видеофайлы. Это работает с любой моделью.

Ключевые отличия от Telegram

  • Аутентификация: AppKey + AppSecret вместо статического токена бота. SDK автоматически управляет обновлением токена доступа.
  • Соединение: WebSocket-поток вместо опроса (polling) — публичный IP или URL вебхука не требуются.
  • Форматирование: Ответы используют диалект Markdown от DingTalk (ограниченное подмножество). Таблицы автоматически преобразуются в обычный текст, так как DingTalk их не отображает. Длинные сообщения разбиваются на части по ~3800 символов.
  • Индикатор работы: Во время обработки к сообщению пользователя добавляется реакция в виде эмодзи 👀, которая удаляется после отправки ответа.
  • Загрузка медиа: Двухэтапный процесс — downloadCode из сообщения обменивается на временный URL для загрузки через API DingTalk.
  • Группы: DingTalk использует isInAtList для обнаружения @упоминаний вместо парсинга сущностей сообщения.

Советы

  • Используйте инструкции, учитывающие Markdown DingTalk — DingTalk поддерживает ограниченное подмножество Markdown (заголовки, жирный шрифт, ссылки, блоки кода, но не таблицы). Добавление инструкций вроде “Use DingTalk markdown. Avoid tables.” помогает агенту правильно форматировать ответы.
  • Ограничьте доступ — В корпоративной среде senderPolicy: "open" может быть приемлемым. Для более строгого контроля используйте "allowlist" или "pairing". Подробности см. в разделе DM Pairing.
  • Цитирование сообщений — При цитировании (ответе) на сообщение пользователя цитируемый текст включается в контекст для агента. Цитирование ответов бота пока не поддерживается.

Устранение неполадок

Бот не подключается

  • Убедитесь, что AppKey и AppSecret указаны верно
  • Проверьте, что переменные окружения установлены перед запуском qwen channel start
  • Убедитесь, что Stream Mode включен в настройках бота на портале разработчиков DingTalk
  • Проверьте вывод терминала на наличие ошибок подключения

Бот не отвечает в группах

  • Убедитесь, что groupPolicy установлено в "allowlist" или "open" (по умолчанию "disabled")
  • Убедитесь, что вы упомянули бота через @ в сообщении группы
  • Проверьте, что бот добавлен в группу

”No sessionWebhook in message”

Это означает, что DingTalk не включил конечную точку для ответа в колбэк сообщения. Это может произойти при неправильной настройке разрешений бота. Проверьте настройки бота на портале разработчиков.

”Sorry, something went wrong processing your message”

Обычно это означает, что агент столкнулся с ошибкой. Проверьте вывод терминала для получения подробностей.

Last updated on