Действия функций — Custom API, Python, REST API
Источник: doc.nextbot.ru/functional/functions
Общая архитектура действий
После выполнения функции можно отправить данные во внешние сервисы. Это настраивается в разделе «Действия» (ранее «Отправка результатов»).
Доступные интеграции для отправки
| Интеграция | Описание |
|---|---|
| Custom API | Универсальный HTTP-запрос к любому REST API |
| Python | Выполнение Python-скрипта |
| Telegram | Отправка в Telegram-бота/группу |
| amoCRM | Создание/обновление сделки в amoCRM |
| Bitrix24 | Интеграция с Bitrix24 |
| Kommo | Отправка данных в Kommo |
| Google Calendar | Создание события в Google Calendar |
| U-ON.Travel | Интеграция с U-ON.Travel |
| Yandex.Metrica | Отправка целей в Яндекс.Метрику |
| Мой Склад | Интеграция с Мой Склад |
Custom API
Настройка HTTP-запроса
Custom API позволяет отправить любой HTTP-запрос к внешнему сервису после выполнения функции.
| Настройка | Описание |
|---|---|
| Метод | GET, POST, PUT, PATCH, DELETE |
| URL | Эндпоинт API |
| Параметры (Query) | Параметры в URL (?key=value) |
| Заголовки (Headers) | HTTP-заголовки (Authorization, Content-Type, и т.д.) |
| Тело запроса (Body) | JSON-тело запроса |
Использование переменных
В URL, заголовках и теле запроса можно подставлять:
- Параметры функции — данные, собранные агентом у пользователя
- Данные пользователя — имя, телефон, ID диалога и т.д.
Вложенные объекты
Тело запроса поддерживает вложенную структуру JSON:
{
"client": {
"name": "{{client_name}}",
"phone": "{{phone}}"
},
"request": {
"type": "{{service_type}}",
"amount": "{{amount}}"
}
}
Тестирование
Custom API можно протестировать прямо в интерфейсе NextBot:
- Заполнить все поля запроса
- Нажать «Тестировать»
- Увидеть ответ от API (статус, тело ответа)
Python-скрипты
⚠️ Требуется подписка определённого уровня
Доступные библиотеки
Python-скрипты выполняются в изолированной среде с предустановленными библиотеками:
requests— HTTP-запросыjson— работа с JSONdatetime— дата и время- и другие стандартные
Аргументы функции
Все параметры функции доступны через словарь args:
# Получение параметров функции
client_name = args.get("client_name", "")
phone = args.get("phone", "")
amount = args.get("amount", 0)
Обязательная переменная result
Скрипт обязан определить переменную result — это то, что агент увидит как результат:
# Пример: сбор контакта
client_name = args.get("client_name", "Неизвестно")
phone = args.get("phone", "Не указан")
result = f"Контакт записан: {client_name}, тел: {phone}"
Тестирование
- Без debug — результат
resultвозвращается агенту - С debug (
?debug=true) — детальные логи, стоит дополнительные Botcoins
REST API через Python
Когда использовать вместо Custom API
| Ситуация | Решение |
|---|---|
| Динамический URL (зависит от параметров) | Python + requests |
| Отправка JSON-массивов | Python + requests |
| PUT/DELETE запросы | Python + requests |
| Сложная логика обработки ответа | Python + requests |
| Цепочка последовательных запросов | Python + requests |
| Простой POST/GET | Custom API (проще) |
Пример: POST-запрос с JSON
import requests
import json
url = "https://api.example.com/orders"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {args.get('api_key', '')}"
}
payload = {
"client_name": args.get("client_name", ""),
"phone": args.get("phone", ""),
"amount": float(args.get("amount", 0)),
"currency": args.get("currency", "RUB")
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code == 200:
data = response.json()
result = f"Заказ создан: #{data.get('order_id', 'N/A')}"
else:
result = f"Ошибка: {response.status_code} — {response.text}"
Пример: Supabase-интеграция через Python
import requests
SUPABASE_URL = "https://your-project.supabase.co"
SUPABASE_KEY = "your-anon-key"
headers = {
"apikey": SUPABASE_KEY,
"Authorization": f"Bearer {SUPABASE_KEY}",
"Content-Type": "application/json",
"Prefer": "return=minimal"
}
# Вставка данных
data = {
"client_name": args.get("client_name"),
"phone": args.get("phone"),
"service": args.get("service_type"),
"dialog_id": args.get("dialog_id")
}
response = requests.post(
f"{SUPABASE_URL}/rest/v1/leads",
headers=headers,
json=data
)
if response.status_code in [200, 201]:
result = "Данные успешно сохранены в базу"
else:
result = f"Ошибка: {response.status_code}"
Важные замечания
- Порядок действий: Можно добавить несколько действий к одной функции — они выполняются последовательно
- Ошибки: При сбое действия агент получает сообщение об ошибке
- Стоимость: Каждое выполнение потребляет Botcoins
Отправка результатов Админу (Telegram / WhatsApp)
Общая схема настройки
Для получения уведомлений в мессенджер необходимо выполнить привязку администратора к боту.
Настройка Telegram
- Подключите Telegram в разделе Интеграции.
- Получите Админ пароль в настройках.
- Отправьте пароль:
- Лично боту (для личных уведомлений).
- В группу, куда добавлен бот (для уведомлений в группу).
- В функции выберите действие «Админу в мессенджер» → Telegram.
- Настройте поля отчета (Текст, Параметры, Данные пользователя).
Настройка WhatsApp
- Подключите WhatsApp (через Green API).
- Перейдите в настройки WhatsApp в NextBot.
- Задайте/получите пароль администратора.
- Отправьте пароль:
- Контакту агента (личные сообщения).
- В группу (требуется опция «Отвечать в группе»).
- Добавьте действие «Админу в мессенджер» → WhatsApp.
⚠️ Важно: Получатель в Telegram может быть только один (человек или группа) для конкретной настройки. В WhatsApp также требуется предварительная авторизация администратора.