El primer bot PHP para VKontakte

Hola Khabrovites. En esta publicación, escribiré sobre cómo hacer mi primer bot de chat para VKontakte. Creo que esto no será interesante para programadores experimentados, pero aquellos que recién comienzan su viaje estarán interesados, ya que yo mismo no he ido muy lejos y entiendo los problemas de los principiantes. Y te advierto de inmediato que la mayoría de las capturas de pantalla estarán en inglés.

Primero necesitamos crear una comunidad. Creo que todos pueden manejar esto.

Luego, ingresamos a la configuración de la comunidad, seleccionamos el elemento "Uso de API" y hacemos clic en el botón "Crear token".

imagen

A continuación, debe elegir, de hecho, qué podemos usar con este token. Necesitamos acceso a los mensajes de la comunidad, pero podemos elegir todos los derechos de acceso para no tener que recordar sobre la creación de tokens en el futuro.

imagen

Y así obtuvimos la codiciada ficha. Por cierto, debe guardarse en un lugar seguro y no mostrarse a nadie. Ahora puedes continuar con el código.

imagen

Escribiremos código en PHP, para que pueda descargar el código de Visual Studio o PHPStorm. En principio, el código se puede escribir en el bloc de notas, pero no será conveniente. Después del código, pasaremos a configurar más el grupo.

Entonces, para empezar, necesitamos obtener información sobre el mensaje entrante y traducirlo del formato JSON a uno entendible para PHP.

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

En la variable de datos, ahora tenemos una matriz con un mensaje, ID de usuario e ID de chat.
"¿Qué tipo de" json_decode (file_get_contents ('php: // input')) ", pregunta?

Comencemos desde este momento:

 file_get_contents('php://input') 

En términos simples, le preguntamos al script qué llegó a nuestra entrada, es decir, qué solicitud envió el VC. A continuación se muestra un ejemplo de dicha solicitud.

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

Creo que es fácil entender lo que está escrito en la solicitud, si tiene un conocimiento mínimo en inglés.

Bueno, "json_decode ()" es una función que traduce el JSON anterior en una matriz con la que PHP puede funcionar.

Ahora escribiremos un código que mire qué evento sucedió, y si nos llega un nuevo mensaje, compara el mensaje con aquellos a los que tenemos una respuesta y mira la ID del chat.

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

Ahora necesitamos responder de alguna manera a estos mensajes. Para hacer esto, escribimos una función 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); } ?> 

¿Qué está pasando aquí? Aquí creamos una solicitud para la API de VK (recomiendo leer la documentación) con el texto del mensaje, el ID de chat y el token que creamos anteriormente, y lo enviamos al servidor de VK.

Ahora conecte estos fragmentos de código y escriba las reacciones del bot a un mensaje en particular.

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

"Bueno, ¿por qué tenemos que escribir 'ok' después de enviar el mensaje?"

Dado que usaremos el método de actualización llamado Call Back API, es decir, VK nos hablará sobre nuevos mensajes, debemos decir que lo escuchamos, de lo contrario, se nos repetirá varias veces.

Ahora pasemos a configurar el grupo.

Entramos en la configuración y seleccionamos la versión 5.87 de la API (por supuesto, puede tener versiones más nuevas, pero es mejor tener una unidad de versiones de la API).

imagen

Desde la misma sección, tomamos la línea que el servidor debería devolver y la sustituimos en la variable confirm_token.

Después de eso, complete la dirección del servidor. Para hacer esto, necesita tener un dominio y alojamiento. La dirección que especifique debe ser solo un archivo con un bot. Espero que el lector pueda manejar esto por sí mismo.

Luego, elegimos qué eventos de la comunidad nos informarán VKontakte. Solo necesitamos mensajes entrantes.

imagen

A continuación, confirmamos la dirección del servidor y nuestro primer bot está listo para usar.

imagen

Como esta es mi primera publicación en Habré, quiero recibir comentarios sobre el artículo y solo mejorar aún más.

Gracias por leer

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


All Articles