web-dev-qa-db-ja.com

画像付きの電報ボットでメッセージを送信する

私はphpに電報ボットコードを持ち、replyWithMessageメソッドで送信するメッセージに返信します。

ここにすべてのコマンド:

 $this->replyWithMessage(['text' => $item['title']. "\n\n" . $url]);

テキストの前にプレビュー画像を追加するにはどうすればよいですか?

8
SergioZhidkov

/sendphotoを使用して、画像の下に表示されるcaptionを設定できます。
https://core.telegram.org/bots/api#sendphoto

16
Maak

画像とテキストの両方を含むテキストメッセージを送信することはできません。ただし、テキストにURLが含まれる場合、TelegramはデフォルトでWebページのプレビューを表示します。または、2つのメッセージを順番に送信するか、キャプション付きの写真を送信できます。

3
ariaby

いいえ、写真を含むテキストを1つのメッセージで送信できます。テレグラムを使用すると、これを行うことができますが、その方法はちょっとトリッキーです。

  1. https://core.telegram.org/bots/api#sendmessage メソッドを使用して、オプションdisable_web_page_preview => false
  2. textデータで、メッセージテキスト内に非表示の文字を含む画像リンクを配置します。

例:

$message = <<<TEXT
*** your content ***
*** somewhere below (or above) a link to your image with invisible character(s) ***
<a href="https://www.carspecs.us/photos/c8447c97e355f462368178b3518367824a757327-2000.jpg"> ‏ </a>
TEXT;

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data']);
curl_setopt($ch, CURLOPT_URL, 'https://api.telegram.org/bot<token>/sendMessage');
$postFields = array(
    'chat_id' => '@username',
    'text' => $message,
    'parse_mode' => 'HTML',
    'disable_web_page_preview' => false,
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
if(!curl_exec($ch))
    echo curl_error($ch);
curl_close($ch);
2
Dias