Der erste PHP-Bot für VKontakte

Hallo Khabrovites. In dieser Veröffentlichung werde ich darüber schreiben, wie ich meinen ersten Chat-Bot für VKontakte erstellen kann. Ich denke, dass dies für erfahrene Programmierer nicht interessant sein wird, aber diejenigen, die gerade ihre Reise beginnen, werden interessiert sein, da ich selbst nicht sehr weit gegangen bin und die Probleme von Anfängern verstehe. Und ich warne Sie sofort, dass die meisten Screenshots auf Englisch sein werden.

Zuerst müssen wir eine Gemeinschaft schaffen. Ich denke, jeder kann damit umgehen.

Dann gehen wir in die Community-Einstellungen und wählen das Element "API-Nutzung" aus und klicken auf die Schaltfläche "Token erstellen".

Bild

Als nächstes müssen Sie tatsächlich auswählen, was wir mit diesem Token verwenden können. Wir benötigen Zugriff auf Community-Nachrichten, können jedoch alle Zugriffsrechte auswählen, damit wir uns nicht daran erinnern müssen, in Zukunft Token zu erstellen.

Bild

Und so haben wir den begehrten Token bekommen. Übrigens muss es an einem sicheren Ort aufbewahrt und niemandem gezeigt werden. Jetzt können Sie mit dem Code fortfahren.

Bild

Wir werden Code in PHP schreiben, damit Sie Visual Studio-Code oder PHPStorm herunterladen können. Grundsätzlich kann der Code im Editor geschrieben werden, ist aber nicht bequem. Nach dem Code fahren wir mit dem weiteren Einrichten der Gruppe fort.

Für den Anfang müssen wir also Informationen über die eingehende Nachricht abrufen und sie aus dem JSON-Format in ein für PHP verständliches Format übersetzen.

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

In der Datenvariablen haben wir jetzt ein Array mit einer Nachricht, einer Benutzer-ID und einer Chat-ID.
"Welche Art von" json_decode (file_get_contents ('php: // input')) ", fragen Sie.

Beginnen wir von diesem Moment an:

 file_get_contents('php://input') 

In einfachen Worten, wir fragen das Skript, was zu unserer Eingabe gekommen ist, dh welche Anfrage der VC gesendet hat. Unten finden Sie ein Beispiel für eine solche Anfrage.

 {"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} 

Ich denke, es ist leicht zu verstehen, was in der Anfrage steht, wenn Sie nur minimale Englischkenntnisse haben.

Nun, "json_decode ()" ist eine Funktion, die den obigen JSON in ein Array übersetzt, mit dem PHP arbeiten kann.

Jetzt schreiben wir einen Code, der untersucht, welches Ereignis passiert ist. Wenn eine neue Nachricht bei uns eintrifft, vergleicht er die Nachricht mit denen, auf die wir eine Antwort erhalten, und überprüft die Chat-ID.

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

Jetzt müssen wir irgendwie auf diese Nachrichten reagieren. Dazu schreiben wir eine einfache Funktion.

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

Was ist hier los? Hier erstellen wir eine Anfrage an die VK-API (ich empfehle, die Dokumentation zu lesen) mit dem Nachrichtentext, der Chat-ID und dem Token, die wir zuvor erstellt haben, und senden sie an den VK-Server.

Verbinden Sie nun diese Codeteile und schreiben Sie die Reaktionen des Bots auf eine bestimmte Nachricht.

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

"Nun, warum müssen wir nach dem Senden der Nachricht 'ok' schreiben?"

Da wir die Aktualisierungsmethode namens Call Back API verwenden, dh VK über neue Nachrichten an uns spricht, müssen wir sagen, dass wir sie gehört haben, andernfalls wird sie uns mehrmals wiederholt.

Fahren wir nun mit dem Einrichten der Gruppe fort.

Wir gehen in die Einstellungen und wählen die API-Version 5.87 aus (Sie können natürlich neuere Versionen haben, aber es ist besser, eine Einheit von API-Versionen zu haben).

Bild

Aus demselben Abschnitt nehmen wir die Zeile, die der Server zurückgeben soll, und ersetzen sie durch die Variable verify_token.

Geben Sie danach die Serveradresse ein. Dazu benötigen Sie eine Domain und ein Hosting. Die von Ihnen angegebene Adresse sollte nur eine Datei mit einem Bot sein. Ich hoffe, der Leser kann das selbst erledigen.

Dann wählen wir aus, welche Ereignisse in der Community uns von VKontakte gemeldet werden. Wir brauchen nur eingehende Nachrichten.

Bild

Als nächstes bestätigen wir die Serveradresse und unser erster Bot ist einsatzbereit.

Bild

Da dies meine erste Veröffentlichung auf Habré ist, möchte ich Kommentare zu dem Artikel erhalten und mich nur weiter verbessern.

Danke fürs Lesen.

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


All Articles