# Функции калькулятора для курсов

## Регистрация на курсе

register\_customer\_on\_course(tariff\_id, email, email\_notification, period, reregistration)

<table><thead><tr><th width="239.15234375">Параметры</th><th></th></tr></thead><tbody><tr><td><strong>!</strong> <strong>tariff_id</strong></td><td>обязательный параметр, идентификатор id тарифа. Скопировать можно в браузерной строке в настройках тарифа</td></tr><tr><td><strong>! email</strong></td><td>обязательный параметр, адрес электронной почты клиента. Можно указать конкретное значение или переменную, в которой записан email клиента</td></tr><tr><td><strong>email_notification</strong></td><td> необязательный параметр, передает ученику на Email сообщение о его регистрации на курс, если он включен.</td></tr><tr><td><strong>period</strong> </td><td><p>необязательный параметр, ограничение по времени действия тарифа. Форматы даты поддерживаются такие: %d.%m.%Y %H:%M или %d.%m.%Y Пример:</p><p><code>period = '15.08.2023 11:00'</code></p></td></tr><tr><td>reregistration</td><td>необязательный параметр, со значениями True или False. Данный параметр необязательный и указывается, если нужно регистрировать учеников повторно на тот же самый курс и тариф</td></tr><tr><td>purchase_price</td><td>необязательный параметр. Позволяет указать стоимость курса, если клиент оплачивал к нему доступ через бота. Если не указывать, будет использована стоимость указанного тарифа. Будет полезно, если клиент оплачивает доступ к курсу через бота по иной цене, нежели стоимость указанного тарифа</td></tr></tbody></table>

пример: register\_customer\_on\_course(123, email, 1, "", True)

{% hint style="info" %}
Для того чтобы клиенты получали письма необходимо передать 1 в параметре **email\_notification.**

**Если не передать 1, то письма клиента получать не будут!**
{% endhint %}

## Как выдать доступ к курсу через Web App Телеграмм?

Для этого укажите в Калькуляторе блока  функцию&#x20;

**`access_course_from_webapp(text, button_label, tariff_id, lesson_id)`**\
При использовании функции ученик проходит авторизацию в Telegram и получает доступ к курсу. Для дальнейшего обучения, ученику не надо вводить логин и пароль, так как авторизация уже пройдена.&#x20;

Параметры функции:

**`text`** - текст сообщения, которое получит клиент. Параметр можно указать в переменной, написав его до обращения к функции в поле "Калькулятор" или указать в самой функции в в кавычках.

**`button_label`** - текст на кнопке Web App Указать параметр можно, как в переменной, так и в самой функции. Во втором случае запить параметра производится в кавычках.

**`tariff_id`** - id тарифа, на который нужно перейти при открытии вебаппа.

`lesson_id` - id урока, на который нужно перейти при открытии вебаппа. Необязательный параметр, но если указан, то tariff\_id также должен быть передан

{% hint style="warning" %}
**ВАЖНО!**&#x20;

Актуально ТОЛЬКО для работы с Telegram-ботом.
{% endhint %}

В примере ниже показали пример использования функции. \
На первом шаге регистрируем клиента на курс, затем функцией  access\_course\_from\_webapp предоставляем доступ к онлайн-продукту.&#x20;

Результат выполнения функции:

<figure><img src="/files/a1rRyqvi0WVs8urgyfFF" alt=""><figcaption></figcaption></figure>

По этой кнопке открывается страница с курсами/тарифами, которые есть у ученика.

> Если клиент не связан с аккаунтом ученика, то функция вернет 'client not attached to customer'.&#x20;
>
> Для создания такой связи просто нужно записать на курс через бота.

<figure><img src="/files/RStSkT54oHqcZ2a0K4UN" alt=""><figcaption><p><strong><code>access_course_from_webapp(text, button_label)</code></strong></p></figcaption></figure>

## Как выдать доступ к курсу через бот

### register\_customer\_on\_course()

Для этого укажите в Калькуляторе блока функцию&#x20;

**register\_customer\_on\_course(tariff\_id, email, email\_notification, period)**

| Обязательные параметры                                                                                                                                                    | Необязательные параметры                                                                                                                                                                            |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="color:red;">**!**</mark> **tariff\_id** - идентификатор id тарифа. Скопировать можно в браузерной строке в настройках тарифа.                                | **email\_notification** - этот параметр передает ученику на Email сообщение о его регистрации на курс, если он включен.                                                                             |
| <mark style="color:red;">**!**</mark>**&#x20;email** - адрес электронной почты клиента. Можно указать конкретное значение или переменную, в которой записан email клиента | <p><strong>period</strong> - ограничение по времени действия тарифа. Форматы даты поддерживаются такие: %d.%m.%Y %H:%M или %d.%m.%Y <br>Пример:</p><p> <code>period = '15.08.2023 11:00'</code></p> |

