2015-08-23 14 views
5

Ho visto un paio di giorni fa this tutorial on youtube. È stato molto interessante, quindi ho deciso di creare un proprio robot. Ho usato il codice dal tutorial come modello:Crea il proprio bot su telegramma con php

<?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"); 
} 

Lo script ha funzionato se eseguo manualmente lo script. Tuttavia quando uso il webhook non funziona più. Il tutorial diceva che $update = file_get_contents('php://input'); è il modo giusto, da utilizzare prima dello $update = file_get_contents($website."/getupdates");. La mia domanda: come posso usare lo php://input per eseguire automaticamente il mio script? Lo script è su un server di "one.com" e anche il certificato è di "one.com".

+0

Giusto per chiarire, hai impostato l'indirizzo web per il webhook e hai inserito il tuo codice all'interno del file index.php in quella cartella (il tuo server)? – fiz

+0

Potrebbe anche essere possibile che il certificato non sia tra quelli di fiducia per Telegram (Se ricordo bene, usano l'elenco in Debian Lenny) –

+0

Pensi che potrebbe ancora essere un problema di certificato? Vedi il mio commento qui sotto: Ho usato due certificati diversi (ufficiali/di terze parti) senza alcun risultato. Ho provato entrambi su PHP 5.6 e PHP 7. Qualche idea per una soluzione? – SJDS

risposta

2

Se si utilizza SSL autofirmato si deve puntare al percorso ssl ,, utilizzare lo ssh per eseguire questo comando dopo il riempimento con i tuoi dati reali ,,

curl -F "url=https://example.com/myscript.php" -F "[email protected]/etc/apache2/ssl/apache.crt" https://api.telegram.org/bot<SECRETTOKEN>/setWebhook 
+0

Ho lo stesso problema su due domini separati. Uno con GlobalSign e uno con Let's Encrypt. Potrebbe essere ancora questo il problema? Vedo molte persone alle prese con questo problema. – SJDS

1

Dopo il cambio di metodo di WebHook, è è necessario mettere come segue, dal momento che ora gestiremo un messaggio alla volta. Per me funziona perfettamente.

invece

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

a

$chatID = $update["message"]["chat"]["id"]; 
+0

In realtà questo può essere vero, ma è il passo precedente a ciò che sta causando il problema: $ update rimane vuoto quando si usa il webhook combinato con '$ update = file_get_contents ('php: // input');' – SJDS

0

Ci scusiamo per scavare questa vecchia questione con tanto entusiasmo, ho avuto esattamente la stessa domanda, come si.

Penso che in realtà la risposta potrebbe essere più semplice ma meno soddisfacente come speravamo: non credo sia possibile ottenere un elenco di messaggi precedenti sul bot durante l'utilizzo del webhook. Vale a dire: ciò che fa è eseguire lo script PHP non appena il bot riceve un messaggio. Nulla viene archiviato in un database accessibile, quindi non viene restituito updateArray.

Mi sono imbattuto in this example, che mostra come funziona php: // input. Immagino che la soluzione per visualizzare un elenco di messaggi sarebbe, lascia che lo script php memorizzi il messaggio in un database ogni volta che un messaggio viene 'inoltrato' tramite il webhook.

Se qualcuno ha trovato qualcos'altro: sono molto interessato.

0

Come ho capito dal frammento di codice sopra, è necessario utilizzare php: // input tra virgolette anziché virgolette singole. In PHP, stiamo riscontrando differenze in questo caso d'uso.

Problemi correlati