Как устроена сеть

Кто есть кто

Термин Что это
Площадка Приложение, сайт или бот знакомств, подключённый к сети. В API площадка называется partner
Контур У каждой площадки их два: тестовый и боевой. У каждого свой ключ API, секрет подписи и адрес вебхуков. Тестовый видит только другие тестовые площадки и песочницу
Участник Пользователь площадки, который включил «показывать меня в сети». У площадки у него свой external_id, в сети — network_id
Лента Анкеты участников других площадок, которые подходят вашему пользователю
Лайк, дизлайк, мэтч Лайк — нравится, дизлайк — видел и не лайкнул. Взаимный лайк создаёт мэтч и открывает переписку
Событие Уведомление сети вашему серверу: пришёл лайк, создан мэтч, новое сообщение, сообщение прочитано. Приходит вебхуком, или вы забираете его сами запросом GET /v1/events

Как идут данные

Анна пользуется вашим приложением, а Джон зарегистрирован на другой площадке. Они знакомятся в своих приложениях. С API сети «Перевал» работают серверы площадок.

  1. Подключение анкет. Анна и Джон соглашаются на участие в сети. Сервер каждой площадки передаёт анкету своего пользователя запросом PUT /v1/members/{external_id}.
  2. Лента. Анна открывает ленту. Ваш сервер запрашивает GET /v1/members/{external_id}/feed для Анны. Если Джон подходит по условиям ленты, сеть возвращает его анкету.
  3. Лайк. Анна ставит лайк Джону. Ваш сервер отправляет POST /v1/likes, а сеть доставляет событие like.received серверу площадки Джона.
  4. Мэтч. Джон отвечает лайком. Его сервер отправляет POST /v1/likes. Сеть создаёт мэтч и доставляет событие match.created обоим серверам.
  5. Сообщение. Анна пишет Джону. Ваш сервер отправляет 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 анкеты, повторный лайк и повторный блок ничего не ломают.

Непонятно? Напишите разработчику

Ответ и продолжение переписки — на сайте по секретной ссылке, которую вы получите после отправки. Входящая почта не принимается.