DingTalk (Dingtalk)
В этом руководстве описана настройка канала Qwen Code в DingTalk (钉钉).
Предварительные требования
- Учётная запись организации DingTalk
- Приложение-бот DingTalk с AppKey и AppSecret (см. ниже)
Создание бота
- Перейдите на Портал разработчика DingTalk
- Создайте новое приложение (или используйте существующее)
- В приложении включите возможность 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": "Вы — лаконичный ассистент по программированию, отвечающий через 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"
}
}Запуск
# Запустить только канал DingTalk
qwen channel start my-dingtalk
# Или запустить все настроенные каналы вместе
qwen channel startОткройте DingTalk и отправьте сообщение боту. Вы увидите реакцию в виде эмодзи 👀, пока агент обрабатывает запрос, после чего придёт ответ.
Групповые чаты
Боты DingTalk работают как в личных сообщениях, так и в групповых чатах. Чтобы включить поддержку групп:
- Установите
groupPolicyв"allowlist"или"open"в конфигурации канала - Добавьте бота в группу DingTalk
- Упомяните бота с помощью @ в группе, чтобы вызвать ответ
По умолчанию бот требует упоминания @ в групповых чатах (requireMention: true). Установите "requireMention": false для конкретной группы, чтобы бот отвечал на все сообщения. Подробнее см. в разделе Групповые чаты.
Поиск ID беседы группы
DingTalk использует conversationId для идентификации групп. Вы можете найти его в логах службы канала, когда кто-то отправляет сообщение в группу — ищите поле conversationId в выводе логов.
Изображения и файлы
Вы можете отправлять боту фотографии и документы, а не только текст.
Фотографии: Отправьте изображение (снимок экрана, диаграмму и т.д.), и агент проанализирует его с помощью возможностей зрения. Для этого требуется мультимодальная модель — добавьте "model": "qwen3.5-plus" (или другую модель с поддержкой зрения) в конфигурацию канала. DingTalk поддерживает отправку изображений напрямую или как часть форматированного текста (текст + изображения).
Файлы: Отправьте PDF, файл с кодом или любой документ. Бот загружает его с серверов DingTalk и сохраняет локально, чтобы агент мог прочитать его с помощью своих файловых инструментов. Аудио- и видеофайлы также поддерживаются. Это работает с любой моделью.
Ключевые отличия от Telegram
- Аутентификация: AppKey + AppSecret вместо статического токена бота. SDK автоматически обновляет токен доступа.
- Подключение: WebSocket-поток вместо опроса — не требуется публичный IP или URL вебхука.
- Форматирование: Ответы используют диалект Markdown от DingTalk (ограниченное подмножество). Таблицы автоматически преобразуются в обычный текст, так как DingTalk их не отображает. Длинные сообщения разбиваются на части примерно по 3800 символов.
- Индикатор работы: К сообщению пользователя добавляется реакция в виде эмодзи 👀 во время обработки, затем она удаляется при отправке ответа.
- Загрузка медиа: Двухэтапный процесс —
downloadCodeиз сообщения обменивается на временный URL для загрузки через API DingTalk. - Группы: DingTalk использует
isInAtListдля обнаружения упоминаний @ вместо анализа сущностей сообщения.
Советы
- Используйте инструкции, учитывающие Markdown DingTalk — DingTalk поддерживает ограниченное подмножество Markdown (заголовки, жирный текст, ссылки, блоки кода, но не таблицы). Добавление инструкций вроде “Используйте Markdown DingTalk. Избегайте таблиц.” помогает агенту правильно форматировать ответы.
- Ограничьте доступ — В контексте организации
senderPolicy: "open"может быть приемлемо. Для более строгого контроля используйте"allowlist"или"pairing". Подробнее см. в разделе Личное сопряжение (DM Pairing). - Цитируемые сообщения — Цитирование (ответ на) сообщения пользователя включает цитируемый текст как контекст для агента. Цитирование ответов бота пока не поддерживается.
Устранение неполадок
Бот не подключается
- Проверьте правильность AppKey и AppSecret
- Убедитесь, что переменные окружения установлены перед запуском
qwen channel start - Убедитесь, что Stream Mode включён в настройках бота на портале разработчика DingTalk
- Проверьте вывод терминала на наличие ошибок подключения
Бот не отвечает в группах
- Проверьте, что
groupPolicyустановлен в"allowlist"или"open"(по умолчанию"disabled") - Убедитесь, что вы упомянули бота с помощью @ в групповом сообщении
- Проверьте, что бот добавлен в группу
”No sessionWebhook in message”
Это означает, что DingTalk не включил конечную точку ответа в callback сообщения. Такое может произойти, если разрешения бота настроены неправильно. Проверьте настройки бота на портале разработчика.
”Sorry, something went wrong processing your message”
Обычно это означает, что агент столкнулся с ошибкой. Проверьте вывод терминала для получения подробной информации.