Обращаем внимание!
При подключении интеграции на стороне Salebot (в разделе "Эквайринг") без указания значений в полях "Ставка НДС" и "Система налогообложения" платежная система работать не будет.
В случае, если у вас уже подключена интеграция, введите значения в указанные поля, иначе все платежи будут приостановлены!

Как подключить
Вам необходимо создать новый терминал. Нельзя использовать тот, который у вас подключен еще куда-то.
Для подключения интернет-эквайринга Т-банк в первую очередь нужно подать заявку и получить идентификатор терминала и пароль. Это можно сделать перейдя по ссылке.

После рассмотрения вашей заявки, вам выдадут тестовый терминал и пароль к нему.
Переходим в проект на salebot.pro и в разделе Эквайринг - Т-банк прописываем ключи тестового терминала.

поле Система налогообложения. Можно выбрать систему налогообложения, которая будет передана в чеке.
поле Ставка НДС. Необходимо указать подходящий код для передачи значения НДС. Например, none если без НДС или vat0 если ставка НДС 0% .
| Доступные варианты ставки НДС | Значение |
|---|---|
| vat120 | 20/120 |
| vat110 | 10/110 |
| vat20 | 20% |
| vat10 | 10% |
| vat0 | 0% |
| none | без НДС |
| vat5 | 5% |
| vat7 | 7% |
| vat105 | 5/105 |
| vat107 | 7/107 |
Обращаем внимание!
Без указания значений в полях "Ставка НДС" и "Система налогообложения" платежная система работать не будет.
В случае, если у вас уже подключена интеграция, введите значения в указанные поля, иначе все платежи будут приостановлены!
Далее вам в личном кабинете Т-банка нужно пройти тесты на формирование ссылки, чека и оплаты с тестовых карт банка.
Как протестировать платежи на стороне Т-банка, написано здесь.
Вкратце - внутри бота нужно указать данные тестового терминала и с помощью тестовых карт провести оплату как покупатель. Данные терминала и данные тестовых карт будут находиться у каждого клиента на магазине. Тестирование платежей это своего рода настройка и проверка интеграции вашего бота с нами.
Для совершения повторного платежа обязательно необходимо обнулить payment_sum, ранее сформированную ссылку и уже после переназначить переменную payment_sum для получения свежей ссылки. Можно указать предыдущее значение.
Обратите внимание на Тест 3 (отмена платежа) на рис. 6, вам нужен будет идентификатор платежа PaymentId, найти его можно после совершения платеж в переменной tinkoff_payment_id

Обращаем внимание!
Для корректной работы интеграции и отсутствия ошибок при подключении, после прохождения проверок (тестов) интеграции необходимо ПЕРЕПОДКЛЮЧИТЬ Т-банк на работающий терминал.
Как сформировать ссылку на оплату
Сформировать ссылку на оплату в блоке можно ОДНИМ ИЗ из доступных способов:
- Кнопка с функцией Оплата или
- Функция get_tinkoff_payment_url в Калькуляторе или
- Создание ссылки с помощью переменной payment_sum и дополнительных параметров (устаревшая работающая версия)
Кнопка с функцией Оплата
Ссылку на оплату можно создавать в кнопке с функцией "Оплата".
О том как создавать такую кнопку рассказано в статье "Кнопки".
Обязательные параметры кнопки Оплата для Т-банк
Для формирования ссылки на оплату в настройках кнопки необходимо указать обязательные параметры: Сумма и Описание товара.

поле Текст. Данный текст будет указан на кнопке с ссылкой на оплату в сообщении
поле Функция. Для создания кнопки для выдачи ссылки на оплату выбираем функцию Оплата
поле Платежная система. В списке отображаются подключенные к проекту платежные системы. Выбираем T-банк
Если к проекту не подключены платежные системы данный тип кнопок будет не доступен
поле Описание товара (обязательное). В данном поле нужно указать название товара. Максимально количество символов для данного поля: 250
Чем точнее указано описание товара, тем лучше. Например: не Телефон, а Смартфон Xiaomi модель
НЕЛЬЗЯ использовать двойные кавычки в описании товара: удалите или замените на одинарные кавычки.
поле Сумма (обязательное). В этом поле указываем стоимость товара.
чекбокс Автоплатеж. Для подключения автоплатежа включите в настройках платежной системы в Сейлбот ползунок и поставьте галочку в данном чек-боксе в настройке кнопки. По умолчанию, отключен.
меню Данные для формирования чека. При клике по данной кнопке откроются дополнительные обязательные и необязательные поля для формирования чека
Многие платежные системы поддерживают облачные онлайн-кассы, они необходимы по 54-ФЗ.
Прочитайте особенности формирования чеков на сайте выбранной платежной системы, чтобы не попасть в неловкую ситуацию с налоговой инспекцией.
- Наименование товара
- Цена за единицу товара в копейках
- Количество
- Произведение количества на цену за единицу товара
- Способ расчёта
- Предмет расчета
- Переменная с email покупателя
- Переменная с номером телефона покупателя
меню Дополнительная информация. При клике по данной кнопке откроются дополнительные поля для формирования ссылки
- Язык страницы оплаты
чекбокс С уведомление о клике. Для отслеживания перехода по ссылке для оплаты можно поставить галочку. В таком случае, при клике по кнопке в диалог с клиентом в Сейлбот придет уведомление о том, что был совершен переход по ссылке