{% hint style="danger" %}
Для того чтобы клиенты получали письма необходимо передать 1 в параметре **email\_notification.**&#x20;

**Если&#x20;**<mark style="color:red;">**не передать 1,**</mark>**&#x20;то письма клиента получать&#x20;**<mark style="color:red;">**не будут!**</mark>
{% endhint %}

Присвойте переменной функцию.&#x20;

После выполнения в переменной будет записан один из ответов:&#x20;

**customer is already on tariff** - если тариф есть или доступ вручную закрыт&#x20;

**wrong\_tariff\_id** - неверный id указан&#x20;

**tariff\_added** - тариф добавлен ученику

Примеры:

<figure><img src="/files/WBEBV7q0VqznZ8yTVy3n" alt=""><figcaption><p>функция для выдачи доступа к курсу через бота</p></figcaption></figure>

<figure><img src="/files/DzJ9x9JEgCnBwyyzIBpf" alt="" width="531"><figcaption><p>Функция для выдачи доступа к курсу через бота с отправкой писем</p></figcaption></figure>

## Как проверить наличие доступа к курсу

### has\_customer\_tariff(tariff\_id)

Для этого укажите в Калькуляторе блока функцию **has\_customer\_tariff(tariff\_id, email)**<br>

| Обязательные параметры                                                                                                                                          | Необязательные параметры                                                                                                   |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| <mark style="color:red;">**!**</mark> **tariff\_id** - идентификатор id тарифа. Скопировать можно в браузерной строке в настройках тарифа или в разделе Тарифы. | **email** - необязательный параметр. Передайте этот параметр, чтобы проверить записан ли клиент с указанным email на курс. |

После выполнения функция возвращает True или False.

<figure><img src="/files/g4DO58AWjNg4u2IvJ0DU" alt=""><figcaption></figcaption></figure>

{% hint style="danger" %}
Возможные ответы функции при ошибках:

**wrong tariff\_id** -  передано неверное значение **tariff\_id**

**customer not found** - пользователь не зарегистрирован как ученик.
{% endhint %}

## Как зарегистрировать клиента на платформе БЕЗ выдачи доступа к курсу&#x20;

### register\_customer(email)

Для этого укажите в Калькуляторе блока  функцию **register\_customer(email)**&#x20;

| Параметры функции                               | Описание                         |
| ----------------------------------------------- | -------------------------------- |
| <mark style="color:red;">**!**</mark> **email** | адрес электронной почты клиента. |

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

> Функции рекомендуется присвоить переменную, так вы увидите результат работы функции и сможете работать с ним. Пример в скриншоте ниже: до знака равенства задано имя переменной, после функция и параметр в круглых скобках.

После успешного выполнения функции в переменной будет записан ответ:\
**customer created**

<figure><img src="/files/kf7XMCn3vr43UQw3E6oC" alt=""><figcaption></figcaption></figure>

## Как проверить наличие доступа к курсу и ограничения по времени?

Для этого укажите в Калькуляторе блока функцию **has\_customer\_tariff\_with\_date(tariff\_id, email),** чтобы проверить наличие доступа к курсу по email (возвращает подробный ответ о наличии доступа и ограничениях по времени).

&#x20;Параметры функции:&#x20;

| Обязательный параметр                                                                                                                                           | Необязательный параметр              |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| <mark style="color:red;">**!**</mark> **tariff\_id** - идентификатор id тарифа. Скопировать можно в браузерной строке в настройках тарифа или в разделе Тарифы. | **email** - необязательный параметр. |

<figure><img src="/files/LKXt3eXU3kj3od6npPS2" alt="" width="396"><figcaption></figcaption></figure>

В ответ придет:

* ученик записан и есть ограничение по времени доступа: Has access until 2023-09-28 22:00:00&#x20;
* ученик записан, ограничений нет: Has access without time limit&#x20;
* ученик не записан: No access to this tariff

{% hint style="danger" %}
**Возможные ответы функции при ошибках:**

**wrong tariff\_id** -  передано неверное значение **tariff\_id**

**customer not found** - пользователь не зарегистрирован как ученик.
{% endhint %}

## Как удалить доступ к курсу для ученика через бот&#x20;

### del\_customer\_from\_course(**course\_id, email**)

Для этого укажите в Калькуляторе блока  функцию **del\_customer\_from\_course(course\_id, email)**

| Параметры                                                 | Описание                        |
| --------------------------------------------------------- | ------------------------------- |
| <mark style="color:red;">**!**</mark>**&#x20;tariff\_id** | идентификатор тарифа            |
| <mark style="color:red;">**!**</mark>**&#x20;email**      | адрес электронной почты клиента |

Идентификатор находится на карточке тарифа:

