Facebook Messenger Bot의 Message-Received Callback에서 받는 데이터 정리(공식 참조 부족 정보 보충)

Facebook Messenger에는 텍스트나 이미지를 보내는 것 외에도 여러가지를 게시할 수 있는 기능이 있습니다만, Messenger Platform의 공식 레퍼런스의 Message-Received Callback .

텍스트




{
    mid: 'mid.1462160673187:97319ef1f3dfb56909',
    seq: 3729,
    text: 'Test'
}

이모티콘




{
    mid: 'mid.1462161694171:e32b926675695c4751',
    seq: 3740,
    text: '😁'
}

포인트
  • 통상 텍스트 메세지는 말풍선과 같은 둘러싸여 있는 UI인 것에 비해, 이모티콘은 이모티콘이 스탬프와 같이 원시로 포스트되기 때문에, 송신 형식이 다른가라고 생각해 조사했지만, 보통으로 텍스트로 둔다.

  • 이미지




    {
        mid: 'mid.1462161747393:767d8682762e9c6c91',
        seq: 3743,
        attachments: [{
            type: 'image',
            payload: {
                url: 'https://scontent.xx.fbcdn.net/v/t34.0-12/13149973_1057584607649689_146740965_n.jpg?oh=17c1586156fa070c33d156673283e4ac&oe=5729B28A'
            }
        }]
    }
    

    다중 이미지




    {
        mid: 'mid.1462161747393:767d8682762e9c6c91',
        seq: 3743,
        attachments: [{
            type: 'image',
            payload: {
                url: 'https://scontent.xx.fbcdn.net/v/t34.0-12/13149973_1057584607649689_146740965_n.jpg?oh=17c1586156fa070c33d156673283e4ac&oe=5729B28A'
            }
        },
        {
            type: 'image',
            payload: {
                url: 'https://scontent.xx.fbcdn.net/v/t34.0-12/13149973_1057584607649689_146740965_n.jpg?oh=17c1586156fa070c33d156673283e4ac&oe=5729B28A'
            }
        }]
    }
    

    포인트
  • attachements에 배열로 이미지가 늘어서 있습니다
  • Messenger에서는 이미지와 동영상을 혼합하여 복수 선택하거나, 동영상을 복수 선택하거나 할 수 없기 때문에 (하려고 하면 경고가 팝업한다) 된다

  • GIF(Giphy등에서 투고되는 것)




    {
        mid: 'mid.1462160694749:437851987c8eb7ca22',
        seq: 3732,
        attachments: [{
            type: 'image',
            payload: {
                url: 'https://cdn.fbsbx.com/v/t59.2708-21/13068706_10156937759280249_1358572811_n.gif?oh=044addf0a2be092cb04b8edb26d806ab&oe=5728C3B4'
            }
        }]
    }
    

    포인트
  • 현재 Giphy등에서 투고되는 Gif 애니메이션과 통상 투고 화상의 판별은 붙지 않는 것처럼 보인다. 무리하게 판정한다면, 통상, 스마트폰으로부터 투고되는 이미지는 jpg라고 나누고, payload.url안에 ".gif"라고 하는 문자열이 발견되면 gif 애니메이션이라고 판정할 정도 밖에 없다.

  • 좋아!




    {
        mid: 'mid.1462160938191:cd6db17b8501ac0183',
        seq: 3735,
        sticker_id: 369239263222822,
        attachments: [{
            type: 'image',
            payload: {
                url: 'https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-xfa1/t39.1997-6/851557_369239266556155_759568595_n.png' 
            }
        }]
    }
    

    포인트
  • 그냥 PNG 이미지로 전송됩니다.
  • "sticker_id"라는 공식 참조에는 게재되지 않은 키가 존재한다.

  • 음성




    {
        mid: 'mid.1462161083654:7c93acc62bf7181519',
        seq: 3736,
        attachments: [
            {
                type: 'audio',
                payload: {
                    url: 'https://cdn.fbsbx.com/hphotos-xpf1/v/t59.3654-21/13105144_1057581247650025_4287058_n.mp4/audioclip-1462161083000-1976.mp4?oh=b31fa25a63180d29b485b64c28d64806&oe=5729C200'
                }
            }
        ]
    }
    

    포인트
  • payload.url이 mp4 형식 파일의 URL입니다.

    동영상




    {
        mid: 'mid.1462161181116:c889db218be9fd8455',
        seq: 3737,
        attachments: [{
            type: 'video',
            payload: {
                url: 'https://video.xx.fbcdn.net/v/t42.3356-2/13154860_1057581767649973_2034607946_n.mp4/video-1462161180.mp4?vabr=519222&oh=fb87bce87fa6631fceeea730d4c34626&oe=5728BE67'
            }
        }]
    }
    

    포인트
  • payload.url이 mp4 형식 파일의 URL입니다.

    스탬프




    {
        mid: 'mid.1462161319358:719bd120a075db0f48',
        seq: 3738,
        sticker_id: 126362100881920,
        attachments: [{
            type: 'image',
            payload: {
                url: 'https://fbcdn-dragon-a.akamaihd.net/hphotos-ak-xfa1/t39.1997-6/p100x100/851586_126362104215253_1651254063_n.png'
            }
        }]
    }
    

    포인트
  • 그냥 PNG 이미지로 전송됩니다.
  • "sticker_id"라는 공식 참조에는 게재되지 않은 키가 존재한다.

  • 위치 정보




    {
        mid: 'mid.1462161425797:0cb4853c813f67f157',
        seq: 3739,
        attachments:[{
            title: 'Kensuke\'s Location',
            url: 'https://www.facebook.com/l.php?u=https%3A%2F%2Fwww.bing.com%2Fmaps%2Fdefault.aspx%3Fv%3D2%26pc%3DFACEBK%26mid%3D8100%26where1%3D37.853892152233%252C%2B-122.27284387697%26FORM%3DFBKPL1%26mkt%3Den-US&h=GAQFDbq0p&s=1&enc=AZMFD3TrKmomukiQ-yZcDpHMLCU2VgfmlSQFV_K8nywElxrUh4_igid2GmshbuHV3ASvVLI1ewNONlYl8LNfzGBsVFQ6p6xGFqx_qHMmfKgqGw',
            type: 'location',
            payload: {
                coordinates: {
                    lat: 37.853892152233,
                    long: -122.27284387697
                }
            }
        }]
    }
    

    포인트
  • 공식 레퍼런스에는 아직 게재되어 있지 않은 type: location 라고 하는 형식이 되어 있다
  • attachments [] .url은 Bing Maps로의 리디렉션 URL입니다.
  • payload.coordinates에서 위도 경도를 얻을 수 있습니다

  • 덧붙여서 type: location에 관해서는 각 봇에서 이미 활용되고 있어, 예를 들면 날씨 봇 Hi Poncho에서는, 위치 정보를 포스트하면 그 장소의 날씨를 즉시 가르쳐 준다.

    재미있었던 포인트


  • attachments[].type에는 image, video, audio 이외에 'location'이라는 요소가 존재한다.
  • 스탬프, GIF (Giphy 등), 좋아! , type : image로 전송되고 이미지 URL이 전송되기 때문에 판별하기가 어렵습니다.
  • 스탬프, 좋아요! sticker_id라는 공식 참조에서 언급되지 않은 키가 있습니다
  • 현재 attachments의 배열에 복수의 요소가 들어가는 것은 type : image의 것이 늘어선 케이스 밖에 존재하지 않는다 (조사 부족이면 더 이상 구별되지 않지만)
  • 좋은 웹페이지 즐겨찾기