Телеграм бот посылает сообщение пользователю PHP

Подготовка

Что нужно:

  • Создать бота или использовать своего существующего.
  • Узнать id пользователя, которому нужно послать сообщение.
  • Убедится, что пользователь послал хотя бы 1 сообщение боту

Как создать бота Телеграм?

Чтобы создать бота и узнать его токен (далее BOT TOKEN) и id обратитесь к статье ссылка .

Как узнать id пользователя?

Чтобы узнать id пользователя Телеграм нужно, чтобы он либо написал сообщение контакту Телеграм @getmyid_bot , либо написал сообщение вашему боту от своего имени (что предпочтительнее).

Важно: чтобы он обозначил, что это именно он, например написал в условленное время или его сообщение содержало его имя.

Важно: в документации id пользователя может/будет называться chatID .

Чтобы прочесть все сообщения полученные в адрес вашего перейдите по ссылке https://api.telegram.org/bot<BOT TOKEN>/getUpdates и получите json ответ от сервера с сообщениями. Подробнее о методе getUpdates .

Важно: сообщения хранятся на сервере Телеграм не более 24 часов, а затем удаляются. В запросе без дополнительных параметров выдается не более 100 позиций.

Код

Параметры функции:

$msg — текст сообщения на английском языке (есть проблемы кодировкой).

$chatID — id пользователя которому отсылается сообщение.

$bot_token — токен бота BOT TOKEN

$emoji_unicode — UTF код иконки для добавления в текст сообщения смайлика из библиотеки. Пример: \xF0\x9F\x94\xA5

function telegramSendMessage($msg, $chatID, $bot_token, $emoji_unicode = '') 
{
    echo "sending message to " . $chatID . "\n";

    $url = "https://api.telegram.org/bot" . $bot_token . "/sendMessage" . "?chat_id=" . $chatID;
	$text_param = urlencode($msg);
	if(!empty($emoji_unicode))
		$text_param = str_replace('\x', '%', $emoji_unicode) . '+' . $text_param;
	
    $url = $url . "&text=" . $text_param;

    $ch = curl_init($url);
    $optArray = array(
            CURLOPT_HEADER => false,
			CURLOPT_POST => 1,
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_CONNECTTIMEOUT => 5,
			CURLOPT_TIMEOUT => 60,
			CURLOPT_SSL_VERIFYPEER => false
    );
    curl_setopt_array($ch, $optArray);
    $result = curl_exec($ch);
	if (curl_errno($ch)) 
	{
		echo curl_error($ch) . PHP_EOL;
	}
    curl_close($ch);
    echo $result . PHP_EOL;
}

Ошибки в работе скрипта

Сообщение не доходит до пользователя

Убедитесь, что пользователь послал хотя бы 1 сообщение этому боту иначе любые сообщения от вашего бота не будут доходить.

Forbidden: bot was blocked by the user В некоторых случаях пользователи намеренно блокируют этого бота.

400 Bad Request это может появится, если вы посылаете сообщения слишком часто, что воспринимается как спам сервером. Или с вашего IP адреса, кто то еще посылает слишком много сообщений, что бывает если вы арендуете частный хостинг.