Загрузка...

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

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

Загрузка...
  1. Hangman666
    Hangman666 Автор темы 13 июн 2016 Хранитель Идей 342 10 мар 2016
    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;
    }
    }
     
Top