Telegram Bot Laravel

801
26 января 2017, 05:13

Доброго времени суток. Хотел сделать более-менее простенького бота, с использованием Laravel 5.3 и Telegram Bot API PHP SDK (ссылка). Сам сайт держу на локалке. Документация к SDK имеется, но я никак не могу разобраться с интеграцией этого всего в Laravel. Бота зарегистрировал, даже смог получить данные своего бота (id, логин, полное имя).

<?php
namespace App\Http\Controllers;
use Telegram\Bot\Laravel\Facades\Telegram;
class TelegramController extends Controller
{
    public function index()
    {
        $telegram = new Api(config('telegram.bot_token'));
        dd($response = $telegram->setWebhook([
            'url' => 'https://telebot.dev/<token>',
            'certificate' => '/my.pem'
        ]));
    }
}

А как я могу зарегистрировать простые команды типа /help, /start, чтобы бот отвечал на них. По умолчанию имеется команда /help, обработчик находится в недрах SDK, но всё равно бот на них никак не реагирует.

<?php
namespace Telegram\Bot\Commands;
/**
 * Class HelpCommand.
 */
class HelpCommand extends Command
{
    /**
     * @var string Command Name
     */
    protected $name = 'help';
    /**
     * @var string Command Description
     */
    protected $description = 'Help command, Get a list of commands';
    /**
     * {@inheritdoc}
     */
    public function handle($arguments)
    {
        $commands = $this->telegram->getCommands();
        $text = '';
        foreach ($commands as $name => $handler) {
            $text .= sprintf('/%s - %s'.PHP_EOL, $name, $handler->getDescription());
        }
        $this->replyWithMessage(compact('text'));
    }
}

Третий день бьюсь... Заранее спасибо!

Answer 1

1) Ты должен создать правильный путь

Route::post('/' . config('telegram.bot_token'), function (Request $request) {       
        $update = Telegram::commandsHandler(true);
        return 'ok';
});

2) Ну и мой пример команды старт

class StartCommand extends Command {
    protected $name = "start";
    /**
     * @var string Command Description
     */
    protected $description = "Команда для начала общения с ботом";
    /**
     * @inheritdoc
     */
    public function handle($arguments)
    {           
        $this->replyWithMessage(['text' => 'Привет я Бот, вот список команд которые вам доступны:']);
        // Посылаем статус что печатаем
        $this->replyWithChatAction(['action' => Actions::TYPING]);
        $commands = $this->getTelegram()->getCommands();
        // Строим список команд
        $response = '';
        foreach ($commands as $name => $command) {
            $response .= sprintf('/%s - %s' . PHP_EOL, $name, $command->getDescription());
        }
        //Посылаем ответ
        $this->replyWithMessage(['text' => $response]);
    }
}

3) И конечно же проверь, отослал ли ты сертификат, потому как без него ты послать по-моему ничего не можешь

READ ALSO
CURL PHP couldn&#39;t connect to host

CURL PHP couldn't connect to host

в переменную html вообще не записывается ничего var_dump - bool(false), что это может быть ?

361
Как получить url ЧПУ?

Как получить url ЧПУ?

Получаю url страницы на которой нахожусь при помощи следующей функции:

377
Автозакрытие PR на GitHub

Автозакрытие PR на GitHub

Не знаю как подойти к этому вопросуПопробую рассказать все как есть

372
Как суммировать статистические данные?

Как суммировать статистические данные?

Я прохожу практику , мне дали задание сделать счетчик статистики (самый простой )Я его сделал , теперь попросили сделать так что бы показывали...

386