Розробка форми зворотного зв'язку з маршрутизацією по відділам
Форма, яка направляє повідомлення в різні поштові скриньки або канали залежно від теми звернення. Питання про доставку — в логістику, технічна проблема — в підтримку, комерційна пропозиція — в відділ продажу.
Логіка маршрутизації
class FeedbackRouter
{
private array $routes = [
'technical' => ['[email protected]', 'Техпідтримка'],
'sales' => ['[email protected]', 'Відділ продажу'],
'logistics' => ['[email protected]', 'Логістика'],
'billing' => ['[email protected]', 'Бухгалтерія'],
'other' => ['[email protected]', 'Загальні питання'],
];
public function route(FeedbackRequest $data): void
{
$category = $data->category ?? 'other';
[$recipient, $department] = $this->routes[$category] ?? $this->routes['other'];
// Email в відділ
Mail::to($recipient)->send(new FeedbackMail($data, $department));
// Автовідповідь клієнту
Mail::to($data->email)->send(new FeedbackAutoReplyMail($data, $department));
// Дублювання в Telegram для терміних категорій
if (in_array($category, ['technical', 'billing'])) {
$this->telegram->notify($department, $data);
}
FeedbackLog::create([
'from_email' => $data->email,
'category' => $category,
'recipient' => $recipient,
'subject' => $data->subject,
]);
}
}
Форма на фронтенді
const CATEGORIES = [
{ value: 'technical', label: 'Технічне питання' },
{ value: 'sales', label: 'Співпраця та продажі' },
{ value: 'logistics', label: 'Доставка та повернення' },
{ value: 'billing', label: 'Оплата та рахунки' },
{ value: 'other', label: 'Інше' },
];
export function FeedbackForm() {
const { register, handleSubmit } = useForm();
return (
<form onSubmit={handleSubmit(onSubmit)}>
<Select label="Тема звернення" {...register('category')}>
{CATEGORIES.map(c => (
<option key={c.value} value={c.value}>{c.label}</option>
))}
</Select>
<Input label="Ваше ім'я" {...register('name')} />
<Input label="Email" type="email" {...register('email')} />
<Textarea label="Повідомлення" rows={5} {...register('message')} />
<button type="submit" className="btn-primary">Відправити</button>
</form>
);
}
Додаткові канали доставки
Крім email — Slack-інтеграція для команди через Incoming Webhooks: кожне звернення потрапляє в потрібний канал (#support, #sales) залежно від категорії.
Тривалість: 2–3 робочих дні.