На данное уведомление можно настраивать дальнейшую логику работы бота.
Дополнительные параметры для формирования чека и ссылки
выпадающее меню "Данные для формирования чека"

поле Наименование товара . В данном поле нужно указать название товара. Чем точнее указано название товара, тем лучше. Например: не Телефон, а Смартфон Xiaomi модель ххх
НЕЛЬЗЯ использовать двойные кавычки в Наименовании товара: удалите или замените на одинарные кавычки.
поле Цена за единицу товара в руб. Обратите внимание, в данном поле указывается цена в рублях.
поле Количество. Количество или вес товара. Передать можно целое или дробное число через точку. Пример, 5 или 10.3
поле Произведение количества на цену за единицу товара. В данном поле необходимо указать сумму равную произведению количества на цену за единицу товара. Например, если Цена за единицу товара в руб равна 5000 и количество товаров 1, то Сумма заказа 5000 руб,
поле Способ расчёта. Можно передать одно из значений признака способа расчета:
| Значение признака способа расчета | Описание |
|---|---|
| full_payment | полный расчет |
| full_prepayment | предоплата 100% - полная предварительная оплата, которая осуществляется клиентом до получения товара/оказания услуги |
| prepayment | предоплата - частичная предварительная оплата, которая осуществляется клиентом до получения товара/оказания услуги |
| advance | аванс - предоплата в случаях, когда заранее нельзя определить перечень товаров/работ/услуг |
| partial_payment | частичный расчет и кредит |
| credit | передача в кредит |
| credit_payment | оплата кредит |
поле Предмет расчёта. Дополнительно можно передать предмет расчета (если не передать, будет commodity (товар)).
Может принимать следующие значения:
| Значения | Описание |
|---|---|
| commodity | товар |
| excise | подакцизный товар |
| job | работа |
| service | услуга |
| gambling_bet | ставка азартной игры |
| gambling_prize | выигрыш азартной игры |
| lottery | лотерейный билет |
| lottery_prize | выигрыш лотереи |
| intellectual_activity | предоставление результатов интеллектуальной деятельности |
| payment | платеж |
| agent_commission | агентское вознаграждение |
| composite | составной предмет расчета |
| another | иной предмет расчета |
Поле Переменная с email покупателя (необязательный, если передан Номер телефона) В данном поле указывается Email пользователя (клиента). Можно указывать переменную, в которой хранится email пользователя.
Например, #{email}
Поле Переменная с номером телефона покупателя (необязательный, если передан Email). В данном поле можно указать переменную, в которой записан номер телефона покупателя в формате 79000000000
Например, #{phone}
Обязательно должен присутствовать email и/или телефон
выпадающее меню "Дополнительная информация"
поле Язык страницы оплаты. По умолчанию, язык страницы оплаты русский. Можно изменить на английский

поле Время жизни ссылки — по умолчанию поле пустое, но указав в нем значение в виде дд.мм.гггг, --:-- (в виде даты и времени), можно установить до какого момента времени клиент сможет осуществить платеж по данной ссылке.
Переменные клиента
Как только пользователь получит блок с кнопкой "Оплата" автоматически будут созданы переменные клиента:
Служебная переменная клиента __payments , которая хранит сумму, идентификатор созданной ссылки, нужна для идентификации хука от платежной системы.
Служебную переменную клиента __payments НЕЛЬЗЯ удалять или изменять!
Переменная клиента error_payment_button создается, если при формировании кнопки возникла ошибка.
В значение переменной error_payment_button запишется либо текст ошибки, либо ответ платежной системы с ошибкой.
Значение переменных становятся актуальными при переходе в следующий блок
Страницы завершения оплаты
После завершения оплаты клиенту по умолчанию будет предложено перейти обратно в чат с ботом. При этом клиент узнаёт о статусе платежа только по сообщению в чате.
Обычно содержание такого сообщения формируется в зависимости от типа колбека, который вы получили от Т-банка Касса.
Иногда колбек приходит с задержкой, поэтому в таких случаях у вас не получится моментально информировать клиента.
Чтобы избежать подобных ситуаций, отключите функцию перехода в бот в оплатах по ссылкам, сформированным через:
- переменную payment_sum - перед указанием payment_sum, присвойте переменной apply_redirects значение 0 (ноль);
- функцию get_tinkoff_payment_url - последним параметром укажите значение 0 (ноль);
При отключенной функции Тинькофф использует свои страницы завершения оплаты с информацией об успешном или неудавшемся платеже клиента.
Обработав колбек, вы можете дополнительно сообщить клиенту о статусе его платежа.
Как обработать результат
Успешный платеж.
в бота АВТОМАТИЧЕСКИ придет КОЛБЭК, который состоит из 10 символов секретного ключа платежной системы, слова _success и через пробел сумма платежа.
&#xNAN;Для использования в настройках схемы достаточно его скопировать.
Например: ovg58keefc_success 44, где:
ovg58keefc : первые первые 10 символов секретного ключа платежной системы
_success : результат обработки запроса (успешный платеж)
44 : сумма платежа
Колбеки (уведомления) от платежной системы пользователь НЕ ВИДИТ. Они отображаются только во вкладке Клиенты и видны оператору.
Пример использования:
Шаг 1. В блоке "с кнопкой Оплата" добавляем кнопки с функцией Оплата.
Шаг 2. В поле Условие соединения от этого блока к блоку "Успешная оплата" указываем колбэк. Аналогично работает, если указать колбэк об успешной оплате в поле Условие блока Первостепенной проверки условия.
Важно: выбор соответствия Полное совпадение. Также можно использовать По наличию ключевых слов, если указать часть колбэке без сумм оплаты


Отличие примера № 1 (рис. 12) и примера № 2 (рис. 13) в том, что при использовании блока "Не состояние с условием" клиент не переходит в блок не состояние и не выбивается из основной воронки. Это удобно, например, если вы хотите продолжать вести клиента далее по воронке.
Подробнее о том, как использовать условные блоки в Сейлбот рассказали в статье "Блоки с условием".
Платеж с ошибкой
При ошибке проведения оплаты в бота АВТОМАТИЧЕСКИ придет КОЛБЭК, который состоит из 10 символов секретного ключа платежной системы, слова _fail и через пробел сумма платежа
Например, ovg58keefc_fail 44 , где
ovg58keefc : 10 символов секретного ключа платежной системы
_fail : результат обработки запроса - платеж не выполнен или с ошибкой.
44 : сумма платежа
Зависит от платежной системы. Не все платежные системы присылают колбэк об ошибке платежа.
Если сумма указанная в настройках кнопки отличается от суммы, которую клиент оплатил, то АВТОМАТИЧЕСКИ придет КОЛБЭК, который состоит из 10 символов секретного ключа платежной системы, слова _different_amounts и через пробел уникальный ID платежа
Например: ovg58keefc_different_amounts 123456 , где:
ovg58keefc : 10 символов секретного ключа платежной системы
_different_amounts : результат обработки запроса (сумма оплаты отличается от суммы в ссылке)
123456 : уникальный ID платежа

Функция get_tinkoff_payment_url в Калькуляторе
Для формирования ссылки на оплату можно воспользоваться функцией get_tinkoff_payment_url в Калькуляторе блоке.
В поле Калькулятор переменной присвоим значение функции get_tinkoff_payment_url
Название переменной задаете самостоятельно. На скринах примеры названия переменных.
В эту переменную запишется ссылка на оплату. Переменную можно вывести на экран ссылкой в сообщении или разместить в кнопке с текстом, например, "Оплатить".
ПРИМЕР ссылки на оплату: https://securepay.tinkoff.ru/new/xoYnWrb6
Многие платежные системы поддерживают облачные онлайн-кассы, они необходимы по 54-ФЗ.
Прочитайте особенности оформления чеков на сайте выбранной платежной системы, чтобы не попасть в неловкую ситуацию с налоговой инспекцией.
Калькулятор
Пример 1:

Пример 2:

Описание параметров
link = get_tinkoff_payment_url(amount, description, recurrent, products_for_receipt, customer_phone, customer_email, expired, taxation, language, extra_params, apply_redirects)
Параметры функции:
| Параметр | Описание параметра |
|---|---|
amount |
**Сумма к оплате.** В этом поле указываем стоимость товара в рублях (обязательный параметр) |
description |
**Описание заказа.** В этом поле можно использовать только символы английского или русского алфавита, цифры и знаки препинания. Чтобы пропустить данный параметр передайте вместо него пару одинарных или двойных кавычек или значение |
recurrent |
**Подключение автоплатежа.** Если автоплатеж включен, то передать значение 1, если отключен передайте значение None. |
|
|
**Параметры для формирования чеков.** Чтобы пропустить данный параметр передайте вместо него пару одинарных / пару двойных кавычек или значение
[{"name":"ТОВАР1","amount":"1200","vat_code":"5","method":"FullPrepayment","object":"Commodity"}] Важно! Используйте двойные кавычки для формирования словаря {"ключ": "значение"} name - Наименование товара amount - Полная сумма в рублях за все количество данного товара с учетом всех возможных скидок, бонусов и специальных цен. vat_code - cтавка НДС. Этот параметр устанавливает налоговую ставку в ККТ. Возможные значения данного параметра: '1' - Без НДС '2' - НДС по ставке 0% '3' - НДС по ставке 10% '4' - НДС чека по ставке 20% '5' - НДС чека по расчетной ставке 10/110 '6' - НДС чека по расчетной ставке 20/120 '8' – НДС по ставке 5% '9' – НДС по ставке 7% '10' – НДС чека по расчетной ставке 5/105 '11' – НДС чека по расчетной ставке 7/107 method - дополнительный параметр для формирования чека. Признак способа расчёта. Пример значения параметра: full_payment — полный расчет Остальные доступные варианты можно найти в документации Тинькофф : https://www.tinkoff.ru/kassa/develop/api/receipt/#Items object - дополнительный параметр для формирования чека. Предмет расчета может принимать разные значения. Например, commodity — товар Остальные доступные варианты можно найти в документации Тинькофф : https://www.tinkoff.ru/kassa/develop/api/receipt/#Items |
customer_phone |
**номер телефона покупателя**, не обязательно, если передан параметр Чтобы пропустить данный параметр, передайте вместо него одинарные или двойные кавычки |
customer_email |
**емейл покупателя**, не обязательно, если передан параметр Чтобы пропустить данный параметр, передайте вместо него одинарные или двойные кавычки. |
expired |
**время жизни ссылки на оплату**, в формате дд.мм.гггг (например 25.01.2021). Также можно в поле "Калькулятор" указать: expired = current_date + 2 (ссылка будет действительна 2 дня до 00:00) .
Максимальное значение: 90 дней от текущей даты. Минимальное значение: 1 минута от текущей даты. Если не передан, принимает значение 24 часа для платежа и 30 дней для счета |
**taxation** |
**Система налогообложения.** '1' - Общая система налогообложения '2' - Упрощенная (УСН, доходы) '3' - Упрощенная (УСН, доходы минус расходы) '4' - Единый налог на вмененный доход (ЕНВД) '5' - Единый сельскохозяйственный налог (ЕСН) '6' - Патентная система налогообложения |
language |
**Язык страницы оплаты.** По умолчанию, язык страницы оплаты русский. Чтобы пропустить данный параметр, передайте вместо него пару одинарных/ пару двойных кавычек или значение None. |
extra_params |
дополнительные параметры, которых нет в данной функции. Возможные дополнительные параметры можно посмотреть по ссылке в документации работы с API платежной системы https://www.tinkoff.ru/kassa/develop/api/payments/init-request/ Пример: extra_params = {"DATA":{"Name":"Tovar22", "Description":"Tovar12", "Phone":"+71234567891", "Email":"a@test.com"}}Чтобы пропустить данный параметр, передайте вместо него пару одинарных/ пару двойных кавычек или значение None. Передачу дополнительных параметров в уведомлении от Т-банка нужно подключать по заявке в поддержку. Изначально они выключены в терминале. |
apply_redirects |
Индикатор необходимости перенаправить клиента в бота после нажатия на кнопку "Оплатить". Ожидаемые значения 0 (ноль) или 1 (один, по умолчанию):
О статусе платежа можно сообщить в ответ на колбек. |
Пример кода для копирования
Пример 1: Ссылка на оплату без чека
link_tinkoff = get_tinkoff_payment_url(1200, 'Купи меня')
Пример 2: Ссылка на оплату с чеком
extra_params = {"IP": "66.249.72.248"}
receipt = [{"name":"ТОВАР1","price":"1200","quantity":"1","amount":"1200","vat_code":"2","method":"full_payment","object":"commodity"}]
link_tinkoff = get_tinkoff_payment_url(1200, 'Купи меня', '', receipt, '77777777777', 'exam@mail.com', '28.03.2023 14:25', '2', 'en', extra_params)
Пример 3: Ссылка на оплату с чеком + Автоплатеж
receipt = [{"name":"ТОВАР1","price":"1200","quantity":"1","amount":"1200","vat_code":"2","method":"full_payment","object":"commodity"}]
link_tinkoff = get_tinkoff_payment_url(1200, 'Купи меня', '1', receipt, '77777777777', 'exam@mail.com', '28.03.2023 14:25', '2')
Переменную можно вывести на экран ссылкой в сообщении или разместить в кнопке с текстом, например, "Купить".
Если в блоке несколько функций для получения ссылки и допущена ошибка, то значение ошибки будет записано в переменной
error_payment_func
Ошибка запишется по последней функции в Калькуляторе.После успешной оплаты в бота АВТОМАТИЧЕСКИ придет КОЛБЭК, который состоит из 10 символов секретного ключа платежной системы, слова _success и через пробел сумма платежа.
&#xNAN;Для использования в настройках схемы достаточно его скопировать.Например:
ovg58keefc_success 44, где:ovg58keefc : первые первые 10 символов секретного ключа платежной системы
_success : результат обработки запроса (успешный платеж)
44 : сумма платежа
Сплитование платежей в Т-банк и работа с ними
Для старта работы нам потребуется выполнить четыре шага:
1. Переходим по ссылке
2. Оставляем заявку менеджеру и ожидаем связи от него.
3. Заключаем договор с банком и запрашиваем в банке логин и пароль
4. Получаем токен через функцию tinkoff_sm_register_get_token()
tinkoff_sm_register_get_token(username, password, test) - функция токена
Функция принимает три параметра:
Обязательные параметры:
username - логин
password - пароль
Необязательный параметр:
test - параметр на случай если проводите настройки в тестовой среде, в параметр можно передать 1 и запрос будет отправлен в тестовую среду. Если не используете такой тип настройки, проигнорируйте данный параметр НЕ указывая его в функции.
ВАЖНО! Если у вас возникают сложности на этапе получения токена, то добавьте список IP адресов salebot в белый лист, запросить адреса можно в службе поддержки на сайте или мессенджере.
После того как вы получили токен, необходимо сделать запрос на регистрацию точки с указанием всех необходимых параметров, включая данные банка и лицевого счета (счета физлиц не поддерживаются) через функцию tinkoff_sm_register_get_shop_code в ответ приходит помимо прочего "shopCode", который необходим для дальнейшей работы.
tinkoff_sm_register_get_shop_code(token, org_data, address, ceo, bank_acc)
token - полученный на шаге выше токен
org_data - словарь с данными о вашей организации (вид показан в примере ниже)
address - юридический адрес организации
ceo - данные владельца организации
bank_acc - реквизиты
Пример использования функции:

