Блог » Как создать бота в Телеграм?

Как создать бота в Телеграм?

Создаем бота, который будет присылать цену интересующего товара.

Как создать бота в телеграмм?

Создаем бота в телеграмм

Чтобы создать бота, необходимо зайти в телеграмм и найти отца всех ботов — @BotFather. Подробнее о создании ботов описано в этой статье — создание бота

Сохраните token бота, он нам еще понадобится.

Что такое «webhook»?

Webhook — метод, благодаря которому ваш бот делает POST-запрос к указанному URL, содержащий JSON-объект.

Если вы хотите, убедиться, что запрос-Webhook приходит именно от телеграмм, рекомендуется использовать секретный ключ в URL, например https://www.example.com/<token>. Так как никто не знает token вашего бота, вы можете быть уверены, что запрос пришел именно от телеграмм.

Как указать боту URL на который необходимо делать запросы?

Чтобы указать URL-адрес своему боту, достаточно в браузере сделать запрос:

https://api.telegram.org/bot<token>/setWebhook?url=https://<URL>

После этого действия, все обновления происходящие в боте, будут в виде объекта JSON отправлены POST-запросом на ваш URL.



 
Напишем небольшой скрипт, который на запрос бота, будет отдавать весь этот JSON-объект.

[pastacode lang=»php» manual=»%24content%20%3D%20file_get_contents(%22php%3A%2F%2Finput%22)%3B%20%2F%2F%D0%97%D0%B0%D0%BF%D0%B8%D1%81%D1%8B%D0%B2%D0%B0%D0%B5%D1%82%20%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B8%D0%BC%D0%BE%D0%B5%20%D0%B2%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%0A%24token%3D’357651260%3AAAGoiiNiQGLmagsL9GPfAYbFQ6-1uSXJwk5’%3B%20%2F%2F%D0%A2%D0%BE%D0%BA%D0%B5%D0%BD%0A%24update%20%3D%20json_decode(%24content%2C%20TRUE)%3B%0A%24chat_id%20%3D%20%24update%5B’message’%5D%5B’chat’%5D%5B’id’%5D%3B%20%2F%2Fid%20%D1%87%D0%B0%D1%82%D0%B0%0A%24parameters%20%3D%20%5B’chat_id’%3D%3E%20%24chat_id%2C’parse_mode’%3D%3E’HTML’%2C’text’%20%3D%3E%20%24content%5D%3B%0A%24url2%20%3D%20’https%3A%2F%2Fapi.telegram.org%2Fbot’.%24token.’%2FsendMessage%3F’.http_build_query(%24parameters)%3B%0Afile_get_contents(%24url2)%3B» message=»» highlight=»» provider=»manual»/]

Отправим слово «test» нашему боту.

Получим ответ:

{«update_id»:585420345,
«message»:{«message_id»:2,»from»:{«id»:276583657,»first_name»:»»,»username»:»username»,»language_code»:»ru»},»chat»:{«id»:276583657,»first_name»:»»,»username»:»username»,»type»:»private»},»date»:1496486620,»text»:»test»}}

Красным выделено id чата

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

Уже лучше:

{

  • «update_id«:585420345,
  • «message«:{
    • «message_id«:2,
    • «from«:{
      • «id«:276583657,
      • «first_name«:«»,
      • «username«:«username»,
      • «language_code«:«ru»

      },

    • «chat«:{
      • «id«:276583657,
      • «first_name«:«»,
      • «username«:«username»,
      • «type«:«private»

      },

    • «date«:1496486620,
    • «text«:«test»

    }

}

Отлично, все работает.

Создание скрипта для получения цены

В таблице нас интересует два столбца: price и art

  • Необходимо создать скрипт, который получает артикул (art) посредством метода GET.
  • Ищем в базе данных строку с данным артикулом.
  • Выводим цену (price)

[pastacode lang=»php» manual=»if(isset(%24_GET%5B’art’%5D))%7B%24art%20%3D%20htmlspecialchars(%24_GET%5B’art’%5D)%3B%7D%20%2F%2F%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D0%B5%D0%BC%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5%0A%0A%24query%20%3D%20mysqli_query(%24db%2C%22SELECT%20%60price%60%20FROM%20%60product%60%20where%20%60art%60%20%3D%20’%24art’%22)%3B%20%2F%2F%D0%98%D1%89%D0%B5%D0%BC%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D0%BF%D0%BE%20%D0%B0%D1%80%D1%82%D0%B8%D0%BA%D1%83%D0%BB%D1%83%0A%24row%20%3D%20mysqli_fetch_array(%24result%2C%20MYSQLI_ASSOC)%3B%20%0Aecho%20%24row%5B’price’%5D.’%D1%80.’%3B%20%2F%2F%D0%92%D1%8B%D0%B2%D0%BE%D0%B4%D0%B8%D0%BC%20%D1%86%D0%B5%D0%BD%D1%83″ message=»» highlight=»» provider=»manual»/]

Сделаем запрос указав артикул:

/scrip.php?art=ART002

В таблице,  артикулу «ART002» соответствует цена «9500», поэтому данный запрос выдаст нам 9500р.

Соединяем бота и скрипт

[pastacode lang=»php» manual=»%24chat_id%20%3D%20%24update%5B’message’%5D%5B’chat’%5D%5B’id’%5D%3B%20%2F%2F%20id%20%D1%87%D0%B0%D1%82%D0%B0%0A%24message%20%3D%20%24update%5B’message’%5D%5B’text’%5D%3B%20%2F%2F%D0%A2%D0%B5%D0%BA%D1%81%D1%82%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9%20%D0%BF%D1%80%D0%B8%D1%81%D0%BB%D0%B0%D0%BB%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%0A%0Aif(isset(%24message))%7B%24art%20%3D%20htmlspecialchars(%24message)%3B%7D%20%2F%2F%20%D0%97%D0%B0%D0%BD%D0%BE%D1%81%D0%B8%D0%BC%20%D1%82%D0%B5%D0%BA%D1%81%D1%82%20%D0%B2%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%83%D1%8E%0A%0A%24query%20%3D%20mysqli_query(%24db%2C%22SELECT%20%60price%60%20FROM%20%60product%60%20where%20%60art%60%20%3D%20’%24art’%22)%3B%20%2F%2F%D0%98%D1%89%D0%B5%D0%BC%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D1%83%20%D1%81%20art%20%3D%20%24art%0A%24row%20%3D%20mysqli_fetch_array(%24result%2C%20MYSQLI_ASSOC)%3B%20%0A%24price%20%3D%20%24row%5B’price’%5D.’%D1%80.’%3B%0A%24parameters%20%3D%20%5B’chat_id’%3D%3E%20%24chat_id%2C’parse_mode’%3D%3E’HTML’%2C’text’%20%3D%3E%20%24price%20%5D%3B%0A%24url2%20%3D%20’https%3A%2F%2Fapi.telegram.org%2Fbot’.%24token.’%2FsendMessage%3F’.http_build_query(%24parameters)%3B%0Aif(%24row%5B’price’%5D)%7B%0A%09file_get_contents(%24url2)%3B%20%2F%2F%20%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D1%8F%D0%B5%D0%BC%20%D0%BE%D1%82%D0%B2%D0%B5%D1%82%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8E%0A%7D%0A» message=»» highlight=»» provider=»manual»/]

Теперь, если мы отправим боту строчку — ART002, то в ответ он выведет нам цену на товар.

Это простейший пример, а не полноценный бот, который требует больше кода, больше логики и условий. Данный пример всего лишь показывает как бот взаимодействует с нашим скриптом.