Callback кнопка ВК как сделать

Доброго времени суток, уважаемые жителя Хабра)
Мой первый пост. Будет кратко, емко и надеюсь актуально.

9го июля ВК выкатил callback кнопки для чат-ботов. Телеграм напрягся сделал это в 199. давно. Самая популярная библиотека для разработки чат-ботов под ВК на Python — vk_api (от разработчика python273 ). Ввиду того, что свежие правки в нее вносятся медленно, я взял на себя смелось сделать форк, дополнить его и описать небольшой пример использования.

Что сделано относительно исходной v11.80?

  • Обновлены ограничения по клавиатуре (в соответствии с изменениями в API):

Виды callback кнопок

У сallback кнопок 3 встроенных действия по клику (+ редактирование сообщения):

  • show_snackbar — показать всплывающее сообщение (исчезает через 10 сек);
  • open_link — открыть URL ссылку;
  • open_app — открыть ВК приложение;
  • можно настроить редактирование текущего сообщения, дабы по клику можно было изменять клавиатуру + текст в текущем сообщении.

Как установить модифицированную библиотеку?

pip install git+https://github.com/chebotarevmichael/vk_api

CALLBACK КНОПКИ ДЛЯ БОТА VK НА NODEJS МЕНЕЕ ЧЕМ ЗА 10 МИНУТ #3

Код примера по частям

Импорты. Думаю, с ними все понятно.

from vk_api import VkApi
from vk_api.utils import get_random_id
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
from vk_api.keyboard import VkKeyboard, VkKeyboardColor
import json

Настройка и запуск бота. Указываем идентификатор и longpoll-токен группы.
Для использования кнопки «открыть ВК приложение» указываем идентификатор приложения и его владельца.

# Общие
GROUP_ID = ‘100. 500’
GROUP_TOKEN = ‘df2148cc7c664. токен_группы. df2148cc7c6642242531fad399’
API_VERSION = ‘5.120’

# для callback-кнопки «открыть приложение»
APP_ID = 100500 # id IFrame приложения
OWNER_ID = 123456 # id владельца приложения

# виды callback-кнопок
CALLBACK_TYPES = (‘show_snackbar’, ‘open_link’, ‘open_app’)

# Запускаем бот
vk_session = VkApi(token=GROUP_TOKEN, api_version=API_VERSION)
vk = vk_session.get_api()
longpoll = VkBotLongPoll(vk_session, group_id=GROUP_ID)

Создаем два меню.
В первом меню — все 4 упомянутых выше действия кнопок.
Во втором — только кнопка «назад», возвращающая предыдущее меню.

# Настройки для обоих клавиатур
settings = dict(one_time=False, inline=True)

# №1. Клавиатура с 3 кнопками: «показать всплывающее сообщение», «открыть URL» и изменить меню (свой собственный тип)
keyboard_1 = VkKeyboard(**settings)
# pop-up кнопка
keyboard_1.add_callback_button(label=’Покажи pop-up сообщение’, color=VkKeyboardColor.SECONDARY, payload=)
keyboard_1.add_line()
# кнопка с URL
keyboard_1.add_callback_button(label=’Откртыть Url’, color=VkKeyboardColor.POSITIVE, payload=)
keyboard_1.add_line()

Полный гайд по кнопкам в вк


# кнопка по открытию ВК-приложения
keyboard_1.add_callback_button(label=’Открыть приложение’, color=VkKeyboardColor.NEGATIVE, payload=)
keyboard_1.add_line()
# кнопка переключения на 2ое меню
keyboard_1.add_callback_button(label=’Добавить красного ‘, color=VkKeyboardColor.PRIMARY, payload=)

# №2. Клавиатура с одной красной callback-кнопкой. Нажатие изменяет меню на предыдущее.
keyboard_2 = VkKeyboard(**settings)
# кнопка переключения назад, на 1ое меню.
keyboard_2.add_callback_button(‘Назад’, color=VkKeyboardColor.NEGATIVE, payload=)

Запускаем long poll.

Запускаем действо. Если пользователь присылает текстовое сообщение — выдаем первое меню. Если это событие «клик по callback кнопке» — выполняем определенное действие (одно из 3+1 действий, упомянутых выше).

Еще по теме:  Кто может вызывать меня в приложениях Вконтакте что это

f_toggle: bool = False
for event in longpoll.listen():
# отправляем меню 1го вида на любое текстовое сообщение от пользователя
if event.type == VkBotEventType.MESSAGE_NEW:
if event.obj.message[‘text’] != »:
if event.from_user:
# Если клиент пользователя не поддерживает callback-кнопки,
# нажатие на них будет отправлять текстовые
# сообщения. Т.е. они будут работать как обычные inline кнопки.
if ‘callback’ not in event.obj.client_info[‘button_actions’]:
print(f’Клиент не поддерж. callback’)

vk.messages.send(
user_id=event.obj.message[‘from_id’],
random_id=get_random_id(),
peer_id=event.obj.message[‘from_id’],
keyboard=keyboard_1.get_keyboard(),
message=event.obj.message[‘text’])
# обрабатываем клики по callback кнопкам
elif event.type == VkBotEventType.MESSAGE_EVENT:
# если это одно из 3х встроенных действий:
if event.object.payload.get(‘type’) in CALLBACK_TYPES:
# отправляем серверу указания как какую из кнопок обработать. Это заложено в
# payload каждой callback-кнопки при ее создании.
# Но можно сделать иначе: в payload положить свои собственные
# идентификаторы кнопок, а здесь по ним определить
# какой запрос надо послать. Реализован первый вариант.
r = vk.messages.sendMessageEventAnswer(
event_id=event.object.event_id,
user_id=event.object.user_id,
peer_id=event.object.peer_id,
event_data=json.dumps(event.object.payload))
# если это наша «кастомная» (т.е. без встроенного действия) кнопка, то мы можем
# выполнить edit сообщения и изменить его меню. Но при желании мы могли бы
# на этот клик открыть ссылку/приложение или показать pop-up. (см.анимацию ниже)
elif event.object.payload.get(‘type’) == ‘my_own_100500_type_edit’:
last_id = vk.messages.edit(
peer_id=event.obj.peer_id,
message=’ola’,
conversation_message_id=event.obj.conversation_message_id,
keyboard=(keyboard_1 if f_toggle else keyboard_2).get_keyboard())
f_toggle = not f_toggle

if __name__ == ‘__main__’:
print()

Источник: dzen.ru

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

VkBottle-Lessons / tutorial / vkbottle_bot_lesson_3.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Cannot retrieve contributors at this time
83 lines (66 sloc) 4.53 KB

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents Copy raw contents

Copy raw contents

Простой способ работы с событиями и callback кнопкной

Переходим в свое сообщество -> Управление -> API usage -> LongPoll API -> Event types, активируем нужные типы. К примеру Group Join, Group Leave

Код: Из корня модуля импортируем классы: GroupEventType, GroupTypes, VKAPIError. Последний класс понадобится для обработки ошибок. Все типы событий можно посмотреть в оф. документации VK-API.

from vkbottle import GroupEventType, GroupTypes, VKAPIError

Создаем асинхронную функцию с любым разумным названием, в параметры передаем event: GroupTypes.GroupJoin . В функции прописываем конструкцию try except, В блоке try будем отправлять сообщение пользователю. В except обратимся к классу VKAPIError и укажем номер ошибки 901: VKAPIError(901) . Аналогично можно сделать и с ивентом GroupLeave

Еще по теме:  Как посмотреть друзей в ВК если страница закрыта

Код: Импортируем из корня модуля классы: Keyboard, Callback, также нужно импортировать json, можем импортировать его из vkbottle.modules

from vkbottle import GroupEventType, GroupTypes, Keyboard, Callback from vkbottle.modules import json

Создаем обычный хендлер сообщений, создаем клавиатуру, добавляем две Callback кнопки. В Callback кнопку передаем label и payload , и отправляем клавиатуру.

Создаем новый ивент: MessageEvent, внутри функции ставим условие: если в payload поступил текст click, то вызываем всплывающее уведомление, с помощью метода messages.send_message_event_answer , передаем параметры: event_id, peer_id, user_id и event_data. Это все мы можем взять из переменной event , которую мы указали в параметрах. В блоке else выполним теже самые действия, просто отправим другой текст.

Источник: github.com

Интеграция сообщений в VK c процессами на GetCourse

После подключения ВК-сообщества вы сможете активно взаимодействовать с пользователями во ВКонтакте через процессы. Например, чтобы собирать обратную связь и учитывать её в автоворонках.

В статье:

  • Как отправить сообщение в ВК-сообщество через процесс
  • Как построить чат-бота с помощью callback-операций во ВКонтакте
  • В какое ВК-сообщество будет отправлено сообщение
  • Как сегментировать пользователей по разрешениям на отправку

Ссылка на это место страницы: #msg

Как отправить сообщение в ВК-сообщество через процесс

Чтобы отправить сообщение пользователю в ВК из процесса, нужно использовать блок «Операция» — «Отправить сообщение в vk».

Добавьте в блок текст, который будет отправлен пользователю (1).

При необходимости можно «Оборачивать ссылки для авторизации» (2) — при переходе по ссылке ученик автоматически попадёт в свой личный кабинет и ему не нужно будет вводить пароль для входа.

Обратите внимание: из соображений безопасности такая ссылка не авторизует сотрудников и администраторов аккаунта.

В текст сообщения можно добавить кнопки, при нажатии на которые для пользователя запустится определенный процесс из вкладки «Чат-бот» в настройках интеграции с ВКонтакте. Подробнее о кнопочном меню — в отдельной статье.

Команды на вкладке «Чат-бот»

Кнопки для запуска процессов по командам

Также есть возможность запускать процесс при получении определенного текста во Входящие без использования кнопочного меню. Подробнее об этом, а также о других способах запуска чат-ботов — в отдельной статье.

Ссылка на это место страницы: #kboard

Как построить чат-бота с помощью callback-операций во ВКонтакте

Callback — это специальная функция, передающая данные во внешние системы и отслеживающая ответ пользователя.

Чтобы создать callback-операцию, выберите блок «Отправить в vk сообщение и ожидать ответа» в процессе:

По кнопке «Добавить» к блоку добавляются дополнительные выходы, а также визуальные кнопки. В зависимости от сделанного выбора пользователя задачу можно направить по той или иной ветке процесса.

Как добавить дополнительные выходы

Пользователь нажимает на кнопку или отправляет сообщение в чат с ВК-сообществом и в зависимости от полученного ответа система может обработать ответ по-разному.

Еще по теме:  Как связать мой мир и Вконтакте

Например, можно дать пользователю возможность выбрать с помощью бота группу, в которую он хочет попасть:

Обратите внимание: Если пользователь ответит не тем текстом, который задан в callback-операции, процесс отработается по ветке «Ошибка» и завершится.

Рекомендуем создавать задачи и на положительные (зеленые) и на отрицательные (красные) выходы из блоков процесса.

Другие особенности callback-операции «Отправить в vk сообщение и ожидать ответа»:

— Можно использовать переменные.
— Можно задать любое количество вариантов ответа.
— Можно задать вариант ответа * (звездочка) — это будет вариант для любого ответа.

— Можно обработать нужным образом выходы по отмене и/или таймауту пользователя: например, если пользователь отправит текст вместо нажатия на кнопку.

— Если во время выполнения callback-операции в процессе сработает другая callback-операция, то все ожидающие остановятся и ответ будет ожидаться только от последней.

Ссылка на это место страницы: #anypublic

В какое ВК-сообщество будет отправлено сообщение

По умолчанию внутри блоков «Отправить сообщение в VK» и «Отправить в VK сообщение и ожидать ответа» выбран вариант «Любое сообщество».

В этом случае система сначала проверит подключение у пользователя сообщества, заданного основным в аккаунте.

Если оно не подключено, то отправка произойдет от последнего подключенного пользователем сообщества.

Информация о том, от какого сообщества производилась отправка, будет отображена в истории выполнения задачи.

Вы также можете выбрать определенное сообщество для отправки сообщения из списка вручную.

Ссылка на это место страницы: #segmentation

Как сегментировать пользователей по разрешениям на отправку сообщений

Выбрать пользователей, которые разрешили отправлять сообщения от определенного сообщества, можно с помощью блока «Условие». В блоке выберите условие по пользователям «Можно отправлять VK-сообщения от сообщества» и укажите необходимое сообщество.

Ссылка на это место страницы: #id

Как передать ID пользователя с помощью переменной

В процессах в операциях «Вызов URL» , «Отправить сообщение в vk» и «Отправить в vk сообщение и ожидать ответа» можно использовать переменную , которая отображает id профиля пользователя Вконтакте, давшего согласие на отправку сообщений.

В процессе по пользователям используется id объекта-пользователя.

В процессе по заказам используется id владельца заказа.

В процессе по покупкам используется id пользователя, связанного с покупкой.

Если у пользователя нет привязанного профиля в ВК для отправки сообщений, значение переменной будет пустым.

Обратите внимание: vk_id для отправки сообщений и адрес профиля ВК как привязанной соцсети для входа — это разные значения в системе. Переменная передаёт первую.

Также в блоках «Отправить сообщение в vk» и «Отправить в vk сообщение и ожидать ответа» поддерживаются и другие переменные, доступные на платформе. Об особенностях использования переменных в процессе в статье блога.

Источник: getcourse.ru

Рейтинг
( Пока оценок нет )
Загрузка ...