При формировании ссылки на оплату указываете переменную, сформированную по принципу:
shop="Shops":[{"ShopCode":"????????","Amount": "1000"}]
link=get_tinkoff_payment_url(10,'', '', '','+79099999999','','', 1, '', shop)
В переменной shop поле Amount содержит сумму в копейках, которая будет отправлена этому продавцу. Нужно чтобы сумма в первом параметре функции была не меньше, чем сумма по всем получателям.
Для указания нескольких получателей указываем так:
shop="Shops":[{"ShopCode":"???????1","Amount": "1000"},{"ShopCode":"???????2","Amount": "2000"}]
в данном примере общая сумма 30 рублей или 3000 копеек
Создание ссылки с помощью переменной payment_sum и дополнительных параметров
В калькуляторе блока присваиваем переменной payment_sum значение равно сумме к оплате.
Например,
payment_sum = 150 или
payment_sum = 100.55 (через точку!)).
Сразу после этого появится переменная tinkoff_pay_url. Эту переменную можно вывести на экран ссылкой или разместить на кнопке с текстом "Оплатить".
ПРИМЕР ссылки на оплату:
https://securepay.tinkoff.ru/new/xoYnWrb6
Также В Калькуляторе блока до установки значения переменной payment_sum, можно задать следующие необязательные переменные, для настройки платежа.
- payment_description – описание заказа
- language - Язык страницы оплаты en, ru. Если не передан, то страница оплаты на русском языку.
- expiration_date - дата и время окончания жизни заказа. Формат: дд.мм.гггг чч:мм (например: 25.01.2021 12:23) По умолчанию 24 часа;
- apply_redirects - индикатор необходимости перенаправить клиента в бота после нажатия на кнопку "Оплатить". Ожидаемые значения 0 (ноль) или 1 (один, по умолчанию): 0 (ноль) - оставить клиента в виджете оплаты, применяются стандартные страницы завершения платежа Тинькофф Касса; 1 (один) - немедленно перенаправить в бота после нажатия на кнопку "Оплатить". О статусе платежа можно сообщить в ответ на колбек.
Также можно использовать стандартные переменные, например зададим время действия ссылки 2 дня от текущей даты до 12:00:
&#xNAN;date = current_date + 2
expiration_date = "#{date} 12:00"
Еще пример время действия ссылки 30 минут:
&#xNAN;time = current_time + 30
expiration_date = "#{current_date} #{time}"

Если в настройках вы включили автоматические платежи, то после успешной оплаты у клиента появится переменные tinkoff_rebill_id и tinkoff_recurrent_id, которые нужны для проведения автоплатежей и идентификации вебхука.
Удалять их нельзя, при удалении tinkoff_rebill_id невозможно будет провести автоплатеж и нужно заново формировать ссылку на оплату, при удалении tinkoff_recurrent_id - клиент не получит колбек об оплате.
Нельзя удалять tinkoff_rebill_id и tinkoff_recurrent_id.
При удалении tinkoff_rebill_id невозможно будет провести автоплатеж и нужно заново формировать ссылку на оплату, при удалении tinkoff_recurrent_id - клиент не получит колбек об оплате.


Обратите внимание: переменной payment_sum присваивается значение последней, после необязательных переменных payment_description, language и т.д.
Пример формирования ссылки на оплату
Создадим ссылку на оплату в размере 100р (в магазине по умолчанию рубль)

Обратите внимание:
- Сначала указываете необязательные параметры payment_description и т.д.
- И последней присваиваем значение переменной payment_sum
Далее в сообщении нужно вывести переменную tinkoff_pay_url, в которой содержится ссылка (см. рис. 19).
Как обработать результат
После успешной оплаты в бот придут колбеки, по которым вы сможете понять что была успешная оплата. Эти колбеки в системе вы видите как сообщения от пользователя, чтобы их не мог отправить пользователь, они состоят из 10 первых символов секретного ключа и приписки success, например: 869e5us32x_success
В случае неудачной оплаты, придет колбек с припиской 869e5us32x_fail
Эти колбеки НЕ ВИДИТ пользователь, они отображаются только оператору.
Колбеки от Тинькофф Касса могут приходить с задержкой.
Если в течение часа вам не пришёл колбек, пожалуйста, обратитесь в поддержку salebot.
Тип сравнения должен быть "Полное совпадение"
Также после успешной оплаты переменная tinkoff_payment_completed устанавливается в True.
Например, можно сделать обработку успешной оплаты блоком с условием и вывести соответствующее сообщение пользователю:
Шаг 1. Копируем колбек об успешной олпате:

Шаг 2. Создаем блок с условием (Стартовое условие или Не состояние с условием) и указываем в поле "Условие" колбек:


