HealthyPassPortController.php 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. return response()->json(["data" => $profile] );
  31. }
  32. /**
  33. * 送出問卷
  34. *
  35. */
  36. public function post(Request $request){
  37. $lineUserId = $request->lineUserId; //line UID
  38. $headSticker = $request->headSticker ?? ""; //頭貼
  39. $healthAction = $request->healthAction; //平常你有什麼健康行動(複選)
  40. $healthTopic = $request->healthTopic; //你對什麼健康話題有興趣(複選)
  41. $healthStatus = $request->healthStatus; //你覺得自己的身體狀況如何
  42. $healthAdapt = $request->healthAdapt; //面對疫情趨緩,以下哪一個敘述最符合你的應對
  43. $healthThought = $request->healthThought; //下列哪一個敘述最符合你的想法
  44. $healthAge = $request->healthAge; //你的年齡
  45. $healthNickname = $request->healthNickname; //暱稱
  46. $healthGender = $request->healthGender; //性別
  47. $healthGenderRole = $request->healthGenderRole;//性別 male or female
  48. $survey_fill_content = ["healthAction" => $healthAction,
  49. "healthTopic" => $healthTopic,
  50. "healthStatus" => $healthStatus,
  51. "healthAdapt" => $healthAdapt,
  52. "healthThought" => $healthThought,
  53. "healthAge" => $healthAge,
  54. "healthGender" => $healthGender,
  55. ];
  56. //準備將填寫內容過API寫入 botbonnie 後台
  57. $buildActions = [];
  58. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAction));
  59. array_push($buildActions, $this->buildActionsRequest("addTag", $healthTopic));
  60. array_push($buildActions, $this->buildActionsRequest("addTag", $healthStatus));
  61. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAdapt));
  62. array_push($buildActions, $this->buildActionsRequest("addTag", $healthThought));
  63. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAge));
  64. array_push($buildActions, $this->buildActionsRequest("addTag", $healthGender));
  65. if($healthGenderRole != "")array_push($buildActions, $this->buildActionsRequest("saveParams", $healthGenderRole, "demographics", "gender"));
  66. $statusCode = $this->botActionsSend($lineUserId,$buildActions);
  67. if($statusCode == 200){
  68. //確認完成填寫問卷後,建立完成問券標籤
  69. $buildActions = [];
  70. array_push($buildActions, $this->buildActionsRequest("addTag", config("botApi.doneSurvey")));
  71. array_push($buildActions, $this->buildActionsRequest("setMenu", config("botApi.setMenuDoneSurvey")));
  72. $this->botActionsSend($lineUserId,$buildActions);
  73. //儲存填寫資料
  74. $survey_data = Survey::where('line_user_id',$lineUserId)->first();
  75. if(empty($survey_data->id)){
  76. $survey_data = new Survey();
  77. }
  78. $survey_data->line_user_id = $lineUserId;
  79. $survey_data->head_sticker = $headSticker;
  80. $survey_data->nickname = $healthNickname;
  81. $survey_data->filler_content = json_encode($survey_fill_content);
  82. $survey_data->save();
  83. return response()->json(["result" => 'successed']);
  84. }else{
  85. return response()->json(["result" => 'failed'] );
  86. }
  87. }
  88. function buildActionsRequest($type, $values, $groupId = null, $paramName = ""){
  89. if($type == "addTag"){
  90. if(is_array($values)){
  91. $tags = $values;
  92. }else{
  93. $tags = [$values];
  94. }
  95. return [
  96. "type" => $type,
  97. "value" => $tags
  98. ];
  99. }elseif($type == "saveParams"){
  100. return [
  101. "type" => $type,
  102. "groupId" => $groupId,
  103. "values" => [
  104. [
  105. "name" => $paramName,
  106. "value" => $values
  107. ]
  108. ]
  109. ];
  110. }elseif($type == "setMenu"){
  111. return [
  112. "type" => $type,
  113. "platform" => 1,
  114. "value" => $values
  115. ];
  116. }
  117. }
  118. function botActionsSend($lineUserId,$actions){
  119. $client = new Client();
  120. $res_users = $client->request('POST', config('botApi.botActions'),[
  121. 'headers'=>$this->api_header,
  122. 'json' => [
  123. 'userId' => $lineUserId,
  124. 'pageId' => config('botApi.lineOAId'),
  125. 'platform' => 1,
  126. 'actions' => $actions
  127. ]
  128. ]);
  129. $statusCode = $res_users->getStatusCode();
  130. return $statusCode;
  131. }
  132. }