Проверка цепочки «варианты в меню → цифра → дата в заказе» нашла два дефекта: 1. edge-функция: если дата в call-файл не попала (старый файл/сбой), дата считалась как «сегодня + цифра − 1» для ОБОИХ типов. Для доставки это сдвигало день на сутки назад: абонент нажимает «день 1» (робот говорит «завтра»), а в заказ уезжает сегодня. Теперь fallback повторяет ОЗВУЧЕННУЮ семантику: самовывоз день 1 = сегодня (сегодня/завтра/послезавтра), доставка день 1 = завтра, день 2 = послезавтра. Проверено живыми POST на функцию (5 случаев, включая приоритет chosen_date) — временная группа создана и удалена. 2. планировщик: при пустом «Графике работы» окна подменяют пустой список дефолтом Пн–Пт, то есть робот предлагал бы дни, когда компания не работает. Теперь при пустом графике звонок пропускается с понятным предупреждением. Цепочка «варианты → цифра → дата» проверена на живых окнах: пятница 17:41 → доставка пн/вт, самовывоз после отсечки 15:30 — только пн (2 варианта), при готовности сегодня до 15:30 — 3 варианта (пт/пн/вт), цифры 1/2/3 → PICKUP_DAY1/2/3 и DELIVERY_DAY1/2 уходят в диалог и возвращаются как chosen_date. |
||
|---|---|---|
| .. | ||
| _shared | ||
| autocall-result | ||
| chatbot-webhook | ||
| confirm-delivery-choice | ||
| create-delivery-invitation | ||
| get-delivery-invitation | ||
| main | ||
| manage-users | ||
| push-subscribe | ||
| push-unsubscribe | ||
| report-delivery-result | ||
| request-otp | ||
| send-chatbot-message | ||
| send-test-push | ||
| sms-balance | ||
| transfer-to-logistics | ||
| update-order-group-delivery-choice | ||
| verify-otp | ||
| README.md | ||
| import_map.json | ||
README.md
Edge Functions
chatbot-webhook
Принимает webhook от telegram, vk, messenger_max, нормализует сообщение, пишет его в
chat_messages и при необходимости обновляет статус заказа и order_history.
Требует подпись X-Signature или Authorization: Bearer <INTEGRATION_API_KEY>, а также
ограничивает частоту входящих событий.
Пример вызова:
curl -X POST \
'https://<project>.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_URLSUPABASE_SERVICE_ROLE_KEYINTEGRATION_API_KEYINTEGRATION_WEBHOOK_SECRETTELEGRAM_BOT_TOKENVK_BOT_TOKENMESSENGER_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
Фиксирует итог доставки, включая успешную доставку и проблемные сценарии.