PHP WebHook Telegram Bot - SSL CloudFlare

时间:2015-11-19 16:13:48

标签: php ssl cloudflare telegram telegram-bot

经过对论坛的多次研究后,我决定写信,看你是否可以帮助我。

我想用PHP创建一个机器人电报用于教育目的。 我阅读了它的文档,我在CloudFlare上为我的域创建了一个灵活的SSL证书。

我通过电报创建我的机器人并收到令牌,并使用以下代码设置我的webhook

https://api.telegram.org/bot <my token>? url = https: //miodominio.eu/page.php

答案是:

{"Ok": true, "result": false, "description": "Webhook was set"}

我把这段代码放在我的page.php

<?php 

function checkJSON($chatID,$update){

  $myFile = "log.txt";
  $updateArray = print_r($update,TRUE);
  $fh = fopen($myFile, 'a') or die("can't open file");
  fwrite($fh, $chatID ."\n\n");
  fwrite($fh, $updateArray."\n\n");
  fclose($fh);
}

function sendMessage()
{
  $message = "I am a baby bot.";
  return $message;
}

define('BOT_TOKEN', '< mio token >');
define('API_URL', 'https://api.telegram.org/bot'.BOT_TOKEN.'/');

// read incoming info and grab the chatID
$content = file_get_contents("php://input");
$update = json_decode($content, true);
$chatID = $update["message"]["chat"]["id"];


// compose reply
$reply =  sendMessage();

// send reply
$sendto =API_URL."sendmessage?chat_id=".$chatID."&text=".$reply;
file_get_contents($sendto);

checkJSON($chatID,$update);

?>

但没有,如果我写入启动我没有收到任何答案,日志文件没有输入任何东西。 我怎么调试? 你有什么建议?? 感谢所有提前

2 个答案:

答案 0 :(得分:1)

使用此代码并替换您的API:

$content=file_get_contents("php://input");
$content = json_decode($content,TRUE);


 $params = array( 
 'chat_id'   => $content["message"]["chat"]["id"],  
 'action'     => 'typing'   
 );
$api="123";
$url = 'https://api.telegram.org/bot'.$api."/sendChatAction";
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_POST,1);
   curl_setopt($ch, CURLOPT_POSTFIELDS,$params);
   curl_setopt($ch, CURLOPT_URL,$url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
   enter code herecurl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
   $result=curl_exec ($ch); 

答案 1 :(得分:0)

我不确定这会解决您的问题,但我发现您的代码存在两个问题。

要设置webhook,您的PHP字符串应为:

'https://api.telegram.org/bot<token>/setWebhook?url='.urlencode('https://miodominio.eu/page.php');

要发送消息,您的PHP字符串应为:

API_URL."sendmessage?chat_id=".$chatID."&text=".urlencode($reply)

对于任何非平凡的参数,在将它们添加到查询字符串之前,您应始终urlencode()

希望它有所帮助。