Лайфхаки Salebot
February 11, 2023

Когда не знаешь, сколько вешать 

В смысле, кнопок

Недавно выкладывал статью о том, как в Salebot-е получать данные в динамике (преобразовать строку в массив - одна тысячная из этой огромной темы).

В ту же кассу бывают случаи, когда необходимо отправить сообщение, а количество кнопок к нему неизвестно на стадии проектирования воронки - станет известно в процессе диалога. Да, так бывает :). Здесь нам также приходит на помощь способность конструктора Salebot выполнять скрипты Python.

Рассмотрим эту историю от простого к сложному.

Важная оговорка: примеры проверялись в тестовой консоли и не учитывали ограничений по кнопкам конкретных мессенджеров. Как говорится, будьте внимательны и осторожны :).

1. Мы просто задаём в динамике число кнопок, не заморачиваясь их отображением

Вариант 1 - простеший

2. Учимся формировать ряды кнопок

3. У нас есть общее число кнопок и желаемое число кнопок в ряде

Как загружать скрипты Python на сервер Salebot-а снова описывать не буду - эта процедура описана в предыдущем посте по теме. Теперь к делу в подробностях. Если что - пожалуйста, вопросы в комментариях 👇.

Вариант 1

Произвольное число кнопок без заботы об эстетике и порядке

Первые шаги в динамическом кнопкостроении.

По приколу пишем всё-таки, чтобы было хоть какое-то руководство здравым смыслом :)

Схема такого диалога следующая

Общая схема
Настройки первого блока
Настройки стрелки
Настройки второго блока
Настройки блока кнопок в итоговом блоке - для этой и последующих схем

Код скрипта Python "sb_3buttons.py"

# -*- coding: utf-8 -*-

import json

def handle(data):

''' Получаем из переданных параметров число ''' n = json.loads(data)["n"] ''' Создаём список для итогового результата '''

_buttons = [] ''' В цикле формируем набор словарей с параметрами кнопок '''

for i in range(n): bdict = {"line":0, "index_in_line":i, "text":f"Кнопка {i+1}", "type":"inline"}

''' Добавляем полученный словарь в список ''' _buttons.append(bdict) ''' Возвращаем полученное значение для блока кнопок '''

return {'btns': _buttons}

Вариант 2

Задаём количество рядов кнопок и количество кнопок в каждом ряду.

Схема
Первый блок
Второй блок
Третий блок

Код скрипта Python "sb_manybuttons.py "

# -*- coding: utf-8 -*-

import json

def handle(data): ''' Получаем число рядов '''

line = json.loads(data)['n']

''' Получаем число кнопок в ряду ''' ind = json.loads(data)['m'] _buttons = [] cnt = 0

''' Первый цикл - ряд кнопок ''' for i in range(line):

''' Второй цикл - кнопки в ряду ''' for j in range(ind):

''' Порядковый номер кнопки ''' cnt += 1 bdict = {"line":i, "index_in_line":j, "text":f"Кнопка {cnt}", "type":"inline"} _buttons.append(bdict)

return {'btns': _buttons}

Вариант 3. Наиболее гибкий и универсальный

Задаём общее число кнопок и нужное нам число кнопок в полном ряду. Остаток скрипт пристроит в последний ряд.

Схема по виду идентичная второму варианту. Отличается только первым вопросом - сколько нужно всего кнопок.

Скрипт Python "sb_manybuttons.py"

# -*- coding: utf-8 -*-

import json

def handle(data):

''' Получаем общее число кнопок ''' amount = json.loads(data)['n']

''' Получаем число кнопок в ряду ''' btns_in_line = json.loads['m'] _buttons = []

''' Получаем число полных рядов ''' full_lines = amount // btns_in_line

''' Остаток для последнего ряда ''' leaving = amount % btns_in_line cnt = 0 for i in range(full_lines): for j in range(btns_in_line): cnt += 1 bdict = {"line":i, "index_in_line":j, "text":f"Кнопка {cnt}", "type":"inline"} _buttons.append(bdict) ''' Формируем последний ряд из полученного остатка '''

if (leaving > 0): i += 1 for j in range(leaving): cnt += 1 bdict = {"line":i, "index_in_line":j, "text":f"Кнопка {cnt}", "type":"inline"} _buttons.append(bdict)

return {'btns': _buttons}

Заключение

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

❗️ Занимаетесь разработкой чат-ботов на платформе Salebot?

Вступайте в закрытый клуб Доброго доктора. Вот ссылка для трёхдневного доступа. За это время можно "напылесосить" гору готовых решений, которые там выложены и доступны даже на пробном периоде ☝️.

А если вы увидите, какие крутые ребята там клубятся и нещадно взламывают премудрости сэйлбота и других сервисов, щедро делясь при этом своими навыками, не вступить на постоянной основе уже будет невозможно 😉. Это поможет решить почти нерешаемые задачи 💪 и мгновенно окупить ваши затраты на членство в клубе.

Сомневаетесь? Почитайте про клуб подробнее