Привет! Меня зовут Денис. Я руководитель направления SafeDeal в Авито. Мы разрабатываем сервисы «Доставка» и «Краткосрочная аренда» и делаем их использование удобным, понятным и безопасным. В марте этого года мы запустили сервис доставки товаров между частными пользователями. Казалось бы, что здесь такого и зачем посвящать этому целую статью? Доставка есть у всех интернет-магазинов, многие покупатели ей пользуются и больших трудностей с этим сервисом не возникает. Да, это так. Проблем нет, если продавец — юридическое лицо, представитель компании. Но когда к этому процессу с обеих сторон подключаются частные покупатели и продавцы, появляется ряд интересных задач и проблем, которые нужно решать. С учетом того, что Авито ежемесячно посещает более 34 миллионов пользователей, мы понимали, что передачу товара от продавца к покупателю с помощью нашего сервиса нужно сделать максимально простой. В статье я расскажу о предпосылках запуска доставки между частными пользователями на Авито, о проблемах, с которыми мы сталкивались, и том, как мы их решили благодаря договоренностям с нашими партнерами и вниманию к деталям. И покажу немного внутренностей сервиса: его механику и архитектуру. Авито — это десятки тысяч маленьких сообществ продавцов и покупателей в каждом населенном пункте. Но если, например, вы живете в Воронеже и завтра захотите купить лыжные ботинки 44 размера на Авито, в вашем городе (на момент написания статьи) найдётся только четыре нужных объявления. Не очень большой выбор. При поиске по всей России вы увидите 377 объявлений. Выбор увеличивается в 94 раза. Иногда из-за отсутствия выбора или нежелания заниматься логистикой доставки товара из другого региона покупатели уходили с Авито и искали нужный им товар в интернете и в местных магазинах. Часто это оказывалось дороже. А купленный новый товар не всегда был лучше. То есть, хотя на Авито было то, что нравилось покупателю, он не решался это покупать. Мы хотели исправить ситуацию. У нас есть аналитическая модель, которая с высокой достоверностью считает, сколько сделок совершается на Авито. Она говорит нам, что частные пользователи ежегодно заключают между собой 63 миллиона сделок. Четверть из них — межрегиональные. Конечно, расстояние вносит определенные трудности в этот процесс. До запуска доставки межрегиональная сделка отчасти была неким «прыжком веры». Покупая товар из другого региона, люди зачастую вносили за него предоплату. И нервничали, полагаясь на добросовестность продавца. А если пользователи договаривались, что покупатель заплатит после получения товара, то рисковал уже продавец. Иногда использовался наложенный платеж. Продавец отправлял посылку почтой с указанием ее стоимости, а покупатель забирал товар и платил за его получение. Затем деньги уходили отправителю. Но и наложенный платеж не решал всех вопросов: получатель должен был заплатить по факту доставки, без возможности проверить содержимое и убедиться, что там лежит (например) iPhone, о покупке которого договорились с продавцом, а не кирпич. Кроме того, часто возникали противоречия, кому именно платить за саму услугу доставки, и сделки из-за этого не совершались. Мы всегда старались помочь пользователям, но прежде всего выступали как «инфраструктурный мост» между людьми, не принимая участия в сделке. Авито соединял продавца и покупателя, а дальнейшие договоренности и их добросовестное исполнение оставались на совести пользователей. Эта ситуация нас не устраивала. Покупка товара с выгодой — не главный критерий успешности сделки на сайтах объявлений. Вопросы доверия и безопасности имеют не меньшее значение. Мы хотели создать надежный сервис, который сделает процесс совершения сделок проще, удобнее и безопаснее. Трудно найти в России человека, который бы не слышал про Авито. Но не все пользуются сервисом. Кому-то просто не нравится встречаться лично с продавцом, разбираться в особенностях отправлений посылок, переводить деньги на неизвестные счета и карты. Поэтому мы защитили сделки с доставкой, чтобы люди, которые прежде не решались покупать и продавать товары на Авито, попробовали наш сервис, пользуясь удобной механикой. Мы постарались сделать механику использования доставки на Авито простой и понятной. Покупатель выбирает товар, нажимает «Купить с доставкой» и оплачивает товар и доставку банковской картой. До получения товара деньги резервируются на эскроу-счете банка. Продавец получает подтверждение об оплате, и у него есть два дня, чтобы отнести товар в пункт приема. Когда товар прибыл на пункт выдачи, покупатель должен забрать посылку в течение трех дней. В пункте выдачи покупатель называет код из смс и получает товар. Его можно проверить в течение 15 минут, после чего покупка подтверждается. После получения покупателем товара, продавцу приходит сообщение на Авито. Он привязывает свою банковскую карту — на нее перечислят деньги с эскроу-счета. Сделка совершилась.  В этом разделе я расскажу о внутренностях продукта и сервисах, которые отвечают за работу на этапе покупки, доставки и при получении товара.  Когда пользователь выбирает товар через сайт или мобильное приложение Авито, он отправляет запрос в сервис Avito-Site. Бэкенд сайта Авито «общается» с двумя системами:
1. Avito Delivery Core — обращается в службу доставки.
2. Billing — направляет запрос в QIWI, «Тинькофф». После того, как покупатель выбрал товар, он попадает на страницу, где может узнать стоимость и сроки доставки. Avito-Site. Отправляет запросы.
Calculation. Хранит тарифы и знает, сколько будет стоить доставка с учетом выбранной категории товара.
Terminal Keeper. Находит пункты самовывоза в городе получателя.
Delivery-Geo. Хранит информацию о возможности доставки в определенный город и о сроках доставки. На этом этапе фактически создается заказ.  Avito-Site. Отправляет запросы к другим сервисам.
Order-Controller. Проксирует вызовы к нашим другим внутренним сервисам и проводит первоначальную валидацию данных, поступивших от бэкенда Avito-Site.
Order-Expiration. Отслеживает сроки существования заказа. Если прошли сроки оплаты, заказ покупателя необходимо инвалидировать.
Calculation. Рассчитывает стоимость доставки.
Callback-Processor. Оповещает Avito-Site об изменениях в заказе.
Order-Keeper. Сервис, как некая обертка над базой с API. В нем еще происходят некоторые бизнес-валидации, и после этого он отдает номер заказа в Order-Controller. Когда Order-Controller отправил всё, что должен, и получил номер заказа, он передает Avito-Site информацию: «Все прошло успешно». Бэкенд Avito-Site стучится в Billing, который работает с QIWI или Тинькофф, и заказ оплачивается. После успешной оплаты бэкенд Avito-Site стучится в наш сервис Order-Controller, сообщая: «Подтверждение прошло успешно». Следующий шаг — Order-Controller снова стучится в Order-Keeper, сообщая: «Заказ подтверждаем». Order-Keeper проверяет правильность статуса. (Вдруг такой товар уже был доставлен, отменен или с ним еще что-то случилось). Если проверка пройдена успешно, сервис переводит статус на подтверждение службе доставки. Далее Order-Controller стучится в сервис Order-Expiration, и говорит, что фаза оплаты покупателем заказа закончена. Теперь у продавца есть от двух до четырех дней, чтобы отнести товар на пункт самовывоза. Order-Expiration следит за этими сроками. Если продавец не успеет, то сервис отменит заказ, а деньги вернутся покупателю.  Первая часть сделки завершилась: покупатель оплатил заказ, а деньги списались с его счета. Теперь продавец должен принести свой товар в службу доставки в течение двух дней. Avito-Site. По-прежнему отправляет запросы.
Order-Controller. Проксирует вызовы к другим внутренним сервисам и валидирует данные, поступившие от бэкенда Avito-Site.
Order-Keeper. Хранит номер заказа и информацию об оплате заказа.
Delivery-Registrator. Отвечает за регистрацию заказа непосредственно в службе доставки.
Delivery-Submitter. Регистрирует и отменяет заказ, отдает номер, присвоенный службой доставки, нашим сервисам.
Status-Manager. Хранит все статусы по нашей версии, валидирует входящую информацию и оповещает об этом нужные сервисы.
Callback-Processor. Оповещает Avito-Site, что заказ оплачен.
Messenger. Присылает сообщения пользователю. Объясняем работу сервисов на примере службы доставки Boxberry. Но с недавних времен мы работаем еще и с DPD. Сделка близится к завершению — заказ находится в пути, либо уже доставлен покупателю. Об этом мы должны сообщить пользователю в мессенджере. Delivery-History-Converter. Получает и хранит статусы по версии службы доставки: «в пути», «готов к выдаче», «возвращен».
Order-Keeper. Хранит информацию, получаемую от службы доставки, о габаритах, весе товара и терминале получения.
Status-Manager. Обновляет последний пришедший статус и отправляет запрос в Order-Expiration.
Order-Expiration. Следит за сроками отправки товара продавцом.
Callback-Processor. Оповещает Avito-Site.
Avito-Site. Передает информацию в мессенджер. Расскажу, с какими еще проблемами встречаются частные пользователи, и как мы их решили с запуском доставки. Обычно стоимость доставки профессиональной службой зависит от габаритов и веса товара. Указать их корректно — не проблема для профессионала. Но частный продавец может ошибиться в параметрах длины, ширины или веса, и тогда ему выставят дополнительный счёт. Из-за этого пользоваться службами доставки не хочется. У нас в сервисе большие объемы — ежедневно продавцы размещают более 400 000 объявлений. Мы не хотели, чтобы каждый из них оставался недоволен нашим продуктом только из-за того, что не смог точно указать размеры своего товара. Никто бы не стал подключаться к доставке, а покупателям было бы неудобно пользоваться Авито. Поэтому мы сопоставили наше дерево категорий с габаритами и тарифами Boxberry и DPD и преобразовали их в условные габариты. Для тарифов, которыми мы пользуемся в доставке, у товаров одной категории размеры и вес всегда «одинаковые». Неважно, продаете ли вы iPad mini или iPad Pro — платить дополнительную комиссию за ошибку в габаритах не надо. Хотя есть сервисы, которые требуют заплатить комиссию, если продавец неверно указал размеры и вес товара. В классической доставке продавец всегда сам упаковывает товар. У него есть для этого возможности. Но если вы, к примеру, просто продаете старый телевизор, то можете столкнуться с проблемой: служба доставки не примет товар без упаковки, а у вас вряд ли хранится фабричная коробка от него, и едва ли есть склад упаковочной бумаги за углом. Мы договорились со службой доставки, что эту задачу они берут на себя, и поэтому продавцы не тратят время на лишнее действие.  У каждого заказа есть свой уникальный номер, который знают только продавец и получатель. Для того, чтобы сдать и получить заказ, нужно назвать этот номер. Больше ничего делать не надо — например, заполнять накладные. Во многих службах доставки без этого действия вы ничего не отправите и не получите. Преимущество доставки на Авито еще и в том, что это не просто пересылка товаров от продавца к покупателю, но и управление деньгами. Если покупателю не понравился товар — он может от него отказаться, а деньги ему вернутся. И не надо платить за обратную доставку товара, как бывает в других сервисах. Мы не только помогаем физически доставить товары, но и участвуем в сделке, защищая продавцов и покупателей. Если возникнут проблемы, мы решим их. Если товар оплачен, то мы вешаем на него бирку с информацией об этом. Это помогает нам избегать путаницы с двойной оплатой одного товара. Но если у продавца несколько экземпляров одного товара, скоро он это тоже может указать. Тогда мы просто изменим их количество в выдаче.  Мы запустили удобный сервис для частных продавцов и покупателей, который предоставляет им новые возможности и помогает лучше достигать своих целей. Спустя три месяца работы мы подвели промежуточные итоги. Сейчас c доставкой можно купить 5 миллионов товаров — это 36% всех объявлений о продаже. Больше всего их, конечно, в Москве — число объявлений перевалило за миллион, и в Питере — больше 500 тысяч объявлений. Эти же города и самые «отправляющие». С начала апреля пользователи отправили по всей России почти 67 тысяч товаров. Рекорд одного дня — 2 115 отправлений. Чаще всего пользователи делали внутригородские отправления по Москве — на этот маршрут пришлось 5% всех посылок. Следующие по популярности три маршрута доставки проходят по двум крупнейшим городам: Москва — Санкт-Петербург (1,6%); Санкт-Петербург — Санкт-Петербург (1,5%); Санкт-Петербург — Москва (1,1%). Далее — отправления из Москвы в Ростов-на-Дону, Нижний Новгород, Краснодар, Екатеринбург, Новосибирск и Воронеж. С доставкой на Авито можно отправить товар в любой регион России. Самым длинным маршрутом стал путь Москва — Южно-Сахалинск: детский стульчик для кормления из столицы пролетел более 6,6 тысяч километров. Это первый пост в серии про доставку на Авито. Если вам будет интересна эта тема, в следующих постах мы расскажем чуть больше про технологию нашего сервиса: с кодом и другими внутренностями. Задавайте свои вопросы в комментариях, постараемся ответить. Stay tuned!