Сообщения сообщества вконтакте. Отправка сообщений через API VK средствами PHP для ленивых

  • 11.04.2019

О запуске нового сервиса, с помощью которого пользователи могут общаться с администрацией сообществ, используя привычные Диалоги. С сегодняшнего дня он доступен всем сообществам!

Включить его в своей группе или публичной странице можно в управлении сообществом. После этого будьте готовы оперативно и качественно отвечать пользователям. А быть максимально оперативными вам помогут индикаторы о новых сообщениях в левом меню — http://vk.com/wall-2158488_488661

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

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

Кнопка для отправки сообщения находится под аватаром сообщества, а если её там нет - администраторы решили не подключать сервис. Оставить сообщение вы также можете с мобильной версии сайта и со всех официальных клиентов соцсети для смартфонов. Во время тестирования нового сервиса половина сообщений сообществам были отправлены именно с мобильных устройств.

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

Возможности сообщений для сообществ

Вы никогда не упустите контекст диалога с вашим клиентом: ВКонтакте сохраняет переписку с каждым человеком, который обратился к вам. Нововведение также позволяет брендам отказаться от создания специальных профилей, которые использовались раньше, чтобы вести непубличные диалоги.При использовании инструмента все диалоги происходят от имени сообщества бренда - независимо от того, какой администратор или редактор страницы в нём участвует. Кроме того, ВКонтакте подскажет вам, какой менеджер отвечает на то или иное сообщение прямо сейчас, а также кто из сотрудников компании уже общался с пользователем ранее.

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

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

Чтобы включить ее заходим в "Управление сообществом". Далее переключатель в блоке "Сообщения сообщества" ставим на "Включены". Дополнительно можно добавить отдельную ссылку в левую колонку вашего меню ВКонтакте с помощью галочки "Добавить в левое меню". Для сохранения изменений внизу нажимаем кнопку "Сохранить".

Теперь, зайдя в сообщество, в правой колонке должна появится кнопка "Отправить сообщение". С ее помощью любой пользователь может отправить сообщение сообществу.

Все полученные таким образом сообщения будут отображаться в сообществе и в левой колонке.

В дальнейшем общение происходит у пользователя через "Личные сообщения", а у сообщества через "Сообщения сообщества".

При наведении на диалог, переписка может быть добавлена в важные или полностью удалена. Важным можно сделать сообщение и внутри переписки.

При удалении можно пометить сообщение как спам или заблокировать пользователя.

Еще одна важная функция - возможность помечать сообщения отвеченными. Представим ситуацию, что вам написал пользователь, но дать ответ в данный момент вы не можете. Ничего страшного, для этого в сообществе предусмотрено 4 вкладки сообщений.

  • Важные - те сообщения, которые вы пометили в диалогах или внутри переписки;
  • Неотвеченные - те сообщения, которые были прочитаны, но по какой-то причине на него вы не дали никакого ответа;
  • Непрочитанные - новые сообщенbя, которые еще не были прочитаны.

Отвеченным можно сделать сообщение внутри переписки на специальную иконку над диалогом. Здесь же можно добавить сообщение в "Важные".

На этом все. Надеюсь, что для вас данная возможность будет полезной.

В этом уроке покажу как скачать музыку из ВКонтакте с помощью расширения для браузера от сайта savefrom.net. Первым делом необходимо установить "Savefrom.net помощник " . Переходим по ссылке и по инструкции устанавливаем расширение для вашего браузера. Не обращайте внимание на то, что инструкция рассказывает про youtube. Наша задача просто установить помощник.

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

В этом уроке расскажу как поставить смайлик в статус ВКонтакте .

Добрый день.

Сегодня мы поговорим о такой простой вроде бы вещи, как сообщения пользователю.

В 8 перекочевал метод из 7.7 - "Сообщить(...) ". Метод этот очень простой, он открывает окно сообщение, если оно не открыто, и добавляет туда текст сообщения. Как и в 1С 7.7 в нем есть второй параметр, который определяет иконку напротив сообщения. Эта иконка определяет важность сообщения.

