When OriginatingChannel matches Surface (same provider), use normal dispatcher. Only route via routeReply() when they differ, ensuring cross-provider messages (e.g., Telegram queued while Slack active) get routed back to their origin.