Как отправить сообщение в Telegram из PHP скрипта

Бот для Telegram. Простейший вариант на php

Когда для своего сервиса https://qrer.ru, который занимается отправкой сообщений об изменениях на сайтах пользователей потребовалось подключить сообщение в чат Telegram, я стал искать простое и быстрое решение — как написать собственного бота на языке php.

Прежде всего для разработки бота пригодится внутренняя документация мессенджера. Хотя она на английском языке, но разобраться в ней довольно просто. Однако хотелось чего-нибудь готового и уже на php. Изучение инструкций подсказало, что код должен быть небольшой и простой, так как все манипуляции сводятся к отправке POST и GET запросов и получению ответов в формате JSON. Язык php справляется с этим без всяких проблем.

Даже документация самого сервиса в качестве примеров бота на php содержала ссылки на библиотеки, расположенные на github. Эти библиотеки показались мне избыточными. Кроме того, для подключения их требовалась установка менеджера пакетов Composer, а затем, когда я его подключил выяснилось, что библиотеки требуют PHP 7 или, в качестве минимума, php версии 5.5. Обновляться со своей 5.4.16 у меня не было никакого желания, хотя и можно было бы поставить 5.6. Но мысль о том, что для того, чтобы реализовать простейший обмен информации необходимо подгружать избыточные библиотеки не давала покоя.

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

1. Для начала, как и указано в других источниках, необходимо создать бота. Для этого необходимо обратиться к «отцу всех ботов» — роботу Telegram с ником @BotFather. Для этого открываем чат и находим этого пользователя.

2. Затем в диалоге с этим господином (запущенным командой /start
) набираем команду /newbot

3. В ответном диалоге BotFather поздравит с пополнением, выдаст ссылку на новичка и даст буквенно-цифровой ключ, который необходимо сохранить в тайне. По нему Telegram поймет что это мы, а мы поймем, что это он. Все, теперь бот создан, с ним уже можно общаться. Правда отвечать он не будет, потому что не умеет.

4. Для того, чтобы наш сайт мог принимать сообщения, нужно сделать следующие вещи. Прежде всего создать так называемый WebHook и сообщить о нем мессенжеру. Это по сути дела в нашем случае обычный файл на php, который будет вызываться всякий раз, когда происходит новое событие. Например кто-то обратиться к нашему боту. Делается это один раз, после чего можно уже писать обработчик. Следует отметить, что наиболее правильным будет создание обработчика сообщений на сайте, на котором уже есть SSL-сертификат и который работает по протоколу HTTPS. Обычные бесплатные сертификаты Let’s Encrypt вполне подойдут. Отличная инструкция по их созданию.

Для создания WebHook пишем следующий код:

$url
=
"https://api.telegram.org/bot"
.
$Telegram_botkey
.
"/setWebhook?url=https://nash-server.ru/"
.
$Telegram_dir
.
"/bot.php"
;
$l1
=
file_get_contents
(
$url
)
;
$response
=
json_decode
(
$l1
)
;
$s
=
print_r
(
$response
)
;

$url = «https://api.telegram.org/bot».$Telegram_botkey.»/setWebhook?url=https://nash-server.ru/».$Telegram_dir.»/bot.php»; $l1=file_get_contents($url); $response = json_decode($l1); $s=print_r($response);

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

5. Теперь собственно бот на php. Тот самый, что bot.php

$json
=
file_get_contents
(
'php://input'
)
;
$obj
=
json_decode
(
$json
,
TRUE
)
;