Отличие примера № 1 (рис. 12) и примера № 2 (рис. 13) в том, что при использовании блока "Не состояние с условием" клиент не переходит в блок не состояние и не выбивается из основной воронки. Это удобно, например, если вы хотите продолжать вести клиента далее по воронке.
Подробнее о том, как использовать условные блоки в Сейлбот рассказали в статье "Блоки с условием".
После завершения оплаты клиенту добавится переменная tinkoff_callback_data, содержащая данные ответа платежной системы по совершенной операции. Из полученного словаря можно извлечь необходимые данные при помощи метода get.
Как работать с чеками
Для формирования чека онлайн-кассы необходимо при формировании ссылки на оплату передать дополнительные параметры.
| параметры | Значение |
|---|---|
| электронная почта пользователя (Необязателен, если передан параметр phone) | |
| phone | телефон пользователя. Указывается в формате ITU-T E.164, например 79000000000 (Необязателен, если передан параметр email) |
| taxation | система налогообложения: osn — общая usn_income — упрощенная (доходы) usn_income_outcome — упрощенная (доходы минус расходы) patent — патентная envd — единый налог на вмененный доход esn — единый сельскохозяйственный налог |
| products_for_receipt | это массив с перечисленными товарами чека, следующего вида:[{"name": "Наименование товара", "quantity": "Количество товара", "price": "Цена за единицу товара в копейках", "amount": "Стоимость товара в копейках", "tax": "Ставка НДС"}, {"name": "Наименование товара 2", "quantity": "Количество товара 2", "price": "Цена за единицу товара 2 в копейках", "amount": "Стоимость товара в копейках", "tax": "Ставка НДС"}]
|
Каждый товар имеет вид:
{"name": "Наименование товара", "quantity": "Количество товара", "price": "Цена за единицу товара в копейках", "amount": "Стоимость товара в копейках", "tax": "Ставка НДС"}
- name - Наименование товара
- quantity - Количество или вес товара (целое или дробное число через точку)
- price - Цена за единицу товара в копейках
- amount - Стоимость товара в копейках. Произведение Quantity и Price
- tax - cтавка НДС:
| Значение | Описание |
|---|---|
| none | без НДС |
| vat0 | 0% |
| vat10 | 10% |
| vat20 | 20% |
| vat110 | 10/110 |
| vat120 | 20/120 |
| vat5 | 5% |
| vat7 | 7% |
| vat105 | 5/105 |
| vat107 | 7/107 |
Дополнительно можно передать предмет расчета payment_object (если не передать, будет commodity (товар)), может принимать следующие значения:
| Возможные значение | Описание |
|---|---|
| commodity | товар |
| excise | подакцизный товар |
| job | работа |
| service | услуга |
| gambling_bet | ставка азартной игры |
| gambling_prize | выигрыш азартной игры |
| lottery | лотерейный билет |
| lottery_prize | выигрыш лотереи |
| intellectual_activity | предоставление результатов интеллектуальной деятельности |
| payment | платеж |
| agent_commission | агентское вознаграждение |
| composite | составной предмет расчета |
| another | иной предмет расчета |

После определения переменных платежа, определяем переменную payment_sum, после которой сразу появится ссылка на оплату.
Общая стоимость всех товаров должна быть равной переменной payment_sum в рублях!

Пример:
[{"name": "Наименование товара", "quantity": "2", "price": "1000", "amount": "2000", "tax": "none"}, {"name": "Наименование товара 2", "quantity": "3", "price": "500", "amount": "1500", "tax": "none"}]
Как сделать автоплатежи в Т-банке
Автоплатежи в Т-банке работают по-разному в зависимости от того, чем клиент оплатил первый платеж.
-
Оплата картой или через T-Pay — работает по переменной
tinkoff_rebill_id, порядок работы описан ниже. -
Оплата через СБП — переменная
tinkoff_rebill_idНЕ создается. У Т-банка автоплатеж по СБП устроен иначе: у него нет родительского платежа, вместо него отдельно привязывается счет клиента. Порядок работы описан в разделе «Как сделать автоплатежи через СБП».
Обращаем внимание!
Оплата по СБП по обычной ссылке на оплату привязку счета НЕ создает, даже если включен автоплатеж. Чтобы проводить автосписания по СБП, счет клиента нужно привязать отдельным шагом — функцией
tinkoff_sbp_bind_account.
Провести тестовые платежи
В личном кабинете Тинькофф нужно пройти тесты подключения автоплатежей с тестовых карт банка.

Чтобы пройти тесты подключения автоплатежей:
1. Создаём ссылку на оплату get_tinkoff_payment_url.
В параметре recurrent передайте значение равное 1, пример кода есть в описании функции
2. Оплачиваем ее тестовой картой из Тест №5, приходит уведомление от платежной системы об успешной оплате.
3. Для этого же клиента вызываем функцию рекуррентного платежа tinkoff_recurrent_payment.
4. В кабинете Тинькофф нажимаем Проверить. Тесты пройдены
Провести установочный платеж
Для создания ссылки на первый установочный платеж можно воспользоваться функцией get_tinkoff_payment_url в Калькуляторе блоке.

receipt = [{"name":"ТОВАР1","price":"1200","quantity":"1","amount":"1200","vat_code":"2","method":"full_payment","object":"commodity"}]
link_tinkoff = get_tinkoff_payment_url(1200, 'Купи меня', '1', receipt, '77777777777', 'exam@mail.com', '28.03.2023 14:25', '2')
Важный параметр данной функции для проведения установочного платежа
recurrent.Если автоплатеж включен, то передайте значение 1, если отключен передайте значение None или ""
После успешной оплаты придет уведомление (callback), а у клиента появится переменная
tinkoff_rebill_id. Эта переменная нужна для повторных автосписаний. Если её удалить, то повторные автосписания провести не получится.
Переменная tinkoff_rebill_id появляется, только если клиент оплатил картой или через T-Pay. Если клиент выбрал на странице оплаты СБП, переменной не будет — это не ошибка интеграции, для СБП используется отдельный механизм привязки счета.
Провести повторный автоплатеж
От блока, который реагирует на колбэк об успешной оплате создаем стрелку с таймером (задержкой) через какой период необходимо повторить списание.
Будьте внимательны и настройте возможность отменить подписку,чтобы случайно не списать с карты пользователя все средства.

Далее для проведения автоплатежа, нужно вызвать функцию:
tinkoff_recurrent_payment(сумма, 'описание')
Первым параметром передаем сумму, которую нужно списать, вторым - описание платежа, если не передать, то будет пустое.

