Я видел пару дней назад этот учебник на YouTube.
Это было очень интересно, поэтому я решил сделать собственный бот.
Я использовал код из учебника в качестве шаблона:
<?php
$bottoken = "*****";
$website = "https://api.telegram.org/bot".$bottoken;
$update = file_get_contents('php://input');
$updatearray = json_decode($update, TRUE);
$length = count($updatearray["result"]);
$chatid = $updatearray["result"][$length-1]["message"]["chat"]["id"];
$text = $updatearray["result"][$length-1]["message"]["text"];
if($text == 'hy'){
file_get_contents($website."/sendmessage?chat_id=".$chatid."&text=hello");
}
elseif($text == 'ciao'){
file_get_contents($website."/sendmessage?chat_id=".$chatid."&text=bye");
}
Сценарий работал, если я выполняю сценарий вручную. Однако, когда я использую webhook, он больше не работает. Учебник сказал, что $update = file_get_contents('php://input');
это правильный путь, который будет использоваться раньше $update = file_get_contents($website."/getupdates");
, Мой вопрос, как я могу использовать php://input
выполнить мой скрипт автоматически? Сценарий находится на сервере от «one.com», а сертификат также от «one.com».
Если вы используете самоподписанный ssl, вы должны указать путь ssl,
используйте ssh для запуска этой команды после заполнения ее реальными данными,
curl -F "url=https://example.com/myscript.php" -F "certificate=@/etc/apache2/ssl/apache.crt" https://api.telegram.org/bot<SECRETTOKEN>/setWebhook
После перехода на метод WebHook, вам необходимо указать следующее, поскольку теперь мы будем обрабатывать одно сообщение за раз. У меня работает отлично.
вместо
$chatId = $updateArray["result"][0]["message"]["chat"]["id"];
в
$chatID = $update["message"]["chat"]["id"];
Извините, что с таким энтузиазмом раскапывал этот старый вопрос, у меня был точно такой же вопрос, как и у вас.
Я думаю, что на самом деле ответ может быть проще, но менее удовлетворительным, как мы надеялись: я не думаю, что можно получить список предыдущих сообщений для бота при использовании webhook.
А именно: что он делает, так это запускает скрипт PHP напрямую, как только бот получает сообщение. Ничего не хранится в доступной базе данных, следовательно, updateArray не возвращается.
Я наткнулся этот пример, который показывает, как работает php: // input. Я думаю, что решение для отображения списка сообщений было бы, позволить сценарию php хранить сообщение в базе данных каждый раз, когда сообщение «пересылается» через webhook.
Если кто-то нашел что-то еще: мне очень интересно.
Насколько я понимаю из приведенного выше фрагмента кода, вы должны использовать php: // input в двойных кавычках вместо одинарных. В php у нас есть разница Bing в этом случае использования.