Le premier bot PHP pour VKontakte

Bonjour, Khabrovites. Dans cette publication, j'écrirai comment créer mon premier bot de chat pour VKontakte. Je pense que cela ne sera pas intéressant pour les programmeurs expérimentés, mais ceux qui commencent tout juste leur parcours seront intéressés, car moi-même je ne suis pas allé très loin et je comprends les problèmes des débutants. Et je vous préviens tout de suite que la plupart des captures d'écran seront en anglais.

Nous devons d'abord créer une communauté. Je pense que tout le monde peut gérer cela.

Ensuite, nous allons dans les paramètres de la communauté et sélectionnez l'élément "Utilisation de l'API" et cliquez sur le bouton "Créer un jeton".

image

Ensuite, vous devez choisir, en fait, ce que nous pouvons utiliser avec ce jeton. Nous avons besoin d'accéder aux messages de la communauté, mais nous pouvons choisir tous les droits d'accès afin de ne pas avoir à nous rappeler de créer des jetons à l'avenir.

image

Et nous avons donc obtenu le jeton convoité. Soit dit en passant, il doit être conservé dans un endroit sûr et ne doit être montré à personne. Vous pouvez maintenant passer au code.

image

Nous allons écrire du code en PHP, afin que vous puissiez télécharger du code Visual Studio ou PHPStorm. En principe, le code peut être écrit dans le bloc-notes, mais ce ne sera pas pratique. Après le code, nous passerons à la mise en place du groupe.

Donc, pour commencer, nous devons obtenir des informations sur le message entrant et le traduire du format JSON en un langage compréhensible pour PHP.

<?php $data = json_decode(file_get_contents('php://input')); ?> 

Dans la variable de données, nous avons maintenant un tableau avec un message, un ID utilisateur et un ID de chat.
«Quel genre de« json_decode (file_get_contents ('php: // input')) », vous demandez-vous.

Commençons par ce moment:

 file_get_contents('php://input') 

En termes simples, nous demandons au script ce qui est venu à notre entrée, c'est-à-dire quelle demande le VC a envoyé. Voici un exemple d'une telle demande.

 {"type":"message_new","object":{"date":1568464037,"from_id":450829055,"id":5400,"out":0,"peer_id":450829055,"text":" .","conversation_message_id":1478,"fwd_messages":[],"important":false,"random_id":0,"attachments":[],"is_hidden":false},"group_id":171524656} 

Je pense qu'il est facile de comprendre ce qui est écrit dans la demande, si vous avez une connaissance minimale en anglais.

Eh bien, "json_decode ()" est une fonction qui traduit le JSON ci-dessus en un tableau avec lequel PHP peut fonctionner.

Nous allons maintenant écrire un code qui examine quel événement s'est produit et si un nouveau message nous parvient, il compare le message à ceux auxquels nous avons une réponse et examine l'ID de discussion.

 <?php $data = json_decode(file_get_contents('php://input')); switch ($data->type) { case 'confirmation': echo $confirmation_token; break; case 'message_new': $message_text = $data -> object -> text; $message_text = $data -> object -> peer_id; if ($message_text == ""){ // -  } if ($message_text == ""){ // -  } echo 'ok'; break; } ?> 

Maintenant, nous devons en quelque sorte répondre à ces messages. Pour ce faire, nous écrivons une fonction simple.

 <?php function vk_msg_send($peer_id,$text){ $request_params = array( 'message' => $text, 'peer_id' => $peer_id, 'access_token' => "TOKEN", 'v' => '5.87' ); $get_params = http_build_query($request_params); file_get_contents('https://api.vk.com/method/messages.send?'. $get_params); } ?> 

Que se passe-t-il ici? Ici, nous construisons une demande à l'API VK (je recommande de lire la documentation) avec le texte du message, l'ID de conversation et le jeton que nous avons créés précédemment, et nous l'envoyons au serveur VK.

Maintenant, connectez ces morceaux de code et écrivez les réactions du bot à un message particulier.

 <?php $confirmation_token = 'CONF_TOKEN' function vk_msg_send($peer_id,$text){ $request_params = array( 'message' => $text, 'peer_id' => $peer_id, 'access_token' => "TOKEN", 'v' => '5.87' ); $get_params = http_build_query($request_params); file_get_contents('https://api.vk.com/method/messages.send?'. $get_params); } $data = json_decode(file_get_contents('php://input')); switch ($data->type) { case 'confirmation': echo $confirmation_token; break; case 'message_new': $message_text = $data -> object -> text; $chat_id = $data -> object -> peer_id; if ($message_text == ""){ vk_msg_send($chat_id, ",  ,    ."); } if ($message_text == ""){ vk_msg_send($chat_id, ".    - ,     ,    ."); } echo 'ok'; break; } ?> 

"Eh bien, pourquoi devons-nous écrire" ok "après avoir envoyé le message?"

Puisque nous utiliserons la méthode de mise à jour appelée API de rappel, c'est-à-dire que VK nous parlera de nouveaux messages, nous devons dire que nous l'avons entendu, sinon il nous sera répété plusieurs fois.

Passons maintenant à la mise en place du groupe.

Nous allons dans les paramètres et sélectionnons l'API version 5.87 (vous pouvez bien sûr avoir des versions plus récentes, mais il vaut mieux avoir une unité de versions d'API).

image

Dans la même section, nous prenons la ligne que le serveur doit renvoyer et la substituons dans la variable confirmation_token.

Après cela, remplissez l'adresse du serveur. Pour ce faire, vous devez disposer d'un domaine et d'un hébergement. L'adresse que vous spécifiez doit être juste un fichier avec un bot. J'espère que le lecteur pourra s'en occuper lui-même.

Ensuite, nous choisissons quels événements dans la communauté nous seront rapportés par VKontakte. Nous avons seulement besoin de messages entrants.

image

Ensuite, nous confirmons l'adresse du serveur et notre premier bot est prêt à l'emploi.

image

Comme il s'agit de ma première publication sur Habré, je souhaite obtenir des commentaires sur l'article et ne faire que m'améliorer.

Merci d'avoir lu.

Source: https://habr.com/ru/post/fr468531/


All Articles