HealthyPassPortController.php 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Carbon\Carbon;
  4. use App\Models\Tag;
  5. use App\Models\Survey;
  6. use Illuminate\Http\Request;
  7. use GuzzleHttp\Client;
  8. use Illuminate\Support\Facades\Log;
  9. use Illuminate\Support\Facades\Storage;
  10. class HealthyPassPortController extends Controller
  11. {
  12. private $api_header = array();
  13. private $tag_set = array();
  14. public function __construct()
  15. {
  16. $this->api_header = [
  17. 'Authorization' => 'Bearer ' . config('botApi.botToken'),
  18. 'Accept' => 'application/json'
  19. ];
  20. }
  21. public function sticker(Request $request){
  22. $headSticker = $request->headSticker; //頭貼
  23. $profile = Survey::where('line_user_id',$request->lineUserId)->first();
  24. $profile->head_sticker = $headSticker;
  25. $profile->save();
  26. return response()->json(["data" => $profile] );
  27. }
  28. public function profile(Request $request){
  29. $profile = Survey::where('line_user_id',$request->lineUserId)->first();
  30. if(!empty($profile->id)){
  31. $profile->filler_content = json_decode($profile->filler_content, true);
  32. $this->botActionsSend($request->lineUserId,[$this->buildActionsRequest("setMenu", config("botApi.setMenuDoneSurvey"))]);
  33. }
  34. return response()->json(["data" => $profile] );
  35. }
  36. /**
  37. * 送出問卷
  38. *
  39. */
  40. public function post(Request $request){
  41. $lineUserId = $request->lineUserId; //line UID
  42. $headSticker = $request->headSticker ?? ""; //頭貼
  43. $healthAction = $request->healthAction; //平常你有什麼健康行動(複選)
  44. $healthTopic = $request->healthTopic; //你對什麼健康話題有興趣(複選)
  45. $healthStatus = $request->healthStatus; //你覺得自己的身體狀況如何
  46. $healthAdapt = $request->healthAdapt; //面對疫情趨緩,以下哪一個敘述最符合你的應對
  47. $healthThought = $request->healthThought; //下列哪一個敘述最符合你的想法
  48. $healthAge = $request->healthAge; //你的年齡
  49. $healthNickname = $request->healthNickname; //暱稱
  50. $healthGender = $request->healthGender; //性別
  51. $healthGenderRole = $request->healthGenderRole;//性別 male or female
  52. $survey_fill_content = ["healthAction" => $healthAction,
  53. "healthTopic" => $healthTopic,
  54. "healthStatus" => $healthStatus,
  55. "healthAdapt" => $healthAdapt,
  56. "healthThought" => $healthThought,
  57. "healthAge" => $healthAge,
  58. "healthGender" => $healthGender,
  59. ];
  60. $survey_data = Survey::where('line_user_id',$lineUserId)->first();
  61. if(!empty($survey_data->id)){
  62. $filler_content = json_decode($survey_data->filler_content, true);
  63. $clearAction = [];
  64. foreach($filler_content as $key => $content){
  65. array_push($clearAction, $this->buildActionsRequest("removeTag", $content));
  66. }
  67. $statusCode = $this->botActionsSend($lineUserId,$clearAction);
  68. }
  69. //準備將填寫內容過API寫入 botbonnie 後台
  70. $buildActions = [];
  71. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAction));
  72. array_push($buildActions, $this->buildActionsRequest("addTag", $healthTopic));
  73. array_push($buildActions, $this->buildActionsRequest("addTag", $healthStatus));
  74. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAdapt));
  75. array_push($buildActions, $this->buildActionsRequest("addTag", $healthThought));
  76. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAge));
  77. array_push($buildActions, $this->buildActionsRequest("addTag", $healthGender));
  78. if($healthGenderRole != "")array_push($buildActions, $this->buildActionsRequest("saveParams", $healthGenderRole, "demographics", "gender"));
  79. $statusCode = $this->botActionsSend($lineUserId,$buildActions);
  80. if($statusCode == 200){
  81. //確認完成填寫問卷後,建立完成問券標籤
  82. $buildActions = [];
  83. array_push($buildActions, $this->buildActionsRequest("addTag", config("botApi.doneSurvey")));
  84. array_push($buildActions, $this->buildActionsRequest("setMenu", config("botApi.setMenuDoneSurvey")));
  85. $this->botActionsSend($lineUserId,$buildActions);
  86. //儲存填寫資料
  87. if(empty($survey_data->id)){
  88. $survey_data = new Survey();
  89. }
  90. $survey_data->line_user_id = $lineUserId;
  91. $survey_data->head_sticker = $headSticker;
  92. $survey_data->nickname = $healthNickname;
  93. $survey_data->filler_content = json_encode($survey_fill_content);
  94. $survey_data->save();
  95. return response()->json(["result" => 'successed']);
  96. }else{
  97. return response()->json(["result" => 'failed'] );
  98. }
  99. }
  100. public function clearProfile(Request $request){
  101. $lineUserId = $request->lineUserId; //line UID
  102. $survey_data = Survey::where('line_user_id',$lineUserId)->first();
  103. if(!empty($survey_data->id)){
  104. $filler_content = json_decode($survey_data->filler_content, true);
  105. $clearAction = [];
  106. foreach($filler_content as $key => $content){
  107. array_push($clearAction, $this->buildActionsRequest("removeTag", $content));
  108. }
  109. array_push($clearAction, $this->buildActionsRequest("removeTag", config("botApi.doneSurvey")));
  110. array_push($clearAction, $this->buildActionsRequest("setMenu", "default"));
  111. print_r($clearAction);exit;
  112. $statusCode = $this->botActionsSend($lineUserId,$clearAction);
  113. if($statusCode == 200){
  114. $survey_data->delete();
  115. }
  116. }
  117. }
  118. function buildActionsRequest($type, $values, $groupId = null, $paramName = ""){
  119. if($type == "addTag" || $type == "removeTag"){
  120. if(is_array($values)){
  121. $tags = $values;
  122. }else{
  123. $tags = [$values];
  124. }
  125. return [
  126. "type" => $type,
  127. "value" => $tags
  128. ];
  129. }elseif($type == "saveParams"){
  130. return [
  131. "type" => $type,
  132. "groupId" => $groupId,
  133. "values" => [
  134. [
  135. "name" => $paramName,
  136. "value" => $values
  137. ]
  138. ]
  139. ];
  140. }elseif($type == "setMenu"){
  141. return [
  142. "type" => $type,
  143. "platform" => 1,
  144. "value" => $values
  145. ];
  146. }
  147. }
  148. function botActionsSend($lineUserId,$actions){
  149. $client = new Client();
  150. $res_users = $client->request('POST', config('botApi.botActions'),[
  151. 'headers'=>$this->api_header,
  152. 'json' => [
  153. 'userId' => $lineUserId,
  154. 'pageId' => config('botApi.lineOAId'),
  155. 'platform' => 1,
  156. 'actions' => $actions
  157. ]
  158. ]);
  159. $statusCode = $res_users->getStatusCode();
  160. return $statusCode;
  161. }
  162. }