Yii2. Telegram API. Как отправить круглое видео (video note)?


Ещё одна статья в цикле статей с рабочими примерами отправки медиа-файлов в Telegram через API. Сейчас речь пойдет о круглых видео, которые также называют видео-заметками (video-note).

В этой и следующих статьях, использую расширение SonkoDmitry\Yii\TelegramBot\Component. За долгое время экстеншн прижился и отлично работает — за что автору огромная благодарность.

В актуальной, на момент выхода статьи, версии расширения данная возможность отсутствует — но она задокументирована в официальной документации Telegram API — поэтому я усовершенствовал исходный класс и хочу поделится с Вами.

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

curlFile($option[$attachment]);
                    break;
                }
            }
            curl_setopt($ch, CURLOPT_POSTFIELDS, $option);
        }
        $r = curl_exec($ch);
        if($r == false){
            $text = 'eroror '.curl_error($ch);
            $myfile = fopen("error_telegram.log", "w") or die("Unable to open file!");
            fwrite($myfile, $text);
            fclose($myfile);
        }
        curl_close($ch);
        return $r;
    }

    /**
     * Переопределенный метод родительского класса
     */
    private function curlFile($path){
        if (is_array($path))
            return $path['file_id'];

        $realPath = realpath($path);

        if (class_exists('CURLFile'))
            return new \CURLFile($realPath);

        return '@' . $realPath;
    }

    /**
     * Новый метод, реализующий исходную задачу.
     *
     * Пример вызова:
     *  \Yii::$app->{$botComponent}->sendVideoNote([
     *          'chat_id'           =>  $t ,
     *          'video_note'        =>  \Yii::getAlias('@frontend/web/files/somefile.mp4'),
     *          ]);
     *
     */
    public function sendVideoNote(array $option){
        $chat_id = $option['chat_id'];
        unset($option['chat_id']);
        $jsonResponse = $this->curl_call("https://api.telegram.org/bot" . $this->botToken .
            "/sendVideoNote?chat_id=".$chat_id, $option);
        return json_decode($jsonResponse);
    }

}

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

'components' => [
    ........
    'tg' => [
        'class'     =>  'backend\components\Telegram',
        'apiToken'  =>  YOUR_APP_TOKEN,
    ]
    ........
]

Т.е. в качестве класса нужно указать уже наш новый класс, а не исходный.

Вызов же нового метода будет выглядеть так:

\Yii::$app->tg->sendVideoNote([
    'chat_id'           =>  $t['telegram_id'] ,
    'video'             =>  \Yii::getAlias('@frontend/web/files/source_file.mp4'),
    'caption'           =>  'Текстовое опсиание фото'
]);

Формат файла такой же, как и для отправки видео — разница лишь в том, как пользователи увидят это видео — квадратным или круглым.

Также Вы можете посмотреть смежные примеры:
как отправить видео
как отправить аудио
как отправить фото
На этом всё — старался обьяснить очень наглядно и понятно, но в случае чего — добро пожаловать в комментарии!

Удачи!

, ,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *