fix(wecom): use channel context instead of HTTP request context for async message processing

The HTTP request context is canceled as soon as the handler returns the
response, causing PublishInbound to fail with "context canceled" when
processMessage runs asynchronously in a goroutine. Use the channel's
long-lived context (c.ctx) instead.
This commit is contained in:
Hoshina 2026-02-28 21:30:58 +08:00
parent 172e6ebe5f
commit 62f59f76e3
2 changed files with 6 additions and 4 deletions

View file

@ -567,8 +567,9 @@ func (c *WeComAppChannel) handleMessageCallback(ctx context.Context, w http.Resp
return return
} }
// Process the message with context // Process the message with the channel's long-lived context (not the HTTP
go c.processMessage(ctx, msg) // request context, which is canceled as soon as we return the response).
go c.processMessage(c.ctx, msg)
// Return success response immediately // Return success response immediately
// WeCom App requires response within configured timeout (default 5 seconds) // WeCom App requires response within configured timeout (default 5 seconds)

View file

@ -292,8 +292,9 @@ func (c *WeComBotChannel) handleMessageCallback(ctx context.Context, w http.Resp
return return
} }
// Process the message asynchronously with context // Process the message with the channel's long-lived context (not the HTTP
go c.processMessage(ctx, msg) // request context, which is canceled as soon as we return the response).
go c.processMessage(c.ctx, msg)
// Return success response immediately // Return success response immediately
// WeCom Bot requires response within configured timeout (default 5 seconds) // WeCom Bot requires response within configured timeout (default 5 seconds)