flexbiz-server
Version:
Flexible Server
11 lines (10 loc) • 4.92 kB
JavaScript
'use strict';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 $appInfo_id_app$$=
$challenge_req$$.params.id_app;$appInfo_id_app$$=await global.getModel("app").findOne({_id:$appInfo_id_app$$});if(!$appInfo_id_app$$)return $res$$.status(403).send({error:"Kh\u00f4ng t\u00ecm th\u1ea5y th\u00f4ng tin trang n\u00e0y"});let $mode$$=$challenge_req$$.query["hub.mode"],$token$$=$challenge_req$$.query["hub.verify_token"];$challenge_req$$=$challenge_req$$.query["hub.challenge"];$mode$$&&$token$$?"subscribe"===$mode$$&&$token$$===$appInfo_id_app$$.options.facebook_webhook_verify_token?(console.log("WEBHOOK_VERIFIED"),
$res$$.status(200).send($challenge_req$$)):$res$$.status(403).send({error:"Forbidden"}):$res$$.status(403).send({error:"Forbidden"})});$contr_router$$.router.route($contr_router$$.route_name+"/message/webhook").post(async($req$$,$res$$)=>{let $body$$=$req$$.body;console.log("\ud83d\udfea Received webhook:");console.dir($body$$,{depth:null});if("page"==$body$$.object)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&&0<$body$$.entry[0].messaging.length&&$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$$){console.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$$&&console.log("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$$){console.error("Can't save conversation",$e$$,$c$$);return}}try{await global.getModel("fbconversation").sync($id_app$$,
$page_id$$,$c$$.id)}catch($e$$){console.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("end"!=$error$$)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;