Quer seu anúncio aqui ? Temos preços especiais.

12/10/2017

Como fazer meu bot do Telegram responder aos inline buttons usando PHP

Nenhum comentário :

Chegamos a mais um tutorial da jornada para adicionar recursos a seu bot no Telegram feito usando PHP e hoje vamos aprender como fazer seu bot PHP responder quando um usuário clica em um inline button (botão incorporado a mensagem), lembrando quando este tipo de botão é clicado o ideal é fazer com que a mensagem mude e não enviar outra mensagem, então por isso hoje vamos aprender a usar dois metódos o answerCallbackQuery e o editMessageText ambos comandos que enviam dados e também vamos conhecer mais do objeto callback_query que é um objeto que contém dados recebidos e do tipo reply_markup, prinipalmete o inline_keyboard, subtipo de reply_markup.



Primeiramente vamos chamar uma função sempre que o Telegram informar nossa Webhook que um botão inline foi clicado, não está entendendo nada ? Leia "Como criar um bot no Telegram usando PHP ?". Lembre-se que se vocÊ não tiver o código base que usamos no tutorial nada vai funcionar, caso você não tenha leia o artigo citado anteriormente, tudo pronto ? No final do código base coloque o código abaixo:


if (isset($update["callback_query"])) {
  processButton($update);
}




Agora vamos definir um comando para mostrar os inline buttons logo após o código

if (strpos($text, "/start") === 0) {
    apiRequest("sendMessage", array('chat_id' => $chat_id, "text" => 'Seja bem vindo (a) '.$name['first'].' '.$name['last'].$name['user'].' mande qualquer mensagem para que possemos repetir'));
}


cole o código abaixo:


elseif (stripos($text, "/inline") === 0){
	apiRequestJson("sendMessage", array('chat_id' => $chat_id, "text" => 'Este é um teste com os inline buttons', 'reply_markup' => array(
        'inline_keyboard' => array(array(array('text' => 'Texto do botão', 'callback_data' => 'Botão foi clicado'))))));
    return true;
}
elseif ($text==='Botão foi clicado'){
	if(isset($message['processInline'])){
		apiRequestJson("editMessageText", array('chat_id' => $chat_id, 'message_id' => $message_id, "text" => 'O botão foi clicado'));
	    return true;
	}
	else{
		apiRequestJson("sendMessage", array('chat_id' => $chat_id, "text" => 'Você está tentando fraudar meu código'));
	}
}



Depois dos botões prontos agora vamos definir a função processButton antes da linha $content = file_get_contents ... coloque o seguinte código:

function processButton($update){
  $array['text'] = $update["callback_query"]['data'];
  $array['message_id'] = $update["callback_query"]['message']['message_id'];
  $array['chat']['id'] = $update["callback_query"]['message']['chat']['id'];
  $array['processInline'] = true;
  processMessage($array);
  return true;
}

O que estamos fazendo neste código é que a callback_query > data que é onde a callback_data que colocamos em noss inline button fica, é passada para ser processada como se fosse uma mensagem, mas para fazer como que não seja enviada outra mensagem passamos o valor ProcessInline como true um valor que na API real não existe mais vai servi para sabermos responder de maneira correta o usuáro, para testar como está funcionando mande /inline para seu e clique no botão e depois experimente enviar o texto "Botão foi clicado". Dúvidas ? Deixe nos comentários.

Nenhum comentário :

Postar um comentário

Ao acessar e comentar em nossos serviços você concorda com a nossas Politicas de privacidade, com nossos Termos de Uso e com a nossas Políticas de segurança