Время шло, и мы получили в руки управляемые формы. В управляемых формах нет единого окна сообщений. Однако метод все еще поддерживается. В новом интерфейсе сообщения прилепляются к активному окну. При переключении в другое окно, сообщения пропадаю из вида, а при возвращении отображаются снова. В некоторых случаях это не удобно, но тут ничего не поделаешь, управляемая форма предполагает отсутствие главного окна, к которому можно было бы привязать сообщения.

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

Дело в том, что теперь принято использовать не метод глобального контекста "Сообщить(...)", а объект "СообщениеПользователю ". Этот объект доступен везде, и на клиенте и на сервере. У него есть несколько свойств и пару методов.

В общем случае, если Вам надо выдать пользователю просто сообщение, без какого либо интерактива, то достаточно написать:



Сообщение.Сообщить();

Эти три строки абсолютно идентичны уже известному нам методу, а по сему использовать этот объект для такого сообщения бессмысленно.

Основными полями, которые расширяют возможности сообщения являются:

  • КлючДанных
  • Поле

Ключ данных - ссылка на объект информационной базы, к которому это сообщение относится, или ключ записи. Так написано в справке. Если мы сюда сунем ссылку на документ или справочник, то двойной щелчок приведет к открытию этого объекта, не зависимо от того, в чьей форме было выведено сообщение. Соответственно, если сообщение вылезло в форме документа, а в ключе данных лежит ссылка на него же, то новая форма не откроется.

Ерунда может получиться, если мы выдаем сообщение в форме еще не записанного объекта. В этом случае мы имеем пустую ссылку. Но платформа не теряется, и просто ничего не открывает, т.е. Вы остаетесь в той форме, которая была.

Поле - это строка с именем поля, которое надо активировать. Причем не важно, откроется форма другого объекта, или мы останемся в текущей форме.

Вот пример, как это работает:

Допустим перед записью элемента справочника в модуле формы мы проверяем уникальность реквизита "Id" и, если такой уже есть, выдаем сообщение:


Если выб.Следующий() Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.КлючДанных = Выб.Ссылка;
Сообщение.Поле = "id";
Сообщение.Текст = "Раздел с таким Id уже существует";
Сообщение.Сообщить();
КонецЕсли;

В данном примере по двойному щелчку откроется элемент справочника с таким же Id, а поле Id будет активно и в нем будет подсказка:

Вроде удобно, мы можем как изменить Id нового элемента, так и отредактировать старый, в него легко попасть, щелкнув по сообщению. Но поле в текущем элементе у нас не активизировано, что при большом количестве полей может быть полезней, чем открыть форму другого объекта. Ведь другой объект уже записан и используется и вероятность, что ошибка в нем - мала. Скорее всего нам надо править текущий элемент.

для этого меняем свой код следующим образом:

//если есть дубли, в выборке будут данные
Если выб.Следующий() Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.КлючДанных = Объект.Ссылка;
Сообщение.Поле = "id";
Сообщение.Текст = "Раздел с таким Id уже существует";
Сообщение.Сообщить();
КонецЕсли;

Отличие только в том, что в КлючДанных мы передаем ссылку на элемент, который у нас открыт. К сожалению этот код не работает:(По двойному щелчку у нас откроется модальное окно.

Чтобы это заработало, есть нюанс, что нужно заполнить поле "ПутьКДанным ". Не могу точно объяснить зачем, просто это надо запомнить. Открываем другой объект - путь к данным не нужен, позиционируемся внутри текущего - нужен. Вывод - лучше заполнять всегда, не ошибетесь. Добавляем в код строку:

Сообщение.ПутьКДанным = "объект";

И все красиво:

Еще один нюанс, о котором хочу рассказать. Если "поле" оставить пустым, то не будет происходить позиционирование на элементе управления и рядом с ним не вылезет всплывающей подсказки. Если же "поле" заполнить неверно, то позиционирование произойдет на форме в целом и всплывающая подсказка будет, но в конце формы, без привзяки к реальному полю ввода.

Следующий нюанс - у сообщения есть метод - "УстановитьДанные ". Он на основании объекта заполняет поля КлючДанных и ПутьКДанным . Это гораздо удобнее, сделать все в одну строку. Как правило в форме элемента/документа у нас есть объект. Единственно, что на сервере надо писать так:

Сообщение.УстановитьДанные(РеквизитФормыВЗначение("Объект"));

Но в предопределенной процедуре формы ПередЗаписьюНаСервере на самом деле есть уже параметр ТекущийОбъект . А на клиенте мы вообще объект не получим. Еще в модуле объекта (не в форме) нужно писать так:

Сообщение.УстановитьДанные(ЭтотОбъект);

В заключении хочу наговорить гадостей про управляемые формы. Это касается как ТАКСИ, так и обычных УФ. Дело в том, что в УФ очень плохо передаются интерфейсные списки. Таблица, содержащая в себе 1000 строк очень медленно прорисовывается, а в web браузере она может вообще несколько минут открываться. Это относится и к списку сообщений. для эксперимента выведите 1000 сообщений и попробуйте попереключаться между окошками. Система умрет сразу. причем четко видно, как система думает именно над выводом сообщений. Переход в окно с кучей сообщений выглядит так:

Отображается содержимое окна
-что резко мерцает и появляется панель сообщений
-все повисает и вы смотрите, как скрол в окне сообщений ползет вниз

Т.е. как раньше, вывести в панель сообщений лог работы длительной обработки, в котором несколько тысяч записей - нельзя. Я бы советовал ограничиться 10ю сообщениями. Логи надо выводить в многострочную строку, она отображается почти мгновенно не зависимо от количества строк. Конечно, если вы проверяете заполненность реквизита табличной части, строк в ней 1000 и в каждой ошибка, то да, придется потерветь:) Хотя можно в этом случае продумать свой способ отображения сообщений, например в поле HTML документа.

1С СообщениеПользователю выводит сообщение пользователю (после окончания обработки) или сохраняет его в очередь, если сообщение невозможно вывести «прямо сейчас», например:
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Привет, мир!";
Сообщение.Сообщить();

Во многих случаях сообщения генерируются массово во время определенной обработки. Например, при проверке большой таблицы, может появится множество сообщений об ошибках – в разных строчках таблицы. Или при обработке проведения. При этом обработка может вестись на сервере или в регламентном задании и вывести данные сообщения затруднительно.

1С СообщениеПользователю записывает сообщения в «некоторую» очередь, и, после окончания обработки выводит их пользователю, если это возможно. Иначе – весь список сообщений возможно получить с помощью метода ПолучитьСообщенияПользователю().

Чтобы вывести сообщение пользователю с помощью 1С СообщениеПользователю в конкретной, уже открытой форме, дополнительно нужно установить идентификатор формы:
Сообщение.ИдентификаторНазначения = Форма.УникальныйИдентификатор;

Чтобы сообщение 1С СообщениеПользователю было выведено во всплывающем окне у конкретного поля формы, в модуле которой выполняется код, нужно указать «путь» к нему:
Сообщение.Поле = "Наименование"; //где Наименование – это реквизит формы
Сообщение.Поле = "Объект.Наименование"; //где Наименование – это реквизит объекта (т.е. справочника, чья форма редактируется)
Сообщение.Поле = "Товары.Цена"; //где Товары – таб.часть на форме, Цена – колонка этой таб.части

Чтобы сделать то же, но в модуле другого объекта (общем модуле), нужно дополнительно указать объект (СправочникОбъект, ДокументОбъект и т.п.):
Сообщение.Поле = "Наименование"; //где Наименование – это реквизит СправочникОбъект
Сообщение.УстановитьДанные(СправочникОбъект);
//При двойном щелчке на сообщение будет открыта форма объекта со всплывающим сообщением у требуемого поля

