Пустое действие на ответ message_new от API ВК
Пишу бота для ВКонтакте. Бот на основании входящих данных из POST-запроса создаёт объект события и его использует. Я бы хотел чтобы при событии message_event (т.е. при нажатии на кнопку клавиатуры) бот отвечал на событие для того чтобы индикатор загрузки с кнопки пропал.
Индикатор по идее должен пропадать при вызове метода messages.sendMessageEventAnswer, в соответствии с порядком действий. Этот метод должен принимать один из объектов show_snackbar, open_link, open_app. Но я не хочу ничего из этого, я хочу чтобы индикатор просто пропал. Как мне это сделать?
switch ($type) {
case "message_new":
return new TextMessageEvent(
$object["message"]["id"],
$user_model,
$chat_of_msg,
$object["message"]["text"],
[]
);
case "message_event":
$payload = $object["payload"];
// Ответ на событие должен быть здесь
return new CallbackEvent(
$object["event_id"],
$user_model,
$chat_of_msg,
CallbackType::from($payload["type"]),
$payload["data"]
);
default:
return new UnknownEvent($user_model, $chat_of_msg);
}
Ответы (1 шт):
Автор решения: Вадим Королёв
→ Ссылка
Достаточно отправить пустую строку в поле event_data.
switch ($type) {
case "message_new":
return new TextMessageEvent(
$object["message"]["id"],
$user_model,
$chat_of_msg,
$object["message"]["text"],
[]
);
case "message_event":
$payload = $object["payload"];
$this->execApiMethod('messages.sendMessageEventAnswer', [
'event_id' => $object['event_id'],
'user_id' => $object['user_id'],
'peer_id' => $object['peer_id'],
'event_data' => ''
]);
return new CallbackEvent(
$object["event_id"],
$user_model,
$chat_of_msg,
CallbackType::from($payload["type"]),
$payload["data"]
);
default:
return new UnknownEvent($user_model, $chat_of_msg);
}
execApiMethod выглядит вот так:
// Выполняет метод API
public function execApiMethod(string $method, array $fields) : array {
$fields["v"] = $this->api_version;
$fields["access_token"] = $_ENV["vkcom_apikey"];
$post_fields = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.vk.com/method/".$method);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return json_decode($output, true);
}