Как устроена сеть
Кто есть кто
| Термин | Что это |
|---|---|
| Площадка | Приложение, сайт или бот знакомств, подключённый к сети. В API площадка называется partner |
| Контур | У каждой площадки их два: тестовый и боевой. У каждого свой ключ API, секрет подписи и адрес вебхуков. Тестовый видит только другие тестовые площадки и песочницу |
| Участник | Пользователь площадки, который включил «показывать меня в сети». У площадки у него свой external_id, в сети — network_id |
| Лента | Анкеты участников других площадок, которые подходят вашему пользователю |
| Лайк, дизлайк, мэтч | Лайк — нравится, дизлайк — видел и не лайкнул. Взаимный лайк создаёт мэтч и открывает переписку |
| Событие | Уведомление сети вашему серверу: пришёл лайк, создан мэтч, новое сообщение, сообщение прочитано. Приходит вебхуком, или вы забираете его сами запросом GET /v1/events |
Как идут данные
Анна пользуется вашим приложением, а Джон зарегистрирован на другой площадке. Они знакомятся в своих приложениях. С API сети «Перевал» работают серверы площадок.
- Подключение анкет. Анна и Джон соглашаются на участие в сети. Сервер каждой площадки передаёт анкету своего пользователя запросом
PUT /v1/members/{external_id}. - Лента. Анна открывает ленту. Ваш сервер запрашивает
GET /v1/members/{external_id}/feedдля Анны. Если Джон подходит по условиям ленты, сеть возвращает его анкету. - Лайк. Анна ставит лайк Джону. Ваш сервер отправляет
POST /v1/likes, а сеть доставляет событиеlike.receivedсерверу площадки Джона. - Мэтч. Джон отвечает лайком. Его сервер отправляет
POST /v1/likes. Сеть создаёт мэтч и доставляет событиеmatch.createdобоим серверам. - Сообщение. Анна пишет Джону. Ваш сервер отправляет
POST /v1/matches/{match_id}/messages. Сеть доставляет сообщение серверу площадки Джона в событииmessage.createdи при необходимости добавляет перевод.
Кого показывает лента
Человек попадает в ленту вашего пользователя, если одновременно:
- он противоположного пола;
- возраст каждого — в диапазоне другого;
- до 50 км или в радиусе
radius_kmиз фильтров смотрящего (или тот же город и страна, если нет координат) — а в ленте «Весь мир» расстояние не важно, но оба включили «Весь мир»; - есть общий язык, или оба согласились общаться на других языках;
- есть общая цель знакомства;
- был активен за последние 30 дней;
- ваш пользователь его ещё не лайкал и не дизлайкал за последние 30 дней, и никто из двоих не заблокировал другого.
Сначала — те, кто был активен недавно. Своих пользователей сеть в ленту не возвращает: их вы показываете сами, как раньше.
Страницы отдаются курсором next_cursor. Повтор того же запроса возвращает тех же людей. В сутки участник получает не больше 200 разных людей: повторный показ лимит не тратит. Подробнее — в разделе Лента, лайки, мэтчи. Какой запрос слать с листалки, с сайта поиска и из бота — в стартах.
Перевод
У каждого участника есть основной язык — первый в languages. Все языки из languages человек знает, и на них сеть ничего не переводит. Если текст — описание анкеты или сообщение — написан на языке, которого читатель не знает, сеть переводит его на основной язык читателя и отдаёт оригинал рядом:
- в ленте и анкетах —
bio,bio_original,bio_translated; - в сообщениях —
text,text_original,translated.
Перевод идёт в фоне. Описание анкеты переводится на языки тех, кто его читает: когда в сети появляется читатель с новым основным языком, при первом показе ему достаётся оригинал, а перевод готовится и приходит в следующих лентах. Сообщение уходит собеседнику, когда перевод готов.
Язык текста сеть определяет сама. Короткие реплики («ok», «привет!») надёжно не определить — тогда язык выбирается среди языков автора из languages, поэтому указывайте их честно, основной — первым.
Показывайте пометку «переведено ИИ» и давайте посмотреть оригинал. Если перевод не удался, сообщение всё равно доставляется — в оригинале, с translated: false.
С версии 0.5 сеть переводит на 38 языков: ru, en, uk, be, kk, de, fr, es, it, pt, nl, pl, cs, sk, ro, hu, bg, sr, hr, el, tr, sv, da, fi, he, ar, fa, hi, ja, ko, zh, vi, th, id, ka, hy, az, uz. Список отдаёт GET /v1/languages. Другие языки в languages указывать можно — человек их знает, но перевода на них нет.
Что сеть хранит и чего не хранит
| Хранит | Не хранит |
|---|---|
| Анкету участника, пока он в сети | Email, телефон, документы |
| Время и версию текста согласия | Точные координаты — округляет до ~1 км |
| Лайки и мэтчи | |
| Сообщения внутри мэтчей — до 90 дней от отправки | |
| События — 7 дней, дизлайки — 30 дней |
Когда участника удаляют из рабочей базы сети, стираются его анкета, лайки, дизлайки и блокировки; переписка у собеседников остаётся без имени и фото. При стирании чата с жалобой модерационная копия хранится в рабочей базе 90 дней от стирания. Отдельно жалобы и персональные материалы фотопроверок, включая нерешённые споры, хранятся до 60 дней в рабочей базе от исходной подачи жалобы или создания проверки, затем до 30 дней в закрытых резервных копиях. Повторные обращения и решения не продлевают срок. Удаление материалов не одобряет фото и не снимает блокировку; обратитесь за разбором до истечения 60 дней. Выключенное участие — не удаление: человек скрыт, переписки живут. Все сроки, отдельное хранение резервных копий и обязанности площадок — в правилах сети.
Надёжность
- Каждое изменение и события о нём записываются вместе — событие не теряется, даже если ваш сервер был недоступен.
- Недоставленные вебхуки повторяются до 3 суток. Пропущенное можно забрать самому:
GET /v1/eventsотдаёт события за последние 7 дней. - Все запросы на изменение идемпотентны там, где это возможно: повторный
PUTанкеты, повторный лайк и повторный блок ничего не ломают.