Из Facebook – в Livejournal, Twitter & Вконтакте, кросспостинг в исходных кодах и комментариях / Хабр
В этой статье я расскажу о своем опыте разработки кросспостинга из моего Facebook в мой Livejournal (далее – ЖЖ), а также поделюсь исходными текстами, готовыми к старту на ваших аккаунтах.
Причиной написания скриптов было получение возможности поиска по своим записям – возможности, которую Facebook никак не может запустить как часть своего сервиса, а также «оживление» своего ЖЖ. Поскольку доступ к любым постам в Фейсбуке требует обязательной авторизации, поисковых роботов сервис, очевидно, не пускает. Конкретно в моем случае это неудобно: ссылки, видео и мысли, которые я публикую в соцсети, зачастую я публикую «на будущее» – и часто настает тот момент, когда эта информация становится необходимой, но ее уже практически не найти.
Также с использованием опубликованных здесь скриптов удалось перенести архив существующих записей Facebook: более 2000 архивных сообщений моего Facebook перешли в ЖЖ с соответствующими датами.
Также в статье выкладываю готовые скрипты на Perl, с использованием которых можно транслировать статусы Facebook в Livejournal, а оттуда, при наличии соответствующих настроек, в Вконтакте, Twitter и RSS, а с использованием дополнительных веб-сервисов – практически во все блог-движки.
Так получилось, что я два года назад ушел из ЖЖ в Facebook. Это было связано с кучей проблем в самом ЖЖ, заторможенность с развитием сервиса, и, как следствие, массового ухода оттуда моих друзей в сине-белую соцсеть.
При этом ЖЖ остается единственной открытой блог-площадкой с гибким форматом постов, не накладывающей существенных технических ограничений – на на размер поста или ни на его оформление. В ЖЖ до сих пор остается масса интересных личностей, из которых много моих друзей.
Очень большое преимущество ЖЖ было в его открытости поисковым системам.
Я изучил сервисы кросспостинга, позволяющие автоматически постить сообщение в несколько соцсетей. К сожалению, ничего толкового из них не нашлось. Почти везде принуждают писать пост в специальном интерфейсе, либо в качестве основного места используется ЖЖ, что лично для меня неудобно. Самым любопытным сервисом оказался стартап IFTTT.com, позволяющий создавать универсальные правила вида “пояивилось в твиттере – отправь на смс”, “появилось в фейсбуке – отправь в твиттер”, “собирается дождь – предупреди по смс” и т.д. Да, его можно приспособить для некоторых нужд, но из фейсбука в ЖЖ он все равно постить не умеет.
Есть и еще одна причина. Я хочу иметь возможность управлять тем, что куда постится, в зависимости от контента. Например, я могу посчитать нужным автоматически публиковать в ЖЖ фотографию, а не ссылку на нее. Или в твиттер переносить целиком пост, а не ссылку на него, как это делают многие сервисы. Для этого я должен иметь возможность поправить скрипт самому, под свои нужды.
В итоге, стояла цель охватить соцсети Twitter, ЖЖ, Facebook и Вконтакте, оставив Facebook «стартовой площадкой» для поста. Поскольку сам ЖЖ умеет постить в Вконтакте и в Твиттер, а также экспортировать посты в RSS для интеграции с Drupal, нарисовалась следующая схема:
Facebook имеет, на мой взгляд, самое шикарное API. Этот интерфейс позволяет делать что угодно с данными, которые вы вносите в соцсеть – получать их в структурированном виде, изменять или удалять через массу удобных механизмов, FQL, HTTP-запросы. И на этом фоне удивило относительно небольшое число сторонних приложений, работающих с Facebook.
Кроме использования API я также пробовал парсинг страниц упрощенной мобильной версии Facebook-а – это позволяло вытащить больше информации, чем дает API. В некоторых случаях это довольно полезный механизм. В данном случае удалось вполне обойтись стандартными возможностями.
По библиотекам для Perl все оказалось прекрасно: для Perl на CPAN обнаружилось несколько модулей, реализующих работу с Facebook, но из-за простоты протокола нужды в них мало. Данные запроса передаются через URL, результат возвращается в JSON. Что касается ЖЖ, то он имеет несколько разных API, из которых простейшим является LJ XML-RPC. Я воспользовался готовым модулем для Perl, реализующим довольно стабильную работу с ЖЖ – LJ::Simple.
Доступ к фейсбуку осуществляется через access token, получаемый внешним приложением на ограниченное время с ограниченными правами. Время протухания сессии и полученного access_token измеряется от 2 до 25 часов. Есть возможность получить long-live token со временем жизни до 60 дней. По логике, нужно обновлять access_token после протухания каждый раз – через 5 дней это случится или через 60. В приведенных скриптах автоматическое обновление не предусмотрено, как и уведомление о том, что протух access token.
Вторая особенность заключается в том, что ваши сообщения доступны на стене вместе с сообщениями других юзеров, и если не задуматься о том, что кросспостится должны только ваши, у других пользователей может появиться возможность опубликовать у вас в ЖЖ через фейсбук что-нибудь не то. По умолчанию в Facebook у всех ваших друзей есть возможность публиковать вам на стену что угодно, особенно радует возможность получить тучу комментариев от друзей к чужой фотографии, на которой вас «отметили». Если не включить модерирование чужих сообщений на стену, то с появлением кросспостинга эти фото уйдут еще и за пределы фейсбука.
Некоторые посты в фейсбуке являются «неинформативными» – как некоторые сообщения, отправляемые приложениями. Кросспостер умеет их фильтровать и не переносить в Livejournal, но тут каждый настраивает под себя, конечно. Какие-то посты специально принимают другой вид: например, фотография превращается из ссылки на Facebook во встроенную в пост на ЖЖ крупную фото.
Также нужно обязательно учесть необходимость простановки флага “backdate” при публикации поста задним числом на ЖЖ. Для этого есть специальная константа в начале скрипта. Особенность заключается в том, что если вы публикуете пост в ЖЖ за март 2011 года, то в ленту друзей он помещается как свежий (хоть и со старой датой), а при связке с твиттером, публикуется и в него как свежий. Если же поставить в интерфейсе специальную галочку, или же установить свойство backdate через API, то из ленты друзей он исключается. Для переноса архива устанавливать backdate – обязательное дело, потом его можно отключить.
Ну и нужно убрать связь с Facebook, иначе получится замкнутый цикл (в скрипте на всякий случай стоит защита).
Сюда я публикую скрипты, разработанные в процессе исследования, эдакого proof of concept. Также они адаптированы для публикации в составе статьи – например, общие параметры подключения к БД не вынесены в отдельные файлы, код не разбит по функциям и файлам, убраны неважные и т.д.
Архитектура кросспостера предполагает двухэтапную работу: сохранение промежуточных результатов в БД и экспорт записей из БД в ЖЖ. В дальнейшем эту БД можно использовать как самостоятельную базу, также имея локальные данные легко дописывать скрипты для экспорта в другие социальные сети, RSS.
Для сохранения в БД используется скрипт facebook.pl. Его назначение – получить страницу со стены с Facebook и, в случае, если есть следующая страница, выдать ее идентификатор, если нет, выдать «all done». Идентификатор является параметром скрипта, так что для загрузки следующей страницы нужно вызвать скрипт с этим идентификатором и т.д., пока в ответ не получим all done.
Обратите внимание, что для работы facebook.pl нужно изменить параметры подключения к БД, идентификатор вашего журнала в ЖЖ, а также ввести access_token. Для отладки сформировать короткоживущий access token можно в Facebook Graph API Explorer. Для того, чтобы получить доступ на 60 дней, нужно создать приложение, получить AppId и SecretId, после сформировать access token по приведенной ссылке, выбрав это приложение из ниспадающего списка. Обратите внимание на перечень прав – недостаток некоторых галочек может ограничить доступ к записям на вашей стене: например, внешнему приложению перестанут быть видны reshares от других пользователей или фотографии или что-то другое. Если не боитесь в скриптах оставлять лишние доступы, лучше поместить вообще все галочки.
Для постинга на ЖЖ из БД используется скрипт update_lj.
На тот случай, если все-таки ЖЖ пополнился кучей автоматически созданных ошибочных постов, выполнить выборочное редактирование, удаление или изменение свойств можно скриптом lj_change.pl, приведенным в конце поста.
В итоге, для переноса архива необходимо пройтись по всем страницам bash-скриптом, вызывающим нужное число раз facebook.pl, после чего выполнить updatelj.pl столько раз, сколько у вас в базе получилось записей. Для регулярного обновления facebook.pl достаточно раз в час или раз в сутки вызывать по крону, после подобным bash-скриптом вызывать updatelj.pl.
Буду рад любым комментариям и дополнениям, а также тем энтузиастам, которые захотят или смогут сделать из этого внешний универсальный сервис.
CREATE TABLE `myposts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ctime` datetime DEFAULT NULL, // время создания `message` text, // собственно пост `link` text, // ссылка к посту `picture_fb` text, // картинка к посту `posted_to_lj` int(11) DEFAULT NULL, // было ли отправлено на ЖЖ? `lj_ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, // время отправки в ЖЖ `lj_item_id` int(11) DEFAULT NULL, // идентификатор в ЖЖ (внутренний) `lj_anum` int(11) DEFAULT NULL, // константа для журнала, связывающая item_id и html_id `lj_html_id` int(11) DEFAULT NULL, // идентификатор в ЖЖ (внешний, тот, что перед .html) `user` varchar(50) DEFAULT NULL, // пользователь (для использования базы для нескольких пользователей) PRIMARY KEY (`id`) )
#!/bin/bash #для создания архива NEXT=`./facebook.pl`; echo $NEXT; while [ "$NEXT" != "all done" ] do NEXT=`$NEXT`; echo $NEXT; done
Показать исходный текст facebook. pl
#!/usr/bin/perl
use open qw(:std :utf8);
use LWP::Simple;
use YAML::Tiny;
use JSON;
use URI;
use DBI;
use DBD::MySQL;
$DB_LOGIN = «========DB-USER==========»;
$DB_PASS = «========DB-PASS==========»;
$DATABASE= «======== DB-NAME ==========»;
$USER = ‘========YOUR-LJ-USER==========’;
my $access_token = ‘========YOUR-ACCESS-TOKEN-SEE-GRAPH.FACEBOOK.COM-FOR-THE-DETAILS==========’;
# ARGV[0] is the value which facebook places into its next page URL as the value of its «until» CGI parameter
$until = $ARGV[0];
my $dbh=DBI->connect(«DBI:mysql:database=mysql;host=localhost», $DB_LOGIN, $DB_PASS) || die «Error connecting to database: $!n»;
$dbh->do(«use $DATABASE;»);
# next four lines are for facebook graph api request
my $uri = new URI(‘https://graph.facebook.com/me/feed’ );
$uri->query_form( {access_token => $access_token, until => $until, base_amount=>1, value=>1 });
my $resp = get(«$uri»);
$resp = defined $resp ? decode_json($resp) : undef;
$next = $resp->{paging}->{next};
$next =~ /until=(.+)$/;
$until = $1;
# as a result of the script I’ve decided to show either all done message or bash command for the next iteration. It looks a bit queer…
if ($until != «») {
print «./facebook.pl «.$until. «n»;
} else
{
print «all done»;
}
# updating database
for my $post (@{ $resp->{data} }) {
$ctime = $post->{created_time};
$ctime =~ /(dddd)-(dd)-(dd).(dd):(dd):(dd)/;
($y,$m,$d,$h,$i,$s) = ($1, $2, $3, $4, $5, $6);
$time = «$h:$i:$s»;
$sqltime = $y.$m.$d.$h.$i.$s;
$message = $post->{message};
$link = $post->{link};
$picture = $post->{picture};
$sql = «select * from myposts where user=’$USER’ and ctime=’$sqltime'»;
$sth = $dbh->prepare($sql);
$sth->execute;
if ($sth->rows == 0) {
$sql = «insert into myposts set user=’$USER’, link=».$dbh->quote( $link ).», picture_fb=». $dbh->quote( $picture ) .», message=». $dbh->quote( $message).», ctime=’$sqltime'»;
# the following line is intended for filtering twitter-like posts. I’ve decided to skip them because the majority of them are the the links to the existing facebook or livejournal posts.
if ($message !~ /t.co//) {
$dbh->do($sql);
}
}
}
Показать исходный код update_lj
#!/usr/bin/perl
use LJ::Simple;
use Date::Manip;
use DBI;
use DBD::MySQL;
$USER = ‘========YOUR-LJ-USER==========’;
$DB_LOGIN = «========DB-USER==========»;
$DB_PASS = «========DB-PASS==========»;
$LJ_NAME = «========LJ-USER==========»;
$LJ_PASS = «========LJ-PASS==========»;
$DATABASE = ‘facebook’;
$DEBUG = 1;
# it’s extremely important to set the following constant to «1»
# if you’ve decided to migrate all the old records using this script.![]()
$HIDE_FROM_FRIENDS_WALLS = 0;
my $dbh=DBI->connect(
«DBI:mysql:database=mysql;host=localhost»,
$DB_LOGIN,
$DB_PASS,
) || die «Error connecting to database: $!n»;
my $lj = new LJ::Simple ({
user => $LJ_NAME,
pass => $LJ_PASS,
site => «livejournal.com:80»,
});
(defined $lj)
|| die «$0: Failed to log into LiveJournal: $LJ::Simple::errorn»;
$sql = «select ctime, UNIX_TIMESTAMP(ctime), link, message, picture_fb, id from myposts where user=’$USER’ and lj_html_id is NULL order by ctime desc limit 0,1;»;
$dbh->do(«use $DATABASE;»);
@row_ary = $dbh->selectrow_array($sql);
if ($row_ary[0] == «») { exit; }
($ctime, $ctime_ts, $link, $message, $picture_fb, $id ) = @row_ary;
$message =~ s/n/<br><br>/g; # preparing CRs for html
if ($DEBUG) { print $message.«n»; }
# building the subject from the text of the post
$messagelength = length($message);
if ($messagelength > 50) {
$i = index($message.» «, » «);
do {
$j = $i;
$i = index($message.» «, » «, $i+1);
} while ($i < 50);
$subject = (length($message)>50) ? substr($message,0,$j).»…» : $message;
if ($DEBUG) { print «posting $subject…n»; }
my %Entry=(); $lj->NewEntry(%Entry) || die «$0: Failed to create new entry: $LJ::Simple::errorn»;
# croppedlink
$croppedlink = (length($link) > 50 ?
(substr($link, 0, 50).»…»)
:
$link) ;
# replacing the small picture with the big one
if ($picture_fb =~ /https://fbcdn/) {
$largepicture = $picture_fb;
$largepicture =~ s/_s/_n/g;
$entry=»<a href=’$link’>».$croppedlink . «</a><br>» .
$message .
«<br><img src=’$largepicture’>»;
} else {
if ($link ne «»)
{
$entry=»<table><tr><td><img src=»». $picture_fb. «» align=left></td><td><a href='». $link. «‘>».
$croppedlink .
«</a><br>$message<br clear=all></td></tr></table>»;
} else
{
$entry=»$messagenn<a href=’$link’>$link</a><br><img src=»$picture_fb»>»;
}
}
$lj->SetEntry (%Entry, $entry) || die «$0: Failed to prepare new post — $LJ::Simple::errorn»;
$lj->SetSubject(%Entry, $subject);
$lj->SetDate(%Entry, $ctime_ts);
if ($HIDE_FROM_FRIENDS_WALLS) { $lj->Setprop_backdate(%Entry,1);}
my ($item_id,$anum,$html_id)=$lj->PostEntry(%Entry);
(defined $item_id)
|| die «$0: Failed to post journal entry: $LJ::Simple::errorn»;
if ($DEBUG) { print «created item_id: «.$item_id.», anum: «.$anum.»,html_id: «.$html_id.»n»; }
$sql = «update myposts set user=’$USER’, lj_ts=now(), lj_item_id = ‘$item_id’, lj_anum = ‘$anum’, lj_html_id = ‘».$html_id.»‘ where id=».$id;
$dbh->do($sql);
Показать исходный код lj_change.pl
!/usr/bin/perl
use Data::Dumper;
use POSIX;
use LJ::Simple;
use Time::Local;
use DBI;
use DBD::MySQL;
$LJ_LOGIN = «===========LJ-LOGIN============»;
$LJ_PASS = «===========LJ-PASS============»;
$DB_LOGIN = «===========DB-LOGIN============»;
$DB_PASS = «===========DB-PASS============»;
$DATABASE = «===========DATABASE============»;
$operation= «…»; #setbackdate, purge …
my $dbh=DBI->connect(
«DBI:mysql:database=mysql;host=localhost»,
$DB_LOGIN,
$DB_PASS,
) || die «Error connecting to database: $!n»;
$dbh->do(«use $DATABASE;;»);
$sql = «select lj_item_id from myposts where lj_html_id is not NULL order by ctime desc;»;
$results = $dbh->selectall_hashref($sql, ‘lj_item_id’);
foreach my $id (keys %$results) {
#$id2 = $results->{lj_item_id};
push @ids, $id;
}
my $lj = new LJ::Simple ({
user => $LJ_LOGIN,
pass => $LJ_PASS,
site => undef,
proxy => undef,
});
(defined $lj)
|| die «$0: Failed to log into LiveJournal: $LJ::Simple::errorn»;
print «logged on...n»;
my %Entries=();
for ( @ids ) {
print «requesting entry $_…n»;
(defined $lj->GetEntries(%Entries,undef,»one», $_)) or print «$0: Failed to get entries — $LJ::Simple::errorn»;
my $item = $Entries{$_};
if ($operation == ‘setbackdate’) {
$lj->Setprop_backdate($item, 1) or print «$0: Failed to set back date property — $LJ::Simple::errorn»;
$lj->EditEntry($item) or print «$0: Failed to edit entry — $LJ::Simple::errorn»;
}
if ($operation == ‘purge’) {
$lj->EditEntry($item, undef) ;
}
$sql = «update myposts set …»;
$dbh->do($sql);
}
print «done.n»;
exit(0);
P.S. К слову сказать, подсветка синтаксиса средствами хабраредактора работает из рук вон плохо. В первом скрипте подсветка работает до строки с подключением к БД (DBI->connect): стоит ей появиться, как тег source перестает выделять синтаксис Perl-а. Во втором, вероятно, тоже на ней сбоит. Пришлось делать подсветку через тег font.
Комментарии к материалу Зачем школы обязали завести страницы в социальных сетях: «ВКонтакте», «Фейсбуке», «Одноклассниках» в Челябинской области | 74.ru
- Отказали в путинском пособии
- Куда ехать на майские
- Избил женщин в автобусе
- Копилка лайфхаков
- Шершни обмелели
- Уклонистов лишат прав
- Проблемы салонов макияжа
- Убили школьника
- «Доступная» иномарка
- Прославились беляшами
Из Челябинска планируют запустить рейсы на родину Чингисхана. Пора собирать чемодан?
Воевавших c 2014 года в ДНР и ЛНР хотят признать ветеранами: новости СВО за 18 апреля
Закопал и забыл: 15 видов овощей и зелени, которые вырастут сами и украсят летний обед
В России выявили новый вариант коронавируса. Роспотребнадзор рассказал, вернут ли ограничения
Из двух челябинских скверов украли 30 урн
В Челябинске фура столкнулась с трамваем
Выдохся или задышал? Как продвигается экологический проект Челябинска в условиях СВО и санкций
На челябинца, избившего в автобусе школьницу и двух женщин, завели уголовное дело о хулиганстве
«Проснулась — нет живота». История беременной танцовщицы Кемерова, впавшей в кому на три месяца
Госдума приняла закон о пожизненном заключении за госизмену
Отравление подростка вейпом в Челябинской области переросло в уголовное дело
Оставить нельзя убрать. Мэрия спросила у челябинцев, нужен ли световой потолок на Кировке круглый год
Полиция нашла юношу, размахивавшего пистолетом на детской площадке в Челябинске
В центре Челябинска сбили парня на электросамокате
Челябинские координаторы «Бессмертного полка» объяснили, почему в этом году не будет шествия
«Заряд сдетонировал раньше времени»: челябинские хирурги спасли зрение пострадавшим при взрыве в шахте
Размером с кухню: фотограф превратила крошечную студию в стильное жилье — смотрим на удивительный ремонт
Шествие «Бессмертного полка» в этом году отменили
Проблемы с водой в микрорайонах под Челябинском вылились в уголовное дело
В Челябинской области 13-летний подросток попал в реанимацию из-за отравления вейпом
«Продать всё что можно в своей стране». Колонка айтишника об эмиграции в США
Бастрыкин потребовал возбудить уголовное дело против челябинца, избившего школьницу и двух женщин в автобусе
Во дворе многоэтажки в Парковом спалили машину. Поджигатель попал на видео
На участке трассы Челябинск — Курган на семь месяцев ограничили движение
Жителей микрорайона рядом с бывшим Каширинском рынком встревожил человек с пистолетом на детской площадке
Под Челябинском провели громкие испытания труб с подрывом. Фото с полигона
Готовы к лету? Проверьте на нашем онлайн-калькуляторе, действительно ли вам пора похудеть
В Челябинской области отправили в колонию мобилизованного за оставление места службы
В Челябинской области задержали браконьеров, убивших краснокнижных лебедей
Не полетаем даже по России? Цены на авиабилеты могут вырасти на треть (почему так произошло)
Путин впервые побывал в ЛНР. Что он там делал
В Челябинске задержали мужчину, ударившего школьницу и двух женщин в автобусе
ОМК запустила грантовый конкурс для НКО и волонтеров в Челябинской области
Мастер-классы, хакатоны и консультации от экспертов: в ЮУрГУ пройдет день открытых дверей
Руководитель хочет — а может ли команда? Эксперты назвали три проблемы, которые мешают развитию бизнеса
Натуральное дерево выигрывает: пять коротких видео, где протестировали свежий ремонт — результат шокирует
Зарплатные аппетиты женщин в Челябинской области выросли в два раза больше, чем у мужчин. Что за этим стоит
Куда уходят деньги: простая табличка, которая покажет, на что вы тратите больше, чем можете
Не искрит, но тлеет. Как живет сейчас культовый авторынок Челябинска из 90-х
Все новости
Как связать мои аккаунты Facebook и GetResponse?
Содержимое:
Вы можете связать свои учетные записи Facebook и GetResponse на странице Интеграции . Оттуда вы также можете управлять своей интеграцией с Facebook — обновлять списки, добавлять дополнительные учетные записи или отключать страницы или учетные записи. Как только вы интегрируете свой аккаунт с Facebook, вы сможете публиковать свои информационные бюллетени в хронике Facebook. Для этого вы включаете опцию публикации новостной рассылки на Facebook при указании их настроек. Примечание : Также возможно подключить учетную запись Facebook напрямую в создателе новостной рассылки . См. Как я могу публиковать обновления Twitter и Facebook при отправке информационного бюллетеня? чтобы узнать, как разрешить делиться новостями на Facebook . Вот как связать аккаунты GetResponse и Facebook в Integrations :
- Войдите в свой Facebook .
- В отдельной вкладке войдите в свой GetResponse .
- В своем аккаунте GetResponse нажмите Интеграция и API .
- На странице интеграции наведите указатель мыши на плитку Facebook и щелкните Подробности . Нажмите Подключить для подключения учетных записей.
- Если вы уже вошли в Facebook , ваши учетные записи будут автоматически интегрированы.
- Если нет, мы попросим вас войти в свою учетную запись. Как только вы это сделаете, ваши аккаунты будут интегрированы.
Теперь вы можете начать использовать интеграцию и начать делиться своими информационными бюллетенями со своими друзьями на Facebook.
Могу ли я подключить более одной учетной записи Facebook?
К вашему аккаунту GetResponse можно подключить несколько аккаунтов Facebook. Просто перейдите на страницу Integrations . Все, что вам нужно сделать, это повторить шаги для подключения ваших учетных записей GetResponse и Facebook .
Как отключить интеграцию с Facebook?
Вы можете отключить всю учетную запись Facebook или отдельные Страницы. Вот как это сделать:
- Перейдите к Integrations и API и найдите плитку Facebook .
- Наведите указатель мыши на плитку и нажмите Детали .
- Чтобы отключить всю учетную запись, нажмите Отключить учетную запись рядом с именем учетной записи. Чтобы отключить отдельные страницы, нажмите Отключить страницу рядом с определенными страницами.
Если вы решили переподключить аккаунт, повторите шаги по интеграции с Facebook. Если вы отключили страницу, нажмите Перезагрузить фан-страницы , чтобы добавить ее еще раз.
Я создал Страницу; почему его нет в списке?
Если вы создали Страницу после того, как интегрировали свои учетные записи Facebook и GetResponse, она может не отображаться в списке подключенных страниц. Чтобы добавить его,
- Перейдите к Integrations and API , наведите указатель мыши на Facebook и нажмите Details .
- Нажмите Перезагрузить фан-страницы , чтобы добавить страницу.
Как я могу привлечь потенциальных клиентов через свои бизнес-страницы в Facebook или Instagram? | Справочный центр
Как я могу привлечь потенциальных клиентов через свои бизнес-страницы в Facebook или Instagram?Как оптимизировать свои бизнес-страницы в Facebook и Instagram, чтобы собирать потенциальных клиентов прямо в HoneyBook
Автор Марика Табилио. Обновлено больше недели назад
Собирают ли ваши бизнес-страницы в Facebook и Instagram много лидов, когда люди отправляют сообщения о бронировании вас (отлично), которые затем нужно вручную добавить в HoneyBook (менее круто)? Даже если вы не хотите вкладывать средства в Lead Ads , вы все равно можете воспользоваться преимуществами сбора потенциальных клиентов через Facebook и Instagram.
ОБРАТИТЕ ВНИМАНИЕ: В этой статье упоминается интеграция с метаобъявлениями, доступная для участников плана HoneyBook Essentials и Premium. Узнайте больше о функциях, включенных в каждый план здесь .
Контактная форма HoneyBook — это виджет, который можно установить на сайт вашей компании и который позволяет задавать ряд вопросов потенциальным клиентам и направлять информацию непосредственно в вашу учетную запись HoneyBook. Входящие запросы будут автоматически заполняться как Запросы в вашем конвейере проектов , чтобы гарантировать, что ни один лид не останется без внимания.
Прямая ссылка — это простая автономная версия вашей контактной формы , чтобы вы могли поделиться простым фирменным URL-адресом с клиентами, у которых есть только форма. После того, как они отправят вам форму, их информация также будет заполнена как Запрос в ваш проектный конвейер .
Вот как использовать все возможности Facebook:
3. Скопируйте URL-адрес этой страницы или используйте прямую ссылку .
4. Войдите на свою бизнес-страницу в Facebook. Убедитесь, что вы вошли в систему как администратор и просмотр вкладки Home в интерфейсе Facebook .
Совет HoneyBook: Если вы в настоящее время находитесь на вкладке Домашняя страница Facebook Business Suite, нажмите на фотографию профиля Facebook Business, чтобы более непосредственно управлять своей страницей.
5. Нажмите + Добавить кнопку внизу фото обложки.