빠른 시작
https://developers.facebook.com/docs/messenger-platform/guides/quick-start

Webhook 참조
https://developers.facebook.com/docs/messenger-platform/webhook-reference

가이드
https://developers.facebook.com/docs/messenger-platform/guides
Messenger 플랫폼의 핵심 영역에 대해 알아보세요.
  • 빠른 시작 - 10분 안에 실행하는 봇 만들기
  • 설정 - Messenger용 Facebook 앱 및 페이지 구성
  • 대화 - API 및 Webhooks를 사용하여 메시지 주고 받기
  • 진입점 - 사람들이 어떻게 봇과 대화를 시작할 수 있는지 알아보기
  • 결제(베타) - 봇에서 결제를 처리할 수 있음
  • m.me 링크 - m.me 링크에서 리퍼럴을 사용하는 방법 알아보기
  • 계정 연결 - 안전한 방식을 사용하여 웹에서 Messenger 사용자 ID 얻기
  • 분석 - 지표를 활용하여 봇의 성과 확인



Messenger Platform samples for sending and receiving messages. Walk through the Get Started with this code.
https://developers.facebook.com/docs/messenger-platform/quickstart

Posted by incree

2016/11/22 05:03 2016/11/22 05:03
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/373

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

페이스북용 챗봇 개발중에 php로 응답 보내는 부분 구현에 어려움을 겪어 정리 차원으로 올림

페이스북의 node.js 샘플 처럼 전체 파라미터를 json_encode해서 보내면 아래와 같은 에러가 리턴된다

{
  "error": {
    "message": "(#100) The parameter recipient is required",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "CdhFkKgAL19"
  }
}또는 형태에 따라

{
  "error": {
    "message": "(#100) param recipient must be non-empty.",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "BDoRMk2PNZU"
  }
}



아래 주석 부분 주의해서 다음과 같이 하면 정상 송신이 가능하다.
$messageData = array('recipient' => array('id' => $recipientId)
              , 'message' => array('text' => $messageText, 'metadata' => 'DEVELOPER_DEFINED_METADATA'));

$params = array(
        'recipient' => json_encode($messageData['recipient']),
        'message' => json_encode($messageData['message'])
    );

    $curl = curl_init('https://graph.facebook.com/v2.6/me/messages?access_token=your_token');
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);  // 이게 없으면 통신 자체가 안된다(에러 60)
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));  // 전체 json이 아니라 파라미터의 값만 json이어야 한다. node.js 예제에서는 content-type도 application/json이고 파라미터도 전체 json 데이타 이다. 그 코드가 정상 작동하는지 모르겠지만 php는 위와 같이 해야 정상작동

    $json_response = curl_exec($curl);
    $status = curl_getinfo($curl, CURLINFO_HTTP_CODE);

    curl_close($curl);

    $response = json_decode($json_response, true);




한글 메시지 전송을 위해서는 파일을 utf-8로 저장해야 한다  

Posted by incree

2016/11/11 21:53 2016/11/11 21:53
, , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/370

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다




http://www.facebook.com/dialog/pagetab?app_id=YOUR_APP_ID&next=http://facebook.com

문서화되지 않은 방법: 또는 다음 URL을 호출하여도 탭 추가가 가능하다.

https://www.facebook.com/add.php?api_key=YOUR_APP_ID&pages

Updated(2012/03/16) 최근 페이스북이 앱페이지(앱 커뮤니티 페이지)의 관리자 메뉴 속에 앱을 페이지에 추가하기 메뉴를 추가했다. 앱페이지를 만들었다면 이 메뉴 기능을 이용해도 된다. 자세한 내용


Add Page Tab Dialog

https://developers.facebook.com/docs/pages/page-tab-dialog
FB.ui({
  method: 'pagetab',
  redirect_uri: 'YOUR_URL'
}, function(response){});
https://www.facebook.com/dialog/pagetab?
  app_id=YOUR_APP_ID
  &redirect_uri=YOUR_URL

 https://developers.facebook.com/docs/pages/tabs

FB.ui({
  method: 'pagetab',
  redirect_uri: 'YOUR_URL'
}, function(response){});
https://www.facebook.com/dialog/pagetab?
  app_id=YOUR_APP_ID
  &redirect_uri=YOUR_URL

Posted by incree

2015/08/21 23:52 2015/08/21 23:52
, , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/365

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다


http://graph.facebook.com/facebookid/picture?type=type_value
facebookid : 원하는 회원의 페이스북 id
type_value : large, normal, small, square 중 하나

ex)
http://graph.facebook.com/100006497919491/picture?type=large

Posted by incree

2014/11/22 00:57 2014/11/22 00:57
, , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/362

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

[SNS] 페이스북 공유 결과 리턴받기

facebook share dialog response

페이스북에 공유하기 후 결과를 리턴받고 성공/실패에 따라서 처리를 다르게 할때

아래와 같이 FB.ui를 사용하면 된다.

<script type="text/javascript">


function facebookShare() {
FB.ui(
 {
   method: 'share',
   href: 'http://dev.mixedsocial.co.kr/fb_share_test.html',
 },
 function(response) {
  console.log(response);
   if (response && !response.error_code) {
     alert('Posting completed.');
   } else {
     alert('Error while posting.');
   }
 }
);
}

</script>


<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/ko_KR/sdk.js#xfbml=1&appId=370268463107731&version=v2.0";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>


<div id="wrap">
<a title="페이스북 공유하기" class="share-button popup" href="#" onclick="facebookShare(); return false;">
<span>페이스북 공유하기</span>
</a>
</div>




페이스북 메뉴얼 : https://developers.facebook.com/docs/javascript/reference/FB.ui

Posted by incree

2014/10/22 19:10 2014/10/22 19:10
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/361

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

단기간에 너무 많은 api 호출을 한 경우에 limit가 걸리면

이 후 요청하는 모든 api 호출에 이 에러가 리턴되고, 30분동안 블럭된다.


해결 방법은 '다른 아이디를 이용하거나 30분 후에 다시 시도하면 된다' 라고 페이스북 개발자 페이지에 나온다.

https://developers.facebook.com/docs/reference/ads-api/api-rate-limiting


실제 리턴되는 에러 메시지
/**/ FB.__globalCallbacks.f1765e9214({"error":{"message":"(#17) User request limit reached","type":"OAuthException","code":17}});

Posted by incree

2014/07/28 17:42 2014/07/28 17:42
, , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/346

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

Facebook 탭앱 관리를 Graph API를 사용해서 하고 있었는데,

잘되던 탭앱 custom_name, custom_image_url 수정이 어느날부터 갑자기 에러가 나기 시작했다.

에러는 다음과 같았다.

