flexbiz-server
Version:
Flexible Server
12 lines (11 loc) • 5.38 kB
JavaScript
const model=global.getModel("fbpage"),controller=require("../../controllers/controller"),axios=require("axios"),async=require("async"),fbpage=function($contr_router$$){$contr_router$$=new controller($contr_router$$,model,"fbpage",{sort:{date_created:-1},unique:["page_id"],notNeedRight:!0,onCreating:($user$$,$data$$,$callback$$)=>{if(!$user$$.appAdmin)return $callback$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n t\u00e1c v\u1ee5 n\u00e0y");$callback$$(null,$data$$)},onUpdating:($user$$,
$data$$,$obj$$,$callback$$)=>{if(!$user$$.appAdmin)return $callback$$("B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n th\u1ef1c hi\u1ec7n t\u00e1c v\u1ee5 n\u00e0y");$callback$$(null,$data$$,$obj$$)},onView:($user$$,$items$$,$callback$$)=>{$user$$.appAdmin||$items$$.forEach($item$$=>{delete $item$$.page_access_token});$callback$$(null,$items$$)}});$contr_router$$.route();$contr_router$$.router.route($contr_router$$.route_name+"/message/webhook").get(async($challenge_req$$,$res$$)=>{var $id_app_mode$$=$challenge_req$$.params.id_app,
$appInfo_facebook_webhook_verify_token$$=await global.getModel("app").findOne({_id:$id_app_mode$$});if(!$appInfo_facebook_webhook_verify_token$$)return $res$$.status(403).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin trang n\u00e0y"});$id_app_mode$$=$challenge_req$$.query["hub.mode"];let $token$$=$challenge_req$$.query["hub.verify_token"];$challenge_req$$=$challenge_req$$.query["hub.challenge"];if($id_app_mode$$&&$token$$){$appInfo_facebook_webhook_verify_token$$=$appInfo_facebook_webhook_verify_token$$.facebook_webhook_verify_token||
($appInfo_facebook_webhook_verify_token$$.options||{}).facebook_webhook_verify_token;if(!$appInfo_facebook_webhook_verify_token$$)return $res$$.status(400).send({error:"Ch\u01b0a khai b\u00e1o m\u00e3 x\u00e1c th\u1ee9c cho facebook trong m\u00e0n h\u00ecnh khai b\u00e1o th\u00f4ng tin c\u00f4ng ty"});$id_app_mode$$==="subscribe"&&$token$$===$appInfo_facebook_webhook_verify_token$$?(Logger.info("WEBHOOK_VERIFIED"),$res$$.status(200).send($challenge_req$$)):$res$$.status(403).send({error:"Forbidden"})}else $res$$.status(403).send({error:"Forbidden"})});
$contr_router$$.router.route($contr_router$$.route_name+"/message/webhook").post(async($req$$,$res$$)=>{let $body$$=$req$$.body;Logger.info("\ud83d\udfea Received webhook:");console.dir($body$$,{depth:null});if($body$$.object=="page")try{const $id_app$$=$req$$.params.id_app,$page_id$$=$body$$.entry[0].id,$pageInfo$$=await model.findOne({id_app:$id_app$$,page_id:$page_id$$}).lean();if(!$pageInfo$$)return $res$$.status(404).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin trang n\u00e0y"});
if($body$$.entry[0].messaging&&$body$$.entry[0].messaging.length>0&&$body$$.entry[0].messaging[0].sender&&$body$$.entry[0].messaging[0].sender.id){let $user_id$$=$body$$.entry[0].messaging[0].sender.id,$mid$$=($body$$.entry[0].messaging[0].message||{}).mid;if($mid$$){let $conv$$=await global.getModel("fbconversation").getConvByUserId($id_app$$,$page_id$$,$pageInfo$$.page_access_token,$user_id$$);$conv$$&&await global.getModel("fbconversation").getMessage($id_app$$,$page_id$$,$conv$$.id,$pageInfo$$.page_access_token,
$mid$$)}}}catch($e$$){Logger.error("Kh\u00f4ng th\u1ec3 x\u1eed l\u00fd tin nh\u1eafn t\u1eeb facebook",$e$$)}$res$$.status(200).send("EVENT_RECEIVED")});$contr_router$$.router.route($contr_router$$.route_name+"/conversations/:page_id").get(async($req$$,$res$$)=>{const $page_id$$=$req$$.params.page_id,$id_app$$=$req$$.params.id_app,$pageInfo$$=await model.findOne({id_app:$id_app$$,page_id:$page_id$$});if(!$pageInfo$$)return $res$$.status(400).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin trang n\u00e0y"});
let $rs$$=[],$next_page$$;async.forever($next$$=>{setImmediate(()=>{$next_page$$&&Logger.info("sync next page",$next_page$$);axios.request({method:"get",maxBodyLength:Infinity,url:$next_page$$?$next_page$$:`https://graph.facebook.com/${$page_id$$}/conversations/?platform=messenger&access_token=${$pageInfo$$.page_access_token}`,headers:{}}).then($response$$=>{const $convs$$=($response$$.data||{}).data||[];$next_page$$=(($response$$.data||{}).paging||{}).next;async.map($convs$$,async $c$$=>{setImmediate(async()=>
{if(!await global.getModel("fbconversation").findOne({id_app:$id_app$$,page_id:$page_id$$,id:$c$$.id},{id:1})){$c$$.page_id=$page_id$$;$c$$.id_app=$id_app$$;$c$$.user_created=$req$$.user.email;try{await global.getModel("fbconversation").create($c$$)}catch($e$$){Logger.error("Can't save conversation",$e$$,$c$$);return}}try{await global.getModel("fbconversation").sync($id_app$$,$page_id$$,$c$$.id)}catch($e$$){Logger.error("Can't sync conversation",$e$$,$c$$)}})},$error$$=>{if($error$$)return $next$$($error$$);
$rs$$=[...$rs$$,...$convs$$];$next$$($next_page$$?void 0:"end")})}).catch($error$$=>{$next$$($error$$)})})},$error$$=>{if($error$$!="end")return $res$$.status(400).send({error:$error$$});$res$$.send($rs$$)})});$contr_router$$.router.route($contr_router$$.route_name+"/messages/:page_id/:conv_id").get(async($conv_id_req$$,$res$$)=>{const $page_id$$=$conv_id_req$$.params.page_id,$id_app$$=$conv_id_req$$.params.id_app;$conv_id_req$$=$conv_id_req$$.params.conv_id;try{const $rs$$=await global.getModel("fbconversation").sync($id_app$$,
$page_id$$,$conv_id_req$$);$res$$.send($rs$$)}catch($e$$){$res$$.status(400).send($e$$)}})};module.exports=fbpage;