페이스북용 챗봇 개발중에 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 : 이 글에는 트랙백을 보낼 수 없습니다


Notices

Archives

Authors

  1. incree

Recent Trackbacks

Calendar

«   2017/12   »
          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:
436147
Today:
3
Yesterday:
155