# Build a WeCom (internal app) AI Bot with Qwen

Source: https://langbot.app/docs/en/recipes/qwen/wecom

Step-by-step guide to running a Qwen-powered AI bot on WeCom (internal app) with LangBot: model setup, bot credentials, networking, testing and troubleshooting.

This recipe puts a Qwen model behind a WeCom (internal app) bot. LangBot receives messages from WeCom (internal app), runs them through a pipeline, and sends the answer back, so you do not write any platform code.

Use Alibaba Cloud's Qwen models through Model Studio (DashScope) with LangBot's built-in Agent.

## What you need

- A running LangBot instance: [LangBot Cloud](https://space.langbot.app/cloud) (no server needed) or a [self-hosted deployment](https://langbot.app/docs/en/deploy/langbot/docker.md) with Docker or `uvx langbot`.
- A Qwen account or server you can call from LangBot.
- A WeCom self-built app: **Corporate ID**, the app **Secret**, the **Contact Sync Secret**, and the callback **Token** and **EncodingAESKey**.

## Networking

WeCom delivers messages to a callback URL, so LangBot needs a public domain with HTTPS (see [reverse proxy and SSL](https://langbot.app/docs/en/workshop/production/proxy-and-ssl.md)). LangBot Cloud includes a ready-to-use public URL.

## 1. Add the Qwen model

1. Create an API key in the Aliyun Bailian (DashScope) console.
2. In LangBot, open **Models**, add an LLM model with the provider set to Aliyun Bailian (DashScope) and request URL `https://dashscope.aliyuncs.com/compatible-mode/v1`, then paste the API key and the model ID.
3. Enable **Tool Use** if the model supports function calling; MCP tools, Skills and the sandbox need it.
4. Use a Qwen model ID listed in Model Studio.

## 2. Create a pipeline

Open **Pipelines** in the LangBot WebUI, create a pipeline (or edit the default one) and set **AI** as follows.

| Field           | Value                                                                  |
| --------------- | ---------------------------------------------------------------------- |
| Runner          | **Local Agent** (built-in Agent)                                       |
| Model           | The model you just added. You can add fallback models.                 |
| Prompt          | Instructions: who the bot is, tone, what it must not do.               |
| Knowledge Bases | Optional. Attach a knowledge base so answers come from your documents. |

## 3. Create the WeCom (internal app) bot

1. Create a bot with the **WeCom** adapter, enter the Corporate ID, app Secret and Contact Sync Secret, enable it and copy the webhook callback URL.
2. In the WeCom admin console, open **Receive Messages → Set API Reception**, paste the URL, generate the Token and EncodingAESKey, save them in LangBot first and then in WeCom. Add LangBot's outbound IP to **Corporate Trusted IP**.

## 4. Bind and test

Open the bot, select the pipeline you created, save and make sure the bot is enabled.

Open the app in the WeCom client and send it a message.

## Troubleshooting

- International accounts use a different DashScope endpoint; copy the OpenAI-compatible URL shown in your console.
- **request URL failed** when saving the callback: the URL is not publicly reachable over HTTPS, or the Token/EncodingAESKey in LangBot does not match.
- Replies fail to send: add LangBot's outbound IP to the corporate trusted IP list.
- Check **Monitoring** in the WebUI: every message, pipeline run and error is recorded there.

## FAQ

### Do I need a server with a public IP for WeCom (internal app)?

Yes, or use LangBot Cloud. WeCom delivers messages to a callback URL, so LangBot needs a public domain with HTTPS (see [reverse proxy and SSL](https://langbot.app/docs/en/workshop/production/proxy-and-ssl.md)). LangBot Cloud includes a ready-to-use public URL.

### Does the WeCom (internal app) bot support streaming replies?

Check the [platform feature matrix](https://langbot.app/docs/en/insight/platform-features.md) for what this platform supports. Replies are delivered once the AI back end has finished.

### Can the same Qwen setup serve other platforms too?

Yes. A pipeline can be bound to many bots, so one configuration can answer on several platforms at once.

## Related guides

- [Full WeCom (internal app) setup guide](https://langbot.app/docs/en/usage/platforms/wecom/wecom.md)
- [Model configuration](https://langbot.app/docs/en/usage/models/readme.md)
- Other AI back ends on WeCom (internal app): [Dify](https://langbot.app/docs/en/recipes/dify/wecom.md) · [n8n](https://langbot.app/docs/en/recipes/n8n/wecom.md) · [Coze](https://langbot.app/docs/en/recipes/coze/wecom.md) · [Langflow](https://langbot.app/docs/en/recipes/langflow/wecom.md) · [DeepSeek](https://langbot.app/docs/en/recipes/deepseek/wecom.md)
- Qwen on other platforms: [Telegram](https://langbot.app/docs/en/recipes/qwen/telegram.md) · [Discord](https://langbot.app/docs/en/recipes/qwen/discord.md) · [Slack](https://langbot.app/docs/en/recipes/qwen/slack.md) · [Lark (Feishu)](https://langbot.app/docs/en/recipes/qwen/lark.md) · [DingTalk](https://langbot.app/docs/en/recipes/qwen/dingtalk.md) · [WeCom Intelligent Bot](https://langbot.app/docs/en/recipes/qwen/wecombot.md)
