← Вернуться к списку тем

Бот не отвечает на start ref

Помогите решить проблему, Бот не отвечает при старте бота по реферальной ссылке , при обычном старте всё ок 

<?php

// user_logic.php

// Получение данных из запроса пользователя
$update = json_decode(file_get_contents('php://input'), true);

// Проверка наличия сообщения и команды от пользователя
if (isset($update['message']) && isset($update['message']['text'])) {
    $message = $update['message'];
    $chatId = $message['chat']['id'];
    $command = $message['text'];

    // Обработка команды /start
    if ($command == "/start") {
        handleStartCommand($chatId, null);
    } elseif (preg_match("~^/start ref([d]+)$~", $command, $matches)) {
        $refChatId = $matches[1];
        handleStartCommand($chatId, $refChatId);
    }
}

// Функция для обработки команды /start
function handleStartCommand($chatId, $refChatId)
{
    global $bot_username, $conn;

    if ($refChatId) {
        $messageText = "Спасибо за использование реферальной команды! Реферальный chat_id: $refChatId.";
    } else {
$messageText = "*Добро Пожаловать в Мир Турецких Сериалов!*👻
Нажми *Открыть Приложение*  для просмотра сериала!😍
Если тебе понравилось приложение поделись им с друзьями! 😘";
    }

    $ref_link = "https://t.me/share/url?url=https://t.me/" . urlencode($bot_username) . "?start=ref" . $chatId;

    // Создаем массив с кнопками клавиатуры
    $keyboard = [
        'inline_keyboard' => [
            [
                [
                    'text' => '🎬 Открыть приложение',
                    'web_app' => ['url' => 'https://rutele.ru/'.$bot_username.'/app/index.php']
                ],
            ],
            [
                [
'text' => '➕ Пригласить друга',
                    'url' => $ref_link
                ]
            ]
        ]
    ];

    // Формируем параметры для отправки сообщения с клавиатурой
    $params = [
        'chat_id' => $chatId,
'text' => $messageText,
'parse_mode' => 'Markdown',
        'reply_markup' => json_encode($keyboard)
    ];

    // Отправляем сообщение пользователю
    sendMessage($params);

    // Сохраняем информацию о пользователе в базе данных
    saveUser($chatId, $refChatId);
}

// Функция для отправки сообщения пользователю
function sendMessage($params)
{
    global $token;

    $url = "https://api.telegram.org/bot" . $token . "/sendMessage";
    $options = [
        'http' => [
            'header'  => "Content-type: application/x-www-form-urlencodedrn",
            'method'  => 'POST',
            'content' => http_build_query($params),
        ],
    ];
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
}

// Функция для сохранения информации о пользователе
function saveUser($chatId, $refChatId)
{
    global $conn;

    // Проверяем, есть ли уже запись с таким chat_id в таблице user
    $sql = "SELECT * FROM user WHERE chat_id = '$chatId'";
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
        // Запись уже существует, не нужно создавать новую
        return;
    }

    // Добавляем запись в таблицу user
    $sql = "INSERT INTO user (chat_id, ref_chat_id) VALUES ('$chatId', '$refChatId')";
    $conn->query($sql);
}

Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.

  • S.К [8 месяцев назад]

    Нашёл решение 

    // Обрабатываем запрос от вебхука
    $update = json_decode(file_get_contents('php://input'));
    
    // Получаем данные
    $chat_id = $update->message->chat->id;
    $text = $update->message->text;
    
    // Обработка команд
    if($text == '/start') {
      $reply = 'Привет!';
      
    } elseif (strpos($text, '/start') === 0) {
      $ref = substr($text, 7);
      $reply = "Твой реферал: $ref";
    }
    
    // Отправка ответа
    $params = [
      'chat_id' => $chat_id,
      'text' => $reply
    ];
    
    $url = "https://api.telegram.org/bot$token/sendMessage";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);
    
    ?>