Старт: бот
Для бота, у которого нет публичного адреса для вебхуков. События бот забирает сам. Если адрес есть и вы хотите пуш — приём вебхуков описан в событиях, а колода — в листалке.
Ключ 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. - Входящее сообщение появляется в боте. Ответ уходит в сеть только при мэтче.
- Перевод и подозрительное сообщение человек видит как перевод и как предупреждение.
Проверка без второго бота — песочница тестового контура: она лайкает и отвечает сама.