Поддерживаем вывод разных данных.
Вывод в тексте специальных полей
Чтобы использовать специальные поля в логике сообщений, проще всего использовать помощника. Каждое специальное поле должно быть заключено в квадратные скобки, внутри которых, при необходимости, в круглых скобках указываются дополнительные параметры. Все специальные поля и их параметры перечислены здесь.
Вывод в тексте запросов данных из БД
Рассмотрим пример: у нас есть следующий запрос данных с тегом «ИнфаПоЗаявке»:
Данный запрос возвращает информацию по заявке текущего пользователя бота (1 строка, 4 столбца).
Чтобы вывести в сообщении этот запрос, достаточно указать «[ИнфаПоЗаявке]» в поле «Текст сообщения».
Однако, выглядит это пока не очень понятно. Теперь в дело идут дополнительные параметры при выводе настраиваемого запроса:
- Номера столбцов (необязательно): номера столбцов из запроса через запятую. Пусто — все (по умолчанию).
- Разделитель столбцов (необязательно): символы, которые вставляются между столбцами (по умолчанию пробел).
- Разделить строк (необязательно): символы, которые вставляются между строками (по умолчанию новая строка).
Изменим текст сообщения на:
Совсем другое дело.
Вы также можете выводить запросы и в текстах ошибок, а также в названии кнопок! Причем каждая строка из результата запроса будет считаться новой кнопкой.
Вывод в тексте внешних запросов API
К этому моменту будем считать, что Вы уже настроили внешний запрос API. Допустим, что запрос возвращает следующий результат:
Первый список пользователей – список победителей, второй – проигравших.
Чтобы вывести именно то, что необходимо нам, опять нужны дополнительные параметры:
- Путь до элементов, содержащих строки данных в ответе на запрос.
- Путь до столбцов данных в каждой сроке.
- Номера столбцов (необязательно): номера столбцов из запроса через запятую. Пусто — все (по умолчанию).
- Разделитель столбцов (необязательно): символы, которые вставляются между столбцами (по умолчанию пробел).
- Разделить строк (необязательно): символы, которые вставляются между строками (по умолчанию новая строка)
Чтобы вывести поле status, нужно указать, что «status» – это строка и, так как это поле не массив, то оставить путь до столбца пустым. Итого: [ЗапросУчастников(status)()].
Чтобы вывести список победителей, нужно указать, что строки содержатся в result -> rows -> 0-й элемент, а столбцы пусть берутся все, что есть. Итого: [ЗапросУчастников(result.rows.0)()]
Чтобы сделать вывод еще более красивым, используйте те же принципы, что описаны в выводе настраиваемых полей выше, а также циклы.
Если мы хотим сохранять из ответа API только отдельные столбцы, то нужно написать что-то в этом роде: [ЗапросУчастников(result.rows.0)(user_id,surname)]
Чтобы вывести абсолютно всех игроков, нужно указать, что в result -> rows каждый элемент содержит строки. Итого: [ЗапросУчастников(result.rows.*)()].
Наконец, чтобы вывести имя победителя, можно пойти разными путями:
- [ЗапросУчастников(result)(0.0.user_id,0.0.name)] – мы указали, что все строки хранятся в поле «result». Там на самом деле только одна строка – поле «rows». Осталось указать, как добраться до необходимых столбцов.
- [ЗапросУчастников(result.rows.0.0)()()()( )] – мы указали, что строки данных находятся там, где указаны поля surname,name,user_id. Таким образом будет создано три строки с одним столбцом. Чтобы вывести их через пробел, мы указали его в 5-м дополнительном параметре.
- [ЗапросУчастников(#)(rows.0.0.user_id,rows.0.0.surname)] – символ «#» означает, что текущий элемент (то есть весь запрос) уже как раз содержит строки (а конкретно две – «status» и «result»). Так как в первой строки нет элементов по путям, указанных в списке столбцов, в итоге получится одна строка.
Циклы при выводе данных
Предположим, что у пользователя есть несколько оформленных заявок. В примере выше мы выводили лишь одну заявку. Теперь изменим запрос данных и выставим «максимальное количество строк», например, равным 10.
Вот как будет выглядеть сообщение, если ничего не менять в тексте сообщения:
Для корректного отображения здесь необходимо использовать цикл. Для этого нужно заключить желаемый блок текста в символы «{@» и «@}». BotManager сам поймет, что нужно вывести указанный блок текста для каждой строки из запроса (настраиваемого или даже API):