Instantly share code, notes, and snippets.

Embed
What would you like to do?
Sample Telegram Bot (3)
<?php
// recupero il contenuto inviato da Telegram
$content = file_get_contents("php://input");
// converto il contenuto da JSON ad array PHP
$update = json_decode($content, true);
// se la richiesta è null interrompo lo script
if(!$update)
{
exit;
}
// assegno alle seguenti variabili il contenuto ricevuto da Telegram
$message = isset($update['message']) ? $update['message'] : "";
$messageId = isset($message['message_id']) ? $message['message_id'] : "";
$chatId = isset($message['chat']['id']) ? $message['chat']['id'] : "";
$firstname = isset($message['chat']['first_name']) ? $message['chat']['first_name'] : "";
$lastname = isset($message['chat']['last_name']) ? $message['chat']['last_name'] : "";
$username = isset($message['chat']['username']) ? $message['chat']['username'] : "";
$date = isset($message['date']) ? $message['date'] : "";
$text = isset($message['text']) ? $message['text'] : "";
// pulisco il messaggio ricevuto togliendo eventuali spazi prima e dopo il testo
$text = trim($text);
// converto tutti i caratteri alfanumerici del messaggio in minuscolo
$text = strtolower($text);
// mi preparo a restitutire al chiamante la mia risposta che è un oggetto JSON
// imposto l'header della risposta
header("Content-Type: application/json");
// la mia risposta è un array JSON composto da chat_id, text, method
// chat_id mi consente di rispondere allo specifico utente che ha scritto al bot
// text è il testo della risposta
$parameters = array('chat_id' => $chatId, "text" => $text);
// method è il metodo per l'invio di un messaggio (cfr. API di Telegram)
$parameters["method"] = "sendMessage";
// converto e stampo l'array JSON sulla response
echo json_encode($parameters);
@Mattiafarinaro

This comment has been minimized.

Mattiafarinaro commented Apr 27, 2016

Ciao!
Ho seguito la tua guida per creare il mio promo bot!
premetto che sono una schiappa a programmare...
Ho utilizzato i tuoi file per creare una lista di risposte che il bot da in automatico, gli voglio far risponedere solo se la domanda presenta in fondo un "?" ma ora il bot mi continua a rispondere "null"...
Come posso fare?
Ti allego il file excecute.php

`<?php
$content = file_get_contents("php://input");
$update = json_decode($content, true);

if(!$update)
{
exit;
}

$message = isset($update['message']) ? $update['message'] : "";
$messageId = isset($message['message_id']) ? $message['message_id'] : "";
$chatId = isset($message['chat']['id']) ? $message['chat']['id'] : "";
$senderId = isset($message['chat']['id']) ? $message['chat']['id'] : "";
$firstname = isset($message['chat']['first_name']) ? $message['chat']['first_name'] : "";
$lastname = isset($message['chat']['last_name']) ? $message['chat']['last_name'] : "";
$username = isset($message['chat']['username']) ? $message['chat']['username'] : "";
$date = isset($message['date']) ? $message['date'] : "";
$text = isset($message['text']) ? $message['text'] : "";

if (!$text) {
// Verificare che l'ultimo carattere sia un punto di domanda
if ($text[sizeof($text) - 1] == '?') {
// Da qui mandi la risposta
$answer = $answers[rand(0, sizeof($answers)-1)];
} else {
// Da qui gli mandi "ehy fammi una domanda"
$answer = "Per poterti rispondere, mi devi fare una domanda...";
}
}

$answers = array(
"Per quanto posso vedere, sì",
"È certo",
"È decisamente così",
"Molto probabilmente",
"Le prospettive sono buone",
"I segni indicano di sì",
"Senza alcun dubbio",
"Sì",
"Sì",
"Ci puoi contare",
"È difficile rispondere, prova di nuovo",
"Rifai la domanda più tardi",
"Meglio non risponderti adesso",
"Non posso predirlo ora",
"Concentrati e rifai la domanda",
"Non ci contare",
"La mia risposta è no",
"Le mie fonti dicono di no",
"Le prospettive non sono buone",
"Molto incerto"
);

header("Content-Type: application/json");
$parameters = array('chat_id' => $chatId, "text" => $answer);
$parameters["method"] = "sendMessage";
echo json_encode($parameters);
`

Dove sbaglio?

Grazie in anticipo...

@salvatorecordiano

This comment has been minimized.

Owner

salvatorecordiano commented May 1, 2016

Ciao Mattia,
devi definire l'array answers prima di utilizzarlo.
Di seguito trovil codice...spero funzionante.

A presto,
^SC

`<?php
$content = file_get_contents("php://input");
$update = json_decode($content, true);

if(!$update)
{
exit;
}

$message = isset($update['message']) ? $update['message'] : "";
$messageId = isset($message['message_id']) ? $message['message_id'] : "";
$chatId = isset($message['chat']['id']) ? $message['chat']['id'] : "";
$senderId = isset($message['chat']['id']) ? $message['chat']['id'] : "";
$firstname = isset($message['chat']['first_name']) ? $message['chat']['first_name'] : "";
$lastname = isset($message['chat']['last_name']) ? $message['chat']['last_name'] : "";
$username = isset($message['chat']['username']) ? $message['chat']['username'] : "";
$date = isset($message['date']) ? $message['date'] : "";
$text = isset($message['text']) ? $message['text'] : "";

$answers = array(
"Per quanto posso vedere, sì",
"È certo",
"È decisamente così",
"Molto probabilmente",
"Le prospettive sono buone",
"I segni indicano di sì",
"Senza alcun dubbio",
"Sì",
"Sì",
"Ci puoi contare",
"È difficile rispondere, prova di nuovo",
"Rifai la domanda più tardi",
"Meglio non risponderti adesso",
"Non posso predirlo ora",
"Concentrati e rifai la domanda",
"Non ci contare",
"La mia risposta è no",
"Le mie fonti dicono di no",
"Le prospettive non sono buone",
"Molto incerto"
);

$answer = '';

// Verificare che l'ultimo carattere sia un punto di domanda
if(strlen($text)>0 && substr($text, -1, 1)=='?')
{
// Da qui mandi la risposta
$answer = $answers[rand(0, count($answers)-1)];
}
else
{
// Da qui gli mandi "ehy fammi una domanda"
$answer = "Per poterti rispondere, mi devi fare una domanda...";
}

header("Content-Type: application/json");
$parameters = array('chat_id' => $chatId, "text" => $answer);
$parameters["method"] = "sendMessage";
echo json_encode($parameters);`

@riky2001

This comment has been minimized.

riky2001 commented May 7, 2016

Ciao Salvatore,
se volessi settare la variabile $imgin modo tale da poter gestire un eventuale messaggio contenente una foto... Come devo impostare il codice?
$img= isset($photo['photo']) ? $message['chat']['id'] : ""; è giusto così? Perchè a me non funziona...

@salvatorecordiano

This comment has been minimized.

Owner

salvatorecordiano commented May 7, 2016

Ciao riky2001,
puoi prendere spunto da questo esempio: https://gist.github.com/salvatorecordiano/873c48328f91c459865632cf62e035bb

Poi devi guardare all'oggetto PhotoSize sulla documentazione ufficiale https://core.telegram.org/bots/api#photosize
In partica Telegram ti manda un array di files che poi devi recuperare come descritto qui https://core.telegram.org/bots/api#file

A presto,
Salvatore

@Pietrobreeg

This comment has been minimized.

Pietrobreeg commented May 18, 2016

Ciao Salvatore,
non riesco a capire come funzioni e che funzione ha il file composer.json. Inoltre, sto utilizzando le tue guide per presentare questo bot al mio esame di maturità e mi chiedevo come fosse possibile collegare un database dal quale poi fare delle query. La mia idea è un cercatreni, in pratica dandomi in output la soluzione per il viaggio desiderato, indicando la partenza e la destinazione, oltre alla data,gli orari e il prezzo. Hai qualche indicazione da potermi dare?

@salvatorecordiano

This comment has been minimized.

Owner

salvatorecordiano commented Sep 12, 2016

Ciao @Pietrobreeg, ho letto solo adesso.
Spero che il tuo esame di maturità si andato bene!

In effetti il composer.json nel repository su Github è vuoto non serve a nulla :-)

Per quanto riguarda il discorso database è possibile fare quanto da te indicato, se ti serve ancora qualche indicazioni fammi sapere.

A presto,
Salvatore

@lonleyday

This comment has been minimized.

lonleyday commented Jan 2, 2017

salve @salvatorecordiano, ottima guida. Ti volevo chiedere un grande favore, ho creato un bot per un gruppo ed ho la necessita di poter usare usare un modulo per rispondere ad un membro quando questi mi contatti, come posso fare? grazie in anticipo

@tonyviola

This comment has been minimized.

tonyviola commented Jan 10, 2017

Salve @salvatorecordiano, prima di tutto complimenti, ottima guida. Mi è stata molto utile.
Ora ho creato un bot che provi a scrivere su un database mysql. Ho creato in questa database una tabella chiamata prova con tre colonne ID, NOME e VAR. Per ora è solo di prova e sto provando a creare un codice che scriva nella tabella senza successo, dove sbaglio?

<?php
$content = file_get_contents("php://input");
$update = json_decode($content, true);

if(!$update)
{
  exit;
}


$link = mysqli_connect('***', '***', '***');
if (!$link) {
	die ('Non riesco a connettermi: ' . mysqli_error($link));
}

$db_selected = mysqli_select_db(***, $link);
if (!$db_selected) {
	die ("Errore nella selezione del database: " . mysqli_error());
}


$message = isset($update['message']) ? $update['message'] : "";
$messageId = isset($message['message_id']) ? $message['message_id'] : "";
$chatId = isset($message['chat']['id']) ? $message['chat']['id'] : "";
$firstname = isset($message['chat']['first_name']) ? $message['chat']['first_name'] : "";
$lastname = isset($message['chat']['last_name']) ? $message['chat']['last_name'] : "";
$username = isset($message['chat']['username']) ? $message['chat']['username'] : "";
$date = isset($message['date']) ? $message['date'] : "";
$text = isset($message['text']) ? $message['text'] : "";
$text = trim($text);
$text = strtolower($text);


$query = "INSERT INTO prova (NOME, VAR) VALUES ($text, 'ok')";
$link->query($query);
$result = mysqli_query($link, $query);

if(!$result){
	die ("ERRORE ".mysqli_error());
}


$answer = 'OK';

mysqli_close();

header("Content-Type: application/json");
$parameters = array('chat_id' => $chatId, "text" => $answer);
$parameters["method"] = "sendMessage";
echo json_encode($parameters);
@cybernetphotographer

This comment has been minimized.

cybernetphotographer commented Jan 21, 2017

Salve a tuti,
e davvero complimenti per la chiarezza, ora io pongo una dmanda sicome vorrei usare il bot per dare assistenza TIPO FAQ come posso impostare le domande e le risposte in tal modo che che vi sia una lista di domande e alle domande dia una risposta che ho scritto io

Una sorta di IA
grazie infinite

@Fenikku

This comment has been minimized.

Fenikku commented Mar 20, 2017

Salve @salvatorecordiano mi potresti aiutare?
// la mia risposta è un array JSON composto da chat_id, text, method
// chat_id mi consente di rispondere allo specifico utente che ha scritto al bot
// text è il testo della risposta
$parameters = array('chat_id' => $chatId, "text" => $text);
// method è il metodo per l'invio di un messaggio (cfr. API di Telegram)
$parameters["method"] = "sendMessage";
// converto e stampo l'array JSON sulla response
echo json_encode($parameters);

Scusa la domanda.. ma proprio non riesco a capire come fai con questi comandi a mandare il comando per inviare il messaggio...
In genere io usavo file_get_contents(LINK_SENDMESSAGE);

@SimState

This comment has been minimized.

SimState commented Apr 17, 2017

Salve ragazzi, volevo sapere se qualcuno di voi mi può fare un veloce esempio di codice php di un bot di telegram, che abbia: una tastiera inline, che quando viene premuto un tasto, modifica il messaggio della tastiera in un messaggio normale, oppure in un altra tastiera. Scusatemi ma non ne capisco molto

@Stefaniscion

This comment has been minimized.

Stefaniscion commented Jul 13, 2017

buonasera, volevo sapere se qualcuno saprebbe dirmi come inviare due messaggi consecutivi con il bot
ho provato a replicare la riga "echo json_encode($parameters);" ma non sembra funzionare
qualche idea?

@EnricoTV

This comment has been minimized.

EnricoTV commented Aug 23, 2017

Ciao Salvatore,
vorrei anch'io iniziare l'avventura con i bot di telegram, però prima di cimentarmi con il rischio di non combinar nulla, vorrei sapere se è fattibile il progetto che ho in mente.
In sostanza ho un sito internet (in realtà è fatto con wordpress) dove siamo in 5 amministratori, vorremmo la possibilità di poter sfruttare un bot telegram che permetta ai visitatori di scriverci da telegram in un gruppo dove siamo tutti e 5 presenti più il visitatore del momento.
A primo avviso si potrebbe pensare che basti un gruppo, ma in realtà non è possibile in quanto se i visitatori fossero più di uno, ognuno vedrebbe quello che scrive l'altro creando enorme confusione.
Il bot in sostanza dovrebbe poter esser sviluppato in due modi:
1- in modo che inoltri tutti i messaggi che il visitatore invia, ad un gruppo dove ci sono i 5 amministratori che rispondendo dal gruppo a sua volta i messaggi vengono inoltrati al visitatore in questione;
2- oppure in modo che crei ogni volta un nuovo gruppo telegram con i 5 amministratori più il visitatore in questione. Poi all'uscita del visitatore però il gruppo dovrebbe eliminarsi (anche se potremmo farlo manualmente ogni volta)
Vorrei sapere se in primis è fattibile e poi quale via più semplice mi consigli di percorrere (ed il grado di difficoltà che ha).
Grazie infinite,
Enrico

@jamgian

This comment has been minimized.

jamgian commented Sep 8, 2017

Ciao Salvatore,

sono alle prime armi con i bot Telegram e ancora ci capisco poco. Volevo chiederti una cosa (ho provato a guardare di qua e di là ma non ho trovato esempi). Come faccio ad inviare una data posizione? Cioè, vorrei inserire delle coordinate, facendo si che compaia nella chat una mappa con il pin su quell'indirizzo. È possibile?

@ghost

This comment has been minimized.

ghost commented Oct 4, 2017

Salvatore il bot ripete obni cosa che scrivo ma non era questo che volevo creare. Volveo creare un bot che rispondesse in un modo specifico a un messaggio specifico. ESEMPIO:
IO: Bella
Bot: Brutta

Come devo fare?

@Ciroxxx

This comment has been minimized.

Ciroxxx commented Jul 12, 2018

Ciao Salvatore, grazie per l'esempio.
Vorrei sapere come posso fare per inviare due messaggi, uno dopo l'altro allo stesso utente, usando il webhook.

Ho provato facendo doppio echo alla fine ma non funziona.
Ho provato anche a creare un array per il 'text' con più messaggi, cioè la tua riga 30 diventa:
$parameters = array('chat_id' => $chatId, "text" => array('messagio1', 'messaggio2');
ma neanche questo funziona.

Tu hai qualche idea?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment