Делаем бота для Telegram на РНР

Тема в разделе PHP, создана пользователем Hangman666, 13 июн 2016.

Войдите для ответа
  1. Hangman666 Хранитель Идей

    Hangman666
    Статус:
    Вне сети
    Сообщения:
    474
    Симпатии:
    271
    Регистрация:
    10.03.16
    1) Скачиваем и устаналиваем готового telegram бота на PHP. Очень быстро и просто с помощью composer:

    Код:
    composer require longman/telegram-bot

    2)
    Создадим бота.

    • Отправьте сообщение /newbot контакту @botfather.
    • Введите имя для вашего нового бота. После этого botfather запросит имя пользователя бота. Оно должно заканчиваться словом bot. Например: bitrixbot
    • Botfather ответит, что бот успешно создан и даст ключ доступа. Примерно такой: 122719761:ABFUhD-t_b_V0pC_JsrE9z-bzONahVwryxc. Сохраните его.
    Используйте команду /help для доступа ко всем командам и справки по ним.

    3)Настройка скрипта. Установим WebHook. Создадим скрипт вот с таким содержимым и откроем его в браузере:

    Код:
    <?php
    
    $loader = require __DIR__.'/vendor/autoload.php';
    
    $API_KEY = 'ключ_АПИ';
    $BOT_NAME = 'имя_бота';
    
    try {
        $telegram = new Longman\TelegramBot\Telegram($API_KEY, $BOT_NAME);
    
        echo $telegram->setWebHook('https://yourdomain/hook.php');
    } catch (Longman\TelegramBot\Exception\TelegramException $e) {
        echo $e->getMessage();
    }

    Теперь каждый раз, когда пользователь будет отправлять сообщение вашему боту, телеграм будет вызывать https://yourdomain/hook.php и получать ответ для пользователя.

    Содержимое файла hook.php:

    Код:
    ?php
    
    $loader = require __DIR__.'/vendor/autoload.php';
    
    $API_KEY = 'your_bot_api_key';
    $BOT_NAME = 'namebot';
    
    try {
        $telegram = new Longman\TelegramBot\Telegram($API_KEY,$BOT_NAME);
    
        $telegram->handle();
    } catch (Longman\TelegramBot\Exception\TelegramException $e) {
        // echo $e->getMessage();
    }

    Все команды хранятся в папке Commands. Это достаточно простые классы с методом execute. перед вызовом $telegram->handle(); вы можете указать свой путь для хранения команд:

    Код:
    $telegram->addCommandsPath('полный_путь_к_папке');

    Внутри команды подключайте пролог, подключайте нужные модули и спокойно работайте с данными битрикс. Набросал пример команды /order, которая выводит данные заказа:

    Код:
    class OrderCommand extends Command
    {
        protected $name = 'order';
        protected $description = 'Команда выводит данные по заказу';
        protected $usage = '/order <номер_заказа>';
        protected $version = '1.0.0';
        protected $enabled = true;
        protected $public = true;
    
        public function execute()
        {
            $update = $this->getUpdate();
            $message = $this->getMessage();
    
            $chat_id = $message->getChat()->getId();
            $text = $message->getText(true);
            $text = is_numeric($text) ? (int)$text : false;
    
            if($text){
                $order = \CSaleOrder::GetByID($text);
                $reply = print_r($order, true);
            } else {
                $reply = 'Номер заказа указан не правильно. Использование: ' . $this->usage;
            }
    
            $data = array();
            $data['chat_id'] = $chat_id;
            $data['text'] = $reply;
    
            $result = Request::sendMessage($data);
            return $result;
        }
    }
     
    13 июн 2016 #1
Загрузка...
Похожие темы
  1. Hangman666
    Ответов:
    6
    Просмотров:
    422
Top