Как связать форму на сайте с Telegram

Заявки с сайта в Telegram

Всем - привет. Давно зрела идея разобраться с отправкой данных из формы на сайте в мессенджер Telegram, но руки не доходили, а моментально получать заявки прямо в телефон, ой как хотелось!

И вот, наконец-то посидел и разобрался. Конечно постичь все тонкости API - не удалось, но по кусочкам насобирал информацию и удалось отправить данные из контактной формы в чат Telegram. 

Это актуализированная статья, в которой решены такие проблемы, как отправка фото и пропадающий символ «+», который не приходил в сообщение и из-за этого номер телефона был некликабельным. Появилась возможность не просто отправлять 1 фото, а сразу несколько файлов, в том числе PDF, docx и любых других.

Важно: для отправки файла из формы в Телеграм на вашем сервере должен быть включен cURL. Обратитесь к техподдержке вашего хостинга, они подскажут что делать и как включить. У многих он включен по умолчанию. Например, на моем хостинге Beget - так.

Как отправить данные формы на сайте в Telegram

Итак, давайте приступим. Первое что нам нужно - это создать своего бота. Делается это достаточно просто. В поиске наберите @botfather, откройте родительского бота и нажмите "Start":

Как связать форму с Telegram

Далее:

  • Пишем команду /newbot, для создания нового бота.
  • Придумываем имя бота.
  • Придумываем ник бота.
Создание бота в Телеграм

Если все прошло успешно, то увидите поздравления и токен вашего бота, в моем случае это:

341996777:AAHbnuvQib-vHU47i-6hbUrCU9D-qHYekxc

Теперь нужно найти своего бота в поиске, указав его ник и нажать "Start", чтобы активировать его. В моем случае ник @DWS_MESSAGE_bot.

Активация бота в Telegram

После этого можно пойти двумя путями:

  1. создать групповой чат, в который будут приходить заявки и пригласить туда нашего бота;
  2. вступить в переписку с ботом и получать личные сообщения от него.

Давайте займемся этим и, пока, пойдем по первому пути.

Зайдите в меню, нажмите "New Group" ("Создать группу") и задайте имя вашему чату.

Создание чата для приема заявок

Не забываем пригласить своего бота в чат. Откройте меню чата, перейдите в "Add Members" ("Добавить участников") и введите имя своего бота.

Добавление бота в чат для приема заявок

На данный момент у нас есть бот, мы знаем его токен, есть чат, в который будут приходить заявки, и нам осталось узнать только id чата. Для этого, напишем в чате:

  • /join @ник_бота

А затем перейдите в браузер, если используете приложение и введите:

https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXX/getUpdates

где, XXXXXXXXXXXXXXXXXXXXXXX - токен вашего бота, полученный ранее.

Если все сделали правильно, то перед вами откроется подобная страница:

получение id чата в Телеграм