[error] => Array
(
[message] => (#210) Subject must be a page.
[type] => OAuthException
[code] => 210
)

해결은 파라미터에 추가로 access_token을 넘겨줘서 처리했다.

기존에는 따로 안 넘겨줘도 잘 작동했었는데, 왜 어느날 갑자기 바뀐걸까?

처음 개발하면서 테스트 해봤을때 access_token을 넘겨주나 안 넘겨주나 똑같이 잘 작동해서

curl시에 api에서 알아서 access_token을 추가해서 처리하는 줄 알았는데, 그게 아닌가보다

수정전
$postArray = array('custom_name' => $custom_name);
$fbObj->api('/' . $pageId. '/tabs/app_' . $tabappId, 'POST', $postArray);
===============>
수정후
$postArray = array('custom_name' => $custom_name, 'access_token' => $pageAccessToken);
$fbObj->api('/' . $pageId. '/tabs/app_' . $tabappId, 'POST', $postArray);

Posted by incree

2014/07/25 11:40 2014/07/25 11:40
, , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/343

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

SELECT click_count,comment_count,comments_fbid,like_count,share_count,total_count FROM link_stat WHERE url ='https://developers.facebook.com/docs/reference/fql/link_stat/'


https://developers.facebook.com/docs/reference/fql/link_stat/

Posted by incree

2014/02/28 11:40 2014/02/28 11:40
, , , , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/321

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

// 자바 스크립트
FB.getLoginStatus(function(response) {
    if (response.status == "connected"){
        // 좋아요 여부 확인
        FB.api('/me/likes/likeId', function(likeResponse) {
            if(likeResponse == null || likeResponse == undefined || likeResponse.data[0] == null || likeResponse.data[0] == undefined) {
                setNotliked();
            }
            else {
                setLiked();
            }
        });
    }
    else if (response.status == "not_authorized") {
        console.debug(response);
    }
    else {
        console.debug(response);
    }
});


// php signed request
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode('.', $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

if($data["page"]["liked"]) {
    /* is pan */
}
else {
 /* Not Fan */
}

/*

Array
(
    [algorithm] => HMAC-SHA256
    [issued_at] => 1387699889
    [page] => Array
        (
            [id] => **6***0677***56
            [liked] => 1
            [admin] =>
        )
    [user] => Array
        (
            [country] => kr
            [locale] => en_US
            [age] => Array
                (
                    [min] => 21
                )
        )
)
*/


// php api
$fbObj = new FaceBook(array('appId' => $appId, 'secret' => $appSecret, 'cookie' => true));
$isPageLike = $fbObj->api("/me/likes/$pageId");
or
$isPageLike = $fbObj->api("/$uid/likes/$pageId");
    if($isPageLike['data'][0]) {
    /* is pan */
}
else {
 /* Not Fan */
}

Posted by incree

2013/12/22 17:13 2013/12/22 17:13
, ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/164

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다

// 페이지 기본 정보 읽어오기
FB.api('/' + pageId, function(response) {
    console.log(response);
});

// 페이지의 모든 feed 읽어오기
FB.api({
        method: 'fql.query',
        query: 'SELECT * FROM stream WHERE source_id=' + pageId + ' LIMIT 1000'
    },
    function(response) {
        console.log(response);
    }
);

// 페이지 owner가 작성한 feed 읽어오기
FB.api({
        method: 'fql.query',
        query: 'SELECT * FROM stream WHERE filter_key='owner' AND source_id=' + pageId
    },
    function(response) {
        console.log(response);
    }
);

// 다른 사용자가 페이지에 작성한 feed 읽어오기(filter_key만 할 경우 owner이 작성한 것도 가져오는 경우가 있다. 따라서 actor_id 조건과 같이 사용)
FB.api({
        method: 'fql.query',
        query: 'SELECT * FROM stream WHERE filter_key='others' AND actor_id!=' + pageId + ' AND source_id=' + pageId
    },
    function(response) {
        console.log(response);
    }
);

// 페이지의 feed에 달린 모든 댓글 가져오기
FB.api({
        method: 'fql.query',
        query: 'SELECT * FROM comment WHERE post_id IN (SELECT post_id FROM stream WHERE source_id=' + pageId + ')'
    },
    function(response) {
        console.log(response);
    }
);

// 페이지의 feed에 달린 댓글에 달린 답글 모두 가져오기
FB.api({
        method: 'fql.query',
        query: 'SELECT * FROM comment WHERE parent_id IN (SELECT id FROM comment WHERE post_id IN (SELECT post_id FROM stream WHERE source_id=' + pageId + ')'
    },
    function(response) {
        console.log(response);
    }
);

Posted by incree

2013/10/28 11:50 2013/10/28 11:50
, , , , , , ,
Response
0 Trackbacks , 0 Comments
RSS :
http://www.incree.com/tc/incree/rss/response/289

Trackback URL : 이 글에는 트랙백을 보낼 수 없습니다


Notices

Archives

Authors

  1. incree

Recent Trackbacks

Calendar

«   2017/08   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Site Stats

Total hits:
418390
Today:
2
Yesterday:
119