# Edge Functions ## `chatbot-webhook` Принимает webhook от `telegram`, `vk`, `messenger_max`, нормализует сообщение, пишет его в `chat_messages` и при необходимости обновляет статус заказа и `order_history`. Требует подпись `X-Signature` или `Authorization: Bearer `, а также ограничивает частоту входящих событий. Пример вызова: ```bash curl -X POST \ 'https://.supabase.co/functions/v1/chatbot-webhook?provider=telegram' \ -H 'Content-Type: application/json' \ -d '{ "order_id": "uuid", "text": "Подтверждаю", "action": "confirm_delivery", "external_message_id": "tg-42", "payload": {"slot_id": "slot-1"} }' ``` ## `send-chatbot-message` Принимает исходящее сообщение, подготавливает dispatch в нужный канал и логирует отправку в `chat_messages`. Если передан `workflowAction=send_delivery_offer`, функция дополнительно переводит заказ в `Ожидает ответа клиента` и выставляет `delivery_agreement_status = 'Отправлено клиенту'`. Ожидаемые переменные: - `SUPABASE_URL` - `SUPABASE_SERVICE_ROLE_KEY` - `INTEGRATION_API_KEY` - `INTEGRATION_WEBHOOK_SECRET` - `TELEGRAM_BOT_TOKEN` - `VK_BOT_TOKEN` - `MESSENGER_MAX_TOKEN` ## `request-otp` Отправляет код входа по email после проверки лимитов по IP и адресу. Используется страницей логина вместо прямого вызова `supabase.auth.signInWithOtp` из браузера. ## `verify-otp` Проверяет код входа, тоже с rate limit, и возвращает session для установки в клиенте. ## `create-delivery-invitation` Создает или обновляет активное приглашение для публичной клиентской ссылки, сохраняет `delivery_invitations`, обновляет заказ в статус `Ожидает ответа клиента` и возвращает публичный URL. Обязательная переменная окружения: - `PUBLIC_APP_URL` ## `get-delivery-invitation` Возвращает публичное состояние приглашения по токену. Используется страницей клиента для показа актуального статуса заказа. ## `confirm-delivery-choice` Фиксирует выбор времени доставки клиентом, переводит заказ в `Доставка согласована` и создает историю события. ## `update-order-group-delivery-choice` Фиксирует ручное согласование доставки по группе `order_groups`. Используется менеджером или логистом, когда клиент согласовал дату и половину дня напрямую. ## `transfer-to-logistics` Используется для ручной передачи заказа логисту или перевода в `Платное хранение`. ## `report-delivery-result` Фиксирует итог доставки, включая успешную доставку и проблемные сценарии.