$json = file_get_contents(‘php://input’); $obj = json_decode($json, TRUE);

— получили то, что нам прислали и перевели в массив.

if
(
isset
(
$obj
[
'message'
]
)
)
{
$first_name
=
""
;
$last_name
=
""
;
$username
=
""
;
$text
=
""
;
   $chat_id
=
$obj
[
'message'
]
[
'chat'
]
[
'id'
]
;
if
(
$obj
[
'message'
]
[
'chat'
]
[
'type'
]
==
"private"
)
{
if
(
isset
(
$obj
[
'message'
]
[
'chat'
]
[
'first_name'
]
)
)
$first_name
=
$obj
[
'message'
]
[
'chat'
]
[
'first_name'
]
;
if
(
isset
(
$obj
[
'message'
]
[
'chat'
]
[
'last_name'
]
)
)
$last_name
=
$obj
[
'message'
]
[
'chat'
]
[
'last_name'
]
;
if
(
isset
(
$obj
[
'message'
]
[
'chat'
]
[
'username'
]
)
)
$username
=
$obj
[
'message'
]
[
'chat'
]
[
'username'
]
;
   if
(
$first_name
!=
""
 AND $last_name
!=
""
)
$text
=
"Здравствуйте, "
.
$first_name
.
" "
.
$last_name
.
"!"
;

if (isset($obj[‘message’])) { $first_name=»»; $last_name=»»; $username=»»; $text=»»; $chat_id=$obj[‘message’][‘chat’][‘id’]; if ($obj[‘message’][‘chat’][‘type’]==»private») { if (isset($obj[‘message’][‘chat’][‘first_name’])) $first_name=$obj[‘message’][‘chat’][‘first_name’]; if (isset($obj[‘message’][‘chat’][‘last_name’])) $last_name=$obj[‘message’][‘chat’][‘last_name’]; if (isset($obj[‘message’][‘chat’][‘username’])) $username=$obj[‘message’][‘chat’][‘username’]; if ($first_name!=»» AND $last_name!=»») $text=»Здравствуйте, «.$first_name.» «.$last_name.»!»;

Если получили сообщение и тип беседы «Приватная», то поняли, как зовут вашего собеседника, какой у него ник и даже составили ответное сообщение!

if
(
$text
!=
""
)
{
$text
=
urlencode
(
$text
)
;
$url
=
"https://api.telegram.org/bot"
.
$Telegram_botkey
.
"/sendMessage?chat_id="
.
$chat_id
.
"&text="
.
$text
.
"&parse_mode=HTML&disable_web_page_preview=false&disable_notification=false"
;
$json
=
file_get_contents
(
$url
)
;
}
;
}
//private chat
}
;
//message

if ($text!=»») { $text=urlencode ($text); $url = «https://api.telegram.org/bot».$Telegram_botkey.»/sendMessage?chat_id=».$chat_id.»&text=».$text.»&parse_mode=HTML&disable_web_page_preview=false&disable_notification=false»; $json=file_get_contents($url); }; } //private chat }; //message

Все, если текст мы составили, то мы его отправим в окошко пользователю. Здесь между последним и предпоследним фрагментом кода можно вставить свой код — проверить — есть ли пользователь в базе, выполнить еще массу шагов. Важно, что ответ мы предоставляем в виде текста.

По поводу последнего фрагмента есть несколько дополнительных необязательных перемеменных:

parse_mode=HTML — позволяет вставлять простейшее форматирование. Ссылки, делать текст жирным или курсивом. Важно — элемент href в ссылках должен быть в кавычках.

disable_web_page_preview=false — позволяет показывать в окне чата превью странички, которая скрывается за отправленной ссылкой.

disable_notification=false — не дает отправить сообщение скрыто, в фоне. В таком виде при поступлении нового сообщения телефон издает звуковой сигнал. Если поставить true, то сообщение в Telegram придет «молча».

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

Буду рад, если статья вам помогла.

Вступление

Сегодня telegram является активно развивающейся платформой, а потому актуально будет осветить для широкой аудитории тему создания собственных ботов для этого мессенджера. Хотя-бы поверхностно. Для полноценного освящения этой темы я планирую написать две статьи, первая для php вторая для c#. Почему две? Дело в том, что правила телеграма(защищенность) задают для ботов очень жесткие правила размещения. В частности бот должен находиться на https домене. Сегодня мы будем рассматривать именно такой вариант бота, как наиболее очевидный. К сожалению, разрабатывать бота вам придется прямиком на сервере, то есть я предполагаю что у читателя уже есть свой домен и собственно уже налажен ftp доступ к этому домену. На дэнвере php боты работать не будут. Ну ладно не буду врать — можно сделать чтобы оно и на дэнвере работало, но давайте не будем писать такие велосипеды в этой статье и подождем до следующей, в которой я как раз опишу данный способ на примере с c#(а нахрена нам php с дэнвером когда есть такой замечательный инструмент). В этой статье мы общаемся с telegram api через webhook, это для особо прошаренных. Читающий статью человек должен уметь пользоваться: ftp, ssh(консоль сервера).

Шаг первый. Домен и https

Начнем пожалуй с домена, на котором будет размещаться наш будущий бот. Я беру свой старый домен — вебача. Как вы видите там нет https и я не покупал для этого домена https сертификат. Но тем не менее сертификат нужен иначе бота там не разместить. К счастью, есть cloudflare, который, в числе прочих преимуществ, дает нам возможность использовать эмулированный https. Переносим наш домен туда, это делается очень быстро бесплатно и автоматически. Зарегистрируйтесь, нажмите addsite поменяйте ns адреса у домена и все будет установлено. Если этого краткого описания вам не достаточно — можете нагуглить в сети мануал по подключению cloudflare, моя статья этому не посвящена.

И так мы подключили домен. Теперь надо перейти на панель своего сайта:

После чего выбрать вкладку Crypto и пункт SSL установить в flexible.

Что делает этот пункт? Он эмулирует безопасное соединение до вашего сайта. Проверяем — https://2webach.ru/

Как вы видите — все работает. У вас должно быть абсолютно так-же, без этого, бота вы запустить не сможете! Будет выдаваться ошибка «HTTP Version Not Supported», так что если вы пришли на эту страницу в поисках решения — перечитайте данный пункт внимательно и повторите все то я описал.

Шаг второй. Знакомство с Botfather.

Botfather — это такой бот, через которого регистрируют все остальные боты. Без него нам никак не обойтись, поэтому давайте откроем telegram и перейдем по ссылке — BotFather

Там все крайне просто, вбиваем /help и смотрим на список доступных команд:

собственно сейчас нас интересует команда /newbot, пишем ее и создаем бота указывая его название. В данном случае я назову своего бота — Рев.ком.стих и будет он у нас выдавать стихи о Маяковского и Есенина (когда я его доделаю, однако весь процесс в эту статью я включать не буду).

Нам выдадут токен, на скриншоте он замазан в целях…, ну вы сами понимаете. Этот токен нам и нужен, сохраните его куда-нибудь в текстовый файл, он нам еще пригодится.

Далее можно задать оформление для бота. Например картинку — логотип. Для этого используем команду /setuserpic после чего загружаем картинку. Так-же задаются описание бота и прочие вещи до которых вы допрете и без моего участия.

Ну и чтобы проверить установилась картинка или нет переходим на бота вбивая его имя через собачку в поиск

Теперь надо сделать боту доступ к сообщениям пользователей, то есть выключить нахер приватный режим. Если мы планируем добавлять бота в группы или конфы, назовите как хотите, в любом случае приватность нам нахер не нужна. Чтобы ее выключить вбиваем команду /setprivacy после чего выбираем пункт — disabled. Обязательно

выполните этот шаг, если вы хотите сделать действительно интерактивного бота.

Теперь самое время заняться backend частью, а именно написанием кода для команд нашего бота, но сначала настроим среду разработки.

Шаг третий. Среда для разработки.

Собственно в качестве библиотеки для обращения к API я буду использовать данный проект — TelegramBotApi у которого нифига нет документации, зато код довольно просто читается. В любом случае в этой статье я постараюсь описать максимально подробно все варианты работы с этой библиотекой, так что документация вам не понадобится вообще.

Но сначала давайте ее установим. Для этого будем использовать composer. Короче говоря будем делать все по «правилам», если этот термин вообще применим к php. Хороший язык, гибкий, не вгоняет в рамки, я знаете ли люблю его за эту вот гибкость. Но любителям «сапога в жопе» конечно всегда больше подходят ruby или какой-нибудь go в котором даже нормально библиотеку в своей папке не разместить, только в gopath. Однако так уж вышло, что данную библиотеку руками ставить будет геморойнее, чем через composer, я тут непричем, просто экономия времени. Для начала нам понадобится ssh соединение с вашим сервером. Для таких дел я предпочитаю ZOC terminal т.к. работаю из под windows. Скачать этот продукт можно на торрентах, сами найдете короче. Далее запускаем ваш терминал и заходим на сервер, после чего переходим к директории нашего домена(команда cd
).

Я не хочу размешать наш проект в корне директории, потому что там может быть например… форум. А вот в подпапке — запросто. Так что давайте эту самую подпапку и создадим через команду mkdir

В данном случае подпапка называется ‘revcom_bot’.

Теперь в эту папку надо засунуть composer, собственно делается это тремя командами:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"  php composer-setup.php  php -r "unlink('composer-setup.php');"

Просто вставляете их в ssh консоль по очереди и все.

Отлично, если вы справились с этой задачей, то далее нам следует установить компонент telegram-bot/api, для этого просто пишем в консоли:

php composer.phar require telegram-bot/api

После чего проверяем создались ли новые файлы в нашей директории. Вклчаем FTP
менеджер, у меня это WinScp (бесплатное приложение, советую вам использовать его вместо глючной файлзиллы), переходим в папку проекта и смотрим что там есть:

Отлично. Вот теперь можно начинать писать код.

Шаг четвертый. Кодинг

Минимальная версия PHP

Для использования кода, который я демонстрирую, у вас должен стоять минимум php-5.6

Собственно создаем в директории файл index.php в котором мы и будем писать код нашего проекта. Внимание
: кодировка файла — utf-8 без bom
! Вообще описание кода по шагам это не моя сильная сторона, поэтому я просто буду вставлять код с комментариями в статью, а вы читайте и повторяйте.

header('Content-Type: text/html; charset=utf-8');  // подрубаем API  require_once("vendor/autoload.php");    // создаем переменную бота  $token = "ваш токен, мы его выше сохраняли в текстовый файл";  $bot = new TelegramBotApiClient($token);

После того как переменная бота создана мы можем обращаться к api, но сначала нам надо зарегистрировать webhook. Что такое webhook? Это такой механизм по которому выполняется связка бота с telegram’ом. Когда пользователь в телеграме вводит команду ее надо как-то передать в на сервер и получить ответ. Webhook как раз это и делает — указывает телеграму куда передавать команду пользователя. Но так как изначально телеграм НЕ ЗНАЕТ где мы разместили нашего бота, то надо ему об этом обязательно сообщить. Для этого у нас есть команда: $bot->setWebhook

// если бот еще не зарегистрирован - регистрируем  if(!file_exists("registered.trigger")){   /**   * файл registered.trigger будет создаваться после регистрации бота.    * если этого файла нет значит бот не зарегистрирован    */     // URl текущей страницы  $page_url = "https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];  $result = $bot->setWebhook($page_url);  if($result){  file_put_contents("registered.trigger",time()); // создаем файл дабы прекратить повторные регистрации  }  }

Отлично, можно запустить наш бот и проверить, перейдя к нему из браузера. Если в папке бота создался файл registered.trigger
значит телеграм теперь знает о том, где находится наш бот.

Приготовления пройдены, самое время зарегистрировать первые команды для бота. В спецификации телеграма сказано, что каждый бот должен отвечать на две обязательные команды. Первая команда — /start и вторая — /help, создадим их.

// обязательное. Запуск бота  $bot->command('start', function ($message) use ($bot) {      $answer = 'Добро пожаловать!';      $bot->sendMessage($message->getChat()->getId(), $answer);  });    // помощ  $bot->command('help', function ($message) use ($bot) {      $answer = 'Команды:  /help - помощ';      $bot->sendMessage($message->getChat()->getId(), $answer);  });    // запускаем обработку  $bot->run();

Теперь протестируем:

Отлично! А теперь давайте разберемся немного с API нашей библиотеки.

Команды задаются блоком:

$bot->command('start', function ($message) use ($bot) {  });

Где $message — объект Message, все его поля можно посмотреть тут — Types/Message.php

Отправка сообщения выполняется командой:

$bot->sendMessage(ид пользователя которому отправляем, текст сообщения);

Отправка картинок

Отправка картинок пользователю выполняется через передачу телеграму ссылки на эту картинку. Телеграм САМ скачивает изображение и отдает пользователю, нам ничего качать не надо! В качестве демонстрации я загружу сейчас на свой блог изображение и отошлю его пользователю на команду /getpic
.

картинка

// передаем картинку  $bot->command('getpic', function ($message) use ($bot) {  $pic = "http://aftamat4ik.ru/wp-content/uploads/2017/03/photo_2016-12-13_23-21-07.jpg";        $bot->sendPhoto($message->getChat()->getId(), $pic);  });

Как вы видите — все работает.

Отправка документа

После чего добавить такую команду:

// передаем документ  $bot->command('getdoc', function ($message) use ($bot) {  $document = new CURLFile('shtirner.txt');        $bot->sendDocument($message->getChat()->getId(), $document);  });

Результат выполнения:

Точно так-же можно передать войсы:

// передаем войс  $bot->command('getvoice', function ($message) use ($bot) {  $voice = new CURLFile('путь_до_файла_в_папке_бота_.mp3');  $bot->sendVoice(          $message->getChat()->getId(),          $voice,          //$duration,          //$replyToMessageId,          //$replyMarkup,          //$disableNotification      );  });

Получение сообщений из чата

Теперь осталось только добавить чуточку интерактивности, например заставить бота в чате постить что-нибудь с определенным шансом.

Дабы сделать это у API есть очень годная команда .on() 
ее мы и будем использовать в самой простой из форм.

// говорильник  $bot->on(function($Update) use ($bot){  $message = $Update->getMessage();  $mtext = $message->getText();  $cid = $message->getChat()->getId();    if(mb_stripos($mtext,"власть советам") !== false){  $bot->sendMessage($message->getChat()->getId(), "Смерть богатым!");  }  }, function($message) use ($name){  return true; // когда тут true - команда проходит  });

Результат работы:

Этот метод так-же позволит вам прикрутить к телеграму, например, нейросеть для анализа сообщений или алгоритм Маркова, чтобы развлекать публику генерацией случайного бреда.

Задаем список команд

Теперь команды работают а значит настало время сообщить о том что они у нас есть в Botfather’а. Идем туда и вбиваем /setcommands

И к стати если вы где-то опечатались можете заново вбить /setcommands
и переопределить команды.

Смотрим добавились команды на страницу бота или нет:

Заключение

Думаю этого будет достаточно. Статья получилась полной, я разве что не осветил методы отправки аудио файлов, но думаю вы и сами сможете на них посмотреть без моего в этом участия — тут, я ведь разобрался, хоть и не нашел ни документации нормальной ни освещения данных вопросов в интернете. Зато теперь в этой статье я рассказал вам все что сам знаю о создании ботов к telegram на php. Однако, как я говорил выше эта статья всего лишь часть всех возможностей. Советую вам прочитать вторую статью уже про C# и работу с telegram api БЕЗ webhook, https и прочих геморроев. Проще говоря хостинг не понадобится.

Надеюсь, дорогой читатель, что я не зря писал эту статью. Ах да.

Скачать исходники

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

исходники бота telegram на phpСкачано: 3474, размер: 578.6 KB, дата: 24.Май.2017

В прошлый раз мы разбирали более простой способ создания бота для телеграмм, который не требовал знаний программирования т.к. использовал сторонний сервис и визуальный конструктор. Сегодня предлагаю поднять планку и поговорить о том, как написать бота для Телеграм на php (это язык программирования). Если вы не программист, то материал ниже будет вам непонятен, поэтому советую прочитать другую статью. Итак, начнем.

Подготовка к написанию бота

Прежде чем мы приступим к написанию бота, убедимся, что у нас имеется в распоряжении хостинг и домен с https, а также API токен, который нам выдал Botfather (подробнее о том, как получить API ключ для Телеграмм бота см. тут).

Обращаться к API Телеграма будем при помощи TelegramBotApi. Соответственно, чтобы клонировать проект с Гитхаба нам понадобиться Composer. Composer как правило не устанавливается без файла php.exe. Самый просто способ это исправить – установить Open Server.

Клонирование проекта с Гитхаба

Открываем командную строку, при помощи команды cd заходим в папку в которую будем устанавливать код и выполняем последовательно следующие команды:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Далее устанавливаем telegram-bot/api
php composer.phar require telegram-bot/api

Заходим в папку и убеждаемся, что все файлы успешно установлены.

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

Кодинг Telegram бота на php

В папке с ботом создадим файл index.php в котором мы и будем писать код нашего бота. Важно! Кодировка файла — utf-8 без bom!

header('Content-Type: text/html; charset=utf-8');
// подключаемся к API
require_once("vendor/autoload.php");
// создаем переменную бота
$token = "токен, который выдал BotFather";
$bot = new TelegramBotApiClient($token);

После того как мы создали переменную бота $bot, мы можем обращаться к api, но прежде нам необходимо зарегистрировать webhook.

Что такое webhook?

WebHook
– это механизм по которому выполняется связка бота с telegram’ом. Когда пользователь в телеграме вводит команду, ее надо каким-то образом передавать на сервер и получать ответ. Webhook как раз для этого и нужен. Он сообщает телеграму куда передавать команды. Поскольку Телеграм НЕ ЗНАЕТ, где именно расположен код нашего бота, то нам нужно это исправить.

Для этой цели у нас существует команда: $bot->setWebhook

// если бот еще не зарегистрирован - регистрируем
if(!file_exists("registered.trigger")){
/**
* файл registered.trigger будет создаваться после регистрации бота.
* если этого файла нет существует, значит бот не
* зарегистрирован в Телеграмм
*/
// URl текущей страницы
$page_url = "https://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
$result = $bot->setWebhook($page_url);
if($result){
file_put_contents("registered.trigger",time()); // создаем файл дабы остановить повторные регистрации
}
}

Прежде чем продолжить писать код – сохраним индексный файл и запустим его в том виде, в котором он есть сейчас. После запуска в папке с ботом должен появиться еще один файл – registered.trigger. Если файла появился – значит все сделали правильно и Телеграмм знает, где лежит наш бот.

Обязательные команды для ботов

Теперь необходимо научить нашего бота реагировать на обязательные для всех ботов команды /start и /help.

// обязательное. Запуск бота
$bot->command('start', function ($message) use ($bot) {
$answer = 'Добро пожаловать!';
$bot->sendMessage($message->getChat()->getId(), $answer);
});
// помощь
$bot->command('help', function ($message) use ($bot) {
$answer = 'Команды:
/help - помощь';
$bot->sendMessage($message->getChat()->getId(), $answer);
});
// запускаем обработку
$bot->run();

Снова сохраняем индексный файл и попробуем потестировать нашего бота! Ура, все пашет! Дальнейший кодинг зависит от поставленной Вами задачи, а потому самое время поговорить о том, как устроена наша API библиотека

Принцип работы библиотеки TelegramBotApi

Команды задаются блоком:

$bot->command('start', function ($message) use ($bot) {
});

Где $message — объект Message, все его поля можно посмотреть тут — Types/Message.php

Все команды должны быть до вызова $bot->run();
, а иначе не будет работать. Т.е. $bot->run();
должен замыкать наш код.

Отправка сообщения в TelegramBot API

Отправка сообщения выполняется командой:
$bot->sendMessage(id пользователя которому отправляем, текст сообщения);

Отправка картинок в TelegramBot API

Отправка картинок осуществляется через передачу Телеграмму ссылки на эту картинку. Мессенджер самостоятельно скачивает изображение и отдает пользователю! Для примера отправим юзеру картинку если он введет команду /getpic.// передаем картинку
$bot->command('getpic', function ($message) use ($bot) {
$pic = "http://binetmed15.beget.tech/wp-content/uploads/forbot.jpg";
$bot->sendPhoto($message->getChat()->getId(), $pic);
});

Отправка документов и голосовых сообщений

Документы, в отличие от картинок необходимо оправлять ввиде POST. К счастью, библиотека  TelegramBotApi сделает все что нужно без нашего с вами участия. Сначала загрузим документ в папку с нашим ботом (см картинку ниже)

Для отправки документа используем следующий код:

// передаем документ
$bot->command('getdoc', function ($message) use ($bot) {
$document = new CURLFile('sendfrombot.txt');
$bot->sendDocument($message->getChat()->getId(), $document);
});

Обратите внимание, что строчка

$document = new CURLFile('sendfrombot.txt');

предполагает размещение txt-файла sendfrombot в в корневой папке бота. Однако, можно передавать в переменную и обычный урл. С передачей голосовых сообщения (войсов) ситуация аналогична:

// передаем войс
$bot->command('getvoice', function ($message) use ($bot) {
$voice = "http://binetmed15.beget.tech/wp-content/uploads/glazunov_maxim-prividenie.mp3";
$bot->sendVoice(
$message->getChat()->getId(),
$voice //,
//$duration,
//$replyToMessageId,
//$replyMarkup,
//$disableNotification
);
});

Получение сообщений из чата

Для получения данных из чата в API имеется команда .on()
. С ее помощью мы можем прикрутить к нашему телеграм-боту, нейросеть для анализа сообщений или соорудитеь простенькую болталку по алгоритму Маркова, для отправки случайных сообщений в ответ на месенджы пользователя. Выглядеть  это может примерно так:

// болталка
$bot->on(function($Update) use ($bot){
$message = $Update->getMessage();
$mtext = $message->getText();
$cid = $message->getChat()->getId();
if(mb_stripos($mtext,"привет бот") !== false){
$bot->sendMessage($message->getChat()->getId(), "и тебе здорова, чувак!");
}
}, function($message) use ($name){
return true; // когда тут true - команда проходит
});

Сообщаем Botfather-у список наших команд

После того как команды прописаны необходимо сообщить Botfather’у  об их наличии (строго говоря это не является обязательным, но желательно все же добавить). Открываем чат с Botfather и вбиваем /setcommands (в случае опечатки используем команду /setcommands для переопределения).

Теперь потестим нашего телеграм-бота.

Как видим, все ок! Теперь вы знаете как создать своего бота на php для телеграмма
. Успехов в разработке! В следующий раз мы продолжим дорабатывать нашего бота и разберем как добавить кнопки, а пока рекомендую скачать исходники текущего урока:

Скачать исходники php-бота.

Читать другие материалы в рубрике: Маркетологам

ОЦЕНИТЕ СТАТЬЮ:

Рейтинг:

ПОЛЕЗНО? СДЕЛАЙ РЕПОСТ!

2018-03-19
2018-03-19
| DjDiplomat
| нет комментариев | бот, создать бота, телеграмм

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации