Старт: бот

Для бота, у которого нет публичного адреса для вебхуков. События бот забирает сам. Если адрес есть и вы хотите пуш — приём вебхуков описан в событиях, а колода — в листалке.

Ключ API только на сервере бота, не в клиенте мессенджера.

Что хранить у себя

Поле Зачем
network_id ответ на PUT /v1/members/{id в боте}
match_id какой чат в боте соответствует мэтчу
next_after число из последнего GET /v1/events. С него начинается следующий забор. Без него события придут сначала

Анкета

Человек в боте явно включает «показывать меня в сети Перевал». Пока не включил — в сеть ничего не отправляйте. Включил — PUT /v1/members/{id}. Тексты согласия — в анкетах. Выключил — PUT с consent.network: false. Удалил — DELETE.

Карточки

Раз в открытие ленты:

curl "https://api.pereval.dating/v1/members/user-123/feed?limit=1" \
  -H "Authorization: Bearer $PEREVAL_API_KEY"

Кнопки «нравится» и «дальше». «Дальше» — POST /v1/dislikes, анкета скроется на 30 дней. «Нравится» — POST /v1/likes. В подписи карточки — из какого приложения человек и пометка перевода, если bio_translated.

limit=1 отдаёт одну анкету. Следующая после дизлайка или лайка придёт новым запросом. remaining_today — сколько новых людей ещё можно показать сегодня, не больше 200.

События без вебхука

Адрес вебхуков в кабинете оставьте пустым. По расписанию, раз в несколько секунд или при любом сообщении пользователя:

curl "https://api.pereval.dating/v1/events?after=$NEXT_AFTER&limit=100" \
  -H "Authorization: Bearer $PEREVAL_API_KEY"

В ответе items и next_after. Сохраните next_after до разбора: повтор с тем же after вернёт те же события, и это нормально. Событие с уже виденным id пропускайте.

Что показать человеку:

Событие В боте
like.received «Вас лайкнули», карточка и кнопки ответить или скрыть
match.created открыть переписку, запомнить match_id
message.created сообщение. Если translated — пометить перевод. Если suspicious — предупредить по flags
message.read «прочитано»
match.closed закрыть чат. При peer_deleted убрать имя и фото
match.erased удалить переписку у себя
ping ничего пользователю. Так кабинет проверяет, что забор живой

Написать в сеть можно только внутри мэтча: POST /v1/matches/{match_id}/messages с from = id в боте.

Готово, когда

  • Без включённого согласия анкета в сеть не уходит.
  • Карточка показывает человека из другого приложения, «дальше» шлёт дизлайк, «нравится» — лайк.
  • next_after хранится. Повторный забор не создаёт второй чат на тот же match_id.
  • Входящее сообщение появляется в боте. Ответ уходит в сеть только при мэтче.
  • Перевод и подозрительное сообщение человек видит как перевод и как предупреждение.

Проверка без второго бота — песочница тестового контура: она лайкает и отвечает сама.

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

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