# Выдача промокодов

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

## Создаём переменные

Для начала создадим глобальную переменную **%промокоды%** типа **Массив**. Обратите внимание, что значения (сами промокоды) записываются через запятую, и каждое значение заключено в двойные кавычки. Всё это — требования формата JSON.

![](/files/-M5aty9Axnsx4dapEsOl)

Пример массива промокодов:

```python
[
"abc",
"def",
"ghi"
]
```

Также нам потребуется переменная, которая будет хранить факт выдачи промокода каждому человеку. Для этого подойдёт локальная строковая переменная. Назовём её, например, **%промокод\_выдан%**. Начальное значение — строка "нет". После выдачи промокода мы будем менять её на "да".

![](/files/-M5auojf6fQoHs-XOVQu)

## Цепочка выдачи промокода

![](/files/-M5avCXX9M0EnJBA_fxd)

### Группа шагов №1: а остались ли у нас ещё промокоды?

Сначала, в первой группе шагов, проверим, а не закончились ли у нас промокоды.

Для этого добавим сложное условие:

```python
len(%промокоды%) == 0
```

![](/files/-M5azlb2eoPc8nszyZLZ)

Если длина массива **%промокоды%** равна нулю, то мы отправим пользователю сообщение, что акция уже завершена, и вторым шагом обязательно сделаем **"Выйти из цепочки"**. Тогда нам не придётся ниже дублировать условия, для случая, если промокоды ещё есть.

![](/files/-M5b-1KoAlv812d_VKlt)

### Группа шагов №2: а не получал ли человек промокод ранее?

Для этой цели нам вполне хватит возможностей обычных условий на переменные:

![](/files/-M5b-iyzSDyOrCgVWrki)

Также как и в предыдущей ситуации отправляем пользователю сообщение и выходим из цепочки:

![](/files/-M5b-yayIuUechtzRvOR)

### Группа шагов №3: выдача промокода

Теперь, когда мы разобрались со всеми "внештатными" ситуациями, мы, наконец, можем выдать очередной промокод.

Создаём третью группу шагов. На этот раз никаких условий добавлять не нужно.

Вытаскиваем из массива очередной промокод и сохраняем его во временную переменную **%код%**:

![](/files/-M5b0X6rWv24QtyDhx-r)

```python
%код% = %промокоды%.pop()
```

Отправляем сообщение с кодом пользователю:

![](/files/-M5b0gXlL-DYoPj4JJa7)

И сохраняем информацию о том, что пользователь получил свой промокод:

![](/files/-M5b0ptQbp1AEC-eMCux)

## Тестируем

Просим промокод в первый раз:

![](/files/-M5bI6Hjvahmker5aB_J)

Просим ещё раз:

![](/files/-M5bIDRlvWB7Mn76yRRX)

Теперь, чтобы проверить кейс, когда промокоды уже кончились, зайдём в раздел Переменные и сменим значение переменной **%промокоды%** на пустой массив: **\[]**. А в разделе Пользователи сменим значение **%промокод\_выдан%** на "**нет**".

И ещё раз попросим бота выдать промокод:

![](/files/-M5bIrXCvsO-tsMv7ea9)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.smartbot-vk.ru/smartquery/recipes/vydacha-promokodov.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