Нас интересует объект "chat":{"id":-209253141. — Это id моего тестового чата. На данном этапе у нас есть все, чтобы отправлять текстовые сообщение из контактной формы на сайте в Telegram. Давайте займемся реализацией PHP-обработчика нашей формы, и сделаем разметку самой формы.

Кстати, если не хотите создавать группу, то можете получать личные сообщения от бота. Просто напишите своему боту /join @ник_бота, а потом, в браузере наберите https://api.telegram.org/botXXXXXXXXXXXXXXXXXXXXXXX/getUpdates. Как и в первом случае, нужно просто узнать id чата.

Разметка формы

Не стал выдумывать что-то сверхсложное, а просто 2 поля и возможность прикрепить файл. Оставил телефон, ведь у многих возникала проблема с символом "+", а файл добавил, так как меня просили разобраться с этой темой, при этом, теперь можно вставлять несколько штук.

    <form id="form-contact" method="POST" class="contact-form" autocomplete="off" enctype="multipart/form-data">

      <p class="contact-form__title">Закажите обратный звонок и наш консультант свяжется с вами</p>

      <div class="preloader"></div>
      <p class="contact-form__message"></p>

      <!-- Поле с именем -->
      <div class="contact-form__input-wrapper contact-form__input-wrapper_name">
        <input name="name" type="text" class="contact-form__input contact-form__input_name" 
               placeholder="Введите ваше имя">
      </div>

      <!-- Поле с телефоном -->
      <div class="contact-form__input-wrapper contact-form__input-wrapper_phone">
        <input name="phone" type="tel" class="contact-form__input contact-form__input_phone"
               placeholder="Введите ваш телефон">
      </div>

      <!-- Поле с выбором файла -->
      <div class="contact-form__input-wrapper">
        <input type="file" name="files[]" id="contact-form__input_file"
               class="contact-form__input contact-form__input_file" multiple>
        <label for="contact-form__input_file" class="contact-form__file-button">
          <span class="contact-form__file-text">Выберите файл</span>
        </label>
      </div>

      <!--Поле с темой в письме-->
      <input name="theme" type="hidden" class="contact-form__input contact-form__input_theme"
             value="Заявка с сайта Smartlanding.biz">

      <!--Кнопка отправки формы-->
      <button type="submit" class="contact-form__button">Отправить</button>

    </form>

Добавил стили - получилось примерно так (внешний вид в исходнике немного отличается):

Отправка формы в Телеграм

Не забывайте, что форма отправляется без перезагрузки страницы, а значит используется ajax, и, для упрощения, jQuery. Поэтому подключаем сам jQuery, если не подключен, а после, и сам скрипт. Я сделал специальную папку telegramform, которую нужно поместить в корень сайта. Если нужно, сделаю исходник без использования jQuery.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="/telegramform/js/telegramform.js"></script>

Код с AJAX запросом. Файл - telegramform.js

(function ($) {
  $(".contact-form").submit(function (event) {
    event.preventDefault();

    // Сообщения формы
    let successSendText = "Сообщение успешно отправлено";
    let errorSendText = "Сообщение не отправлено. Попробуйте еще раз!";
    let requiredFieldsText = "Заполните поля с именем и телефоном";

    // Сохраняем в переменную класс с параграфом для вывода сообщений об отправке
    let message = $(this).find(".contact-form__message");

    let form = $("#" + $(this).attr("id"))[0];
    let fd = new FormData(form);
    $.ajax({
      url: "/telegramform/php/send-message-to-telegram.php",
      type: "POST",
      data: fd,
      processData: false,
      contentType: false,
      beforeSend: () => {
        $(".preloader").addClass("preloader_active");
      },
      success: function success(res) {
        $(".preloader").removeClass("preloader_active");

        // Посмотреть на статус ответа, если ошибка
        // console.log(res);
        let respond = $.parseJSON(res);

        if (respond === "SUCCESS") {
          message.text(successSendText).css("color", "#21d4bb");
          setTimeout(() => {
            message.text("");
          }, 4000);
        } else if (respond === "NOTVALID") {
          message.text(requiredFieldsText).css("color", "#d42121");
          setTimeout(() => {
            message.text("");
          }, 3000);
        } else {
          message.text(errorSendText).css("color", "#d42121");
          setTimeout(() => {
            message.text("");
          }, 4000);
        }
      }
    });
  });
})(jQuery);

А теперь сам обработчик нашей формы. Файл - send-message-to-telegram.php:

<?php

// Токен
  const TOKEN = '341996777:AAHbnuvQib-vHU47i-6hbUrCU9D-qHYekxc';

  // ID чата
  const CHATID = '-209253141';

  // Массив допустимых значений типа файла.
  $types = array('image/gif', 'image/png', 'image/jpeg', 'application/pdf');

  // Максимальный размер файла в килобайтах
  // 1048576; // 1 МБ
  $size = 1073741824; // 1 ГБ

if ($_SERVER["REQUEST_METHOD"] == "POST") {

  $fileSendStatus = '';
  $textSendStatus = '';
  $msgs = [];
  
  // Проверяем не пусты ли поля с именем и телефоном
  if (!empty($_POST['name']) && !empty($_POST['phone'])) {
    
    // Если не пустые, то валидируем эти поля и сохраняем и добавляем в тело сообщения. Минимально для теста так:
    $txt = "";
    
    // Имя
    if (isset($_POST['name']) && !empty($_POST['name'])) {
        $txt .= "Имя пославшего: " . strip_tags(trim(urlencode($_POST['name']))) . "%0A";
    }
    
    // Номер телефона
    if (isset($_POST['phone']) && !empty($_POST['phone'])) {
        $txt .= "Телефон: " . strip_tags(trim(urlencode($_POST['phone']))) . "%0A";
    }
    
    // Не забываем про тему сообщения
    if (isset($_POST['theme']) && !empty($_POST['theme'])) {
        $txt .= "Тема: " . strip_tags(urlencode($_POST['theme']));
    }

    $textSendStatus = @file_get_contents('https://api.telegram.org/bot'. TOKEN .'/sendMessage?chat_id=' . CHATID . '&parse_mode=html&text=' . $txt); 

    if( isset(json_decode($textSendStatus)->{'ok'}) && json_decode($textSendStatus)->{'ok'} ) {
      if (!empty($_FILES['files']['tmp_name'])) {
    
          $urlFile =  "https://api.telegram.org/bot" . TOKEN . "/sendMediaGroup";
          
          // Путь загрузки файлов
          $path = $_SERVER['DOCUMENT_ROOT'] . '/telegramform/tmp/';
          
          // Загрузка файла и вывод сообщения
          $mediaData = [];
          $postContent = [
            'chat_id' => CHATID,
          ];
      
          for ($ct = 0; $ct < count($_FILES['files']['tmp_name']); $ct++) {
            if ($_FILES['files']['name'][$ct] && @copy($_FILES['files']['tmp_name'][$ct], $path . $_FILES['files']['name'][$ct])) {
              if ($_FILES['files']['size'][$ct] < $size && in_array($_FILES['files']['type'][$ct], $types)) {
                $filePath = $path . $_FILES['files']['name'][$ct];
                $postContent[$_FILES['files']['name'][$ct]] = new CURLFile(realpath($filePath));
                $mediaData[] = ['type' => 'document', 'media' => 'attach://'. $_FILES['files']['name'][$ct]];
              }
            }
          }
      
          $postContent['media'] = json_encode($mediaData);
      
          $curl = curl_init();
          curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]);
          curl_setopt($curl, CURLOPT_URL, $urlFile);
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($curl, CURLOPT_POSTFIELDS, $postContent);
          $fileSendStatus = curl_exec($curl);
          curl_close($curl);
          $files = glob($path.'*');
          foreach($files as $file){
            if(is_file($file))
              unlink($file);
          }
      }
      echo json_encode('SUCCESS');
    } else {
      echo json_encode('ERROR');
      // 
      // echo json_decode($textSendStatus);
    }
  } else {
    echo json_encode('NOTVALID');
  }
} else {
  header("Location: /");
}

