VK
Личные сообщения от вашего сообщества VK тем, кто их разрешил. Канал адресный, как e-mail или SMS: сообщение уходит одному человеку — тому, кто написал сообществу по своей ссылке, разрешил его сообщения или чей VK id знает ваш сайт.
VK доставляет сообщения сообщества только тем, кто их разрешил (кнопка «Разрешить сообщения» или первое сообщение от самого человека). Остальные — отказ 901: у таких людей в PushData нет адреса, пока они не разрешат сообщения.
Шаг 1 — Ключ сообщества
- В сообществе: Управление → Настройки → Работа с API → Ключи доступа → Создать ключ
- Включите Сообщения сообщества (
messages) — им канал отправляет; включите и Управление сообществом (manage), чтобы канал сам настроил Callback API - Запомните ID сообщества — число из
vk.com/club123456789или из настроек
Шаг 2 — Добавьте канал
Каналы → Новый канал → VK, вставьте ключ, укажите ID сообщества, нажмите «Проверить связь» и сохраните. При сохранении PushData проверяет права ключа (groups.getTokenPermissions) и сообщество (groups.getById), запоминает его короткий адрес и, если ключ может управлять сообществом, регистрирует свой вебхук как сервер Callback API сообщества (groups.addCallbackServer + setCallbackSettings на события message_new, message_allow, message_deny) и сохраняет строку подтверждения, которую выдал VK.
Без права manage канал всё равно сохраняется; откройте его снова — форма редактирования покажет адрес и секретный ключ, которые нужно добавить в Работа с API → Callback API вручную (версия API 5.199, три события выше), и поле для строки подтверждения, которую VK показывает там же.
Шаг 3 — Подключите контакты
У каждого контакта есть ссылка VK (Контакты → контакт → «Ссылка VK»; vkLink в API):
https://vk.me/myshop?ref=<подписанный payload контакта>&ref_source=pushdataПередайте её человеку любым способом — письмом, на сайте, QR-кодом. Открыв диалог и отправив сообщение, он привязывает свой аккаунт VK к контакту: PushData получает message_new с ref из ссылки и записывает vkUserId в контакт. Payload подписан, поэтому привязать чужой контакт к своему аккаунту VK нельзя.
Ещё два способа:
- тот, кто разрешил сообщения сообществу или написал ему сам, становится контактом
vk:<user id>— ему тоже можно отправлять; - если ваш сайт уже знает VK id пользователя (вход через VK ID), запишите его в контакт:
POST /api/v1/contactsсvk_user_id(илиvkUserIdв GraphQL).
Когда человек запрещает сообщения (message_deny), vkUserId контакта очищается — отправки ему прекращаются без ошибок доставки; id запоминается, и следующее message_allow привязывает тот же контакт. То же происходит, если VK отклонил отправку с 901 / 902 (человек не разрешал сообщения или запретил их, а событие не дошло): адрес очищается после первой неудачной доставки.
Шаг 4 — Отправляйте
Уведомление с типом канала VK уходит каждому контакту с vkUserId (или выбранным); шаг SEND в сценарии — контакту сценария. Текст: заголовок, тело, затем данные строками ключ: значение (разметки в сообщениях VK нет); лимит VK — 4096 символов. Ответ messages.send — id сообщения, он виден в журнале доставок.
Справочник полей
| Поле | Пример | Описание |
|---|---|---|
| Ключ сообщества | vk1.a.… | Из настроек API сообщества, с правом messages; хранится зашифрованным |
| ID сообщества | 123456789 | Число сообщества; короткий адрес и название заполняются при сохранении |
| Строка подтверждения | a1b2c3d4 | Ответ на событие confirmation от VK; с правом manage заполняется сама, без него вставляется вручную |
Ошибки
| Текст в журнале | Значение |
|---|---|
has no VK user id / has not allowed the community's messages | контакт не писал сообществу — отправьте ему ссылку VK |
VK API error 5 / 27 / 28 | ключ сообщества отозван или неверен — пересохраните канал |
VK API error 901 / 902 | человек не разрешал сообщения сообществу или запретил их; адрес очищен из контакта, следующее message_allow привяжет его снова |
VK API error 6 / 9 / 29 | лимит запросов VK — доставка будет повторена |
Сервер Callback API PushData принимает события только с секретным ключом канала; всё остальное отбрасывается. Новые контакты vk:<user id> создаются в пределах лимита контактов тарифа: на лимите сообщество по-прежнему отвечает, но контакт не создаётся.