DingTalk (Dingtalk)
В этом руководстве описывается настройка канала Qwen Code в DingTalk (钉钉).
Предварительные требования
- Учетная запись организации DingTalk
- Приложение-бот DingTalk с AppKey и AppSecret (см. ниже)
Создание бота
- Перейдите на портал разработчиков DingTalk
- Создайте новое приложение (или используйте существующее)
- В настройках приложения включите возможность Robot
- В настройках Robot включите Stream Mode (机器人协议 → Stream 模式)
- Запишите 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), так и в групповых чатах. Чтобы включить поддержку групп:
- Установите для
groupPolicyзначение"allowlist"или"open"в конфигурации канала - Добавьте бота в группу DingTalk
- Упомяните бота через @ в группе, чтобы вызвать ответ
По умолчанию бот требует упоминания через @ в групповых чатах (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”
Обычно это означает, что агент столкнулся с ошибкой. Проверьте вывод терминала для получения подробностей.