Если подключена онлайн-касса, то при автосписании нужно формировать чек.
Чтобы это сделать, перед списанием нужно создать переменные:
| products_for_receipt_recurrent | обязательная переменная, массив с перечисленными товарами чека. **Числа нужно указывать без кавычек!** |
| taxation | обязательная переменная |
| phone | обязательная, если нет переменной email |
| обязательная, если нет переменной phone |
Функция сама определяет, как списывать деньги: если у клиента есть переменная tinkoff_rebill_id — списание пройдет по карте, если есть tinkoff_account_token — по привязанному счету СБП.
Если у клиента нет ни одной из этих переменных, функция вернет текст:
Client not have required variables - tinkoff_rebill_id (card) or tinkoff_account_token (sbp)
Это значит, что установочный платеж не проводился, привязка счета не сделана либо переменную удалили. Нужно заново сформировать ссылку на оплату (для карты) или заново привязать счет (для СБП).

Как заполнять products_for_receipt_recurrent читайте в параграфе выше "Функция get_tinkoff_payment_url в Калькуляторе".
Отменить автоплатежи
Для того, чтобы отменить автосписания настроим блок для удаления переменной tinkoff_rebill_id

Провести обычный платеж, если включены рекуррентные платежи.
Если в настройках включен бегунок рекуррентные платежи, но нужно провести обычный платеж без сохранения карты для подписки, присвойте переменной tinkoff_manual_recurrent_disable любое значение перед объявлением payment_sum.
При таких настройках платеж будет обычным.
Пример:
tinkoff_manual_recurrent_disable = 1