<figure><img src="/files/Qt7nk5lVFpUs4Ig34pyg" alt=""><figcaption></figcaption></figure>

## Как проверить, был ли ученик на вебинаре&#x20;

### customer\_was\_on\_translation()

Доступ к курсу должен быть выдан в боте.&#x20;

Для это есть функция [register\_customer\_on\_course()](https://docs.salebot.pro/onlain-kursy/sozdanie-kursov/chat-bot-dlya-onlain-kursa#kak-vydat-dostup-k-kursu-cherez-bot-register_customer_on_course) и [access\_course\_from\_webapp()](https://docs.salebot.pro/onlain-kursy/sozdanie-kursov/chat-bot-dlya-onlain-kursa#kak-vydat-dostup-k-kursu-cherez-web-app-telegramm)

Чтобы проверить был ученик на вебинаре или нет, укажите в Калькуляторе блока функцию customer\_was\_on\_translation(translation\_guid, email, after\_start\_time)

| Обязательные параметры                                                                                                                                      | Необязательный параметр                                                        |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| <mark style="color:red;">**!**</mark> translation\_guid - идентификатор трансляции. Скопируйте значение поля *Название в ссылке* *в настройках трансляции.* | after\_start\_time - время начала трансляции в формате: '2023-04-18 13:30:00'. |
| <mark style="color:red;">**!**</mark> email - адрес электронной почты Ученика                                                                               |                                                                                |

<figure><img src="/files/xUS1KjieFE5noD4q1mER" alt=""><figcaption></figcaption></figure>

**Пример**: answer2 = customer\_was\_on\_translation('ad654f52be33d55008e31ba9792140ab', '<test@mail.ru>', '2023-04-18 13:30:00')

<figure><img src="/files/BIbdU4YDPLVE4tVcfmfb" alt=""><figcaption></figcaption></figure>

В переменную answer2 запишется результат выполнения функции. По значению этой переменной можно настраивать дальнейшую логику работы бота. Пример успешной проверки посещения вебинара:

<figure><img src="/files/7dDATtjg5DJ4mTknwPDr" alt="" width="425"><figcaption></figcaption></figure>

{% hint style="warning" %}
**Важно!** *Название переменной может быть любое удобное и понятное вам.* В случае ошибки в написании параметров функции в переменную запишется сообщение: wrong translation\_guid

В этом случае рекомендуем проверить параметры функции и протестировать повторно. Чтобы из переменной получить значение длительности пребывания на вебинаре в Калькуляторе можно использовать функцию работы с [массивами](https://docs.salebot.pro/peremennye-1/rabota-s-massivami-i-slovaryami/rabota-s-massivami#kak-poluchit-element-massiva) и [словарями](https://docs.salebot.pro/peremennye-1/rabota-s-massivami-i-slovaryami/rabota-so-slovaryami#kak-poluchit-znachenie-slovarya-po-klyuchu).

Пример настройки в Калькуляторе блока:

time\_spent1 = answer2\[0]\['time\_spent']
{% endhint %}

## Как найти имя ученика, привязанного к боту?

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

get\_customer\_name() - возвращает имя ученика, связанного с клиентом.&#x20;

Функция без параметров.

<figure><img src="/files/0GgXOkQrqY1bALzcxXyU" alt="" width="563"><figcaption></figcaption></figure>

Возвращает имя ученика, которое ученик ввел при регистрации на курс, или имя ученика из его ЛК.

## Как запустить бота, если ученик открыл урок / сдал домашнее задание / закончил курс?&#x20;

В **Основных настройках курса** включить **Отправлять колбэк**.&#x20;

В этом случае на выбранные действия в диалог ученика в боте будут приходить уведомления (callback). Текст этих уведомлений можно использовать как условие в стрелках и/или в блоках с условием для дальнейшего движения ученика по боту.

<figure><img src="/files/GhACSDzI4vnPQlJ2PaoU" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Основные  знания по работе с конструктором также подробно рассмотрены в бесплатном обучении от Salebot : <https://salebot.pro/cs/repetitor_tema1>
{% endhint %}

## Видеоинструкция

{% embed url="<https://www.youtube.com/watch?v=qH7zpA4a5dU>" %}

00:00 | Создаем миникурсы с разными тарифами&#x20;

00:52 | Создаем схему для регистрации нового ученика в Курсах(LMS системе)

07:00 | Функция регистрация БЕЗ выдачи доступа к курсу register\_customer()&#x20;

7:59 | Функция выдачи доступа к курсу через бот register\_customer\_on\_course()&#x20;

13:31 | Проверка регистрации в Курсах(как ученик) через сравнение переменной&#x20;

15:23 | Функция проверки доступа к курсу has\_customer\_tariff()


---

# 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.salebot.pro/online_courses/selling/chatbot/funkcii-kalkulyatora-dlya-kursov.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.
