@polupanov_ai

Как опубликовать сообщение в группе с помощью API?

Вопрос актуален для лиц имеющим опыт в работе с api битрикс и модулями входящие в редакцию Корп. портал.

Нужно опубликовать сообщение в группе социальной сети с помощью api. Покопавшись я понял что сообщения в группе - есть сообщения блога пользователя. Блог при помощи CBlogPost::Add() создать получилось, а вот как сделать так что-бы этот блог отображался в ленте сообщений группы не могу понять.

При помощи CBlogPost::GetList() получилось вывести список сообщений и там есть сообщения которые уже есть в ленте группы и те которые я создал с помощью CBlogPost::Add().
  • Вопрос задан
  • 2876 просмотров
Решения вопроса 1
gromdron
@gromdron Куратор тега Битрикс24
Работаю с Bitrix24
Чтобы отправить сообщение в живую ленту нужно еще более изощренный метод.

Подключаем модуль Соц.сети:
CModule::IncludeModule("socialnetwork");

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

$arFields = array(
 "TITLE" => "Заголовок записи",
 "DETAIL_TEXT" => "Тело сообщения",
 "BLOG_ID" => 1, //ID отправителя
 "AUTHOR_ID" => 1, //ID блога, в котором будет запись
 "DATE_PUBLISH" => '11.02.2014 09:08', // дада
 "PUBLISH_STATUS" => BLOG_PUBLISH_STATUS_PUBLISH, // Читаем в API
 "ENABLE_TRACKBACK" => 'N',
 "ENABLE_COMMENTS" => 'Y'
);


При успешном добавлении ($ID = CBlogPost::Add($arFields);) получим ID blogPost записи

Затем необходимо отправить это сообщение в ленту, для нам нужен фрагмент кода (заменить соответствующим образом):

$arEvent = array (
	'EVENT_ID'     => 'blog_post',
	'=LOG_DATE'    => 'now()',
	'TITLE_TEMPLATE' => '#USER_NAME# добавил(а) сообщение "#TITLE#" в блог',
	'TITLE'    => "Заголовок записи",
	'MESSAGE'  => "Текст записи",
	'TEXT_MESSAGE'  => "Текст записи",
	'MODULE_ID'     => 'blog',
	'CALLBACK_FUNC' => false,
	'SOURCE_ID'     => $ID,
	'ENABLE_COMMENTS'  => 'Y',
	'RATING_TYPE_ID'   => 'BLOG_POST',
	'RATING_ENTITY_ID' => $newID,
	'ENTITY_TYPE' => 'U',
	'ENTITY_ID'   => '1',
	'USER_ID'     => '1',
	'URL' => '/company/personal/user/1/blog/'.$ID.'/',
);


Создаём запись в ленте через: CSocNetLog::Add, на выходе получаем eventID (в случае успеха)

Если все прошло хорошо, то выставляем права на пост (в премере отправляем ВСЕМ ПОЛЬЗОВАТЕЛЯМ G3)

// Выдает права
CSocNetLogRights::Add ( $eventID, array ("G3") );
// Отправляет уведомление о новом сообщении
CSocNetLog::SendEvent ( $eventID, 'SONET_NEW_EVENT' );


Радуемся =)

Все параметры получаются по средствам GetList например.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Я столкнулся с тем что пост создавался но не отображался в ленте, что было связано с правами. В итоге пришел с такому варианту:
function postToGroup($blogid, $authorid, $message_title, $message_body){
    CModule::IncludeModule("blog");
    $arFields = array (
      'TITLE' => $message_title,
      'DETAIL_TEXT' => $message_body,
      'DETAIL_TEXT_TYPE' => 'text',
      'DATE_PUBLISH' => ConvertTimeStamp(time() + CTimeZone::GetOffset(), "FULL"),
      'PUBLISH_STATUS' => 'P',
      'PATH' => '/company/personal/user/4438/blog/#post_id#/',
      'URL' => 'u4438-blog-s11',
      'BACKGROUND_CODE' => false,
      'PERMS_POST' => 
      array (
      ),
      'PERMS_COMMENT' => 
      array (
      ),
      'MICRO' => 'N',
      'CATEGORY_ID' => '',
      'SOCNET_RIGHTS' => 
      array (
        0 => 'SG48',
      ),
      'UF_BLOG_POST_FILE' => 
      array (
        0 => '',
      ),
      'UF_BLOG_POST_IMPRTNT' => '0',
      'UF_IMPRTANT_DATE_END' => null, //  Bitrix\Main\Type\DateTime::__set_state
      'UF_BLOG_POST_VOTE' => 'n0',
      'SEARCH_GROUP_ID' => '1',
      '=DATE_CREATE' => 'now()',
      'AUTHOR_ID' => $authorid,
      'BLOG_ID' => $blogid,
    );

    $ID = CBlogPost::Add($arFields);

    $arEvent = array (
      'EVENT_ID' => 'blog_post',
      '=LOG_DATE' => 'now()',
      'TITLE_TEMPLATE' => '#USER_NAME# добавил(а) сообщение "#TITLE#" в блог',
      'TITLE' => $message_title,
      'MESSAGE' => $message_body,
      'TEXT_MESSAGE' => $message_body,
      'MODULE_ID' => 'blog',
      'CALLBACK_FUNC' => false,
      'SOURCE_ID' => $ID,
      'ENABLE_COMMENTS' => 'Y',
      'RATING_TYPE_ID' => 'BLOG_POST',
      'RATING_ENTITY_ID' => $ID,
      'ENTITY_TYPE' => 'U',
      'ENTITY_ID' => $authorid,
      'URL' => '/company/personal/user/4438/blog/'.$ID.'/',
      'USER_ID' => $authorid,
      'TAG' => 
      array (
      ),
    );

    $logID = CSocNetLog::Add($arEvent, false);

    $rights = array (
      0 => 'OSG48_L',
      1 => 'SG48',
      2 => 'SG48_A',
      3 => 'SG48_E',
      4 => 'SG48_K',
      5 => 'U4438',
      6 => 'SA',
    );

    if (intval($logID) > 0)
    {
        CSocNetLog::Update($logID, array('TMP_ID' => $logID));
        CSocNetLogRights::Add($logID, $rights);
        CSocNetLog::SendEvent($logID, 'SONET_NEW_EVENT');
    }
}
Ответ написан
Комментировать
@Alsid_It
Программист php, javaScript
Приведенные примеры мне не помогли)

Смог добавить пост в конкретную группу через данный код
//title: CBlogPost ADD 3
\Bitrix\Main\Loader::includeModule('blog');
$userId = 980;
$groupId = 165;
global $APPLICATION;
$arBlog = CBlog::GetList(array(), array('OWNER_ID'=>$userId))->Fetch();

$arFields = array(
    "TITLE" => 'Сообщение для теста 2',
    "DETAIL_TEXT" => 'работает, работает!',
    "DETAIL_TEXT_TYPE" => 'text',
    "DATE_PUBLISH" => (new DateTime())->format('d.m.Y H:m:s'),
    "PUBLISH_STATUS" => 'P',
    "CATEGORY_ID" => '',
    "PATH" => '/company/personal/user/'.$userId.'/blog/#post_id#/',
    "URL" => 'u'.$userId.'-blog-s1',
    "PERMS_POST" => array(),
    "PERMS_COMMENT" => array(),
    "MICRO" => 'N',
    "SOCNET_RIGHTS" => array('SG'.$groupId),
    //"SOCNET_RIGHTS" => array('SG'.$groupId, 'U732'),
    "=DATE_CREATE" => 'now()',
    "AUTHOR_ID" => $userId,
    "BLOG_ID" => $arBlog['ID'],
);

$newID = CBlogPost::Add($arFields);

if(IntVal($newID)>0)
{
    $arFields["ID"] = $newID;
    $arParamsNotify = array(
        "bSoNet"=>true,
        'UserID'=>$userId,
        'user_id'=>$userId,
        'SOCNET_GROUP_ID'=>$groupId,
        'PATH_TO_POST'=>'/company/personal/user/#user_id#/blog/#post_id#/'
    );
    $notify = CBlogPost::Notify($arFields, $arBlog, $arParamsNotify);
    echo "Новое сообщение [".$newID."] добавлено. ".$notify;
}
else
{
    if ($ex = $APPLICATION->GetException())
        echo $ex->GetString();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы