2015-07-22 1 views
3

J'ai créé un bot avec @botfather et tout va bien. Maintenant je veux placer la commande de mon hôte au télégramme. J'ai créé un Bot.php dans mon répertoire racine.Comment définir la commande du serveur pour le télégramme BOT

Bot.php

$string = json_decode(file_get_contents('php://input')); 

    function objectToArray($object) 
    { 
     if(!is_object($object) && !is_array($object)) 
     { 
      return $object; 
     } 
     if(is_object($object)) 
     { 
      $object = get_object_vars($object); 
     } 
     return array_map('objectToArray', $object); 
    } 

    $result = objectToArray($string); 
    $user_id = $result['message']['from']['id']; 
    $text = $result['message']['text']; 
    if($text == 'Hi') 
    $text_reply = 'Hi'; 
if($text == 'Your name') 
    $text_reply = 'jJoe'; 

    $token = ''; 
    $text_reply = 'Got you Buddy.'; 

    $url = 'https://api.telegram.org/bot'.tokenNumber.'/sendMessage?chat_id='.$user_id; 
    $url .= '&text=' .$text_reply; 


    $res = file_get_contents($url); 

Maintenant, quand je parcourir ceci: https://api.telegram.org/bot112186325:tokenNumber/setWebhook?url=https://partamsms.ir/bot.php

Je reçois ceci: {"ok":true,"result":true,"description":"Webhook was set"}

Mais je ne peux pas exécuter ces commandes dans mon compte de télégramme.

Comment puis-je exécuter des commandes depuis mon serveur?

Merci un million

+0

Pouvez-vous clarifier ce que vous voulez dire par "commandes"? Voulez-vous dire que vous ne recevez pas le message "Got you Buddy" ou voulez-vous envoyer un message sans que ce soit une réponse à un message reçu? –

+0

oui sûr, par exemple je veux obtenir "jJoe" quand j'écris/Yourname en télégramme @ChrisBrand merci d'avance – sani

Répondre

4

Selon votre commentaire, vous voulez quelque chose qui réagira différemment en fonction du message que l'utilisateur a tapé. Donc, en utilisant votre code d'exemple, vous pouvez le changer pour quelque chose comme ceci:

// NOTE: you can pass 'true' as the second argument to decode as array 
$result= json_decode(file_get_contents('php://input'), true); 
error_log(print_r($result, 1), 3, '/path/to/logfile.log'); 

$user_id = $result['message']['from']['id']; 
$text = $result['message']['text']; 

// TODO: use something like strpos() or strcmp() for more flexibility 
switch (true) 
{ 
    case $text == '/hi': 
     $text_reply = 'Hello'; 
     break; 

    case $text == '/yourname': 
     // TODO: use the getMe API call to get the bot information 
     $text_reply = 'jJoe'; 
     break; 

    default: 
     $text_reply = 'not sure what you want?'; 
     break; 
} 

$token = ''; 
$url = 'https://api.telegram.org/bot'.tokenNumber.'/sendMessage?chat_id='.$user_id; 
$url .= '&text=' .$text_reply; 
$res = file_get_contents($url); 

Alors, c'est à peu près une légère refactor de ce que vous avez déjà eu ... si le problème est que votre Bot.php Le script ne se déclenche pas, c'est peut-être parce que la page n'est pas publique. Le webhook que vous spécifiez pour Telegram doit être une URL accessible au public. J'ai essayé de frapper https://partamsms.ir/bot.php et je ne peux pas y arriver.

Une alternative consiste à utiliser la méthode getUpdates à la place et de cron le script à exécuter toutes les 5 secondes environ.

+0

merci, une question noob: donc si je tape salut en télégramme devrait obtenir Bonjour? – sani

+0

Oui, si votre webhook fonctionne correctement. J'ai mis à jour mon script avec des informations sur le journal des erreurs. Si le fichier spécifié contient des informations de message, cela signifie que votre webhook reçoit des données du télégramme et que si le message est "bonjour" ... vous devriez recevoir "Bonjour". Si le fichier journal est vide, cela signifie que votre script n'est pas accessible via Internet. –

+0

voir la deuxième ligne de l'exemple de code pour la journalisation de débogage ajouté. –