doniyorbekm
@doniyorbekm
Yii-шник

Отправка сообщения в Telegram через бота. Как?

Всем привет!

Делаю бота для телеграм. Серверная часть - на yii2. Суть такова - при отправке пользователем боту команды /start - бот должен предложить выбрать язык (inline keyboard). Юзаю webhook.

Проблема заключается в том, что бот отправляет кнопки выбора языка бесконечное множество раз. Я выяснил, что это связано с тем, что API сервер не получает header 200 OK и считает, что сообщение не доставлено.
КАК ПРАВИЛЬНО ОТПРАВЛЯТЬ СООБЩЕНИЯ С ПОМОЩЬЮ БОТА? Точнее, как передать этот хедер чтобы API телеграмма "понял" что сообщение доставлено?

Мой рукописный класс для работы с ботами:

class Telegram {

    public $token;
    const BASE_API_URL = 'https://api.telegram.org/bot' ;

    function __construct($token) {
        $this->token = $token;
    }

    public function sendMessage($chatID, $message, $reply_markup) {
        $url = self::BASE_API_URL.$this->token."/sendMessage?chat_id=".$chatID;
        $url = $url."&text=".urlencode($message);
        if($reply_markup) {
            $url = $url."&reply_markup=".$reply_markup;
        }
        $ch = curl_init();
        $optArray = array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => ['HTTP/1.1 200 OK']
        );
        curl_setopt_array($ch, $optArray);
        $result = curl_exec($ch);
        curl_close($ch);
    }
}
  • Вопрос задан
  • 3683 просмотра
Пригласить эксперта
Ответы на вопрос 1
@nllm
Я выяснил, что это связано с тем, что API сервер не получает header 200 OK и считает, что сообщение не доставлено.

Тут речь скорее не про отправку идет, а про вебхук.

При отправке никаких хедеров не надо добавлять. Делаете post или get запрос с данными и все.
Вот самый простой способ отправки:
file_get_contents("https://api.telegram.org/bot***/sendMessage?chat_id=***&text=Проврека");


В первую очередь, ищите ошибку у себя в коде, где вызывается метод отправки сообщения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы