Помогите разобраться, где я дурак :)
Хочу сделать бота в личных сообщениях сообщества, который бы реагировал на определённые сообщения конкретным ответом. То есть, если пользователь шлёт цифру "1", то получает соответствующую инструкцию, если "2", то другую и так далее.
С моими знаниями (и при помощи гугла) удалось сделать такой вариант:
$messageText = $data->object->body;
$userId = $data->object->user_id;
$userInfo = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$userId}&v=5.0"));
$user_name = $userInfo->response[0]->first_name;
// Условие для 1
if (trim($messageText) === "1") {
$request_params = array(
'message' => "Привет, {$user_name}!<br>" .
"Текст для 1",
'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');
}
// Условие для 2
elseif (trim($messageText) === "2") {
$request_params = array(
'message' => "Привет, {$user_name}!<br>" .
"Текст для 2",
'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');
}
Этот код проверен уже, и он работает. Но не справляется с задачей. Дело в том, что сообщения, которые отправляются пользователям - большие. И при построении запроса, видимо, просто срабатывает ограничение на количество символов в методе file_get_contents
.
Я попробовал сделать на сURL (по примерам документации):
if (trim($messageText) === "1") {
$msg = "Hello, world";
//Функция для вызова любого метода API
function _vkApi_call($method, $params = array()) {
$params['access_token'] = $token;
$params['v'] = VK_API_VERSION;
$url = VK_API_ENDPOINT.$method.'?'.http_build_query($params);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($curl);
curl_close($curl);
$response = json_decode($json, true);
return $response['response'];
}
//Функция для вызова messages.send
function vkApi_messagesSend($peer_id, $message, $attachments = array()) {
return _vkApi_call('messages.send', array(
'peer_id' => $peer_id,
'message' => $message,
'attachment' => implode(',', $attachments)
));
}
vkApi_messagesSend($userId, $msg);
echo('ok');
}
Сообщение от пользователя не прочитывается. В запросах ВК: Error: HTTP response code said error
. К сожалению, моих знаний тут не хватает (не судите строго, все с чего-то начинали).
Собственно вопрос: как отправить большое сообщение?
пробуйте через метод POST отправлять
//Функция для вызова любого метода API
function _vkApi_call($method, $params = array())
{
$params['access_token'] = $token;
$params['v'] = VK_API_VERSION;
$url = VK_API_ENDPOINT . $method;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$json = curl_exec($ch);
curl_close($ch);
$response = json_decode($json, true);
return $response['response'];
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Как сделать так, чтобы после перезагрузи страницы файл оставался в input?
Привет всем, создаю галерею в wordpress, через добавить медиафайл / добавить галерею, вставляю изображение все вроде хорошо
Я уже изучил основы php, и хочется мне сделать прокси, но я не знаю как, скачал какой-то прокси сервер, работает, но вк не работает, ютуб неправильно...
я формирую большой массив из постороннего API в js хочу что бы при вводе имени происходил сразу поиск совпадений по буквам для этого использую...