Если при автосписании нужен чек, то до вызова функции нужно определить переменную products_for_receipt_recurrent, которая заполняется так же как и для чеков в обычном платеже.
Как сделать автоплатежи через СБП
В отличие от карт, у автоплатежа через СБП нет родительского платежа: Т-банк не выдает RebillId, а вместо этого привязывает счет клиента и выдает идентификатор привязки — AccountToken. В Сейлбот он сохраняется в переменную клиента tinkoff_account_token.
Поэтому порядок работы такой:
- Привязываем счет клиента — функция
tinkoff_sbp_bind_account. Клиент подтверждает привязку в приложении своего банка. - Дожидаемся колбека о привязке — в переменной клиента появляется
tinkoff_account_token. - Проводим автосписания — той же функцией
tinkoff_recurrent_payment, что и для карт.
Привязка делается один раз. Дальше списывать можно сколько угодно раз, пока клиент не отзовет привязку в своем банке.
Обращаем внимание!
Уведомление о привязке счета Т-банк отправляет на адрес уведомлений, указанный в настройках терминала в личном кабинете. Поэтому в личном кабинете Т-банка в настройках терминала обязательно включите уведомления по HTTP и вставьте ссылку:
https://chatter.salebot.pro/tinkoff_callback/resultБез этого колбек о привязке в бота не придет и переменная
tinkoff_account_tokenне создастся.
Также со стороны банка должны быть выполнены условия подключения СБП: расчетный счет в Т-банке установлен в магазине как счет для возмещений, статус резидента РФ. На схеме интеграции «Маркетплейс» СБП недоступна.
Шаг 1. Привязать счет клиента
В поле Калькулятор блока присваиваем переменной значение функции tinkoff_sbp_bind_account. Название переменной задаете самостоятельно.
link = tinkoff_sbp_bind_account(description, expired)
Параметры функции:
| Параметр | Описание параметра |
|---|---|
description |
Описание привязки. Текст, который клиент увидит в приложении банка при подтверждении. Например, 'Подписка на клуб'. Чтобы пропустить данный параметр, передайте пару одинарных или двойных кавычек — тогда будет подставлено описание по умолчанию |
expired |
Время жизни ссылки на привязку, в формате дд.мм.гггг чч:мм (например: 25.01.2026 12:23). Минимальное значение — 1 минута от текущей даты, максимальное — 90 дней. Чтобы пропустить данный параметр, передайте пару кавычек или значение None
|
Пример кода для копирования
Пример 1: привязка счета с описанием
link_sbp = tinkoff_sbp_bind_account('Подписка на клуб')
Пример 2: привязка счета со сроком жизни ссылки
date = current_date + 1
expired = "#{date} 12:00"
link_sbp = tinkoff_sbp_bind_account('Подписка на клуб', expired)
В переменную запишется ссылка вида https://qr.nspk.ru/AS1000670LSS7DN18SJQDNP4B05KLJL2. Переменную можно вывести на экран ссылкой в сообщении или разместить в кнопке с текстом, например, «Привязать счет». Клиент переходит по ссылке, попадает в приложение своего банка и подтверждает привязку.
Если банк вернул ошибку, в переменную запишется ответ платежной системы с текстом ошибки.
Переменные клиента
Как только функция отработает, у клиента создается переменная tinkoff_qr_request_key — идентификатор запроса на привязку. По нему Сейлбот опознает колбек о привязке от Т-банка.
Служебную переменную tinkoff_qr_request_key НЕЛЬЗЯ удалять или изменять!
При каждом новом вызове tinkoff_sbp_bind_account предыдущая привязка сбрасывается: переменная tinkoff_account_token очищается, пока клиент не подтвердит новую привязку.
Шаг 2. Дождаться подтверждения привязки
После того как клиент подтвердит привязку в приложении банка, в бота АВТОМАТИЧЕСКИ придет КОЛБЭК, который состоит из 10 символов секретного ключа платежной системы и слова _sbp_bind_success.
Например: ovg58keefc_sbp_bind_success, где:
-
ovg58keefc: первые 10 символов секретного ключа платежной системы -
_sbp_bind_success: результат обработки запроса (счет привязан)
Если банк отклонил привязку, придет колбек с припиской _sbp_bind_fail.
Например: ovg58keefc_sbp_bind_fail
Колбеки (уведомления) от платежной системы пользователь НЕ ВИДИТ. Они отображаются только во вкладке Клиенты и видны оператору. Тип сравнения в блоке с условием должен быть «Полное совпадение».
Вместе с колбеком _sbp_bind_success у клиента создаются переменные tinkoff_account_token (идентификатор привязки счета) и tinkoff_qr_bank_member_id (идентификатор банка клиента).
Нельзя удалять tinkoff_account_token. При удалении провести автосписание по СБП будет невозможно, счет придется привязывать заново.
Проверить статус привязки вручную
Если колбек не пришел (например, в терминале не настроены уведомления по HTTP), статус привязки можно запросить функцией:
status = tinkoff_sbp_bind_account_status()
Функция необязательным параметром принимает идентификатор запроса на привязку, по умолчанию берется из переменной tinkoff_qr_request_key:
status = tinkoff_sbp_bind_account_status(request_key)
Функция возвращает статус привязки:
| Статус | Описание |
|---|---|
NEW |
получен запрос на привязку счета |
PROCESSING |
запрос в обработке |
ACTIVE |
привязка счета успешна |
INACTIVE |
привязка счета неуспешна или деактивирована |
При статусе ACTIVE функция сама сохранит переменные tinkoff_account_token и tinkoff_qr_bank_member_id. Удобно вызывать ее по стрелке с таймером после выдачи ссылки на привязку.
Шаг 3. Провести автосписание
Автосписание по СБП проводится той же функцией, что и по карте:
tinkoff_recurrent_payment(сумма, 'описание')
Первым параметром передаем сумму, которую нужно списать, вторым — описание платежа, если не передать, то будет пустое.
Функция сама определит, что у клиента есть tinkoff_account_token, и спишет деньги с привязанного счета.
Если подключена онлайн-касса, то при автосписании нужно формировать чек. Чтобы это сделать, перед списанием нужно создать переменные products_for_receipt_recurrent, taxation, phone и/или email — так же, как и для автосписаний по карте.
После успешного списания в бота придет обычный колбек об успешной оплате: 10 символов секретного ключа платежной системы, слово _success и через пробел сумма платежа.
Например: ovg58keefc_success 1200
Будьте внимательны и настройте возможность отменить подписку, чтобы случайно не списать со счета пользователя все средства.
Возможные ошибки при списании
Если банк отклонил списание, функция вернет ответ платежной системы с кодом ошибки:
| Код | Описание |
|---|---|
3013 |
Рекуррентные платежи недоступны |
3015 |
Неверный статус AccountToken — привязка деактивирована, счет нужно привязать заново |
3037 |
Повторный вызов метода недоступен |
3040 |
Техническая ошибка |
3041 |
Слишком много неудачных попыток за сутки. Попробуйте еще раз завтра |
3042 |
Слишком много неудачных попыток за час. Попробуйте снова через час |
9999 |
Повторите попытку позже |
Отменить автоплатежи по СБП
Для того, чтобы отменить автосписания, настройте блок для удаления переменной tinkoff_account_token.
Клиент также может отозвать привязку счета самостоятельно в приложении своего банка. В этом случае очередное списание вернет ошибку 3015, и счет нужно будет привязывать заново.
Переменные клиента для автоплатежей по СБП
| Переменная | Описание |
|---|---|
tinkoff_qr_request_key |
идентификатор запроса на привязку счета, создается функцией tinkoff_sbp_bind_account. По нему опознается колбек о привязке |
tinkoff_account_token |
идентификатор привязки счета, нужен для автосписаний. Создается после подтверждения привязки клиентом |
tinkoff_qr_bank_member_id |
идентификатор банка клиента, по которому проведена привязка |
tinkoff_recurrent_id |
идентификатор автосписания, нужен для идентификации вебхука |
Нельзя удалять tinkoff_account_token и tinkoff_recurrent_id. При удалении tinkoff_account_token невозможно будет провести автосписание и счет нужно привязывать заново, при удалении tinkoff_recurrent_id — клиент не получит колбек об оплате.
Прием платежей для курсов через Т-банк
Шаг 1. В платежных системах подключаем прием платежей через Т-банк Эквайринг

Шаг 2. В настройках курса выбираем платежную систему

Шаг 3. Создаем тариф

Шаг 5. В личном кабинете Тинькофф в настройках терминала обязательно включаем уведомления по HTTP и вставляем ссылку: https://chatter.salebot.pro/tinkoff_callback/result

Обращаем внимание!
Пропуск 5 шага приведет к некорректной работе интеграции!
Пожалуйста, ВКЛЮЧАЙТЕ уведомления по HTTP и ВСТАВЬТЕ ссылку в соответствующее поле URL (ссылка для уведомлений): https://chatter.salebot.pro/tinkoff_callback/resultТакже после прохождения всех проверок и тестирования корректной работы платежной системы, не забывайте ПЕРЕПОДКЛЮЧАТЬ платежную систему на РАБОЧИЙ терминал!
На странице курса будет отображаться тариф с кнопкой для оплаты:

Далее ученику нужно будет ввести свои данные:

