Уроки по Salebot
March 15, 2024

⚡️Запуск Python скриптов на своём сервере. (Salebot+Beget+Apache+Python)⚡️

1. Регистрируемся на бегете https://beget.com/p1857759

2. Создаем сервер. Начать можно с минимальной конфигурацией (1CPU+1Gb - 7р сутки) и потом расширять.

2.1. Выбираем готовый вариант LAMP.

2.2. Задаём пароль вручную или получаем на почту файл с доступами.

3. Заходим через файлового менеджера и редактируем ./etc/apache2/apache2.conf
ищем <Directory /var/www/>
и заменяем все на :

<Directory /var/www/>
  Options Indexes FollowSymLinks ExecCGI
  AllowOverride None
  Require all granted
  AddHandler cgi-script .cgi .py
</Directory>

4. Заходим по созданному паролю или полученным в почту данным по ssh на сервер, используя например putty или MobaXterm. (Инструкцию по установке и настройке MobaXterm можно посмотреть тут: https://youtu.be/U93Hsgi3xsQ?si=_922Mbfs_aDiqhW0&t=70

5. Вводим команды в терминал:

apt update
apt install python3.11
pip install requests

По аналогии с requests добавляем(инсталлируем) нужные нам библиотеки, до установить можно потом и перезагружаем сервер командами ниже:

a2enmod cgi
systemctl restart apache2

6. идем снова в файловый менеджер в раздел ../var/www/html и создаем файл handle.py

7. Меняем атрибуты на файл права 755 добавляя галочки, чтобы файл стал исполняемым.

8. Пишем в файл скрипт с callback в бота:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
import json
import requests

def handle(data):
    try:
        data = json.loads(data)
        text = "!!!!! результат выполнения вашей функции"
        
        url = f'https://chatter.salebot.pro/api/{data["api_key"]}/callback'
        
        body = {
            "message": f"callback_text {text}",
            "client_id": f"{data['client_id']}"
        }
        
        res = requests.post(url, json=body)
        
        # Проверяем статус код ответа
        res.raise_for_status()
        
        json_data = res.text
        return json_data
        
    except json.JSONDecodeError as e:
        return {"error": "Ошибка декодирования JSON: {}".format(str(e))}
    
    except requests.RequestException as e:
        return {"error": "Ошибка отправки запроса: {}".format(str(e))}

post = sys.stdin.read()
r = handle(post)
print("Content-Type: application/json")
print("")
print(r)

Блок приёма callback:

10. Тестим. В данном примере после отправки АPI запроса на наш сервер, клиенту, который отправляет этот запрос, придёт сообщение из переменной res (статус отправки вебхука в Salebot). А пользователю из переменной client_id придет вэбхук с данными из переменной message.

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