Deep linking в Telegram?

В Telegram можно при открытии бота можно передать параметр start = <значение>, https://telegram.me/triviabot?start=123456
Это значение передаётся как сообщение "/start 123456".
Я его "вылавливаю" следующим образом:
$message = '/start 123456'; //пусть это входящее сообщение
$str = 'start'; //это подстрока 
  if ( stripos($message , $str) ) //возвращает позицию первого вхождения подстроки $str
  { 
	$res = substr($message , 7); //пропускаем '/start '
 	$res = trim($res); //на всякий случай убираем пробелы в начале и конце строки
	//res содержит значение параметра 123456 
  }


Что-то мне кажется это тем ещё костылем...
Подскажите, пожалуйста, куда копать и что изучить, чтобы как-то изящнее это сделать.
  • Вопрос задан
  • 12189 просмотров
Решения вопроса 2
@Mysterion
$command = '/start 123456 dsad';
$regex = '/(\/start\s)(\d+)/';
if(preg_match($regex, $command, $match)) {
    $num = $match[2];
    echo $num; // 123456
}
Ответ написан
Комментировать
@nllm
$command = explode(" ", $message);
$command[0];//сама команда, в других элементах массива - доппараметры
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
astec
@astec
Разработчик https://debtstracker.io/
Почти ок.

Сделать только проверку что сообщение именно начинается со "/start ", а не просто содержит подстроку "start".

А в остальном вроде нельзя проще, а значит и лучше.

Я делаю примерно так же в t.me/DebtsTrackerRuBot только на Go.
Ответ написан
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
Собственно до сих пор ничего не поменялось: отлавливаем сообщение /start, отсекаем токен, работаем с ним.

В ларавеле делают так:

if ($message->getText()) {
    if (strpos('/start', $message->getText()) !== false) {
        $textStrings = explode(' ', $message->getText());

        if (isset($textStrings[1])) {
            $token = $textStrings[1];
            $chatId = $message->getChat()->getId();

            if ($token) {
                $user = User::find(['telegram_token' => $token]);

                // ...
            }
        }
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы