Разработка формы обратной связи с маршрутизацией по отделам
Форма, которая направляет сообщения в разные почтовые ящики или каналы в зависимости от темы обращения. Вопрос о доставке — в логистику, техническая проблема — в поддержку, коммерческое предложение — в отдел продаж.
Логика маршрутизации
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 рабочих дня.