Во многом он повторяет обработчик из других форм на блоге. Например, в статье "Создание формы обратной связи" используется аналогичный подход, и вы легко сможете осуществить отправку данных как на почту, так и в мессенджер одновременно. Но помните, что это все тестовый, учебный пример и в реальной жизни можно сделать намного больше проверок.

Тут стоит обратить внимание на константы TOKEN и CHATID. Не забывайте подставить туда свои данные. Чтобы принимать какой-то определённый тип файла, поместите его в "Массив допустимых значений типа файла." Из популярных можно выделить:

.jpeg
.jpg
image/jpeg
.csvtext/csv
.docapplication/msword
.docx application/vnd.openxmlformats-officedocument.wordprocessingml.document
.svgimage/svg+xml
.txttext/plain
.xlsapplication/vnd.ms-excel
.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
.pngimage/png
.pdfapplication/pdf

При этом файлы будут приходить общим потоком, одним сообщением. Если тип файла не проходит проверку, то он просто не отправляется. Специально не прерываю отправку, так как для большинства важно получить хотя бы контакты для связи, чтобы не потерять лида. Больше типов файлов тут.

Вот так выглядит отправка сообщения:

Отправка файла из формы в Телеграм

Не стал делать каких-то серьезных валидаций, так как это просто пример и вам наверняка нужно будет не только отправка текста или картинки в Телеграм, но и на почту, а значит все равно подстраивать под свои нужды. Если будут вопросы и замечания - пишите в комментариях.