Другой способ связать сообщение 1С СообщениеПользователю с данными объекта:
//для справочника, документа..
Сообщение.КлючДанных = СправочникСсылка;
Сообщение.ПутьКДанным = "Объект";

//для записей регистра
Сообщение.КлючДанных = РегистрМенеджерЗаписи.ИсходныйКлючЗаписи; //обычно основной реквизит формы, связанный с регистром
Сообщение.ПутьКДанным = "Запись";

В типовых конфигурациях на управляемых формах для тонкого клиента, например «Управление торговлей, редакция 11» и «Бухгалтерия, редакция 3», в общем модуле ОбщегоНазначенияКлиентСервер имеется функция СообщитьПользователю(), которая «универсализирует» работу с данным объектом. Синтаксис функций в разных конфигурациях – разный.

Так как 1С СообщениеПользователю формирует список сообщений, чтобы его обнулить (например, перед выполнением сложной обработки), можно вызвать функцию:
ПолучитьСообщенияПользователю(Истина);

Что мы будем делать: настроим отправку сообщений от имени конкретного пользователя в несколько чатов и другим пользователям используя HTTP запрос средствами PHP , с минимальными усилиями.

Собственно, одними сообщениями мы не ограничимся. Все будет работать через standalone приложение vk по тому принципу, что мы потенциально сможем делать все действия, которые будут доступны этому самому пользователю (точнее все то, на что мы выдадим сами себе права, но об этом чуть позже).

Сообщения рассматриваем именно по той причине, что с ними можно работать только в standalone-приложениях.

План действий:
1. Создаем приложение
2. Получаем access_token
3. отправляем сообщения

1. Создаем приложение

Этот пункт делать под тем аккаунтом, к которому будет привязано приложение (Не обязательно тот же, с которого будут идти сообщения).

Имя пишем какое угодно - фигурировать оно нигде не будет.
Тип - Standalone-приложение.

Больше тут можно ничего не трогать.

2. Используя ID и secret_key из приложения получаем access_token

access_token - строка из некоторого количества символов, которая будет отправляться с POST запросом для выполнения каких то функций. Собственно, к ней привязано, от имени какого пользователя будем действовать и что нам можно будет делать.

Для этого создаем на сайте страничку вот с таким кодом:
&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=&response_type=token&v=5.37">Push the button
$client_id - собственно, ID нашего приложения из пункта 1.

$scope - список прав, которые мы можем делать от имени нашего пользователя. Конктерно, для нашей задачи подходит именно такой: возможность доступа в любое время (offline), и доступ к сообщениям (messages). Если надо больше, полный список . Можно выставлять либо битовой маской, либо перечислить названия.

Помимо пункта доступ к общей информации , все остальные пункты будут соответствовать списку разрешений, которые были переданы в scope. Жмем далее и видим следующее:

Красным выделен acces_token, ради которого весь второй пункт и писался.

3. HTTP запросами, передавая через POST параметры отправляем сообщения или используем любые другие методы API

Для нетерпеливых , проверить что все работает можно так:

Заменяем нули в конце на наш acces_token и переходим по этой ссылке в браузере.
https://api.vk.com/method/messages.send?user_id=6269901&message=habrahabr&v=5.37&access_token=000000
Что произойдет:
Сообщение с текстом из параметра message будет отправлено пользователю c указанным user_id . (Если оставить как есть - придет мне. Я не обижусь).

Параметры получателя:
  • user_id - id пользователя-адресата
  • domain - вместо user_id можно указать имя странички адресата (то, что в url-е после vk.com)
  • chat_id - сообщение уйдет в чат. Чтоб взять id чата, заходим в нужный чат, url будет иметь вид vk.com/im?peers=000000&sel=c888. Наш chat_id будет 888 (! не с888)