@Bagens

Как заставить бота на PHP создать диалог с пользователем который вступил в группу?

Суть вопроса описана в заголовке. Есть бот который прекрасно отвечает и если раньше с ним общался он уведомляет вас сообщением о выходе и входе в группу.
Но если человек новый, ни как не общался с данным сообществом, то тишина. новый диалог не создает.

Часть кода
case 'group_join':

$userId = $data->object->user_id;

$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$use..."));


$user_name = $userInfo->response[0]->first_name;


$request_params = array(
'message' => "Добро пожаловать в наше официальное сообщество {$user_name}",
'user_id' => $userId,
'access_token' => $token,
'v' => '5.0'
);
$get_params = http_build_query($request_params);

file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
//Возвращаем "ok" серверу Callback API

echo('ok');

break;
  • Вопрос задан
  • 616 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Gromadchuk
Политика приватности ВКонтакте запрещает сообществам писать первым пользователям, даже если он вступил в группу.

Есть несколько вариантов, после которых сообщество сможет писать пользователю:
  1. Пользователь напишет в сообщество
  2. Пользователь разрешит доступ сообществу через API методом messages.allowMessagesFromGroup
  3. Пользователь разрешит доступ используя специальный виджет для сайтов
Ответ написан
Комментировать
userfordownload
@userfordownload
1. настораживает - это 'v' => '5.0'.

рабочий на 100%.
c33489f624594a51a6e343c52b5e8104.JPG
private  $token = 'хххххххххххххххххххххххххххххххххххххххххххххххх';
 private  $_ok = 'OK';

public function messages_send  ($paramm = []){
    
        if (!$paramm) {return false;} 
        else {
            $url = trim('https://api.vk.com/method/messages.send?'.http_build_query($paramm)); 
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_HEADER, false);
            $data = curl_exec($curl);
            curl_close($curl);
            // curl_setopt($curl, CURLOPT_ENCODING ,"");
            $_id_message = json_decode($data)->response;
            if (isset ($_id_message)) {
               if (is_int($_id_message)){
                  return  $this->_ok; 
               }
                
            } else {
                return $data;
            }
        }
    }


Использовать :
case 'group_leave':
               $request_params = array (
                        'message' => 'Ливнул',
                        'user_id' =>$callback_object->object->user_id,
                        'access_token' => $this->token,
                        'read_state' => 1,
                     ); 
            return $this-> messages_send ($request_params);
            break;
             
case 'group_join':
                $request_params = array (
                        'message' => 'Добро пожаловать!',
                        'user_id' =>$callback_object->object->user_id,
                        'access_token' => $this->token,
                        'read_state' => 1,
                     ); 
            return $this-> messages_send ($request_params);
             break;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы