Сообщения с сайта в ВК – просто и эффективно – PHP+CUrl

в 20:23, , рубрики: php

Доставка сообщений в ВК удобна большинству сайтов разной направленности: емайлы многие не читают, в таких мессенджерах как Вотсап и Вайбер все сложно. А рассылка новостей и личных уведомлений с сайта в ВК – самое то – легко, просто и сразу видно пользователю.

Для своего сервиса Глиса мне необходимо быстро и бесплатно доставлять уведомления о новых объявлениях пользователям. Базовый канал – емайл – не удобен. Другой хороший канал – мессенджер Телеграмм – решил побороться за приватность и стал не надежен. Поэтому пришлось добавить альтернативу в виде ВК (тем более что сервис умеет еще отслеживать группы в ВК на появление новых записей и комментариев). Был приятно удивлен простотой и продуманностью настройки, даже Телеграмм рядом не стоял.

1. Подключаем виджет «Разрешить писать сообществу»
Виджет выглядит в виде кнопки. Я встроил кнопку в настройки аккаунта пользователя Глисы.

image

В тексте нужно заменить 74449217 на id своей группы. Также продумать куда будет сохраняться полученный userId ВКонтакте. В приведенном ниже коде он присваивается полю vk_id, а потом сохраняется вместе с другими настройками.

<script type='text/javascript' src='https://vk.com/js/api/openapi.js?154'></script>
		<div id='vk_send_message'></div>
		<script type='text/javascript'>
		  VK.Widgets.AllowMessagesFromCommunity('vk_send_message', {height: 30},74449217);

		  VK.Observer.subscribe('widgets.allowMessagesFromCommunity.allowed', function f(userId) {
			console.log(userId);
			console.log('allowed');
			document.getElementById('vk_id').value=userId;			
		  });

		  VK.Observer.subscribe('widgets.allowMessagesFromCommunity.denied', function f(userId) {
			console.log(userId);
			console.log('denied');
			document.getElementById('vk_id').value='';			
		  });

		</script>

Документация по виджету: https://vk.com/dev/widget_allow_messages_from_community
Разрешение от пользователя у нас получено, теперь организуем отправку сообщений.

2. Отправка сообщений
В настройках своего сообщества включаем сообщения сообщества.

image

Генерируем токен своего сообщества.

image

В общем все готово. Для отправки сообщения используем PHP+CUrl. В функцию отправки в качестве входных параметров передаем ранее полученный id пользователя ВК и текст сообщения. Также функция использует константы vk_token – токен сообщества.

//отправка сообщения в vk
function send_vk($vk_id, $text_source)
{
	
	$text=rawurlencode($text_source);
	$ch = curl_init($url);
	curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
	curl_setopt($ch, CURLOPT_POST, 1);	 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
	curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
			
	$url="https://api.vk.com/method/messages.send?user_id=$vk_id&v=5.76&access_token=".vk_token;
	curl_setopt($ch, CURLOPT_URL,$url);
	curl_setopt($ch, CURLOPT_POSTFIELDS, "&message=".$text);
	$hh=curl_exec($ch);
	//если отправка не удалась
	if (!strpos(" ".$hh,'{"response":')) 
	{		
		//если нет сообщения об ошибке, отправляем повторно
		if (!strpos(" ".$hh,'error')) {$hh=curl_exec($ch);}
	}
	$html=$hh;				
	
	curl_close($ch);		
	return $html;
}

Вместе с изучением возможностей и материала я потратил на организацию отправки оповещений в ВК один день — считаю, что это один из самых простых вариантов коммуникации с пользователем.

Автор: незнакомец

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js