Когда не знаешь, сколько вешать
В смысле, кнопок
Недавно выкладывал статью о том, как в Salebot-е получать данные в динамике (преобразовать строку в массив - одна тысячная из этой огромной темы).
В ту же кассу бывают случаи, когда необходимо отправить сообщение, а количество кнопок к нему неизвестно на стадии проектирования воронки - станет известно в процессе диалога. Да, так бывает :). Здесь нам также приходит на помощь способность конструктора Salebot выполнять скрипты Python.
Рассмотрим эту историю от простого к сложному.
Важная оговорка: примеры проверялись в тестовой консоли и не учитывали ограничений по кнопкам конкретных мессенджеров. Как говорится, будьте внимательны и осторожны :).
1. Мы просто задаём в динамике число кнопок, не заморачиваясь их отображением
2. Учимся формировать ряды кнопок
3. У нас есть общее число кнопок и желаемое число кнопок в ряде
Как загружать скрипты Python на сервер Salebot-а снова описывать не буду - эта процедура описана в предыдущем посте по теме. Теперь к делу в подробностях. Если что - пожалуйста, вопросы в комментариях 👇.
Произвольное число кнопок без заботы об эстетике и порядке
Первые шаги в динамическом кнопкостроении.
Схема такого диалога следующая
Код скрипта Python "sb_3buttons.py"
''' Получаем из переданных параметров число ''' 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) ''' Возвращаем полученное значение для блока кнопок '''
Задаём количество рядов кнопок и количество кнопок в каждом ряду.
Код скрипта Python "sb_manybuttons.py "
def handle(data): ''' Получаем число рядов '''
''' Получаем число кнопок в ряду ''' 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)
Вариант 3. Наиболее гибкий и универсальный
Задаём общее число кнопок и нужное нам число кнопок в полном ряду. Остаток скрипт пристроит в последний ряд.
Схема по виду идентичная второму варианту. Отличается только первым вопросом - сколько нужно всего кнопок.
Скрипт Python "sb_manybuttons.py"
''' Получаем общее число кнопок ''' 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)
Заключение
Используя этот принцип, можно получать любые наборы чего угодно, которые нужно сформировать динамически, когда входные параметры на этапе проектирования воронки неизвестны.
❗️ Занимаетесь разработкой чат-ботов на платформе Salebot?
Вступайте в закрытый клуб Доброго доктора. Вот ссылка для трёхдневного доступа. За это время можно "напылесосить" гору готовых решений, которые там выложены и доступны даже на пробном периоде ☝️.
А если вы увидите, какие крутые ребята там клубятся и нещадно взламывают премудрости сэйлбота и других сервисов, щедро делясь при этом своими навыками, не вступить на постоянной основе уже будет невозможно 😉. Это поможет решить почти нерешаемые задачи 💪 и мгновенно окупить ваши затраты на членство в клубе.