@EnotNihilist

VK не отправляет клавиатуру с кнопкой-ссылкой, чей код написан на PHP. Есть ли решение?

Добра, народ)
Столкнулся со следующей проблемой: VK не отображает клавиатуру бота, содержащую кнопки-ссылки (тип кнопки: open_link). Лог неудачных запросов пуст, остальная часть кода также выполняется - в результате чего выяснилось, что проблема кроется непосредственно в коде отправки клавиатуры или в её обработке VK. Мой код выглядит следующим образом, базируется на самолично улучшенной библиотеке vk_api.php.

Код функции отправки клавиатуры:
class vk_api{

	private $token = '';
	private $v = '';

	public function __construct($token, $v){
        $this->token = $token;
		$this->v = $v;
	}

	public function sendButton($sendID, $message, $gl_massiv = [], $inline = False, $one_time = False) {
		$buttons = [];
		$i = 0;
		foreach ($gl_massiv as $button_str) {
            $j = 0;
            foreach ($button_str as $button) {
                $buttons[$i][$j]["action"]["type"] = button[3];
                if ($button[0] != null)
                    $buttons[$i][$j]["action"]["payload"] = json_encode($button[0], JSON_UNESCAPED_UNICODE);
                if (button[3] == 'open_link') 
                    $buttons[$i][$j]["action"]["link"] = $button[4];
                $buttons[$i][$j]["action"]["label"] = $button[1];
                $buttons[$i][$j]["color"] = $button[2];
                $j++;
            }
            $i++;
        }
        $buttons = [
            "one_time" => $one_time,
            "buttons" => $buttons,
			"inline" => $inline
				];
        $buttons = json_encode($buttons, JSON_UNESCAPED_UNICODE);
		return $this->request('messages.send', ['random_id'=>rand(0,2147483647),'message'=>$message, 'peer_id'=>$sendID, 'keyboard'=>$buttons]);
    }
}

Код использования функции отправки клавиатуры:
$vk->sendButton($peer_id, $TEXT_Start, $BTN_MainSet, False);


Код назначения переменных кнопок:

$TEXT_Start = 'Вы находитесь в собственной жилячейке.';

	$BTN_Moving = [['Main Menu' => 'Moving'], $TIL_Moving, 'negative', 'text'];
	$BTN_LookAround = [['Main Menu' => 'Look Around'], $TIL_LookAround, 'positive', 'text'];
	$BTN_Settings = [['Main Menu' => 'Settings'], $TIL_Settings, 'secondary', 'text'];

	$BTN_Inventory = [['Persistent Buttons' => 'Inventory'], $TIL_Inventory, 'secondary', 'open_link', 'https://vk.com/im'];
	$BTN_GameChat = [['Persistent Buttons' => 'Game Сhat'], $TIL_GameChat, 'secondary', 'open_link', 'https://vk.com/im'];

	$BTN_MainSet = [[$BTN_Moving,$BTN_LookAround],[$BTN_Settings],[$BTN_Inventory,$BTN_GameChat]];

Из собственных догадок: возможно, проблема заключается в некорректном написании ссылки (в документации VK API указано, что тип переменной ссылки должен быть URL). Пробовал использовать urlencode, однако, он не помогает исправить ситуацию.

Также, пробовал искать информацию о своей проблеме в интернете, и нашёл лишь данного пользователя с аналогичной проблемой, он так и не смог решить данную проблему.

Заранее благодарю за любую помощь)
  • Вопрос задан
  • 679 просмотров
Пригласить эксперта
Ответы на вопрос 1
@freezeengine
Человек :)
Сразу к решению - в кнопку с ссылкой нельзя передавать её цвет.
Пример массива клавиатуры с такой кнопкой:
$keyboard = [
					"one_time" => false,
					"inline" => true,
					"buttons" => [[
						[
							"action" => [
								"type" => "open_link",
								"link" => 'https://www.php.net/',
								"payload" => '{"button": "0"}',
								"label" => "Ссылка"
							]
						],
					]]
				];
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы