Как избавиться от «такого» кода?
Я бы посоветовал:
1) Разбить код на функции с осмысленными названиями. 
Гораздо лучшее читаются короткие участки кода.
Для примера, я бы вынес функции validateRequest, sendMessage, findAnswer. Перенести в отдельные функции/методы классы запросы к внешним сервисам (vk)
2) Убрать неиспользуемые переменные. Зачем тут $GROUP_ID ?
3) Не использовать однобуквенные переменные.
Вместо `foreach ($VK_CONFIG_FAQ as $k => $v) {` лучше что-то вроде `foreach ($VK_CONFIG_FAQ as $questionPattern => $answers) {`
4) Не дублировать строковые константы типа 'Бот не нашёл ответа на ваш вопрос!'. Лучше вынести в отдельную константу типа NOT_FOUND_ANSWER
Ну и про PSR уже написали
Я бы посоветовал:
1) Разбить код на функции с осмысленными названиями. 
Гораздо лучшее читаются короткие участки кода.
Для примера, я бы вынес функции validateRequest, sendMessage, findAnswer. Перенести в отдельные функции/методы классы запросы к внешним сервисам (vk)
2) Убрать неиспользуемые переменные. Зачем тут $GROUP_ID ?
3) Не использовать однобуквенные переменные.
Вместо `foreach ($VK_CONFIG_FAQ as $k => $v) {` лучше что-то вроде `foreach ($VK_CONFIG_FAQ as $questionPattern => $answers) {`
4) Не дублировать строковые константы типа 'Бот не нашёл ответа на ваш вопрос!'. Лучше вынести в отдельную константу типа NOT_FOUND_ANSWER
Ну и про PSR уже написали