Ещё одна статья в цикле статей с рабочими примерами отправки медиа-файлов в 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' => 'Текстовое опсиание фото'
]);
Формат файла такой же, как и для отправки видео — разница лишь в том, как пользователи увидят это видео — квадратным или круглым.
Также Вы можете посмотреть смежные примеры:
— как отправить видео
— как отправить аудио
— как отправить фото
На этом всё — старался обьяснить очень наглядно и понятно, но в случае чего — добро пожаловать в комментарии!
Удачи!