Загрузка...

We make a bot for Telegram on PHP

Thread in Backend created by Hangman666 Jun 13, 2016. 1865 views

  1. Hangman666
    Hangman666 Topic starter Jun 13, 2016 Хранитель Идей 342 Mar 10, 2016
    1) Скачиваем и устаналиваем готового telegram бота на PHP. Очень быстро и просто с помощью composer:

    Code
    composer require longman/telegram-bot

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

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

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

    Code
    <?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:

    Code
    ?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(); вы можете указать свой путь для хранения команд:

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

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

    Code
    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;
    }
    }
     
Loading...
Top