Клиенты и адреса
Клиент живёт в системе заведения: по номеру телефона к нему привязываются заказы, история и бонусы. Приложение подтверждает телефон кодом из SMS, получает client_id и дальше работает с адресами.
Как устроена авторизация
Отдельного токена клиента нет — сессию пользователя приложение держит у себя, а к нам ходит своим ключом и указывает client_id. SMS-код нужен для одного: убедиться, что номер действительно принадлежит человеку, который его вводит.
Клиент вводит телефон
↓
POST /clients/auth/send-code → SMS с кодом
↓
Клиент вводит код
↓
POST /clients/auth/verify-code → client_id, профиль, сохранённые адреса
↓
Приложение запоминает client_id и передаёт его в заказах
Отправка кода
POST /clients/auth/send-code
{ "phone": "998901112233" }
{ "message": "Код успешно отправлен" }
Телефон принимается в любом формате — лишние символы отбрасываются. SMS уходит через провайдера, подключённого у заведения.
Лимит — 20 запросов в минуту на ключ: защита от перебора номеров за ваш счёт.
Проверка кода
POST /clients/auth/verify-code
{ "phone": "998901112233", "otp": "123456", "name": "Азиз" }
{
"client_id": 517090,
"name": "Азиз",
"phone": "998901112233",
"language": "uz_latn",
"loyalty_balance": 0,
"orders_count": 12,
"birthday": null,
"addresses": [
{
"id": 119292,
"name": "Амира Темура 15",
"short_name": null,
"latitude": 41.31793,
"longitude": 69.25775,
"apartment": "42",
"floor": "4",
"entrance": "2",
"intercom": null,
"navigate": null
}
]
}
Если клиента с таким номером у заведения ещё не было, он заводится автоматически. name необязателен: при первом входе он станет именем клиента, при повторном — обновит его.
Неверный код — 400 с сообщением «Смс код неверный».
Сразу показывайте сохранённые адреса
В ответе приходят адреса, которые клиент использовал раньше — в том числе оставленные в других каналах заведения (сайт, Telegram-бот, колл-центр). Покажите их списком, чтобы человек не вводил адрес заново.
Профиль клиента
GET /clients/{client_id}
Тот же объект, что при проверке кода. Вызывайте, когда нужно обновить список адресов или показать баланс бонусов.
Добавление адреса
POST /clients/{client_id}/addresses
{
"latitude": 41.32,
"longitude": 69.26,
"name": "Мустакиллик 5",
"apartment": "12",
"floor": "3",
"entrance": "1",
"intercom": "12K",
"navigate": "Во дворе, вход со стороны аптеки"
}
| Поле | Обязательно | Описание |
|---|---|---|
latitude / longitude | да | Координаты точки на карте |
name | нет | Адрес текстом. Не передадите — определим по координатам |
short_name | нет | Короткая подпись для списка |
apartment, floor, entrance, intercom | нет | Квартира, этаж, подъезд, домофон |
navigate | нет | Как добраться — увидит курьер |
В ответе — созданный адрес с id, его передавать в заказ не нужно: заказ принимает адрес целиком, а не ссылкой.
Адрес с теми же координатами не дублируется — обновляются поля существующего. Можно спокойно сохранять адрес при каждом заказе.
Удаление адреса
DELETE /clients/{client_id}/addresses/{id}
Адрес пропадает из списка клиента. Физически он остаётся в системе: на него ссылаются уже созданные заказы, и в истории они должны остаться читаемыми.
Что дальше
Адрес выбран — проверьте, доставляет ли туда заведение: POST /delivery/check. Это стоит делать до показа меню.