Создайте собственного бота на телеграмме с переполнением стека

Я видел пару дней назад этот учебник на 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».

5

Решение

Если вы используете самоподписанный 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
2

Другие решения

После перехода на метод WebHook, вам необходимо указать следующее, поскольку теперь мы будем обрабатывать одно сообщение за раз. У меня работает отлично.

вместо

$chatId = $updateArray["result"][0]["message"]["chat"]["id"];

в

$chatID = $update["message"]["chat"]["id"];
1

Извините, что с таким энтузиазмом раскапывал этот старый вопрос, у меня был точно такой же вопрос, как и у вас.

Я думаю, что на самом деле ответ может быть проще, но менее удовлетворительным, как мы надеялись: я не думаю, что можно получить список предыдущих сообщений для бота при использовании webhook.
А именно: что он делает, так это запускает скрипт PHP напрямую, как только бот получает сообщение. Ничего не хранится в доступной базе данных, следовательно, updateArray не возвращается.

Я наткнулся этот пример, который показывает, как работает php: // input. Я думаю, что решение для отображения списка сообщений было бы, позволить сценарию php хранить сообщение в базе данных каждый раз, когда сообщение «пересылается» через webhook.

Если кто-то нашел что-то еще: мне очень интересно.

0

Насколько я понимаю из приведенного выше фрагмента кода, вы должны использовать php: // input в двойных кавычках вместо одинарных. В php у нас есть разница Bing в этом случае использования.

0
По вопросам рекламы [email protected]