Developing a Feedback Form with Department Routing
A form that directs messages to different mailboxes or channels depending on the issue type. Questions about delivery go to logistics, technical issues to support, commercial proposals to sales.
Routing Logic
class FeedbackRouter
{
private array $routes = [
'technical' => ['[email protected]', 'Support'],
'sales' => ['[email protected]', 'Sales Department'],
'logistics' => ['[email protected]', 'Logistics'],
'billing' => ['[email protected]', 'Billing'],
'other' => ['[email protected]', 'General Inquiries'],
];
public function route(FeedbackRequest $data): void
{
$category = $data->category ?? 'other';
[$recipient, $department] = $this->routes[$category] ?? $this->routes['other'];
// Email to department
Mail::to($recipient)->send(new FeedbackMail($data, $department));
// Auto-reply to customer
Mail::to($data->email)->send(new FeedbackAutoReplyMail($data, $department));
// Duplicate to Telegram for urgent categories
if (in_array($category, ['technical', 'billing'])) {
$this->telegram->notify($department, $data);
}
FeedbackLog::create([
'from_email' => $data->email,
'category' => $category,
'recipient' => $recipient,
'subject' => $data->subject,
]);
}
}
Frontend Form
const CATEGORIES = [
{ value: 'technical', label: 'Technical Question' },
{ value: 'sales', label: 'Partnership and Sales' },
{ value: 'logistics', label: 'Shipping and Returns' },
{ value: 'billing', label: 'Payment and Invoices' },
{ value: 'other', label: 'Other' },
];
export function FeedbackForm() {
const { register, handleSubmit } = useForm();
return (
<form onSubmit={handleSubmit(onSubmit)}>
<Select label="Inquiry Type" {...register('category')}>
{CATEGORIES.map(c => (
<option key={c.value} value={c.value}>{c.label}</option>
))}
</Select>
<Input label="Your Name" {...register('name')} />
<Input label="Email" type="email" {...register('email')} />
<Textarea label="Message" rows={5} {...register('message')} />
<button type="submit" className="btn-primary">Send</button>
</form>
);
}
Additional Delivery Channels
Beyond email — Slack integration for the team via Incoming Webhooks: each inquiry lands in the right channel (#support, #sales) depending on the category.
Timeline: 2–3 business days.