Видеопример:

Вот так, средствами PHP можно отправлять в Telegram сообщения и файлы. Если вы используете CMS MODX, то на блоге igamov.ru есть отличная инструкция по интеграции формы с мессенджером.

Исходник для отправки данных формы в Телеграм

Размер: 0,008

Кстати, подписывайтесь на Telegram канал. Уведомления об обновлениях на блоге, в первую очередь, приходят туда).

Похожие публикации

328 комментариев

  1. Сергей

    Здравствуйте, а не подскажите, если делать бота не для себя, при этом доступа к телефону нет. Я могу обяснить как реализовать, но будет ли это легко для этого человека не знаю. Или я могу создать бота и чат у себя, и человеку нужно будет только добавить чат у себя?

    1. dimadv7

      Здравствуйте, скиньте статью ему)) А вообще да, попытайтесь объяснить, чтобы он вам переслал просто нужные данные. Или, возможно, вы и человека потом сделаете администратором группового чата.

    2. Юлия

      Да можно ведь всё ещё проще сделать. Есть разные сервисы, например, form2chat.io/ru, где это всё делается за минуту. Просто копируете ссылку и вставляется её в атрибут action. И сами можете выбрать, на какой мессенджер получать заявки.

    3. Дмитрий Давыдов

      Юлия, зачем платить за сервис, если статья рассчитана минут на 15 и больше не нужно платить никому, ничего? Ну или на фрилансе заказать за 300 рублей единожды.

  2. Вадим

    Как сделать что бы форма закрывалась после успешной отправки?

    1. dimadv7

      Вадим, в смысле как? А как вы уже пробовали? Что делали? Какие возникли сложности? Какие ошибки появились?

  3. игорь

    спасибо, каждый раз открываю, смотрю

  4. Роман

    Добрый день.
    приходит номер телефона без "+"
    вопрос уже был выше, но никто не ответил.
    Как решить?

    1. dimadv7

      Роман, на следующей неделе попробую решить вопрос и добавить в статью то, как это делается.

  5. Роман

    dimadv7, Спасибо

    1. dimadv7

      По поводу "+", просто в разметке pattern у поля с телефоном уберите. То есть вместо:

      <input name="phone" type="tel" class="form-input__phone" tabindex="0" pattern="^[ 0-9]+$" placeholder="Введите ваш телефон" required>
      

      Сделайте:

      <input name="phone" type="tel" class="form-input__phone" tabindex="0" placeholder="Введите ваш телефон" required>
      
  6. Михаил

    Честно сказать не понял как реализовать если у меня уже есть обработчик, который отправляет заявки в amocrm. Как добавить что бы отправлял и в телеграмм одновременно?

  7. Алексей

    Я копировал просто со страницы весь код, и там ошибка.
    js файл

     $("form-element").submit(function () {
    

    надо поставить точку

     $(".form-element").submit(function () {
    
    1. dimadv7

      Алексей, спасибо, поправил.

  8. Жалолиддин

    не работает

    1. dimadv7

      Жалолиддин, у всех работает, ищите ошибку.

  9. илья

    а капчу можно прикрутить ?

    1. dimadv7

      Илья, конечно можно. Статья о том, как добавить recaptcha

  10. Дмитрий

    Здравствуйте.
    Столкнулся с проблемой. При отправке появляется сообщение, что все отправлено, но ничего не происходит. Пробовал и Ваш готовый шаблон, так и предоставленный код, в консоль не выводится никаких ошибок.
    Тесты проходили на трех разных хостингах, везде одинаковый результат.
    Хоть тг не заблокирован у меня в стране, по совету из комментариев, пытался заменить api.telegram.org на актуальный адрес 149.154.167.220.

    1. dimadv7

      Дмитрий, вы используете https же? PHP выше чем 7.0 версии? Пробовали включать вывод php-ошибок?

    2. Дмитрий

      dimadv7, Прошу прощения, косяк был с моей стороны. Кстати, запустилось и с http, тоже

    3. dimadv7

      Дмитрий. Понял, но приходить сообщения не должны были с http, только с https.

    4. Дмитрий

      dimadv7, но приходят :)

    5. dimadv7

      Странно, ну ок ))

  11. Арсен

    Все работает. Спасибо вам огромное!
    Это просто круто!

  12. Елена

    Подскажите, как сделать, чтобы номер телефона в телеграмме отображался кликабельной ссылкой?

    1. dimadv7

      Елена, возможно вы об этом говорите

    2. Елена

      dimadv7, нет. Мой вопрос связан с данной статьей. При передачи данных формы почему-то номер телефоны в Телеграм приходит без "+", соответственно в сообщении он не кликабелен, чтобы соверщить сразу же звонок. И мой вопрос в том, как заставить Телеграм передавать "+" перед номеров телефона. При этом в поле формы человек вводит "+".

    3. dimadv7

      Елена, попробуйте убрать strip_tags в обработчике формы. То есть тут:

      $phone = strip_tags($_POST['phone']);

      И сделать так:

      $phone = $_POST['phone'];
    4. Альберт

      dimadv7, как еще можно починить это? Не работает убираение strip_tags

  13. Афанасий

    Как добавить прокси? без прокси отказывается работать

  14. Влад

    Делаю все также. Но почему-то выдает ошибку и не отправляет сообщение. Жалуется на 30 и 33 строку
    В чем проблема?

  15. Сергей

    Получил токен, создал группу, добавил бота, запустил его. При вводе в браузере строки https://api.telegram.org/bot1064142492:AAG3T5__8X-zrqYhfNaYZ20f2iBe3i7YpJs/getUpdates пишет Не удается получить доступ к сайту. Где может быть ошибка?

    1. dimadv7

      Сергей, может быть Роскомнадзор?

    2. Сергей

      dimadv7, Да, это он разобрался уже. Теперь не получается реализовать возможность, чтобы бот присылал заявки в группу, пишет только сам. У бота написано написано что не может писать сообщения. Через бота отца не могу разобраться как включить этот функционал.

  16. iluha

    Здравствуйте.
    А подскажите, как быть с ошибкой:

    Warning: fopen(https://api.telegram.org/bot...
    ...: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in...

    На почту приходит, а в телеграм - нет.

    1. dimadv7

      iluha, у сайта есть ssl сертификат? через https или http запрос идет?

    2. iluha

      dimadv7,
      да, ssl и https.

    3. dimadv7

      iluha, вы изменяли код в исходнике?

    4. iluha

      dimadv7,
      фуф, разобрался.
      Этот телеграм-бот не принимает хтмл разметку.
      Убрал все символы "<", , и т.д. и всё заработало.

      Всем спасибо.

  17. Рустам

    У меня все работает кроме одного когда сообщение отправляется мне приходит не только спасибо за отправку но ещё и это
    Notice: Undefined variable: txt in C:\xampp\htdocs\sendToTelegram\telegramform\php\send-message-to-telegram.php on line 32
    Спасибо за отправку вашего сообщения!

    Если что я работаю на локалхосте но все же какого ЧЕРТА? он не может определить переменную

    1. dimadv7

      Рустам, нужно отключать вывод ошибок и предупреждений в php на продакшине. Это, как минимум, не безопасно. Предупреждении говорит о том, что вы, скорее всего, пытаетесь объявить переменную налету. PHP - позволяет это делать, но мы пытаемся сразу к ней обратиться, и, все, в целом, работает, но с предупреждением. Если хотите просто от предупреждения избавиться, то нужно заранее объявить переменную. Если предупреждение вам, в целом, не мешает, то скорее всего включен вывод предупреждений в php, - отключите, и это сообщение не будет появляться. Думаю, как-то так.

  18. Антон

    вылазит ошибка not found в чем причина?

    1. dimadv7

      Антон, в том, что файл не найден и нужно правильно прописать пути. Открой консоль, посмотри что за файл и в каком месте.

  19. Юрий

    Здравствуйте. А есть какая-нибудь возможность дублировать сообщение еще на электронный ящик? Скажем пользователь отправил письмо, оно пришло в телеграмм и продублировалось на почту. В телеграме гораздо удобнее принимать и обрабатывать письма, однако, кто его знает что там еще Роскомнадзор придумает, в случае блокировок телеграмма не хочется терять заявки, и хорошо бы что бы они были продублированы на почту

    1. dimadv7

      Юрий, конечно. На блоге около 4 статей, как сделать обычную форму обратной связи с отправкой на почту, например, вот

    2. Юрий

      dimadv7, а не подскажите в какую сторону копать чтобы сообщение одновременно и на почту и в телеграм приходило? два обработчика каким-то образом на форму вешать, или в один обработчик оба скрипта добавить?

    3. dimadv7

      Юрий, конечно 1 обработчик, просто все отправляете на почту, а потом, по этой статье, дополняете код и отправляете в телеграм.

  20. Виктор

    Приветствую. Спасибо за работу, а как реализовать страницу благодарности? Спс

    1. dimadv7

      Виктор, здравствуйте. Посмотрите как реализовано тут.

  21. Ярослав

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

    1. dimadv7

      Ярослав, здравствуйте. А id у форм разный?

  22. Павел

    Здравствуйте, Дмитрий!
    Подскажите, пожалуйста:
    У меня несколько сайтов:
    1 сайт: мой-сайт-crm.ru - на нем стоит SuiteCRM (бесплатный аналог Sugar)
    и много мелких сайтов-лендингов с формами.
    Формы формируются в CRM и на сайтах -лендингах нужно вставить вот этот код, который ниже.
    Это всё работает хорошо.
    Мне нужно, чтобы с сайтов-лендингов, после нажатия кнопки Submit, сайт-лендинг еще и отправлял сообщение в Telegram. Сообщение короткое: "Заявка с сайта". И всё. Этого достаточно.
    Как установить и настроить это всё из статьи понятно.
    Но как связать мою форму с отправкой в Telegram?
    Подскажи, пожалуйста.

    <!-- TODO ???

    -->

    Имя:

    Фамилия: *

    Тел. (моб.) :

    // <![CDATA[
    function submit_form() {
    if (typeof(validateCaptchaAndSubmit) != 'undefined') {
    validateCaptchaAndSubmit();
    } else {
    check_webtolead_fields();
    //document.WebToLeadForm.submit();
    }
    }

    function check_webtolead_fields() {
    if (document.getElementById('bool_id') != null) {
    var reqs = document.getElementById('bool_id').value;
    bools = reqs.substring(0, reqs.lastIndexOf(';'));
    var bool_fields = new Array();
    var bool_fields = bools.split(';');
    nbr_fields = bool_fields.length;
    for (var i = 0; i

    1. dimadv7

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

  23. а

    ипать пацан ты бизнесмен

  24. Иван

    Здравствуйте, вы мне действительно помогли, но как убрать у номера телефона ограничение по цифрам, я не использую это поле как "номер" а по-другому, мне пишет при вводе букв:"Введите данные в указаном формате", "strip_tags" Убрал не помогает, подскажите пожалуйста

    1. dimadv7

      Иван, здравствуйте. Убрать еще нужно у поля:

      pattern="^[ 0-9]+$"

      в html

  25. Sergey

    Добрый день,подскажите, как сделать что бы "send-message-to-telegram.php" срабатывал при переходе на thank you

    1. dimadv7

      Sergey, разместить весь код на странице thank you и прописать эту страницу в action формы

  26. Иван

    Добрый день !
    Выдает ошибки и не отправляет ничего
    .....PHP Warning: fopen(): SSL: Connection reset by peer in
    .....PHP Warning: fopen(): Failed to enable crypto in
    PHP Warning: fopen(https://api.telegram.org/botXXXXXXXX/sendMessage?chat_id=XXXXX&parse_mode=html&text=<b>Кто оставил заявку: </b> ): failed to open stream: operation failed in

    1. Асадбек

      Иван, у вас ssl сертификата нету либо хостинг не поддерживает тг

  27. Николай

    Добрый день, все работает! Большое спасибо) Есть есть один вопрос: как сделать так чтобы с сообщением передавались utm-метки?

    1. dimadv7

      Николай, здравствуйте. Можно создать скрытое поле и в него помещать данные из:

      isset($_GET['utm_term']);

      Или любых других параметров.

  28. Alex

    Здравствуйте!
    Подскажите как создать форму чтоб уходил запрос на 2 обработчика?
    Пример:

    данные...

    ресурсы у меня такие:
    -свой файл обработчик данных
    -телеграм уведомление
    Каким образом мне сделать два обработчика action ?

    Спасибо!

    1. dimadv7

      Alex, здравствуйте. Делайте 1 обработчик. Сначала отправляйте, например, на почту, а потом в телеграм. Зачем усложнять? В любом случае action только 1 можно задать. А дальше уже в PHP.

  29. Николай

    Добрый день, можете показать что добавить в index.html, а что в send-message-to-telegram.php для передачи utm-меток. Заранее спасибо

    1. Дмитрий Давыдов

      Николай, в статье же написано, что и куда. Разметка в index.html конечно-же. Так как html - это язык разметки. А остальное что и куда подписано же...

  30. Вячеслав

    Здравствуйте, статья невероятно полезная, но у меня вопрос. У меня сайт сделан на конструкторе wix, как туда перенести сие детище?

    1. Вячеслав

      Учитывая, что wix не поддерживает php

  31. Артём

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

    1. Дмитрий Давыдов

      Артём, без понятия. Никогда не сталкивался с такой задачей. Да и не могу представить ситуацию, в которой это может понадобиться.

  32. Артём

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

    1. Дмитрий Давыдов

      Артем, так а зачем их возвращать в форму на сайте? Нужно же бота заставить отправлять письма, а не внедрять их назад в форму на сайте. Но, в любом случае, я не сталкивался с такой задачей да и с ботами не работал.

  33. Vlad

    после нажатия отправить происходит загрузка страницы и выкидывает ошибку:
    Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
    The POST method is not supported for this route. Supported methods: GET, HEAD.

    1. Дмитрий Давыдов

      Vlad, ну написано же, что не поддерживает роут метод POST...

  34. Vlad

    Сменил метод POST на PATCH, ошибка исчезла теперь, но страница просто обновляется, а в телегу заявка не приходит, токен и ид 1000 раз перепроверил что правильные ввёл

  35. Денис

    здравствуйте. приходят пустые поля. куда копать?

    1. Дмитрий Давыдов

      Денис, у полей пзначения параметра name, должны совпадать с теми, что в обработчике принимаете.

  36. zet

    Здравствуте Дмитрий как отослать вместе с и инпутами и url сайта

    1. Дмитрий Давыдов

      zet, здравствуйте. Создать скрытое поле, дав ему type="hidden", затем в js при помощи window.location.href получить url и поместить его в значение value скрытого поля. Далее, по аналогии с полем для ввода имени обработать его в php.

    2. zet

      Спасибо Дмитрий за ответ но как мне поместить URL в скрытое поле

    3. Дмитрий Давыдов

      zet, если используете jquery, то например так:

      $('.class-name').val(window.location.href);
      
    4. Дмитрий Давыдов

      Вот, сделал небольшую статью на эту тему)

  37. zet

    ОГромная благодарность ты человечище!!!!

    1. Дмитрий Давыдов

      zet, ах-ха. Спасибо) Будут вопросы, пиши)

  38. emigrant

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

    1. Дмитрий Давыдов

      Emigrant, нужно больше информации. Есть ли ошибки в консоли?

  39. Dima

    Можно ли настроить под эту форму?

    Заказать услугу

    1. Дмитрий Давыдов

      Дмитрий, нужна настройка формы? На странице услуг цены, свяжитесь со мной.

  40. Я

    Добрый вечер!

    Как сделать, чтобы в нескольких формах работало?

    1. Дмитрий Давыдов

      Как вы уже пробовали? С какой проблемой или ошибкой столкнулись? Как пытались ее решить?

    2. Я

      Дмитрий Давыдов, менял переменные и ничего не выходит. Я в этом не силен
      Вот и интересуюсь у Вас, могли бы подсказать, буду признателен)
      Ошибок вроде никаких, просто не работает

    3. Дмитрий Давыдов

      Помочь с чем? С чего вы взяли, что не работает? Как вы в этом убедились? Откройте консоль браузера, отправьте форму, проверьте есть ли там ошибки.

    4. Я

      Дмитрий Давыдов, __http://pokraskavkieve.com.ua в > оставить заявку> как в этой форме сделать чтобы работало? Я прошу прощение, помогите плиз решить вопрос

    5. Дмитрий Давыдов

      Во-первых, у вас jQuery подключен несколько раз, а должен быть только 1 раз. Во-вторых подключайте свежую версию (3), а не 1.12.4 и 1.10.1 , как у вас. В-третьих, подключайте скрипты, которые зависят от jQuery, после подключения самого jQuery.

  41. Andrey

    ДД. Все работает отлично , но столкнулся с проблемой отправки формы на смартфоне. В мобильной версии сайта не отправляет форму если сделать фото с камеры. Видимо нужно юзать MediaDevices.getUserMedia() , но пока без результата. Подскажи пжл , может нужно объявить разрешения для камеры в PHP ?

  42. Ali

    Здравствуйте! Первый раз работаю с формами.
    Какая последовательность действии при загрузке файлов на сайт этих файлов?
    На сайте уже есть папки images и css файлы туда же кидать или создавать новые?
    Файл index скопировать содержимое и вставить в основную папку сайта с индекс

    1. Дмитрий Давыдов

      Ali, здравствуйте. Можете использвоать свою структуру сайта, но следите за путями к файлам.

  43. Андрей

    Дмитрий, здравствуйте!
    // Максимальный размер файла
    $size = 1024000;

    Больше Нельзя?

    1. Дмитрий Давыдов

      Андрей, сейчас, вроде, 2 гигабайта.

    2. Дмитрий Давыдов

      Андрей, это был просто пример ограничения, для конкретного случая.

  44. Андрей

    Дмитрий, добрый день! С фото разобрался. Для видео видимо нужно что-то подправить.

    1. Дмитрий

      Андрей, вот же написанно:

      // Массив допустимых значений типа файла
                  $types = array('image/gif', 'image/png', 'image/jpeg');
      
  45. Андрей

    Дмитрий, менял $types = array('video/mp4', 'video/mov');
    не помогает к сожалению

    1. Дмитрий Давыдов

      Андрей, тут тоже:

      $post_fields = array('chat_id' => $chat_id, 'photo' => new CURLFile(realpath($filePath)) );
  46. Андрей

    Дмитрий какое ' ' волшебство вместо 'photo'

  47. Дмитрий Давыдов

    Андрей, думаю, document

  48. Андрей

    Дмитрий, вопрос решен!

    $urlForVideo = $bot_url . "sendVideo?chat_id=" . $chat_id;
    -
    $post_fields = array('chat_id' =&gt; $chat_id, 'video' =&gt; new CURLFile(realpath($filePath)) );
    curl_setopt($ch, CURLOPT_URL, $urlForVideo);
    
  49. Андрей

    но появился новый вопрос, как дописать ещё фото?

  50. Андрей

    Привет, отличная статья, без воды и по сути! Однако обратил внимание на "злощастный" плюс перед номером телефона. При указании "%2B" . $phone - в сообщении в Telegram получаем пробел перед этим самым плюсом. Как следствие цвет "+" - как у обычного текста (чёрный или белый - в зависимости от режима Telegram), а не синий и отсутствие его подчёркивания, как цифр номера телефона. Получилось вылечить такой нюанс таким образом - rawurlencode('Телефон: ' . stripe_tags( $_POST['subscribe_phone'] )) ; Может кому пригодится.))

    1. Андрей

      Cуммарное ограничение в 30 мб стоит.
      Хотя настройки стандартные

      // Максимальный размер файла в килобайтах
      // 1048576; // 1 МБ
      $size = 1073741824; // 1 ГБ

    2. Дмитрий Давыдов

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

      Post the file using multipart/form-data in the usual way that files are uploaded via the browser. 10 MB max size for photos, 50 MB for other files.

      То есть предварительно их нужно будет еще и сжимать как-то.

    3. Дмитрий Давыдов

      А по поводу ошибки, нужно будет обработать еще и ее. Не учел вообще этот случай. На днях попробую сделать проверку на размер картинок, чтобы они не более 10 мб были.

Добавить комментарий