Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » php бот в вк через callback api

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!  
Вопрос тут в следующем. Для группы в вк можно написать бота который бы отправлял ответ и в нем же выдавал готовые кнопки как указано тут: https://vk.com/dev/bots_docs_3
 
Решил посмотреть и обкатать эту возможность...  
Сделал группу добавил в нее api и написал небольшой php который успешно отсылает ответ на новые сообщения в группу, но не могу понять как клавиатуру внедрить в ответ(  
 
php для бота  

Код:
 
 
<?php
if (!isset($_REQUEST)) {
return;
}
$confirmation_token = 'Токен который возвращается при запросе';
$token = 'Ключ безопастности';
$data = json_decode(file_get_contents('php://input'));
switch ($data->type) {
 
case 'confirmation':
echo $confirmation_token;
break;
 
 
case 'message_new':
$user_id = $data->object->user_id;
$body = $data->object->body;
$user_info = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$user_id}&access_token={$token}&v=5.50"));
$user_name = $user_info->response[0]->first_name;//$user_info->response[0]->first_name;
 
//=====================================сообщение===================================
 
                        $request_params = array(
                        'message' => "{$user_name}, привет. ",
                        'user_id' => '127483897',
                        'access_token' => $token,
                        'v' => '5.50'
                        "payload":"{\"button\":\"4\"}"
                        );
 
$get_params = http_build_query($request_params);
file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
echo('ok');
break;
}
?>  
 

 
Вот такие кнопочки хочу добавить в быстрый ответ боту

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 14:43 30-08-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergioEmpasaDeParado

Цитата:
но не могу понять как клавиатуру внедрить в ответ

там же написано

Цитата:
JSON-объект клавиатуры передается строкой в параметре keyboard в методе messages.send с последней версией API. Структура объекта приводится тут.  

описываете json структуру, отправляете ее как

Цитата:
                    $request_params = array(  
                        'message' => "{$user_name}, привет. ",  
                        'user_id' => '127483897',  
                        'access_token' => $token,  
                        'v' => '5.50',
                        'keyboard' => json_encode($keyboard),
                        "payload":"{\"button\":\"4\"}"  
                        );  
 

где $keyboard - ассоциативный массив описанный по ссылке выше.
можете сразу в строчном виде сделать, тогда json_encode не нужен.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 19:40 30-08-2018 | Исправлено: Mavrikii, 19:40 30-08-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Что-то как то мне это туго дается.
 
Я правильно понимаю что эта строка совсем лишняя?

Цитата:
"payload":"{\"button\":\"4\"}"  

 
А переменную нужно описать как то так?

Цитата:
$keyboard =  [['button'], "label-button", "blue"];  

 

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 20:39 30-08-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergioEmpasaDeParado

Цитата:
Я правильно понимаю что эта строка совсем лишняя?

да, он должен быть внутри структуры keyboard

Цитата:
  keyboard:  
{  
    "one_time": false,  
    "buttons": [  
      [{  
        "action": {  
          "type": "text",  
          "payload": "{\"button\": \"1\"}",  
          "label": "Red"  
        },  
        "color": "negative"  
      },  
     {  
        "action": {  
          "type": "text",  
          "payload": "{\"button\": \"2\"}",  
          "label": "Green"  
        },  
        "color": "positive"  
      }],  
      [{  
        "action": {  
          "type": "text",  
          "payload": "{\"button\": \"3\"}",  
          "label": "White"  
        },  
        "color": "default"  
      },  
     {  
        "action": {  
          "type": "text",  
          "payload": "{\"button\": \"4\"}",  
          "label": "Blue"  
        },  
        "color": "primary"  
      }]  
    ]  
  }  


Цитата:
А переменную нужно описать как то так?  

нет, то, что выше, описывается чем то таким (не проверял)

Код:
$keyboard = [
  'one_time' => false,
  'buttons' => [
    [
      [
        'action' =>  
        [
          'type' => 'text',
          'payload' => '{"button": "1"}',
          'label' => 'Red',
        ],
        'color' => 'negative',
      ],
      [
        'action' =>  
        [
          'type' => 'text',
          'payload' => '{"button": "2"}',
          'label' => 'Green',
        ],
        'color' => 'positive',
      ],
    ],
    [
      [
        'action' =>  
        [
          'type' => 'text',
          'payload' => '{"button": "3"}',
          'label' => 'White',
        ],
        'color' => 'default',
      ],
      [
        'action' =>  
        [
          'type' => 'text',
          'payload' => '{"button": "4"}',
          'label' => 'Blue',
        ],
        'color' => 'primary',
      ],
    ],
  ],
];


Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:51 30-08-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Кажется вы тут последний живой человек который весьма компетентен в своей области.
Спасибо за подсказку все получилось. Теперь дальше буду обкатывать)
 

 
Если что полный код  

Код:
 
<?php
if (!isset($_REQUEST)) {
return;
}
 
$confirmation_token = 'Токен сообщества';
$token = 'Длинный ключ';
$data = json_decode(file_get_contents('php://input'));
 
switch ($data->type) {
case 'confirmation':
echo $confirmation_token;
break;
 
case 'message_new':
$peer_id = $data->object->peer_id;
$body = $data->object->body;
$user_info = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$user_id}&access_token={$token}&v=5.50"));
 
$keyboard = [
  'one_time' => false,
  'buttons' => [
    [
      [
        'action' =>  
        [
          'type' => 'text',
          'payload' => '{"button": "1"}',
          'label' => 'Red',
        ],
        'color' => 'negative',
      ],
      [
        'action' =>  
        [
          'type' => 'text',
          'payload' => '{"button": "2"}',
          'label' => 'Green',
        ],
        'color' => 'positive',
      ],
    ],
    [
      [
        'action' =>  
        [
          'type' => 'text',
          'payload' => '{"button": "3"}',
          'label' => 'White',
        ],
        'color' => 'default',
      ],
      [
        'action' =>  
        [
          'type' => 'text',
          'payload' => '{"button": "4"}',
          'label' => 'Blue',
        ],
        'color' => 'primary',
      ],
    ],
  ],
];  
 
//=====================================Тут====================================
 
                        $request_params = array(
                        'message' => "привет",
                        'peer_id' => $peer_id,
                        'access_token' => $token,
                        'v' => '5.80',
                        'keyboard' => json_encode($keyboard)
                        );
 
 
//=======================================Тут==================================
$get_params = http_build_query($request_params);
file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
echo('ok');
break;
}
?>  
 

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 23:34 30-08-2018 | Исправлено: SergioEmpasaDeParado, 23:35 30-08-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можете еще с маленькой проблемой столкнуться. В ответ на ваше сообщение может валиться поток безостановично из сообщений. Допишите еще:

Код:
case 'message_reply':
echo 'ok';  
break;
default:
echo 'ok';  
break;

Это решит вашу проблему

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 09:22 31-08-2018
SergioEmpasaDeParado

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Добрый день. Не могли бы вы посоветовать какую литературу можно почитать или хотя бы на какую тему,  что бы научиться правильно программировать такие кнопки?
Я был бы вам очень признателен.

Всего записей: 38 | Зарегистр. 13-04-2018 | Отправлено: 14:05 03-09-2018
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergioEmpasaDeParado

Цитата:
какую литературу можно почитать или хотя бы на какую тему,  что бы научиться правильно программировать такие кнопки

читать тут можно только ту документацию, что дает к своему API ВК.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:25 03-09-2018
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » php бот в вк через callback api


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru