[Bug] sendMessage returns message_id successfully, but text is not delivered to WeChat client
已打开 02:35PM - 19 Aug 26 UTC
已关闭 03:59PM - 19 Aug 26 UTC
# [Bug] sendMessage returns message_id successfully, but text is not delivered t…o WeChat client
## Environment
* OpenClaw: `2026.7.1`
* `@tencent-weixin/openclaw-weixin`
* Issue initially occurred on `2.4.3`
* Upgraded to `2.4.6`, issue still reproducible
* Weixin iLink endpoint:
* `https://ilinkai.weixin.qq.com`
* Bot type: `3`
* Platform: Docker / Linux
* Timezone: UTC+8
## Problem
Weixin inbound messages are received normally, OpenClaw successfully invokes the LLM and generates a reply, and `/ilink/bot/sendmessage` returns HTTP 200 with a server-side `message_id`.
However, the text reply never appears in the WeChat client.
Interestingly, `sendTyping` works normally and the WeChat client can actually display **“正在输入…” / “typing…”**.
So the Bot → WeChat connection itself appears to be working, while text message delivery fails silently.
## Timeline
The integration was working normally around:
`2026-08-18 22:00 UTC+8`
On the morning of:
`2026-08-19`
I found that the Bot could still receive WeChat messages and invoke the LLM, but WeChat no longer displayed any text replies.
There was no intentional configuration change before the issue started.
The problem originally occurred with plugin version `2.4.3`.
I then upgraded to `2.4.6`, but the issue remained.
## What works
The following parts are all working:
* WeChat → Bot inbound messages
* `getUpdates`
* `getConfig`
* fresh `context_token`
* `typing_ticket`
* `sendTyping`
* WeChat client visibly shows “正在输入…”
* OpenClaw agent routing
* LLM invocation
* LLM reply generation
* `/ilink/bot/sendmessage` HTTP request
* iLink returns a server-side `message_id`
Only the final text message is missing from the WeChat client.
## Clean re-login test
To rule out stale Bot tokens / session state / context tokens, I completely removed the previous local Weixin account state and performed a fresh QR login.
The login request confirmed that no previous local token was reused:
```text
newfetchQRCode: local_token_list count=0
```
A completely new Bot ID was issued:
```text
[email protected]
status=confirmed
```
The new account started without an old sync cursor:
```text
No previous get_updates_buf found, starting fresh
```
So this was not a reuse of the previous Bot session.
## Reproduction
After the fresh login:
1. Send `测试` from WeChat to the Bot.
2. Bot receives the message successfully:
```text
getUpdates status=200 raw={"msgs":[...]}
inbound message: [email protected] types=1
```
3. A new context is obtained:
```text
POST /ilink/bot/getconfig
getConfig status=200 raw={"ret":0,"typing_ticket":"..."}
```
4. Plugin saves the fresh context token:
```text
setContextToken: key=c3e7214fb597-im-bot:[email protected]
```
5. Typing notification works:
```text
POST /ilink/bot/sendtyping
sendTyping status=200 raw={"ret":0}
```
The WeChat client actually shows:
```text
正在输入…
```
6. OpenClaw agent completes normally and generates:
```text
收到 ✅ 通道正常。
```
7. Plugin sends the text using the fresh context token:
```text
outbound:
[email protected]
contextToken=...(len=136)
textLen=10
POST https://ilinkai.weixin.qq.com/ilink/bot/sendmessage
```
8. iLink returns HTTP 200 and a server-side message ID:
```text
sendMessage status=200 raw={"message_id":7495842118583015944}
```
9. Plugin reports:
```text
outbound: text sent OK
```
But the WeChat client receives **no text message**.
## Important observation
`sendTyping` and `sendMessage` are using the same freshly established conversation.
The behavior is:
```text
WeChat → getUpdates OK
getConfig OK
fresh context_token OK
sendTyping ret=0 OK
typing visible in WeChat OK
LLM reply generation OK
sendMessage HTTP 200 OK
sendMessage returns message_id OK
text visible in WeChat FAILED
```
This suggests that authentication, Bot binding, user routing, and the Bot → WeChat communication path are generally working.
The failure appears to occur after the iLink `sendmessage` endpoint accepts the message.
## Server-side message IDs
A message generated after the completely fresh QR login:
```text
7495842118583015944
```
Before the clean login, the same symptom also occurred with:
```text
7495838842399575304
7495838843884374536
```
For all of these, iLink returned HTTP 200 and a `message_id`, while the WeChat client did not display the corresponding text.
## Additional exclusions
I have already ruled out:
* stale `context_token`
* expired context token
* missing context token
* old sync state
* old Bot token
* reused QR login session
* OpenClaw agent failure
* LLM failure
* reply routing failure
* long-message limitation
The reproduced reply is only about 10 characters long.
The issue also started before upgrading the plugin from `2.4.3` to `2.4.6`.
## Expected behavior
When `/ilink/bot/sendmessage` returns a valid server-side `message_id`, the text message should appear in the target user's WeChat conversation.
## Actual behavior
The API returns:
```json
{
"message_id": 7495842118583015944
}
```
and the plugin reports:
```text
text sent OK
```
but no text is displayed in the WeChat client.
At the same time, `sendTyping` succeeds and the typing indicator is visible in the same WeChat conversation.
## Request
Could the Tencent/iLink side please check the server-side delivery status for:
```text
message_id = 7495842118583015944
```
In particular, I would like to know whether the message:
1. was accepted by `sendmessage`,
2. entered the downstream WeChat delivery pipeline,
3. was filtered/dropped after acceptance,
4. or failed during final delivery to the personal WeChat client.
The fact that `sendTyping` is visible while `sendMessage` returns a valid `message_id` but is not visible may help narrow down the issue.
Thanks.