src/Controller/CamprodonController.php line 68

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Activity;
  4. use App\Entity\ActivityI18n;
  5. use App\Entity\Buttons;
  6. use App\Entity\ButtonsI18n;
  7. use App\Entity\LangLocation;
  8. use App\Entity\Category;
  9. use App\Entity\CategoryI18n;
  10. use App\Entity\LocationPhone;
  11. use App\Entity\Locations;
  12. use App\Entity\LogWhatsapp;
  13. use App\Entity\Meteo;
  14. use App\Entity\TemplateWhatsapp;
  15. use App\Entity\User;
  16. use App\Entity\UserLocation;
  17. use App\Entity\LogUser;
  18. use App\Entity\Countries;
  19. use App\Entity\Lang;
  20. use App\Entity\LogConversation;
  21. use App\Entity\LogQuestionUser;
  22. use App\Entity\LogTracking;
  23. use App\Entity\Places;
  24. use App\Entity\PollQuestion;
  25. use App\Entity\PollResponse;
  26. use App\Service\Utilities;
  27. use App\Service\Meta;
  28. use App\Service\Emoji;
  29. use App\Service\ExternalCalls;
  30. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  33. use Symfony\Component\Routing\Annotation\Route;
  34. use Doctrine\Persistence\ManagerRegistry;
  35. use Exception;
  36. use Symfony\Component\HttpFoundation\JsonResponse;
  37. use Symfony\Contracts\Translation\TranslatorInterface;
  38. class CamprodonController extends AbstractController
  39. {
  40.     private $location;
  41.     private $locationName;
  42.     private $carouselLimit;
  43.     private $limitTimeContext;
  44.   
  45.     private $templateLangCode;
  46.     public function __construct(){
  47.         $this->location "camprodon";
  48.         $this->locationName "Camprodon Turisme";
  49.         $this->carouselLimit 4;
  50.         $this->templateLangCode = array(
  51.             "es" => "es_ES",
  52.             "ca" => "ca",
  53.             "fr" => "fr",
  54.             "en" => "en"
  55.         );  
  56.         $this->limitTimeContext 10;
  57.     }
  58.     /**
  59.      * @Route("/camprodon/{lang}/", name="camprodon_home_lang", methods={"GET"})
  60.      * @Route("/camprodon", name="camprodon_home", methods={"GET"})
  61.      * 
  62.      */
  63.     public function camprodonHomeLang(Request $requestUtilities $utilitiesManagerRegistry $doctrineSessionInterface $sessionTranslatorInterface $translator){
  64.         //dd($utilities->ecrypt("34636622029"));
  65.         //dd($utilities->dcrypt("ogUakiDUr2AxuXw="));
  66.         
  67.         /* Debug session
  68.         $session->remove('logUser');
  69.         $session->remove('user');
  70.         $session->remove('templateSended');
  71.         */
  72.         //$result = $this->askGPT("quiero más información de Natura de Camprodon", "b4a682ff6eb47ee58d5b00e47bc72884e9922d3209df787d15e0f3df7d524621", $doctrine);
  73.         $session->set('location'$this->location);
  74.         /* $hash = $request->get('hash');
  75.         if ( !$hash ) {
  76.             $hash = $session->get('logUser');
  77.         } */
  78.         $logUserId = ( $session->get('logUser') ) ? $session->get('logUser') : "";
  79.         $em $doctrine->getManager();
  80.         $locationsRepository $em->getRepository(Locations::class);
  81.         $pollQuestionRepository $em->getRepository(PollQuestion::class);
  82.         $pollResponseRepository $em->getRepository(PollResponse::class);
  83.         $langLocationsRepository $em->getRepository(LangLocation::class);
  84.         $userRepository $em->getRepository(User::class);
  85.         // Get domain
  86.             $domain "http" . ($_SERVER['HTTPS'] ? 's' '') . "://" $_SERVER['HTTP_HOST'];
  87.         // ---
  88.         // Get Location
  89.             $location $locationsRepository->findOneBy(array("name" => $this->location));
  90.         // ---
  91.         // Detect language
  92.             $langDefault "";
  93.             $prefixDefault "";
  94.             $lang substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 02);
  95.             $langDetected $lang;
  96.             if ( $request->get('lang') && !empty($request->get('lang')) ) {
  97.                 $lang $request->get('lang');
  98.             }
  99.             $langs $langLocationsRepository->getLangs($location->getId());
  100.             if ( $lang == "gl" || $lang == "eu" $lang "es";
  101.             $langFound false;
  102.             foreach($langs as $l) {
  103.                 if ( $l['default'] == ) {
  104.                     $langDefault $l['lang'];
  105.                     $prefixDefault $l['prefix'];
  106.                 }
  107.                 if ( $l['lang'] == $lang ) {
  108.                     $lang $l['lang'];
  109.                     $prefix $l['prefix'];
  110.                     $langFound true;
  111.                     break;
  112.                 }
  113.             }
  114.             if ( !$langFound ) {
  115.                 $lang $langDefault;
  116.                 $prefix $prefixDefault;
  117.             }
  118.             if ( $request->get('lang') == "" ) {
  119.                 
  120.                 $fulluri explode("?"$_SERVER["REQUEST_URI"]);
  121.                 $redirect $fulluri[0] . "/" $lang "/";
  122.                 /* if ( ( count($fulluri) > 1 ) && ( !empty($fulluri[1])) ) {
  123.                     $redirect .= "?" . $fulluri[1];
  124.                 } */ 
  125.                 //dd($redirect);
  126.                 return $this->redirect($redirect);
  127.             }
  128.         // ---
  129.         // Get countries
  130.           $countries $em->getRepository(Countries::class)->getCountries($lang);
  131.         // ---
  132.         // Find hash
  133.             //$logUser = $em->getRepository(LogUser::class)->findOneBy(array("hash" => $hash ));
  134.             if ($logUserId) {
  135.                 $logUser $em->getRepository(LogUser::class)->find($logUserId);
  136.                 if ($logUser) {
  137.                     if ( !$logUser->getUser() && $session->get('user') ) {
  138.                         $userFound $userRepository->find($session->get('user'));
  139.                         $logUser->setUser($userFound);
  140.                         $em->persist($logUser);
  141.                         $em->flush();
  142.                         $logUserId $logUser->getId();
  143.                     }
  144.                 }
  145.             }
  146.             // $hash = $session->get('logUser');
  147.         // ---
  148.         // Template sended
  149.             $templateSended = ( $session->get('templateSended') ) ? "templateSended" "";
  150.         // ---
  151.         //Go to Form passing the logUser id to update later on when user gives phone number
  152.         //TODO - Carregar logo depenent del projecte
  153.         $args = array(
  154.             "domain" => $domain,
  155.             "baseUrl" => $this->getParameter("app.base_url"),
  156.             "logUser" => $logUserId,
  157.             "user" => $session->get('user'),
  158.             "lang" => $lang,
  159.             "langDetected" => $langDetected,
  160.             "countries" => $countries,
  161.             "prefix" => $prefix,
  162.             "langs" => $langs,
  163.             "location" => $this->location,
  164.             "locationName" => $this->locationName,
  165.             "templateSended" => $templateSended
  166.         );
  167.         //dd($args);
  168.         return $this->render('form_flux/form.html.twig'$args);
  169.     }
  170.     // /**
  171.     //  * @Route("/guestassistant/webhook/facebook/whatsapp", name="guestassistant_webhook_whatsapp", methods={"GET","POST"})
  172.     //  * 
  173.     //  */
  174.     public function main(Request $requestUtilities $utilitiesMeta $metaEmoji $emojiManagerRegistry $doctrineTranslatorInterface $translatorExternalCalls $externalCallsSessionInterface $session){
  175.         // die();
  176.         /**
  177.          * ?Revisar si el prefix ve en algun a peticio, sino es igual ja que es un camp que nomes fem servir nosaltres per ordenar
  178.          * ?Ifs per idioma o alguna manera millor?
  179.          * ?Log whatsapp agafar eventos de send, delivered...
  180.          */
  181.         $em $doctrine->getManager();
  182.         $locationsRepository $em->getRepository(Locations::class);
  183.         $logWhatsappRepository $em->getRepository(LogWhatsapp::class);
  184.         $logConversationRepository $em->getRepository(LogConversation::class);
  185.         $userRepository $em->getRepository(User::class);
  186.         $userLocationRepository $em->getRepository(UserLocation::class);
  187.         $locationsPhoneRepo $em->getRepository(LocationPhone::class);
  188.         $buttonsRepo $em->getRepository(Buttons::class);
  189.         $buttonsI18nRepo $em->getRepository(ButtonsI18n::class);
  190.         $activityRepo $em->getRepository(Activity::class);
  191.         $activityI18nRepo $em->getRepository(ActivityI18n::class);
  192.         $categoryRepo $em->getRepository(Category::class);
  193.         $categoryI18nRepo $em->getRepository(CategoryI18n::class);
  194.         $meteoRepo $em->getRepository(Meteo::class);
  195.         $templateRepo $em->getRepository(TemplateWhatsapp::class);
  196.         $langRepo $em->getRepository(Lang::class);
  197.         $pollQuestionRepository $em->getRepository(PollQuestion::class);
  198.         $pollResponseRepository $em->getRepository(PollResponse::class);
  199.         $logQuestionUserRepository $em->getRepository(LogQuestionUser::class);
  200.         $placesRepo $em->getRepository(Places::class);
  201.         $location $locationsRepository->findOneBy(array("name" => $this->location));
  202.         $now = new \DateTime('now');
  203.         $now->setTimezone(new \DateTimeZone('Europe/Madrid'));
  204.         
  205.         $postValues json_decode($request->getContent());
  206.         // $meta->setLog("[META] ENTRA", $utilities->ecrypt(json_encode($postValues)), $location, $utilities->ecrypt('602354321'));
  207.         if($postValues){
  208.             $metaResponse $postValues->entry[0]->changes[0];
  209.             
  210.             if(property_exists($metaResponse->value"statuses")){
  211.                 $status $metaResponse->value->statuses[0]->status;
  212.                 $timestamp $metaResponse->value->statuses[0]->timestamp;
  213.                 $messageId $metaResponse->value->statuses[0]->id;
  214.                 $phone $metaResponse->value->statuses[0]->recipient_id;
  215.                 $conversationId null;
  216.                 // $meta->setLog("[META] - Status update", $utilities->ecrypt(json_encode($metaResponse->value)), $location, $utilities->ecrypt($phone));
  217.                 // $conversationId = $metaResponse->value->statuses->id;
  218.                 $user $userRepository->findOneBy(array("phone" => $utilities->ecrypt($phone)));
  219.                 if($status == "sent"){
  220.                     $conversationId $metaResponse->value->statuses[0]->conversation->id;
  221.         
  222.                     $outbounds $logWhatsappRepository->findBy(array("phone" => $utilities->ecrypt($phone), "conversationId" => null"location" => $location), array("dateCreated" => "DESC"));
  223.                     foreach( $outbounds as $o){
  224.                         $o->setConversationId($conversationId);
  225.                         $em->persist($o);
  226.                     }
  227.                     $em->flush();
  228.                 }else{
  229.                     $lwr $logWhatsappRepository->findOneBy(array("messageId"=> $messageId), array("dateCreated" => "DESC"));
  230.                     if($lwr$conversationId $lwr->getConversationId();
  231.                 }
  232.                 
  233.                 //STATUS UPDATE
  234.                 $logWhatsapp = new LogWhatsapp();
  235.                 $logWhatsapp->setMessageId$messageId );
  236.                 $logWhatsapp->setPhone$utilities->ecrypt($phone) );
  237.                 $logWhatsapp->setPrefix$user->getPrefix() );
  238.                 $logWhatsapp->setText(null );
  239.                 $logWhatsapp->setStatus$status );
  240.                 $logWhatsapp->setDateCreated$now );
  241.                 $logWhatsapp->setTimestampProvider$timestamp );
  242.                 $logWhatsapp->setUser$user );
  243.                 $logWhatsapp->setLocation$location );
  244.                 $logWhatsapp->setLang$user->getLang() );
  245.                 $logWhatsapp->setConversationId($conversationId);
  246.                 $em->persist($logWhatsapp);
  247.                 $em->flush();
  248.                 die();
  249.             }else{
  250.                 $type $metaResponse->value->messages[0]->type;
  251.                 $userPhone $metaResponse->value->messages[0]->from;
  252.                 $userPhoneCrypt $utilities->ecrypt($userPhone);
  253.                 $contactName $metaResponse->value->contacts[0]->profile->name;
  254.     
  255.                 $meta->setLog("[META] Camprodon post info"$utilities->ecrypt(json_encode($metaResponse)), $location$userPhoneCrypt);
  256.     
  257.                 $timestamp $metaResponse->value->messages[0]->timestamp;
  258.     
  259.                 $text "";
  260.                 $postbackId "";
  261.                 $responseForm = array();
  262.                 if($type == "text"$text $metaResponse->value->messages[0]->text->body;
  263.                 if($type == $_ENV['meta_PAYLOAD__BUTTON']) {
  264.                     $text $metaResponse->value->messages[0]->button->text;
  265.                     $postbackId $metaResponse->value->messages[0]->button->payload;
  266.                 }
  267.                 $catalogId '';
  268.                 $productsCart = array();
  269.                 if($type == "order"){
  270.                     $catalogId =  $metaResponse->value->messages[0]->order->catalog_id;
  271.                     $productsCart =  $metaResponse->value->messages[0]->order->product_items;
  272.                 }
  273.     
  274.                 $interactiveType "";
  275.                 
  276.                 if($type == "interactive") {
  277.                     $interactiveType $metaResponse->value->messages[0]->interactive->type;
  278.                     if($interactiveType == $_ENV['meta_PAYLOAD__LIST_REPLY']){
  279.                         $text $metaResponse->value->messages[0]->interactive->list_reply->title;
  280.                         $postbackId $metaResponse->value->messages[0]->interactive->list_reply->id;
  281.                     }else if($interactiveType == $_ENV['meta_PAYLOAD__BUTTON_REPLY']){
  282.                         $text $metaResponse->value->messages[0]->interactive->button_reply->title;
  283.                         $postbackId $metaResponse->value->messages[0]->interactive->button_reply->id;
  284.                     }else if($interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
  285.                         $responseForm json_decode($metaResponse->value->messages[0]->interactive->nfm_reply->response_json);
  286.                     }
  287.                 }
  288.     
  289.                 $meta->setLog("[META] - Camprodon TEXT"$utilities->ecrypt($text), $location$utilities->ecrypt($userPhone));
  290.                 
  291.                 //Find User
  292.                 $user $userRepository->findOneBy(array("phone" => $userPhoneCrypt));                
  293.                 $conversationId null;
  294.     
  295.                 //Create user if it doesn't exist
  296.                 if(!$user){
  297.                     $user = new User();
  298.                     $user->setPhone($userPhoneCrypt);
  299.                     $user->setPrefix$utilities->ecrypt(34) );
  300.                     $user->setName($utilities->ecrypt($contactName));
  301.                     $user->setHash(bin2hex(random_bytes(16)));
  302.                     $user->setTermsPolicy(0);
  303.                     $user->setDateCreated($now);
  304.                     $lang $externalCalls->detectLang($text);
  305.                     $meta->setLog("[META] Camprodon - Create new user - Lang detected"$utilities->ecrypt($lang), $location$userPhoneCrypt);
  306.                     $user->setLang($lang);
  307.                     $user->setRegisteredLocation($location);
  308.                     
  309.                     $em->persist($user);
  310.                     $em->flush();
  311.     
  312.                     $meta->setLog("[META] Camprodon - Create new user"$utilities->ecrypt("ID: ".$user->getId()), $location$userPhoneCrypt);
  313.                 }else if(!$user->getName()){
  314.                     $user->setName($utilities->ecrypt($contactName));
  315.                     $meta->setLog("[META] - Update username"$utilities->ecrypt("ID: ".$user->getId()), $location$userPhoneCrypt);
  316.                     $em->persist($user);
  317.                     $em->flush();
  318.                 }
  319.                 if($user->getStatus() == 0){ //If the user has unsuscribed
  320.                     $meta->setLog("[META] - User unsuscribed"$utilities->ecrypt("User is unsuscribed"), $location$userPhoneCrypt);
  321.                     die();
  322.                 }
  323.     
  324.                 $lang $user->getLang();
  325.                 $langEntity $langRepo->findOneBy(array("lang" => $lang));
  326.                 
  327.                 $prefix $user->getPrefix();
  328.                 $currentLocations $userLocationRepository->findBy(array("user" => $user),array("dateCreated" => "DESC"));
  329.                 $currentLocation null;
  330.                 //TODO - Potser tornar a crear un registre si ha passat un temps desde l'ultima user_location
  331.     
  332.                 //If first time or last location wasn't this location, create a new UserLocation
  333.                 if(!$currentLocations || ($currentLocations && $currentLocations[0]->getLocation()->getName() != $this->location)){ 
  334.                     $userLocation = new UserLocation();
  335.                     $userLocation->setLocation($location);
  336.                     $userLocation->setUser($user);
  337.                     $userLocation->setDateCreated($now);
  338.     
  339.                     $em->persist($userLocation);
  340.                     $em->flush();
  341.     
  342.                     $currentLocation $userLocation;
  343.                     $meta->setLog("[META] Camprodon - Create User Location"$utilities->ecrypt($userPhone." - ".$location->getName()), $location$utilities->ecrypt($userPhone));
  344.                 }else if(($currentLocations && $currentLocations[0]->getLocation()->getName() == $this->location)){
  345.                     $currentLocation $currentLocations[0];
  346.                 }
  347.     
  348.                 //INBOUND
  349.                 $isQuestion false;
  350.                 $logWhatsapp = new LogWhatsapp();
  351.                 $logWhatsapp->setMessageId$metaResponse->value->messages[0]->id );
  352.                 $logWhatsapp->setPhone$userPhoneCrypt );
  353.                 $logWhatsapp->setPrefix$prefix );
  354.                 if($interactiveType == $_ENV['gs_PAYLOAD__BUTTON_REPLY'] || $type == $_ENV['meta_PAYLOAD__BUTTON'] || $interactiveType == $_ENV['gs_PAYLOAD__LIST_REPLY']){
  355.                     $postbackIdAux $postbackId;
  356.                     if(base64_decode($postbackIdtrue)){
  357.                         $postbackIdAux strpos(base64_decode($postbackId), "_") !== false base64_decode($postbackId) : $postbackId;
  358.                     }
  359.                     $logWhatsapp->setText$emoji->encode( ($text ." - {"$postbackIdAux"}") ) );                
  360.                 }else if($interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
  361.                     $logWhatsapp->setText$emoji->encodejson_encode($responseForm) ) );
  362.                 }else{
  363.                     $logWhatsapp->setText$emoji->encode$text ) );
  364.                     $isQuestion true;
  365.                 }
  366.                 $logWhatsapp->setStatus"inbound" );
  367.                 $logWhatsapp->setDateCreated$now );
  368.                 $logWhatsapp->setTimestampProvider$timestamp );
  369.                 $logWhatsapp->setUser$user );
  370.                 $logWhatsapp->setLocation$location );
  371.                 $logWhatsapp->setLang$user->getLang() );
  372.                 $logWhatsapp->setConversationId($conversationId);
  373.     
  374.                 $em->persist($logWhatsapp);
  375.                 $em->flush();
  376.                 if($isQuestion){
  377.                     $logQuestionUser = new LogQuestionUser();
  378.                     $logQuestionUser->setLocation($location);
  379.                     $logQuestionUser->setDateCreated($now);
  380.                     $logQuestionUser->setQuestion($logWhatsapp);
  381.                     $logQuestionUser->setUser($user);
  382.                     $em->persist($logQuestionUser);
  383.                     $em->flush();
  384.                 }
  385.                 
  386.                 //If response is from the flow, must be quick rely or list, so we know it's from the flow, otherwise might be first interaction or free question 
  387.                 if($type == $_ENV['meta_PAYLOAD__BUTTON'] || $interactiveType == $_ENV['meta_PAYLOAD__LIST_REPLY'] || $interactiveType == $_ENV['meta_PAYLOAD__BUTTON_REPLY'] || $interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
  388.                     $meta->setLog("[META] Interactive response"$utilities->ecrypt("Fluxe botons"), $location$userPhoneCrypt);
  389.                     if($interactiveType == $_ENV['meta_PAYLOAD__BUTTON_REPLY'] || $type == $_ENV['meta_PAYLOAD__BUTTON'] || $interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
  390.                         /*
  391.                         *   Postback id of the button pressed by the user
  392.                         */ 
  393.                         //STEP - 0: Response
  394.                         if($postbackId == "recomendation"){
  395.                             $buttons1 $buttonsRepo->getTextButton($location1$lang); //STEP - 1 : What to do & What to visit & Others
  396.                             $btns1 = array();
  397.                             
  398.                             foreach($buttons1 as $btn1){
  399.                                 array_push($btns1, [
  400.                                     "postback_id" => $btn1['postbackText'],
  401.                                     "text" => $btn1['text']
  402.                                 ]);
  403.                             }
  404.                             $responseMessage = [
  405.                                 "body" => $translator->trans('dialog.step_1_manual_flow', [], "camprodon.messages"$lang),
  406.                                 "buttons" => $btns1
  407.                             ];
  408.                             // dd($responseMessage);
  409.     
  410.                             //$translator->trans('dialog.start_manual_flow_buttons.button_1', [], "camprodon.messages", $lang)
  411.     
  412.                             //Escull una d'aquestes opcions o escriu la teva paraula
  413.                             //Si no es boton -> pregunta normal
  414.                             $options = array();
  415.                             $res = (object)$meta->sendMessage
  416.                                 $_ENV['gs_PAYLOAD__QUICK_REPLY'], 
  417.                                 $userPhone
  418.                                 $responseMessage
  419.                                 $location
  420.                                 $options
  421.                             );
  422.                             // dd($res);
  423.                             $meta->setLog("[META] Camprodon response"$utilities->ecrypt(json_encode($res)), $location$userPhoneCrypt);
  424.                             
  425.                             $messageId "";
  426.                             if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  427.         
  428.                             $logWhatsapp = new LogWhatsapp();
  429.                             $logWhatsapp->setConversationId($conversationId);
  430.                             $logWhatsapp->setMessageId($messageId);
  431.                             $logWhatsapp->setPhone$userPhoneCrypt );
  432.                             $logWhatsapp->setPrefix$prefix );
  433.                             $logWhatsapp->setTemplatenull );
  434.                             $logWhatsapp->setText$emoji->encode$responseMessage["body"] ) );
  435.                             $logWhatsapp->setStatus"outbound" );
  436.                             $logWhatsapp->setDateCreated$now );
  437.                             $logWhatsapp->setTimestampProvider$timestamp );
  438.                             $logWhatsapp->setUser$user );
  439.                             $logWhatsapp->setLocation$location );
  440.                             $logWhatsapp->setLang$user->getLang() );
  441.         
  442.                             $em->persist($logWhatsapp);
  443.                             $em->flush();
  444.                             die();
  445.                         }else if($postbackId == "free_ask"){
  446.                             $responseMessage = ["text" => $translator->trans('dialog.free_ask_start', [], "camprodon.messages"$lang)];
  447.                             $options = array();
  448.                             $res = (object)$meta->sendMessage
  449.                                 $_ENV['meta_PAYLOAD__TEXT'], 
  450.                                 $userPhone
  451.                                 $responseMessage
  452.                                 $location
  453.                                 $options
  454.                             );
  455.                             
  456.                             $messageId "";
  457.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  458.         
  459.                             $logWhatsapp = new LogWhatsapp();
  460.                             $logWhatsapp->setMessageId($messageId);
  461.                             $logWhatsapp->setPhone$userPhoneCrypt );
  462.                             $logWhatsapp->setPrefix$user->getPrefix() );
  463.                             $logWhatsapp->setText$emoji->encode$responseMessage["text"]));
  464.                             $logWhatsapp->setStatus"outbound" );
  465.                             $logWhatsapp->setDateCreated$now );
  466.                             $logWhatsapp->setTimestampProvider$timestamp );
  467.                             $logWhatsapp->setUser$user );
  468.                             $logWhatsapp->setLocation$location );
  469.                             $logWhatsapp->setLang$user->getLang() );
  470.                             $logWhatsapp->setConversationId($conversationId);
  471.                             $logWhatsapp->setTemplate(null);
  472.         
  473.                             $em->persist($logWhatsapp);
  474.                             $em->flush();
  475.                             $logConversation $logConversationRepository->findOneBy(array("user" => $user->getId()));
  476.                             if($logConversation){
  477.                                 $em->remove($logConversation);
  478.                                 $em->flush();
  479.                             }
  480.                             die();
  481.                         }
  482.                         //STEP - 1: Response
  483.                         if($postbackId == "visit"){
  484.                             $this->createQuickReply($doctrine$translator$meta$user$location$lang$text$conversationId$timestamp"step_2_manual_flow_visit");
  485.                             die();
  486.                         }else if($postbackId == "do"){
  487.                             $this->createQuickReply($doctrine$translator$meta$user$location$lang$text$conversationId$timestamp"step_2_manual_flow_do");
  488.                             die();
  489.                         }else if($postbackId == "other"){
  490.                             $this->createQuickReply($doctrine$translator$meta$user$location$lang$text$conversationId$timestamp"step_2_manual_flow_other");
  491.                             die();
  492.                         }
  493.                         //STEP - 2: Response(VISIT)
  494.                         if($postbackId == "essential"){
  495.                             $category $categoryRepo->find(7);
  496.                             $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  497.                             $seeMore true;
  498.                             $meteo 'n'//y = Show Meteo message/ n = Don't show meteo message
  499.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_essentials");
  500.                             usleep(500000);
  501.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  502.                             die();
  503.                         }else if($postbackId == "guided_tours"){
  504.                             $category $categoryRepo->find(8);
  505.                             $template $templateRepo->findOneBy(array("slug" => "carousel_four""lang" => $langEntity"location" => $location)); //Template with 4 carousels
  506.                             $seeMore false;
  507.                             $meteo 'n'//y = Show Meteo message/ n = Don't show meteo message
  508.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_guided_visits");
  509.                             
  510.                             usleep(500000);
  511.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  512.                             die();
  513.                         }else if($postbackId == "nature_sports"){
  514.                             $this->createQuickReply($doctrine$translator$meta$user$location$lang$text$conversationId$timestamp"step_3_manual_flow_nature_sports");
  515.                             die();
  516.                         }
  517.                         // STEP - 2: Response(DO)
  518.                         if($postbackId == "cultural_activities"){
  519.                             $category $categoryRepo->find(15);
  520.                             $template $templateRepo->findOneBy(array("slug" => "carousel_calendar""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  521.                             $seeMore true;
  522.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  523.                             $type $_ENV['meta_PAYLOAD__CAROUSEL'];
  524.                             $categoryUrl $categoryI18nRepo->findOneBy(array("category" => $category"lang" => $lang"metaKey" => "url"));
  525.                             $activities $activityRepo->findBy(array("category" => $category"location" => $location), array("sort" => "ASC"), $this->carouselLimit); //Limit of cards to be showed
  526.                             $cards = array();
  527.                             foreach($activities as $activity){
  528.                                 $aI18n $activityI18nRepo->findBy(array("activity" => $activity"lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
  529.                                 $bodyParam1 "";
  530.                                 $bodyParam2 "";
  531.                                 $headerImg $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg";
  532.                                 $buttonUrl "https://ripollesturisme.cat/wp-content/uploads/2021/12/Web-Folleto-Camprodon-Cat-Cas.pdf";
  533.                                 foreach($aI18n as $activityData){
  534.                                     if($activityData->getMetaKey() == "name"){
  535.                                         $bodyParam1 addslashes($activityData->getMetaValue());
  536.                                     }else if($activityData->getMetaKey() == "image"){
  537.                                         // $headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
  538.                                         // $headerImg = $activityData->getMetaValue();
  539.                                     }else if($activityData->getMetaKey() == "url"){
  540.                                         $buttonUrl $activityData->getMetaValue();
  541.                                     }else if($activityData->getMetaKey() == "start_date"){
  542.                                         $bodyParam2 $activityData->getMetaValue();
  543.                                     }
  544.                                 }
  545.                                 $paramsActivity = array(
  546.                                     "header" => array(
  547.                                         "type" => "image",
  548.                                         "url" => $headerImg //TODO - Substituir per imatge 
  549.                                     ),
  550.                                     "body" => array(
  551.                                         "parameters" => array(
  552.                                             array(
  553.                                                 "type" => "text",
  554.                                                 "text" => $bodyParam1
  555.                                             ),
  556.                                             array(
  557.                                                 "type" => "text",
  558.                                                 "text" => $bodyParam2
  559.                                             )
  560.                                         )
  561.                                     ),
  562.                                     "buttons" => array(
  563.                                         array("type" => "quick_reply""postback_id" => base64_encode("name_".$activity->getId()."_".$meteo))
  564.                                        
  565.                                     )
  566.                                 );
  567.                                 array_push($cards
  568.                                     $paramsActivity
  569.                                 );
  570.                             }
  571.                             if($seeMore){
  572.                                 //See more
  573.                                 $paramsActivity = array(
  574.                                     "header" => array(
  575.                                         "type" => "image",
  576.                                         "url" => $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg"
  577.                                     ),
  578.                                     "buttons" => array(
  579.                                         array("type" => "quick_reply""postback_id" => base64_encode("more_".$categoryUrl->getMetaValue()."_".$meteo)),
  580.                                     )
  581.                                 );
  582.                         
  583.                                 array_push($cards
  584.                                     $paramsActivity
  585.                                 );
  586.                             }
  587.                             $payload = array(
  588.                                 "template_name" => $template->getName(),
  589.                                 "lang" => $this->templateLangCode[$lang],
  590.                                 // "body" => array(
  591.                                 //     array(
  592.                                 //         "type" => "text",
  593.                                 //         "text" => $translator->trans("dialog.carousel_body_cultural_activities", [], "camprodon.messages", $lang)
  594.                                 //     )
  595.                                 // ),
  596.                                 "cards" => $cards
  597.                                 
  598.                             );
  599.                             $meta->setLog("[META] Cultural payload"$utilities->ecrypt(json_encode($payload)), $location$userPhoneCrypt);
  600.                             $res = (object)$meta->sendTemplate(
  601.                                 $type,
  602.                                 Utilities::dcrypt($user->getPhone()),
  603.                                 $location,
  604.                                 $payload
  605.                             );
  606.                             $messageId "";
  607.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  608.                             $logWhatsapp = new LogWhatsapp();
  609.                             $logWhatsapp->setMessageId($messageId);
  610.                             $logWhatsapp->setPhone$user->getPhone() );
  611.                             $logWhatsapp->setPrefix$user->getPrefix() );
  612.                             $logWhatsapp->setTextEmoji::encode$payload["template_name"] ." - ".$category->getMetaKey()));
  613.                             $logWhatsapp->setStatus"outbound" );
  614.                             $logWhatsapp->setDateCreated$now );
  615.                             $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  616.                             $logWhatsapp->setUser$user );
  617.                             $logWhatsapp->setLocation$location );
  618.                             $logWhatsapp->setLang$user->getLang() );
  619.                             $logWhatsapp->setConversationId(null);
  620.                             $logWhatsapp->setTemplate(null);
  621.                             $em->persist($logWhatsapp);
  622.                             $em->flush();
  623.                             usleep(500000);
  624.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  625.                             die();
  626.                         }else if($postbackId == "sport_activities"){
  627.                             $this->createQuickReply($doctrine$translator$meta$user$location$lang$text$conversationId$timestamp"step_3_manual_flow_sport_activities");
  628.                             die();
  629.                         }
  630.                         //STEP - 2: Response(OTHER)
  631.                         if($postbackId == "sleep"){
  632.                             $this->createQuickReply($doctrine$translator$meta$user$location$lang$text$conversationId$timestamp"step_3_manual_flow_sleep");
  633.                             die();
  634.                         }else if($postbackId == "eat"){
  635.                             $this->createQuickReply($doctrine$translator$meta$user$location$lang$text$conversationId$timestamp"step_3_manual_flow_eat");
  636.                             die();
  637.                         }else if($postbackId == "pool"){
  638.                             die();
  639.                         }
  640.                         //STEP - 3: Response(ROUTES)
  641.                         if($postbackId == "mountain_routes"){
  642.                             $this->createQuickReply($doctrine$translator$meta$user$location$lang$text$conversationId$timestamp"step_4_manual_flow_mountain_routes");
  643.                             die();
  644.                         }else if($postbackId == "mountain_activities"){
  645.                             $category $categoryRepo->find(5);
  646.                             $template $templateRepo->findOneBy(array("slug" => "carousel_three""lang" => $langEntity"location" => $location)); //Template with 3 carousels
  647.                             $seeMore false;
  648.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  649.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_mountain_activities"true);
  650.                             die();
  651.                         }
  652.                         //STEP - 3: Response(SPORT ACTIVITIES)
  653.                         if($postbackId == "ski"){
  654.                             $category $categoryRepo->find(3);
  655.                             $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  656.                             $seeMore true;
  657.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  658.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_ski");
  659.                             usleep(500000);
  660.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  661.                             die();
  662.                         }else if($postbackId == "horses"){
  663.                             $category $categoryRepo->find(4);
  664.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  665.                             $activities $activityRepo->findBy(array("category" => $category"location" => $location), array("sort" => "ASC"), $this->carouselLimit); 
  666.                             // dd($activities);
  667.                             if(count($activities) > 1){
  668.                                 $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  669.                                 $seeMore true;
  670.     
  671.                                 $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_horses");
  672.                             }else{
  673.                                 $activity $activities[0];
  674.                                 $bodyParam "";
  675.                                 $headerImg "https://whatsapp.tridenia.com/camprodon/lluna.jpg";
  676.                                 $buttonUrl "https://ripollesturisme.cat/wp-content/uploads/2021/12/Web-Folleto-Camprodon-Cat-Cas.pdf";
  677.     
  678.                                 $aI18n $activityI18nRepo->findBy(array("activity" => $activity"lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
  679.                     
  680.                                 foreach($aI18n as $activityData){
  681.                                     if($activityData->getMetaKey() == "name"){
  682.                                         $bodyParam $activityData->getMetaValue();
  683.                                     }else if($activityData->getMetaKey() == "image"){
  684.                                         $headerImg $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
  685.                                     }else if($activityData->getMetaKey() == "url"){
  686.                                         $buttonUrl $activityData->getMetaValue();
  687.                                     }
  688.                                 }
  689.     
  690.                                 $now = new \DateTime('now');
  691.                                 $now->setTimezone(new \DateTimeZone('Europe/Madrid'));
  692.     
  693.                                 // $meta->setLog("[META] Buttons", $utilities->ecrypt(json_encode($buttons)), $location, $userPhoneCrypt);
  694.                                 
  695.                                 $responseMessage = [
  696.                                     "header" => array(
  697.                                         "type" => "image",
  698.                                         "text" => $headerImg),
  699.                                     "body" => $translator->trans('dialog.horses_message', [], "camprodon.messages"$lang),
  700.                                     "buttons" => array(
  701.                                         [
  702.                                             "postback_id" => base64_encode('name_'.$activity->getId().'_'.$meteo),
  703.                                             "text" => $translator->trans('dialog.more_info', [], "camprodon.messages"$lang)
  704.                                         ],
  705.                                         [
  706.                                             "postback_id" => base64_encode("more_".$buttonUrl."_".$meteo),
  707.                                             "text" => $translator->trans('dialog.web', [], "camprodon.messages"$lang)
  708.                                         ]
  709.                                     )
  710.                                 ];
  711.     
  712.                                 $options = array();
  713.                                 $res = (object)$meta->sendMessage
  714.                                     $_ENV['gs_PAYLOAD__QUICK_REPLY'], 
  715.                                     $utilities->dcrypt($user->getPhone()), 
  716.                                     $responseMessage
  717.                                     $location
  718.                                     $options
  719.                                 );
  720.     
  721.                                 $messageId "";
  722.                                 if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  723.     
  724.                                 $logWhatsapp = new LogWhatsapp();
  725.                                 $logWhatsapp->setConversationId($conversationId);
  726.                                 $logWhatsapp->setMessageId($messageId);
  727.                                 $logWhatsapp->setPhone$user->getPhone() );
  728.                                 $logWhatsapp->setPrefix$user->getPrefix() );
  729.                                 $logWhatsapp->setTemplatenull );
  730.                                 $logWhatsapp->setText$emoji->encode$responseMessage["body"] ) );
  731.                                 $logWhatsapp->setStatus"outbound" );
  732.                                 $logWhatsapp->setDateCreated$now );
  733.                                 $logWhatsapp->setTimestampProvider$timestamp );
  734.                                 $logWhatsapp->setUser$user );
  735.                                 $logWhatsapp->setLocation$location );
  736.                                 $logWhatsapp->setLang$user->getLang() );
  737.     
  738.                                 $em->persist($logWhatsapp);
  739.                                 $em->flush();
  740.                                 sleep(1);
  741.                                 $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  742.                             }
  743.                             
  744.                             die();
  745.                         }else if($postbackId == "golf"){
  746.                             $category $categoryRepo->find(6);
  747.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  748.                             $activities $activityRepo->findBy(array("category" => $category"location" => $location), array("sort" => "ASC"), $this->carouselLimit); 
  749.                             // dd($activities);
  750.                             if(count($activities) > 1){
  751.                                 $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  752.                                 $seeMore true;
  753.     
  754.                                 $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_golf");
  755.                             }else{
  756.                                 $activity $activities[0];
  757.                                 $bodyParam "";
  758.                                 $headerImg "https://whatsapp.tridenia.com/camprodon/lluna.jpg";
  759.                                 $buttonUrl "https://ripollesturisme.cat/wp-content/uploads/2021/12/Web-Folleto-Camprodon-Cat-Cas.pdf";
  760.     
  761.                                 $aI18n $activityI18nRepo->findBy(array("activity" => $activity"lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
  762.                     
  763.                                 $activityAI18n "";
  764.                                 foreach($aI18n as $activityData){
  765.                                     if($activityData->getMetaKey() == "name"){
  766.                                         $bodyParam $activityData->getMetaValue();
  767.                                         $activityAI18n $activityData;
  768.                                     }else if($activityData->getMetaKey() == "image"){
  769.                                         $headerImg $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
  770.                                     }else if($activityData->getMetaKey() == "url"){
  771.                                         $buttonUrl $activityData->getMetaValue();
  772.                                     }
  773.                                 }
  774.     
  775.                                 $now = new \DateTime('now');
  776.                                 $now->setTimezone(new \DateTimeZone('Europe/Madrid'));
  777.     
  778.                                 // $meta->setLog("[META] Buttons", $utilities->ecrypt(json_encode($buttons)), $location, $userPhoneCrypt);
  779.                                 
  780.                                 $responseMessage = [
  781.                                     "header" => array(
  782.                                         "type" => "image",
  783.                                         "text" => $headerImg),
  784.                                     "body" => $translator->trans('dialog.golf_message', [], "camprodon.messages"$lang),
  785.                                     "buttons" => array(
  786.                                         [
  787.                                             "postback_id" => base64_encode('name_'.$activity->getId().'_'.$meteo),
  788.                                             "text" => $translator->trans('dialog.more_info', [], "camprodon.messages"$lang)
  789.                                         ],
  790.                                         [
  791.                                             "postback_id" => base64_encode("more_".$buttonUrl."_".$meteo),
  792.                                             "text" => $translator->trans('dialog.web', [], "camprodon.messages"$lang)
  793.                                         ]
  794.                                     )
  795.                                 ];
  796.     
  797.                                 $options = array();
  798.                                 $res = (object)$meta->sendMessage
  799.                                     $_ENV['gs_PAYLOAD__QUICK_REPLY'], 
  800.                                     $utilities->dcrypt($user->getPhone()), 
  801.                                     $responseMessage
  802.                                     $location
  803.                                     $options
  804.                                 );
  805.     
  806.                                 $messageId "";
  807.                                 if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  808.     
  809.                                 $logWhatsapp = new LogWhatsapp();
  810.                                 $logWhatsapp->setConversationId($conversationId);
  811.                                 $logWhatsapp->setMessageId($messageId);
  812.                                 $logWhatsapp->setPhone$user->getPhone() );
  813.                                 $logWhatsapp->setPrefix$user->getPrefix() );
  814.                                 $logWhatsapp->setTemplatenull );
  815.                                 $logWhatsapp->setText$emoji->encode$responseMessage["body"] ) );
  816.                                 $logWhatsapp->setStatus"outbound" );
  817.                                 $logWhatsapp->setDateCreated$now );
  818.                                 $logWhatsapp->setTimestampProvider$timestamp );
  819.                                 $logWhatsapp->setUser$user );
  820.                                 $logWhatsapp->setLocation$location );
  821.                                 $logWhatsapp->setLang$user->getLang() );
  822.     
  823.                                 $em->persist($logWhatsapp);
  824.                                 $em->flush();
  825.                                 $logTracking = new LogTracking();
  826.                                 $logTracking->setEvent($activity->getId());
  827.                                 $logTracking->setDateCreated($now);
  828.                                 $logTracking->setType("activity_shown");
  829.                                 $logTracking->setUser($user);
  830.                                 $logTracking->setLocation($location);
  831.                                 if($activityAI18n){
  832.                                     $logTracking->setExtraInfo($activityAI18n->getMetaValue());
  833.                                 }
  834.                                 $logTracking->setUrl(null);
  835.                     
  836.                                 $em->persist($logTracking);
  837.                                 $em->flush();
  838.                                 
  839.                                 sleep(1);
  840.                                 $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  841.                             }
  842.                             
  843.                             die();
  844.                         }
  845.                         //STEP - 3: Response(SLEEP)
  846.                         if($postbackId == "hotels"){
  847.                             $category $categoryRepo->find(9);
  848.                             $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  849.                             $seeMore true;
  850.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  851.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_hotels"true);
  852.                             usleep(500000);
  853.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  854.                             die();
  855.                         }else if($postbackId == "campsites"){
  856.                             $category $categoryRepo->find(10);
  857.                             $template $templateRepo->findOneBy(array("slug" => "carousel_two""lang" => $langEntity"location" => $location)); //Template with 2 carousels
  858.                             $seeMore false;
  859.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  860.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_campsites"true);
  861.                             usleep(500000);
  862.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  863.                             die();
  864.                         }else if($postbackId == "rural"){
  865.                             $category $categoryRepo->find(11);
  866.                             $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  867.                             $seeMore true;
  868.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  869.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_rural"true);
  870.                             usleep(500000);
  871.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  872.                             die();
  873.                         }
  874.                         //STEP - 3: Response(EAT)
  875.                         if($postbackId == "bars"){
  876.                             $category $categoryRepo->find(12);
  877.                             $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  878.                             $seeMore true;
  879.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  880.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_bars"true);
  881.                             usleep(500000);
  882.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  883.                             die();
  884.                         }else if($postbackId == "restaurants"){
  885.                             $category $categoryRepo->find(13);
  886.                             $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location)); //Template with 5 carousels
  887.                             $seeMore true;
  888.                             $meteo 'n';//y = Show Meteo message/ n = Don't show meteo message
  889.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_restaurants"true);
  890.                             usleep(500000);
  891.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  892.                             die();
  893.                         }
  894.                         //STEP - 4: Response(ON FOOT) - Send Carousel
  895.                         if($postbackId == "on_foot"){
  896.                             //Category Rutes = 1
  897.                             $category $categoryRepo->find(1);
  898.                             $template $templateRepo->findOneBy(array("slug" => "carousel_five""lang" => $langEntity"location" => $location));
  899.                             $seeMore true;
  900.                             $meteo 'y';//y = Show Meteo message/ n = Don't show meteo message
  901.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_routes");
  902.                             die();
  903.                         }else if($postbackId == "btt"){
  904.                             //Category btt = 2
  905.                             $category $categoryRepo->find(2);
  906.                             $template $templateRepo->findOneBy(array("slug" => "carousel_two""lang" => $langEntity"location" => $location)); //Template of 2 carousels
  907.                             $seeMore false;
  908.                             $meteo 'y';//y = Show Meteo message/ n = Don't show meteo message
  909.                             $this->createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo"carousel_body_btt");
  910.                             die();
  911.                         }
  912.                         //STEP - 5: Response(METEO) - Send Carousel METEO
  913.                         if($postbackId == "meteo_yes" || $postbackId == "meteo_yes_start"){
  914.                             $type $_ENV['meta_PAYLOAD__CAROUSEL'];
  915.                             //Category Rutes = 1
  916.                             $meteoData $meteoRepo->findOneBy(array("location" => $location));
  917.                             $meteoReport json_decode($meteoData->getMeteoData());
  918.                             $cards = array();
  919.                             foreach($meteoReport as $key => $meteo){
  920.                                 // dd($meteo);
  921.                                 $dateMeteo = new \DateTime($key);
  922.                                 
  923.                                 $url dirname(__DIR__,2)."/public/images/meteo/" $translator->trans("meteo." $meteo->description.'.img', [], "camprodon.messages"$lang);
  924.                                 // dd(file_exists($url));
  925.                                 if(!file_exists($url)){
  926.                                     $url $_SERVER['HTTP_HOST']."/images/meteo/nuboso.jpg";  
  927.                                 }else{
  928.                                     $url $_SERVER['HTTP_HOST']."/images/meteo/" $translator->trans("meteo." $meteo->description.'.img', [], "camprodon.messages"$lang);
  929.                                 }
  930.                                 $paramsActivity = array(
  931.                                     "header" => array(
  932.                                         "type" => "image",
  933.                                         "url" => $url
  934.                                     ),
  935.                                     "body" => array(
  936.                                         "parameters" => array(
  937.                                             array(
  938.                                                 "type" => "text",
  939.                                                 "text" => $dateMeteo->format('d-m-Y')
  940.                                             ),
  941.                                             array(
  942.                                                 "type" => "text",
  943.                                                 "text" => strpos($translator->trans("meteo." $meteo->description.'.name', [], "camprodon.messages"$lang),".") !== false $meteo->description $translator->trans("meteo." $meteo->description.'.name', [], "camprodon.messages"$lang)
  944.                                             ),
  945.                                             array(
  946.                                                 "type" => "text",
  947.                                                 "text" => $meteo->prob_precipitation."%"
  948.                                             ),
  949.                                             array(
  950.                                                 "type" => "text",
  951.                                                 "text" => $meteo->temp_max."ºC"
  952.                                             ),
  953.                                             array(
  954.                                                 "type" => "text",
  955.                                                 "text" => $meteo->temp_min."ºC"
  956.                                             )
  957.                                         )
  958.                                     ),
  959.                                     "buttons" => array(
  960.                                         array("type" => "quick_reply""postback_id" => "start_over")
  961.                                     )
  962.                                 );
  963.                                 array_push($cards
  964.                                     $paramsActivity
  965.                                 );
  966.                             }
  967.                             $templateSlug "carousel_meteo";
  968.                             switch(count((array)$meteoReport)){
  969.                                 case 7$templateSlug "carousel_meteo";
  970.                                     break;
  971.                                 case 6$templateSlug "carousel_meteo_6";
  972.                                     break;
  973.                                 case 5$templateSlug "carousel_meteo_5";
  974.                                     break;
  975.                                 default: $templateSlug "carousel_meteo";
  976.                                     break;
  977.                             }
  978.                             $template $templateRepo->findOneBy(array("slug" => $templateSlug"lang" => $langEntity"location" => $location));
  979.                             $payload = array(
  980.                                 "template_name" => $template->getName(),
  981.                                 "lang" => $this->templateLangCode[$lang],
  982.                                 "cards" => $cards
  983.                             );
  984.                             $res = (object)$meta->sendTemplate(
  985.                                 $type,
  986.                                 $userPhone,
  987.                                 $location,
  988.                                 $payload
  989.                             );
  990.                             $messageId "";
  991.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  992.                             $logWhatsapp = new LogWhatsapp();
  993.                             $logWhatsapp->setMessageId($messageId);
  994.                             $logWhatsapp->setPhone$userPhoneCrypt );
  995.                             $logWhatsapp->setPrefix$prefix );
  996.                             $logWhatsapp->setText$emoji->encode$payload["template_name"] ));
  997.                             $logWhatsapp->setStatus"outbound" );
  998.                             $logWhatsapp->setDateCreated$now );
  999.                             $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1000.                             $logWhatsapp->setUser$user );
  1001.                             $logWhatsapp->setLocation$location );
  1002.                             $logWhatsapp->setLang$user->getLang() );
  1003.                             $logWhatsapp->setConversationId(null);
  1004.                             $logWhatsapp->setTemplate(null);
  1005.                             $em->persist($logWhatsapp);
  1006.                             $em->flush();
  1007.                             die();
  1008.                         }else if($postbackId == "meteo_no"){
  1009.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  1010.                             die();
  1011.                         }
  1012.                         //START OVER
  1013.                         if($postbackId == "start_over"){
  1014.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  1015.                             die();
  1016.                         }
  1017.                         //START POLL
  1018.                         if($postbackId == "pre_poll_yes" || $postbackId == "pre_poll_no"){
  1019.                             $pollQuestion $pollQuestionRepository->find(1);
  1020.                             // $pollResponse = $pollResponseRepository->findResponse($user, $pollQuestion);
  1021.                             // if($pollResponse && is_array($pollResponse) && count($pollResponse) > 0){
  1022.                             //     $pollResponse = $pollResponse[0];
  1023.                             // }else{
  1024.                             //     $pollResponse = null;
  1025.                             // }
  1026.                             // if(!$pollResponse){
  1027.                                 $pollResponse = new PollResponse;
  1028.                                 $pollResponse->setUser($user);
  1029.                                 $pollResponse->setPollQuestion($pollQuestion);
  1030.                                 $pollResponse->setDateCreated($now);
  1031.                             // }
  1032.                             $pollResponse->setDateModified($now);
  1033.                             $pollResponse->setText(($postbackId == "pre_poll_yes")? 0);
  1034.                             $em->persist($pollResponse);
  1035.                             $em->flush();
  1036.                             $text "";
  1037.                             if($postbackId == "pre_poll_no"){
  1038.                                 // $responseMessage = [
  1039.                                 //     "body" => $translator->trans('poll.question_1', [], "camprodon.messages", $lang),
  1040.                                 //     "buttons" => array(
  1041.                                 //         [
  1042.                                 //             "postback_id" => "poll_q1_no",
  1043.                                 //             "text" => $translator->trans('poll.question_1_qr_2', [], "camprodon.messages", $lang)
  1044.                                 //         ],
  1045.                                 //         [
  1046.                                 //             "postback_id" => "poll_q1_yes",
  1047.                                 //             "text" => $translator->trans('poll.question_1_qr_1', [], "camprodon.messages", $lang)
  1048.                                 //         ]
  1049.                                 //     )
  1050.                                 // ];
  1051.                                 // $options = array();
  1052.                                 // $res = (object)$meta->sendMessage( 
  1053.                                 //     $_ENV['gs_PAYLOAD__QUICK_REPLY'], 
  1054.                                 //     $utilities->dcrypt($user->getPhone()), 
  1055.                                 //     $responseMessage, 
  1056.                                 //     $location, 
  1057.                                 //     $options
  1058.                                 // );
  1059.                                 // $text = $responseMessage["body"];
  1060.                                 //SEND POLL DIRECTLY
  1061.                                 $template $templateRepo->findOneBy(array("slug" => "poll""lang" => $langEntity "location" => $location->getId(), "status" => 1));
  1062.                                 $payload = array(
  1063.                                     "template_name" => $template->getName(),
  1064.                                     "lang" => $this->templateLangCode[$user->getLang()],
  1065.                                     "buttons" => array(
  1066.                                         array(
  1067.                                             "type" => "FLOW",
  1068.                                             "postback_id" => "form_poll"
  1069.                                         )
  1070.                                     )
  1071.                                 );
  1072.                 
  1073.                                 $res = (object)$meta->sendTemplate(
  1074.                                     $_ENV['meta_PAYLOAD__INTERACTIVE_TEXT'],
  1075.                                     Utilities::dcrypt($user->getPhone()),
  1076.                                     $location,
  1077.                                     $payload
  1078.                                 );
  1079.                                 $messageId "";
  1080.                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1081.             
  1082.                                 $logWhatsapp = new LogWhatsapp();
  1083.                                 $logWhatsapp->setMessageId($messageId);
  1084.                                 $logWhatsapp->setPhone$userPhoneCrypt );
  1085.                                 $logWhatsapp->setPrefix$prefix );
  1086.                                 $logWhatsapp->setText$emoji->encode"FORM"));
  1087.                                 $logWhatsapp->setStatus"outbound" );
  1088.                                 $logWhatsapp->setDateCreated$now );
  1089.                                 $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1090.                                 $logWhatsapp->setUser$user );
  1091.                                 $logWhatsapp->setLocation$location );
  1092.                                 $logWhatsapp->setLang$user->getLang() );
  1093.                                 $logWhatsapp->setConversationId(null);
  1094.                                 $logWhatsapp->setTemplate($template);
  1095.             
  1096.                                 $em->persist($logWhatsapp);
  1097.                                 $em->flush();
  1098.                             }else{
  1099.                                 $type $_ENV['meta_PAYLOAD__CONTACTS'];
  1100.                                 $options = array();
  1101.                                 $options["first_name"] = "Camprodon Turisme";
  1102.                                 $options["formatted_name"] = "Camprodon Turisme";
  1103.                                 $options["company"] = "Guest Assistant";
  1104.                                 $options["phone"] = "+34622775117";
  1105.                                 $res = (object)$meta->sendMessage
  1106.                                     $type
  1107.                                     $utilities->dcrypt($user->getPhone()), 
  1108.                                     array(), 
  1109.                                     $location
  1110.                                     $options
  1111.                                 );
  1112.                                 $messageId "";
  1113.                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1114.             
  1115.                                 $logWhatsapp = new LogWhatsapp();
  1116.                                 $logWhatsapp->setMessageId($messageId);
  1117.                                 $logWhatsapp->setPhone$userPhoneCrypt );
  1118.                                 $logWhatsapp->setPrefix$prefix );
  1119.                                 $logWhatsapp->setText$emoji->encode("Contact: ".$options["formatted_name"]." ".$options["phone"]));
  1120.                                 $logWhatsapp->setStatus"outbound" );
  1121.                                 $logWhatsapp->setDateCreated$now );
  1122.                                 $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1123.                                 $logWhatsapp->setUser$user );
  1124.                                 $logWhatsapp->setLocation$location );
  1125.                                 $logWhatsapp->setLang$user->getLang() );
  1126.                                 $logWhatsapp->setConversationId(null);
  1127.                                 $logWhatsapp->setTemplate(null);
  1128.             
  1129.                                 $em->persist($logWhatsapp);
  1130.                                 $em->flush();
  1131.                                 $responseMessage = ["text" => $translator->trans('poll.finish', [], "camprodon.messages"$lang)];
  1132.                                 $options = array();
  1133.                                 $res = (object)$meta->sendMessage
  1134.                                     $_ENV['meta_PAYLOAD__TEXT'], 
  1135.                                     $userPhone
  1136.                                     $responseMessage
  1137.                                     $location
  1138.                                     $options
  1139.                                 );
  1140.                                 $text $responseMessage["text"];
  1141.                                 $messageId "";
  1142.                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1143.                                 
  1144.                                 $logWhatsapp = new LogWhatsapp();
  1145.                                 $logWhatsapp->setMessageId($messageId);
  1146.                                 $logWhatsapp->setPhone$userPhoneCrypt );
  1147.                                 $logWhatsapp->setPrefix$prefix );
  1148.                                 $logWhatsapp->setText$emoji->encode($text));
  1149.                                 $logWhatsapp->setStatus"outbound" );
  1150.                                 $logWhatsapp->setDateCreated$now );
  1151.                                 $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1152.                                 $logWhatsapp->setUser$user );
  1153.                                 $logWhatsapp->setLocation$location );
  1154.                                 $logWhatsapp->setLang$user->getLang() );
  1155.                                 $logWhatsapp->setConversationId(null);
  1156.                                 $logWhatsapp->setTemplate(null);
  1157.             
  1158.                                 $em->persist($logWhatsapp);
  1159.                                 $em->flush();
  1160.                             }
  1161.                         }
  1162.                         if($postbackId == "poll_q1_yes"){
  1163.                             $pollQuestion $pollQuestionRepository->find(2);
  1164.                             // $pollResponse = $pollResponseRepository->findResponse($user, $pollQuestion);
  1165.                             // if($pollResponse && is_array($pollResponse) && count($pollResponse) > 0){
  1166.                             //     $pollResponse = $pollResponse[0];
  1167.                             // }else{
  1168.                             //     $pollResponse = null;
  1169.                             // }
  1170.                             // if(!$pollResponse){
  1171.                                 $pollResponse = new PollResponse;
  1172.                                 $pollResponse->setUser($user);
  1173.                                 $pollResponse->setPollQuestion($pollQuestion);
  1174.                                 $pollResponse->setDateCreated($now);
  1175.                             // }
  1176.                             $pollResponse->setDateModified($now);
  1177.                             $pollResponse->setText(1);
  1178.                             $em->persist($pollResponse);
  1179.                             $em->flush();
  1180.                             $template $templateRepo->findOneBy(array("slug" => "poll""lang" => $langEntity "location" => $location->getId(), "status" => 1));
  1181.                             $payload = array(
  1182.                                 "template_name" => $template->getName(),
  1183.                                 "lang" => $this->templateLangCode[$user->getLang()],
  1184.                                 "buttons" => array(
  1185.                                     array(
  1186.                                         "type" => "FLOW",
  1187.                                         "postback_id" => "form_poll"
  1188.                                     )
  1189.                                 )
  1190.                             );
  1191.             
  1192.                             $res = (object)$meta->sendTemplate(
  1193.                                 $_ENV['meta_PAYLOAD__INTERACTIVE_TEXT'],
  1194.                                 Utilities::dcrypt($user->getPhone()),
  1195.                                 $location,
  1196.                                 $payload
  1197.                             );
  1198.                             $messageId "";
  1199.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1200.         
  1201.                             $logWhatsapp = new LogWhatsapp();
  1202.                             $logWhatsapp->setMessageId($messageId);
  1203.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1204.                             $logWhatsapp->setPrefix$prefix );
  1205.                             $logWhatsapp->setText$emoji->encode"FORM"));
  1206.                             $logWhatsapp->setStatus"outbound" );
  1207.                             $logWhatsapp->setDateCreated$now );
  1208.                             $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1209.                             $logWhatsapp->setUser$user );
  1210.                             $logWhatsapp->setLocation$location );
  1211.                             $logWhatsapp->setLang$user->getLang() );
  1212.                             $logWhatsapp->setConversationId(null);
  1213.                             $logWhatsapp->setTemplate($template);
  1214.         
  1215.                             $em->persist($logWhatsapp);
  1216.                             $em->flush();
  1217.                         }else if($postbackId == "poll_q1_no"){
  1218.                             $pollQuestion $pollQuestionRepository->find(2);
  1219.                             // $pollResponse = $pollResponseRepository->findResponse($user, $pollQuestion);
  1220.                             // if($pollResponse && is_array($pollResponse) && count($pollResponse) > 0){
  1221.                             //     $pollResponse = $pollResponse[0];
  1222.                             // }else{
  1223.                             //     $pollResponse = null;
  1224.                             // }
  1225.                             // if(!$pollResponse){
  1226.                                 $pollResponse = new PollResponse;
  1227.                                 $pollResponse->setUser($user);
  1228.                                 $pollResponse->setPollQuestion($pollQuestion);
  1229.                                 $pollResponse->setDateCreated($now);
  1230.                             // }
  1231.                             $pollResponse->setDateModified($now);
  1232.                             $pollResponse->setText(0);
  1233.                             $em->persist($pollResponse);
  1234.                             $em->flush();
  1235.                             $type $_ENV['meta_PAYLOAD__CONTACTS'];
  1236.                             $options = array();
  1237.                             $options["first_name"] = "Camprodon Turisme";
  1238.                             $options["formatted_name"] = "Camprodon Turisme";
  1239.                             $options["company"] = "Guest Assistant";
  1240.                             $options["phone"] = "+34622775117";
  1241.                             $res = (object)$meta->sendMessage
  1242.                                 $type
  1243.                                 $utilities->dcrypt($user->getPhone()), 
  1244.                                 array(), 
  1245.                                 $location
  1246.                                 $options
  1247.                             );
  1248.                             $messageId "";
  1249.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1250.         
  1251.                             $logWhatsapp = new LogWhatsapp();
  1252.                             $logWhatsapp->setMessageId($messageId);
  1253.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1254.                             $logWhatsapp->setPrefix$prefix );
  1255.                             $logWhatsapp->setText$emoji->encode("Contact: ".$options["formatted_name"]." ".$options["phone"]));
  1256.                             $logWhatsapp->setStatus"outbound" );
  1257.                             $logWhatsapp->setDateCreated$now );
  1258.                             $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1259.                             $logWhatsapp->setUser$user );
  1260.                             $logWhatsapp->setLocation$location );
  1261.                             $logWhatsapp->setLang$user->getLang() );
  1262.                             $logWhatsapp->setConversationId(null);
  1263.                             $logWhatsapp->setTemplate(null);
  1264.         
  1265.                             $em->persist($logWhatsapp);
  1266.                             $em->flush();
  1267.                             $responseMessage = ["text" => $translator->trans('poll.finish', [], "camprodon.messages"$lang)];
  1268.                             $options = array();
  1269.                             $res = (object)$meta->sendMessage
  1270.                                 $_ENV['meta_PAYLOAD__TEXT'], 
  1271.                                 $userPhone
  1272.                                 $responseMessage
  1273.                                 $location
  1274.                                 $options
  1275.                             );
  1276.                             $text $responseMessage["text"];
  1277.                             $messageId "";
  1278.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1279.                             
  1280.                             $logWhatsapp = new LogWhatsapp();
  1281.                             $logWhatsapp->setMessageId($messageId);
  1282.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1283.                             $logWhatsapp->setPrefix$prefix );
  1284.                             $logWhatsapp->setText$emoji->encode($text));
  1285.                             $logWhatsapp->setStatus"outbound" );
  1286.                             $logWhatsapp->setDateCreated$now );
  1287.                             $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1288.                             $logWhatsapp->setUser$user );
  1289.                             $logWhatsapp->setLocation$location );
  1290.                             $logWhatsapp->setLang$user->getLang() );
  1291.                             $logWhatsapp->setConversationId(null);
  1292.                             $logWhatsapp->setTemplate(null);
  1293.         
  1294.                             $em->persist($logWhatsapp);
  1295.                             $em->flush();
  1296.                         }
  1297.                         if($postbackId == "util_info_yes"){
  1298.                             $options = array();
  1299.                             $responseMessage = [
  1300.                                 "text" => $translator->trans('dialog.util_question_2_thanks', [], "camprodon.messages"$lang)
  1301.                             ];
  1302.                             $res = (object)$meta->sendMessage
  1303.                                 $_ENV["meta_PAYLOAD__TEXT"], 
  1304.                                 $userPhone
  1305.                                 $responseMessage
  1306.                                 $location
  1307.                                 $options
  1308.                             );
  1309.                             $messageId "";
  1310.                             if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1311.         
  1312.                             $logWhatsapp = new LogWhatsapp();
  1313.                             $logWhatsapp->setConversationId($conversationId);
  1314.                             $logWhatsapp->setMessageId($messageId);
  1315.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1316.                             $logWhatsapp->setPrefix$prefix );
  1317.                             $logWhatsapp->setTemplatenull );
  1318.                             $logWhatsapp->setText$emoji->encode$responseMessage["text"] ) );
  1319.                             $logWhatsapp->setStatus"outbound" );
  1320.                             $logWhatsapp->setDateCreated$now );
  1321.                             $logWhatsapp->setTimestampProvider$timestamp );
  1322.                             $logWhatsapp->setUser$user );
  1323.                             $logWhatsapp->setLocation$location );
  1324.                             $logWhatsapp->setLang$user->getLang() );
  1325.         
  1326.                             $em->persist($logWhatsapp);
  1327.                             $em->flush();
  1328.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  1329.                             die();
  1330.                         }else if($postbackId == "util_info_no"){
  1331.                             $type $_ENV['gs_PAYLOAD__QUICK_REPLY'];
  1332.                             $responseMessage = [
  1333.                                 "body" => $translator->trans('dialog.util_question_2', [], "camprodon.messages"$lang),
  1334.                                 "buttons" => [
  1335.                                     [
  1336.                                         "postback_id" => "util_info_poc_concreta",
  1337.                                         "text" => $translator->trans('dialog.util_2_btn_1', [], "camprodon.messages"$lang)
  1338.                                     ],
  1339.                                     [
  1340.                                         "postback_id" => "util_info_erronea",
  1341.                                         "text" => $translator->trans('dialog.util_2_btn_2', [], "camprodon.messages"$lang)
  1342.                                     ],
  1343.                                 ]
  1344.                             ];
  1345.                             $options = array();
  1346.                             $res = (object)$meta->sendMessage
  1347.                                 $type
  1348.                                 $userPhone
  1349.                                 $responseMessage
  1350.                                 $location
  1351.                                 $options
  1352.                             );
  1353.                             $messageId "";
  1354.                             if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1355.         
  1356.                             $logWhatsapp = new LogWhatsapp();
  1357.                             $logWhatsapp->setConversationId($conversationId);
  1358.                             $logWhatsapp->setMessageId($messageId);
  1359.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1360.                             $logWhatsapp->setPrefix$prefix );
  1361.                             $logWhatsapp->setTemplatenull );
  1362.                             $logWhatsapp->setText$emoji->encode$responseMessage["body"] ) );
  1363.                             $logWhatsapp->setStatus"outbound" );
  1364.                             $logWhatsapp->setDateCreated$now );
  1365.                             $logWhatsapp->setTimestampProvider$timestamp );
  1366.                             $logWhatsapp->setUser$user );
  1367.                             $logWhatsapp->setLocation$location );
  1368.                             $logWhatsapp->setLang$user->getLang() );
  1369.         
  1370.                             $em->persist($logWhatsapp);
  1371.                             $em->flush();
  1372.                             die();
  1373.                         }
  1374.                         if($postbackId == "util_info_poc_concreta" || $postbackId == "util_info_erronea"){
  1375.                             $options = array();
  1376.                             $responseMessage = [
  1377.                                 "text" => $translator->trans('dialog.util_question_2_thanks', [], "camprodon.messages"$lang)
  1378.                             ];
  1379.                             $res = (object)$meta->sendMessage
  1380.                                 $_ENV["meta_PAYLOAD__TEXT"], 
  1381.                                 $userPhone
  1382.                                 $responseMessage
  1383.                                 $location
  1384.                                 $options
  1385.                             );
  1386.                             $messageId "";
  1387.                             if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1388.         
  1389.                             $logWhatsapp = new LogWhatsapp();
  1390.                             $logWhatsapp->setConversationId($conversationId);
  1391.                             $logWhatsapp->setMessageId($messageId);
  1392.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1393.                             $logWhatsapp->setPrefix$prefix );
  1394.                             $logWhatsapp->setTemplatenull );
  1395.                             $logWhatsapp->setText$emoji->encode$responseMessage["text"] ) );
  1396.                             $logWhatsapp->setStatus"outbound" );
  1397.                             $logWhatsapp->setDateCreated$now );
  1398.                             $logWhatsapp->setTimestampProvider$timestamp );
  1399.                             $logWhatsapp->setUser$user );
  1400.                             $logWhatsapp->setLocation$location );
  1401.                             $logWhatsapp->setLang$user->getLang() );
  1402.         
  1403.                             $em->persist($logWhatsapp);
  1404.                             $em->flush();
  1405.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  1406.                             die();
  1407.                         }
  1408.                         if($interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
  1409.                             // dump($responseForm);
  1410.                             foreach($responseForm as $key => $rf){
  1411.                                 // dd($key." --> ".$rf);
  1412.                                 $idQuestion null;
  1413.                                 $textResponse "";
  1414.                                 switch($key){
  1415.                                     case "screen_0_TextInput_0":
  1416.                                         $idQuestion 3;
  1417.                                         $textResponse $rf;
  1418.                                         break;
  1419.                                     case "screen_0_TextInput_1":
  1420.                                         $idQuestion 4;
  1421.                                         $textResponse $rf;
  1422.                                         break;
  1423.                                     case "screen_1_RadioButtonsGroup_0":
  1424.                                     case "screen_1_question2RadioButtons_0":
  1425.                                         $idQuestion 5;
  1426.                                         $aux explode("_",$rf);
  1427.                                         $textResponse $aux[0];
  1428.                                         break;
  1429.                                     case "screen_2_DatePicker_0":
  1430.                                         $idQuestion 6;
  1431.                                         $textResponse $rf;
  1432.                                         break;
  1433.                                     case "screen_2_DatePicker_1":
  1434.                                         $idQuestion 7;
  1435.                                         $textResponse $rf;
  1436.                                         break;
  1437.                                     case "screen_3_CheckboxGroup_0":
  1438.                                         $idQuestion 8;
  1439.                                         foreach($rf as $rfkey => $rfc){
  1440.                                             $aux explode("_",$rfc);
  1441.                                             $rf[$rfkey] = $aux[1];
  1442.                                         }
  1443.                                         $textResponse implode(",",$rf);
  1444.                                         break;
  1445.                                     case "screen_4_TextArea_0":
  1446.                                         $idQuestion 9;
  1447.                                         $textResponse $rf;
  1448.                                         break;
  1449.                                 }
  1450.                                 if($idQuestion){
  1451.                                     $pollQuestion $pollQuestionRepository->find($idQuestion);
  1452.                                     // $pollResponse = $pollResponseRepository->findResponse($user, $pollQuestion);
  1453.                                     // if($pollResponse && is_array($pollResponse) && count($pollResponse) > 0){
  1454.                                     //     $pollResponse = $pollResponse[0];
  1455.                                     // }else{
  1456.                                     //     $pollResponse = null;
  1457.                                     // }
  1458.                                     // if(!$pollResponse){
  1459.                                         $pollResponse = new PollResponse;
  1460.                                         $pollResponse->setUser($user);
  1461.                                         $pollResponse->setPollQuestion($pollQuestion);
  1462.                                         $pollResponse->setDateCreated($now);
  1463.                                     // }
  1464.                                     $pollResponse->setDateModified($now);
  1465.                                     $pollResponse->setText($emoji->encode($textResponse));
  1466.                                     $em->persist($pollResponse);
  1467.                                 }
  1468.                             }
  1469.                             $em->flush();
  1470.                             $type $_ENV['meta_PAYLOAD__CONTACTS'];
  1471.                             $options = array();
  1472.                             $options["first_name"] = "Camprodon Turisme";
  1473.                             $options["formatted_name"] = "Camprodon Turisme";
  1474.                             $options["company"] = "Guest Assistant";
  1475.                             $options["phone"] = "+34622775117";
  1476.                             $res = (object)$meta->sendMessage
  1477.                                 $type
  1478.                                 $utilities->dcrypt($user->getPhone()), 
  1479.                                 array(), 
  1480.                                 $location
  1481.                                 $options
  1482.                             );
  1483.                             $messageId "";
  1484.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1485.         
  1486.                             $logWhatsapp = new LogWhatsapp();
  1487.                             $logWhatsapp->setMessageId($messageId);
  1488.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1489.                             $logWhatsapp->setPrefix$prefix );
  1490.                             $logWhatsapp->setText$emoji->encode("Contact: ".$options["formatted_name"]." ".$options["phone"]));
  1491.                             $logWhatsapp->setStatus"outbound" );
  1492.                             $logWhatsapp->setDateCreated$now );
  1493.                             $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1494.                             $logWhatsapp->setUser$user );
  1495.                             $logWhatsapp->setLocation$location );
  1496.                             $logWhatsapp->setLang$user->getLang() );
  1497.                             $logWhatsapp->setConversationId(null);
  1498.                             $logWhatsapp->setTemplate(null);
  1499.         
  1500.                             $em->persist($logWhatsapp);
  1501.                             $em->flush();
  1502.                             $responseMessage = ["text" => $translator->trans('poll.finish', [], "camprodon.messages"$lang)];
  1503.                             $options = array();
  1504.                             $res = (object)$meta->sendMessage
  1505.                                 $_ENV['meta_PAYLOAD__TEXT'], 
  1506.                                 $userPhone
  1507.                                 $responseMessage
  1508.                                 $location
  1509.                                 $options
  1510.                             );
  1511.                             $text $responseMessage["text"];
  1512.                             $messageId "";
  1513.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1514.                             
  1515.                             $logWhatsapp = new LogWhatsapp();
  1516.                             $logWhatsapp->setMessageId($messageId);
  1517.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1518.                             $logWhatsapp->setPrefix$prefix );
  1519.                             $logWhatsapp->setText$emoji->encode($text));
  1520.                             $logWhatsapp->setStatus"outbound" );
  1521.                             $logWhatsapp->setDateCreated$now );
  1522.                             $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  1523.                             $logWhatsapp->setUser$user );
  1524.                             $logWhatsapp->setLocation$location );
  1525.                             $logWhatsapp->setLang$user->getLang() );
  1526.                             $logWhatsapp->setConversationId(null);
  1527.                             $logWhatsapp->setTemplate(null);
  1528.         
  1529.                             $em->persist($logWhatsapp);
  1530.                             $em->flush();
  1531.                         }
  1532.                         //UNSUSCRIBE
  1533.                         if($postbackId == "unsuscribe_yes"){
  1534.                             $user->setStatus(0);
  1535.                             $em->persist($user);
  1536.                             $em->flush();
  1537.                             //Thanks message
  1538.                             $responseMessage = ["text" => $translator->trans('dialog.unsuscribe_finish', [], "camprodon.messages"$lang)];
  1539.                             $options = array();
  1540.                             $res = (object)$meta->sendMessage
  1541.                                 $_ENV['meta_PAYLOAD__TEXT'], 
  1542.                                 $userPhone
  1543.                                 $responseMessage
  1544.                                 $location
  1545.                                 $options
  1546.                             );
  1547.                             $messageId "";
  1548.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1549.         
  1550.                             $logWhatsapp = new LogWhatsapp();
  1551.                             $logWhatsapp->setMessageId($messageId);
  1552.                             $logWhatsapp->setPhone$userPhoneCrypt );
  1553.                             $logWhatsapp->setPrefix$prefix );
  1554.                             $logWhatsapp->setText$emoji->encode$responseMessage["text"]));
  1555.                             $logWhatsapp->setStatus"outbound" );
  1556.                             $logWhatsapp->setDateCreated$now );
  1557.                             $logWhatsapp->setTimestampProvider$timestamp );
  1558.                             $logWhatsapp->setUser$user );
  1559.                             $logWhatsapp->setLocation$location );
  1560.                             $logWhatsapp->setLang$user->getLang() );
  1561.                             $logWhatsapp->setConversationId($conversationId);
  1562.                             $logWhatsapp->setTemplate(null);
  1563.         
  1564.                             $em->persist($logWhatsapp);
  1565.                             $em->flush();
  1566.                             die();
  1567.                         }else if($postbackId == "unsuscribe_no"){
  1568.                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  1569.                             die();
  1570.                         }
  1571.                         /*
  1572.                         *   CAROUSEL RESPONSE
  1573.                         *   Postback id in base64 of the button pressed by the user on a carousel
  1574.                         */
  1575.                         if(base64_decode($postbackIdtrue)){
  1576.                             $meta->setLog("[META] BUTTON REPLY"$utilities->ecrypt("Is base64"), $location$userPhoneCrypt);
  1577.                             //Carousel response
  1578.                             $decodedString base64_decode($postbackId);
  1579.                             $exploded explode("_",$decodedString);
  1580.                             $key $exploded[0];
  1581.                             $activityId $exploded[1];
  1582.                             $meteo $exploded[2];
  1583.                             //SEE MORE
  1584.                             if($key == "more"){
  1585.                                 $responseMessage = ["text" => $translator->trans('dialog.see_more_info_response_text', [], "camprodon.messages"$lang)." ".$activityId];
  1586.                                 $options = array();
  1587.                                 $res = (object)$meta->sendMessage
  1588.                                     $_ENV['meta_PAYLOAD__TEXT'], 
  1589.                                     $userPhone
  1590.                                     $responseMessage
  1591.                                     $location
  1592.                                     $options
  1593.                                 );
  1594.                                 $messageId "";
  1595.                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1596.             
  1597.                                 $logWhatsapp = new LogWhatsapp();
  1598.                                 $logWhatsapp->setMessageId($messageId);
  1599.                                 $logWhatsapp->setPhone$userPhoneCrypt );
  1600.                                 $logWhatsapp->setPrefix$prefix );
  1601.                                 $logWhatsapp->setText$emoji->encode$responseMessage["text"]));
  1602.                                 $logWhatsapp->setStatus"outbound" );
  1603.                                 $logWhatsapp->setDateCreated$now );
  1604.                                 $logWhatsapp->setTimestampProvider$timestamp );
  1605.                                 $logWhatsapp->setUser$user );
  1606.                                 $logWhatsapp->setLocation$location );
  1607.                                 $logWhatsapp->setLang$user->getLang() );
  1608.                                 $logWhatsapp->setConversationId($conversationId);
  1609.                                 $logWhatsapp->setTemplate(null);
  1610.             
  1611.                                 $em->persist($logWhatsapp);
  1612.                                 $em->flush();
  1613.                             }else{ //MORE INFO
  1614.                                 
  1615.                                 $activity $activityRepo->find($activityId);
  1616.                                 $aI18n $activityI18nRepo->findOneBy(array("activity" => $activity"metaKey" => $key"lang" => "ca")); //TODO - Canviar la llengua quan ho haguin traduccions
  1617.                                                           
  1618.                                 if(!$aI18n){
  1619.                                     $aI18n $placesRepo->findOneBy(array("activityId" => $activityId));
  1620.                                     $text $translator->trans('dialog.ask_more_info', [], "camprodon.messages"$lang)." ".$aI18n->getName();
  1621.                                 }else{
  1622.                                     $text $translator->trans('dialog.ask_more_info', [], "camprodon.messages"$lang)." ".$aI18n->getMetaValue();
  1623.                                 }
  1624.                                 $text $translator->trans('dialog.ask_more_info', [], "camprodon.messages"$lang)." ".$aI18n->getMetaValue();
  1625.                                 $result $this->askGPT($text$location$langEntity->getName(), $doctrine$meta$utilities);
  1626.                                 
  1627.                                 $meta->setLog("[META]Camprodon GPT RESPONSE CAROUSEL"$utilities->ecrypt($result), $location$userPhoneCrypt);
  1628.                                 if(strpos(mb_strtolower($result), "ninfo-") !== false){
  1629.                                     $sendSatisfaction true;
  1630.                                     $result $externalCalls->GPTGeneral($text$location$langEntity);
  1631.     
  1632.                                     if(strpos($result'Error:') !== false){
  1633.                                         $result $translator->trans('dialog.no_info', [], "camprodon.messages"$lang);
  1634.                                     } 
  1635.     
  1636.                                     $assistantRes $result;
  1637.     
  1638.                                     $meta->setLog("[META]Camprodon GPTGeneral Response"$utilities->ecrypt($result), $location$userPhoneCrypt);
  1639.     
  1640.                                     $responseMessage = ["text" => $result];
  1641.                                     $options = array();
  1642.         
  1643.                                     $res = (object)$meta->sendMessage
  1644.                                         $_ENV['meta_PAYLOAD__TEXT'], 
  1645.                                         $userPhone
  1646.                                         $responseMessage
  1647.                                         $location
  1648.                                         $options
  1649.                                     );
  1650.     
  1651.                                     $textLog $responseMessage['text'];
  1652.                                 }else{
  1653.                                     if(strpos($result'Error:') !== false){
  1654.                                         $result $translator->trans('dialog.no_info', [], "camprodon.messages"$lang);
  1655.                                     }
  1656.         
  1657.                                     $responseMessage = ['text' => $result];
  1658.                                     $options = array();
  1659.         
  1660.                                     $res = (object)$meta->sendMessage
  1661.                                         $_ENV['meta_PAYLOAD__TEXT'], 
  1662.                                         $userPhone
  1663.                                         $responseMessage
  1664.                                         $location
  1665.                                         $options
  1666.                                     );
  1667.     
  1668.                                     $textLog $responseMessage['text'];
  1669.                                 }
  1670.                                 $messageId "";
  1671.                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1672.             
  1673.                                 $logWhatsapp = new LogWhatsapp();
  1674.                                 $logWhatsapp->setMessageId($messageId);
  1675.                                 $logWhatsapp->setPhone$userPhoneCrypt );
  1676.                                 $logWhatsapp->setPrefix$prefix );
  1677.                                 $logWhatsapp->setText$emoji->encode$textLog));
  1678.                                 $logWhatsapp->setStatus"outbound" );
  1679.                                 $logWhatsapp->setDateCreated$now );
  1680.                                 $logWhatsapp->setTimestampProvider$timestamp );
  1681.                                 $logWhatsapp->setUser$user );
  1682.                                 $logWhatsapp->setLocation$location );
  1683.                                 $logWhatsapp->setLang$user->getLang() );
  1684.                                 $logWhatsapp->setConversationId($conversationId);
  1685.                                 $logWhatsapp->setTemplate(null);
  1686.             
  1687.                                 $em->persist($logWhatsapp);
  1688.                                 $em->flush();
  1689.                                 //METEO
  1690.                                 if($meteo == "y"){
  1691.                                     sleep(1);
  1692.                                     $buttons $buttonsRepo->getTextButton($location5$lang); //STEP 5
  1693.                                     $btns = array();
  1694.                                     
  1695.                                     foreach($buttons as $btn){
  1696.                                         // $btnI18n = $buttonsI18nRepo->findOneBy(array("button" => $btn, "lang" => $lang));
  1697.     
  1698.                                         array_push($btns, [
  1699.                                             "postback_id" => $btn['postbackText'],
  1700.                                             "text" => $btn['text']
  1701.                                         ]);
  1702.                                     }
  1703.         
  1704.                                     $responseMessage = [
  1705.                                         "body" => $translator->trans('dialog.meteo_question', [], "camprodon.messages"$lang),
  1706.                                         "buttons" => $btns
  1707.                                     ];                                 
  1708.                                     $options = array();
  1709.     
  1710.                                     $res = (object)$meta->sendMessage
  1711.                                         $_ENV['gs_PAYLOAD__QUICK_REPLY'], 
  1712.                                         $userPhone
  1713.                                         $responseMessage
  1714.                                         $location
  1715.                                         $options
  1716.                                     );
  1717.     
  1718.                                     $messageId "";
  1719.                                     if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1720.                 
  1721.                                     $logWhatsapp = new LogWhatsapp();
  1722.                                     $logWhatsapp->setMessageId($messageId);
  1723.                                     $logWhatsapp->setPhone$userPhoneCrypt );
  1724.                                     $logWhatsapp->setPrefix$prefix );
  1725.                                     $logWhatsapp->setText$emoji->encode$responseMessage["body"]));
  1726.                                     $logWhatsapp->setStatus"outbound" );
  1727.                                     $logWhatsapp->setDateCreated$now );
  1728.                                     $logWhatsapp->setTimestampProvider$timestamp );
  1729.                                     $logWhatsapp->setUser$user );
  1730.                                     $logWhatsapp->setLocation$location );
  1731.                                     $logWhatsapp->setLang$user->getLang() );
  1732.                                     $logWhatsapp->setConversationId($conversationId);
  1733.                                     $logWhatsapp->setTemplate(null);
  1734.                 
  1735.                                     $em->persist($logWhatsapp);
  1736.                                     $em->flush();
  1737.                                 }
  1738.                                 $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  1739.                             }
  1740.                             die();
  1741.                         }
  1742.                     }
  1743.                 }else{
  1744.                     $sendedMsg $logWhatsappRepository->findOneBy(array("phone" => $userPhoneCrypt"status" => "delivered"));
  1745.                     //If is the first 
  1746.                     if(strpos(mb_strtolower($text), mb_strtolower($translator->trans('dialog.start_manual_flow', [], "camprodon.messages"$lang))) !== false || (!$sendedMsg && $session->get('messageSended'))){
  1747.                         /*
  1748.                         * Starts Guided Flow
  1749.                         */ 
  1750.                         $meta->setLog("[META] Camprodon Start Flow"$utilities->ecrypt("Starts FLOW"), $location$userPhoneCrypt);
  1751.     
  1752.                         $options = array();
  1753.                         $buttons $buttonsRepo->getTextButton($location0$lang);
  1754.                         $btns0 = array();
  1755.                         foreach($buttons as $btn0){
  1756.                             array_push($btns0, [
  1757.                                 "postback_id" => $btn0['postbackText'],
  1758.                                 "text" => $btn0['text']
  1759.                             ]);
  1760.                         }
  1761.                         // dd($buttons[0]['text']);
  1762.                         $responseMessage = [
  1763.                             "body" => $translator->trans('dialog.start_manual_flow_welcome', [], "camprodon.messages"$lang),
  1764.                             "header" => [
  1765.                                 "type" => "image",
  1766.                                 // "text" => dirname(__FILE__,3)."/public/images/locations/".$location->getName()."/logo.png"
  1767.                                 "text" => $_SERVER['HTTP_HOST']."/images/locations/".$location->getName()."/logo_padding.png"
  1768.                             ],
  1769.                             "footer" => $translator->trans('dialog.start_manual_flow_footer', [], "camprodon.messages"$lang),
  1770.                             "buttons" => $btns0
  1771.                         ];
  1772.                         // $this->translations[$user->getLang()]["start_manual_flow_buttons"]["button_1"];
  1773.                         //Escull una d'aquestes opcions o escriu la teva paraula
  1774.                         //Si no es boton -> pregunta normal
  1775.                         $res = (object)$meta->sendMessage
  1776.                             $_ENV['gs_PAYLOAD__QUICK_REPLY'], 
  1777.                             $userPhone
  1778.                             $responseMessage
  1779.                             $location
  1780.                             $options
  1781.                         );
  1782.                         // dd($res);
  1783.                         $meta->setLog("[META] Camprodon response"$utilities->ecrypt(json_encode($res)), $location$userPhoneCrypt);
  1784.                         
  1785.                         $messageId "";
  1786.                         if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1787.     
  1788.                         $logWhatsapp = new LogWhatsapp();
  1789.                         $logWhatsapp->setConversationId($conversationId);
  1790.                         $logWhatsapp->setMessageId($messageId);
  1791.                         $logWhatsapp->setPhone$userPhoneCrypt );
  1792.                         $logWhatsapp->setPrefix$prefix );
  1793.                         $logWhatsapp->setTemplatenull );
  1794.                         $logWhatsapp->setText$emoji->encode$responseMessage["body"] ) );
  1795.                         $logWhatsapp->setStatus"outbound" );
  1796.                         $logWhatsapp->setDateCreated$now );
  1797.                         $logWhatsapp->setTimestampProvider$timestamp );
  1798.                         $logWhatsapp->setUser$user );
  1799.                         $logWhatsapp->setLocation$location );
  1800.                         $logWhatsapp->setLang$user->getLang() );
  1801.     
  1802.                         $em->persist($logWhatsapp);
  1803.                         $em->flush();
  1804.                         
  1805.                         //Llista activitats
  1806.                         // $responseMessage = [ "header"=> "","body" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["body"], "footer" => "","button_title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["button_title"] ];
  1807.                         
  1808.                         // $options = array( 
  1809.                         //     $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_title"] => array(
  1810.                         //         // array( "id"=> 1, "title" => "Activitats", "description" => ""), 
  1811.                         //         array( "id"=> "visits_1", "title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_1_title"], "description" => ""), 
  1812.                         //         array( "id" => "nature_1", "title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_2_title"], "description" => ""),
  1813.                         //         array( "id" => "pool_1", "title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_3_title"], "description" => ""),
  1814.                         //         array( "id" => "food_1", "title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_4_title"], "description" => "")
  1815.                         //     )
  1816.                         // );
  1817.     
  1818.                         // $res = (object)$meta->sendMessage( 
  1819.                         //     $_ENV['gs_PAYLOAD__LIST'], 
  1820.                         //     $userPhone, 
  1821.                         //     $responseMessage, 
  1822.                         //     $location, 
  1823.                         //     $options
  1824.                         // );
  1825.                         
  1826.                         // $messageId = "";
  1827.                         // if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
  1828.     
  1829.                         // $logWhatsapp = new LogWhatsapp();
  1830.                         // $logWhatsapp->setMessageId($messageId);
  1831.                         // $logWhatsapp->setPhone( $userPhoneCrypt );
  1832.                         // $logWhatsapp->setPrefix( $prefix );
  1833.                         // $logWhatsapp->setText( $emoji->encode( $responseMessage["body"]));
  1834.                         // $logWhatsapp->setStatus( "outbound" );
  1835.                         // $logWhatsapp->setDateCreated( $now );
  1836.                         // $logWhatsapp->setTimestampProvider( $timestamp );
  1837.                         // $logWhatsapp->setUser( $user );
  1838.                         // $logWhatsapp->setLocation( $location );
  1839.                         // $logWhatsapp->setLang( $user->getLang() );
  1840.                         // $logWhatsapp->setConversationId($conversationId);
  1841.                         // $logWhatsapp->setTemplate(null);
  1842.     
  1843.                         // $em->persist($logWhatsapp);
  1844.                         // $em->flush();
  1845.     
  1846.                         die();
  1847.                     }else{
  1848.                         if($location){
  1849.                             $meta->setLog("[META] Camprodon GPT"$utilities->ecrypt("Entra pregunta lliure"), $location$userPhoneCrypt);
  1850.                             
  1851.                             // $text = $translator->trans('dialog.todayIs', [], "camprodon.messages", $lang)." ".$now->format("d-m-Y").". ".$text; 
  1852.                             
  1853.                             // dd($text);
  1854.                             $logQuestionUser $logQuestionUserRepository->findQuestion($user$location);
  1855.                             if($logQuestionUser){
  1856.                                 $logQuestionUser $logQuestionUser[0];
  1857.                             }
  1858.                             //Prepare question with First gpt layer
  1859.                             $conversation $logConversationRepository->findOneBy(array("user" => $user"location" => $location ));
  1860.                             if($conversation){
  1861.                                 if(intval($now->format("YmdHi")) - intval($conversation->getDateCreated()->format("YmdHi")) > $this->limitTimeContext){
  1862.                                     $em->remove($conversation);
  1863.                                     $em->flush();
  1864.                                     $conversation null;
  1865.                                 }
  1866.                             }
  1867.                             if(!$conversation){
  1868.                                 $conversationDecoded = array();
  1869.                                 $auxConversation = array();
  1870.                                 array_push($conversationDecoded, array("user" => $text));
  1871.                                 array_push($auxConversation, array("last_inbound" => $text));
  1872.                                 $conversation = new LogConversation();
  1873.                                 $conversation->setUser($user);
  1874.                                 $conversation->setLocation($location);
  1875.                                 $conversation->setJson(json_encode($conversationDecoded));
  1876.                                 $conversation->setDateCreated($now);
  1877.                                 $em->persist($conversation);
  1878.                                 $em->flush();
  1879.                             }else{
  1880.                                 $conversationDecoded json_decode($conversation->getJson(), true);
  1881.                                 $auxConversation array_replace([], $conversationDecoded);
  1882.                                 array_push($conversationDecoded, array("user" => $text));
  1883.                                 array_push($auxConversation, array("last_inbound" => $text));
  1884.                             }
  1885.                             $auxConversation array_filter($auxConversation, function ($item){
  1886.                                 return key($item) != 'user_old_question';
  1887.                                 // dd(key($item));
  1888.                             });
  1889.                             // dump('auxConversation', $auxConversation);
  1890.                             //Remove first dialogs if conversation is too big, so it doesn't surpass the max token lenght of OpenAi
  1891.                             if(count($conversationDecoded) > 6){
  1892.                                 $conversationDecoded array_slice($conversationDecoded2);
  1893.                                 $auxConversation array_slice($auxConversation2);
  1894.                             }
  1895.                             // dd($conversationDecoded);
  1896.                             $unsuscribeWords = ["baja""baixa""unsubscribe""désabonner"];
  1897.                             if(in_array(mb_strtolower($text), $unsuscribeWords)){
  1898.                                 $type $_ENV['gs_PAYLOAD__QUICK_REPLY'];
  1899.                                 $responseMessage = [
  1900.                                     "body" => $translator->trans('dialog.unsuscribe', [], "camprodon.messages"$lang),
  1901.                                     "buttons" => [
  1902.                                         [
  1903.                                             "postback_id" => "unsuscribe_yes",
  1904.                                             "text" => $translator->trans('dialog.unsuscribe_yes', [], "camprodon.messages"$lang)
  1905.                                         ],
  1906.                                         [
  1907.                                             "postback_id" => "unsuscribe_no",
  1908.                                             "text" => $translator->trans('dialog.unsuscribe_no', [], "camprodon.messages"$lang)
  1909.                                         ]
  1910.                                     ]
  1911.                                 ];
  1912.                                 
  1913.                                 $options = array();
  1914.     
  1915.                                 $res = (object)$meta->sendMessage
  1916.                                     $type
  1917.                                     $userPhone
  1918.                                     $responseMessage
  1919.                                     $location
  1920.                                     $options
  1921.                                 );
  1922.                                 $textLog $responseMessage['body'];
  1923.                                 $messageId "";
  1924.                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  1925.             
  1926.                                 $logWhatsapp = new LogWhatsapp();
  1927.                                 $logWhatsapp->setMessageId($messageId);
  1928.                                 $logWhatsapp->setPhone$userPhoneCrypt );
  1929.                                 $logWhatsapp->setPrefix$prefix );
  1930.                                 $logWhatsapp->setText$emoji->encode$textLog));
  1931.                                 $logWhatsapp->setStatus"outbound" );
  1932.                                 $logWhatsapp->setDateCreated$now );
  1933.                                 $logWhatsapp->setTimestampProvider$timestamp );
  1934.                                 $logWhatsapp->setUser$user );
  1935.                                 $logWhatsapp->setLocation$location );
  1936.                                 $logWhatsapp->setLang$user->getLang() );
  1937.                                 $logWhatsapp->setConversationId($conversationId);
  1938.                                 $logWhatsapp->setTemplate(null);
  1939.             
  1940.                                 $em->persist($logWhatsapp);
  1941.                                 $em->flush();
  1942.                                 die();
  1943.                             }
  1944.                             $excludeWords = ["no""no gracias""no gracies""no gràcies""no quiero""no vull""res més""res mes""nada mas""adeu"];
  1945.                             if(in_array(mb_strtolower($text), $excludeWords)) die();
  1946.                             $embeddingQuestion $text;
  1947.                             //Check if meteo
  1948.                             if($externalCalls->isMeteo($text) == "meteo-"){
  1949.                                 $type $_ENV['meta_PAYLOAD__CAROUSEL'];
  1950.                                 //Category Rutes = 1
  1951.                                 $meteoData $meteoRepo->findOneBy(array("location" => $location));
  1952.                                 $meteoReport json_decode($meteoData->getMeteoData());
  1953.                                 $cards = array();
  1954.                                 foreach($meteoReport as $key => $meteo){
  1955.                                     // dd($meteo);
  1956.                                     $dateMeteo = new \DateTime($key);
  1957.                                     
  1958.                                     $url dirname(__DIR__,2)."/public/images/meteo/" $translator->trans("meteo." $meteo->description.'.img', [], "camprodon.messages"$lang);
  1959.                                     // dd(file_exists($url));
  1960.                                     if(!file_exists($url)){
  1961.                                         $url $_SERVER['HTTP_HOST']."/images/meteo/nuboso.jpg";  
  1962.                                     }else{
  1963.                                         $url $_SERVER['HTTP_HOST']."/images/meteo/" $translator->trans("meteo." $meteo->description.'.img', [], "camprodon.messages"$lang);
  1964.                                     }
  1965.                                     $paramsActivity = array(
  1966.                                         "header" => array(
  1967.                                             "type" => "image",
  1968.                                             "url" => $url
  1969.                                         ),
  1970.                                         "body" => array(
  1971.                                             "parameters" => array(
  1972.                                                 array(
  1973.                                                     "type" => "text",
  1974.                                                     "text" => $dateMeteo->format('d-m-Y')
  1975.                                                 ),
  1976.                                                 array(
  1977.                                                     "type" => "text",
  1978.                                                     "text" => strpos($translator->trans("meteo." $meteo->description.'.name', [], "camprodon.messages"$lang),".") !== false $meteo->description $translator->trans("meteo." $meteo->description.'.name', [], "camprodon.messages"$lang)
  1979.                                                 ),
  1980.                                                 array(
  1981.                                                     "type" => "text",
  1982.                                                     "text" => $meteo->prob_precipitation."%"
  1983.                                                 ),
  1984.                                                 array(
  1985.                                                     "type" => "text",
  1986.                                                     "text" => $meteo->temp_max."ºC"
  1987.                                                 ),
  1988.                                                 array(
  1989.                                                     "type" => "text",
  1990.                                                     "text" => $meteo->temp_min."ºC"
  1991.                                                 )
  1992.                                             )
  1993.                                         ),
  1994.                                         "buttons" => array(
  1995.                                             array("type" => "quick_reply""postback_id" => "start_over")
  1996.                                         )
  1997.                                     );
  1998.                                     array_push($cards
  1999.                                         $paramsActivity
  2000.                                     );
  2001.                                 }
  2002.                                 $templateSlug "carousel_meteo";
  2003.                                 switch(count((array)$meteoReport)){
  2004.                                     case 7$templateSlug "carousel_meteo";
  2005.                                         break;
  2006.                                     case 6$templateSlug "carousel_meteo_6";
  2007.                                         break;
  2008.                                     case 5$templateSlug "carousel_meteo_5";
  2009.                                         break;
  2010.                                     default: $templateSlug "carousel_meteo";
  2011.                                         break;
  2012.                                 }
  2013.                                 $template $templateRepo->findOneBy(array("slug" => $templateSlug"lang" => $langEntity"location" => $location));
  2014.                                 $payload = array(
  2015.                                     "template_name" => $template->getName(),
  2016.                                     "lang" => $this->templateLangCode[$lang],
  2017.                                     "cards" => $cards
  2018.                                 );
  2019.                                 $res = (object)$meta->sendTemplate(
  2020.                                     $type,
  2021.                                     $userPhone,
  2022.                                     $location,
  2023.                                     $payload
  2024.                                 );
  2025.                                 $messageId "";
  2026.                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2027.                                 $logWhatsapp = new LogWhatsapp();
  2028.                                 $logWhatsapp->setMessageId($messageId);
  2029.                                 $logWhatsapp->setPhone$userPhoneCrypt );
  2030.                                 $logWhatsapp->setPrefix$prefix );
  2031.                                 $logWhatsapp->setText$emoji->encode$payload["template_name"] ));
  2032.                                 $logWhatsapp->setStatus"outbound" );
  2033.                                 $logWhatsapp->setDateCreated$now );
  2034.                                 $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  2035.                                 $logWhatsapp->setUser$user );
  2036.                                 $logWhatsapp->setLocation$location );
  2037.                                 $logWhatsapp->setLang$user->getLang() );
  2038.                                 $logWhatsapp->setConversationId(null);
  2039.                                 $logWhatsapp->setTemplate(null);
  2040.                                 $em->persist($logWhatsapp);
  2041.                                 $em->flush();
  2042.                                 array_push($conversationDecoded, array("assistant" => $embeddingQuestion));
  2043.                                 $conversation->setJson(json_encode($conversationDecoded));
  2044.                                 if($logQuestionUser){
  2045.                                     $logQuestionUser->setResponse($logWhatsapp);
  2046.                                     $em->persist($logQuestionUser);
  2047.                                     $em->flush();
  2048.                                 }
  2049.                                 die();
  2050.                             }
  2051.                             //Get intention of the question, if there is no intention, ask what is the question
  2052.                             $excludeWordsIntention = ['Bonjour''Salut''Hola','Buenas''Hi''Hello''Hey''Ei'];
  2053.                             if(count(explode(" ",$embeddingQuestion)) == && !in_array($embeddingQuestion$excludeWordsIntention)){
  2054.                                 $intention $externalCalls->getIntention($auxConversation);
  2055.                                 $meta->setLog("[META] getIntention"$utilities->ecrypt(json_encode($intention)), $location$userPhoneCrypt);
  2056.                                 if($intention && property_exists($intention,"intention") && !$intention->intention){
  2057.                                     //If there is no intention found, we ask about what the user is talking about.
  2058.                                     $why $externalCalls->askWhy($embeddingQuestion);
  2059.                                     $meta->setLog("[META] askWhy"$utilities->ecrypt($why), $location$userPhoneCrypt);
  2060.                                     
  2061.                                     if($why){
  2062.                                         //Send the message and update conversation
  2063.                                         $responseMessage = ["text" => $why];
  2064.                                         $options = array();
  2065.                                         $res = (object)$meta->sendMessage
  2066.                                             $_ENV['meta_PAYLOAD__TEXT'], 
  2067.                                             $userPhone
  2068.                                             $responseMessage
  2069.                                             $location
  2070.                                             $options
  2071.                                         );
  2072.                                         
  2073.                                         array_push($conversationDecoded, array("assistant" => $why));
  2074.                                         $conversation->setJson(json_encode($conversationDecoded));
  2075.                                         $em->persist($conversation);
  2076.                                         $em->flush();
  2077.                                         $messageId "";
  2078.                                         if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2079.                     
  2080.                                         $logWhatsapp = new LogWhatsapp();
  2081.                                         $logWhatsapp->setMessageId($messageId);
  2082.                                         $logWhatsapp->setPhone$userPhoneCrypt );
  2083.                                         $logWhatsapp->setPrefix$prefix );
  2084.                                         $logWhatsapp->setText$emoji->encode$why));
  2085.                                         $logWhatsapp->setStatus"outbound" );
  2086.                                         $logWhatsapp->setDateCreated$now );
  2087.                                         $logWhatsapp->setTimestampProvider$timestamp );
  2088.                                         $logWhatsapp->setUser$user );
  2089.                                         $logWhatsapp->setLocation$location );
  2090.                                         $logWhatsapp->setLang$user->getLang() );
  2091.                                         $logWhatsapp->setConversationId($conversationId);
  2092.                                         $logWhatsapp->setTemplate(null);
  2093.                     
  2094.                                         $em->persist($logWhatsapp);
  2095.                                         $em->flush();
  2096.                                         if($logQuestionUser){
  2097.                                             $logQuestionUser->setResponse($logWhatsapp);
  2098.                                             $em->persist($logQuestionUser);
  2099.                                             $em->flush();
  2100.                                         }
  2101.                                         die();
  2102.                                     }
  2103.                                 }
  2104.                             }
  2105.                             if(count($conversationDecoded) > 1){
  2106.                                 $analizeConversationQuestion = (array) $externalCalls->GPTAnalizeConversationQuestion(json_encode($auxConversation));
  2107.                                 $meta->setLog("[META] GPTAnalizeConversationQuestion input"$utilities->ecrypt(json_encode($auxConversation)), $location$userPhoneCrypt);
  2108.                                 $meta->setLog("[META] GPTAnalizeConversationQuestion"$utilities->ecrypt($analizeConversationQuestion), $location$userPhoneCrypt);
  2109.                                 if(isset($analizeConversationQuestion["has_relation"]) && ($analizeConversationQuestion["has_relation"] || $analizeConversationQuestion["has_relation"] == "true")){
  2110.                                     $meta->setLog("[META] GPTAnalizePrincipalQuestion input"$utilities->ecrypt(array($analizeConversationQuestion["first_inbound"] ? $analizeConversationQuestion["first_inbound"] : $analizeConversationQuestion["principal_context_relation"], $text)), $location$userPhoneCrypt);
  2111.                                     $embeddingQuestion $externalCalls->GPTAnalizePrincipalQuestion($analizeConversationQuestion["first_inbound"] ? $analizeConversationQuestion["first_inbound"] : $analizeConversationQuestion["principal_context_relation"], $text);
  2112.                                     
  2113.                                     //Guardamos la nueva pregunta hecha por la IA como pregunta que se le hace al embedding, y la pregunta original en el campo user_old_question
  2114.                                     // $conversationDecoded[count($conversationDecoded) - 1]['user'] = $embeddingQuestion;
  2115.                                     $conversationDecoded array_reverse($conversationDecodedtrue);
  2116.                                     foreach($conversationDecoded as &$conver){
  2117.                                         if(isset($conver['user'])) {
  2118.                                             $conver['user'] = $embeddingQuestion;
  2119.                                             break;
  2120.                                         }
  2121.                                     }
  2122.                                     $conversationDecoded array_reverse($conversationDecodedtrue);
  2123.                                     array_push($conversationDecoded, array("user_old_question" => $text));
  2124.                                     $meta->setLog("[META] GPTAnalizePrincipalQuestion"$utilities->ecrypt($embeddingQuestion), $location$userPhoneCrypt);
  2125.                                 }else{
  2126.                                     $conversationDecoded = array(array("user" => $text));
  2127.                                 }
  2128.                             }
  2129.                             $result $embeddingQuestion;
  2130.                             $meta->setLog("[META] embeddingQuestion"$utilities->ecrypt($embeddingQuestion), $location$userPhoneCrypt);
  2131.                             // else{
  2132.                             //     //Send context to GPT
  2133.                             //     $embeddingQuestion = $externalCalls->GPTLayer($conversationDecoded, $langEntity);
  2134.                             // }
  2135.                             // $embeddingQuestion = $text;
  2136.                             // dd($embeddingQuestion);
  2137.                             
  2138.                             $resultPlaces $externalCalls->GPTIsPlaces($embeddingQuestion$location);
  2139.                             //GPT per detectar categoria
  2140.                                 //Si es una de la llista, anar al embedding
  2141.                             //
  2142.                             $assistantRes $embeddingQuestion;
  2143.                             $meta->setLog("[META] GPTIsPlaces - Is Places"$utilities->ecrypt($resultPlaces), $location$userPhoneCrypt);
  2144.                             if(strpos(mb_strtolower($resultPlaces), "places-") !== false){
  2145.                                 $meta->setLog("[META] PRE GPTCheckCategory - Category"$utilities->ecrypt($resultPlaces), $location$userPhoneCrypt);
  2146.                                 //Get meta_key of all categories that we want
  2147.                                 $notAllowedCategories = [1,2,3,4,5,6,7,8,14,15];
  2148.                                 $categories array_map(function($item){
  2149.                                     return $item->getMetaKey();
  2150.                                 },array_filter($categoryRepo->findBy(array("location" => $location)), function($cat) use($notAllowedCategories) {
  2151.                                     return !in_array($cat->getId(), $notAllowedCategories);
  2152.                                 }));
  2153.                                 $resultCategory $externalCalls->GPTCheckCategory($embeddingQuestionjoin(', ',$categories));
  2154.                                 $meta->setLog("[META] GPTCheckCategory - Category"$utilities->ecrypt($resultCategory), $location$userPhoneCrypt);
  2155.                                 if(strpos(mb_strtolower($resultCategory), "cat-") !== false){
  2156.                                     // $result = $this->askGPT($embeddingQuestion, $location, $doctrine);
  2157.                                     // dd($result);
  2158.                                     $catName explode('cat-'$resultCategory)[1];
  2159.                                     $categoriesToCarouselDB $categories;
  2160.                                     if(in_array($catName$categoriesToCarouselDB)){
  2161.                                         $category $categoryRepo->findOneBy(array("metaKey" => $catName));
  2162.                                         $seeMore false;
  2163.                                         //Find places by category
  2164.                                         $placesFound $placesRepo->findPlacesByCategory($category$location);
  2165.                                         $activities $activityRepo->findBy(array("category" => $category"location" => $location), array("sort" => "ASC")); //Limit of cards to be showed
  2166.                                         if($placesFound){
  2167.                                         //How many places
  2168.                                             if($catName == 'campings')  $placesCount 2;
  2169.                                             else if(count($placesFound) > 4$placesCount 4;
  2170.                                             else $placesCount count($placesFound);
  2171.     
  2172.                                             // foreach($activities as $activity){
  2173.                                             //     $aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
  2174.                                             //     $place = array();
  2175.                                             //     $hasMaps = false;
  2176.                                             //     $hasPlace = false;
  2177.                                             //     // foreach($aI18n as $activityData){
  2178.                                             //     //     if($activityData->getMetaKey() == "placeApi"){
  2179.                                             //     //         $hasPlace = true;
  2180.                                             //     //         $place = json_decode($activityData->getMetaValue());
  2181.                                             //     //         array_push($places, $place);
  2182.                                             //     //     }
  2183.                                             //     //     // if($activityData->getMetaKey() == "name"){
  2184.                                             //     //     //     $place = $externalCalls->googleMapsApi($activityData->getMetaValue(), $location);
  2185.                                             //     //     //     if(is_array($place)){
  2186.                                             //     //     //         array_push($places, $place[0]);
  2187.                                             //     //     //     }
  2188.                                             //     //     // }
  2189.                                             //     //     if($activityData->getMetaKey() == "maps"){
  2190.                                             //     //         $hasMaps = true;
  2191.                                             //     //     }
  2192.                                             //     // }
  2193.                                             //     if(!$hasMaps && is_array($place) && count($place) > 0){
  2194.                                             //         $aI18nNew = new ActivityI18n();
  2195.                                             //         $aI18nNew->setMetaKey("maps");
  2196.                                             //         $aI18nNew->setMetaValue($place[0]['url']);
  2197.                                             //         $aI18nNew->setLang($lang);
  2198.                                             //         $aI18nNew->setActivity($activity);
  2199.                                             //         $em->persist($aI18nNew);
  2200.                                             //         $em->flush();
  2201.                                             //     }
  2202.                                             //     // if(!$hasPlace && is_array($place) && count($place) > 0){
  2203.                                             //     //     $aI18nNew = new ActivityI18n();
  2204.                                             //     //     $aI18nNew->setMetaKey("placeApi");
  2205.                                             //     //     $aI18nNew->setMetaValue(json_encode($place));
  2206.                                             //     //     $aI18nNew->setLang('ca');
  2207.                                             //     //     $aI18nNew->setActivity($activity);
  2208.                                             //     //     $em->persist($aI18nNew);
  2209.                                             //     //     $em->flush();
  2210.                                             //     // }
  2211.                                             // }
  2212.                                             $assistantRes "";
  2213.                                             // dd($placesFound);
  2214.                                             if($placesCount === 1){
  2215.                                                 $responseMessage = ["text" => $translator->trans('dialog.maps_first_part', [], "camprodon.messages"$lang).": *".$placesFound[0]->getName()."*. ".$translator->trans('dialog.maps_second_part', [], "camprodon.messages"$lang).": ".addslashes($placesFound[0]->getMaps())];
  2216.                                                 $options = array();
  2217.     
  2218.                                                 $assistantRes trim($placesFound[0]->getName());
  2219.                                                 $res = (object)$meta->sendMessage
  2220.                                                     $_ENV['meta_PAYLOAD__TEXT'], 
  2221.                                                     $userPhone
  2222.                                                     $responseMessage
  2223.                                                     $location
  2224.                                                     $options
  2225.                                                 );
  2226.             
  2227.                                                 $textLog $responseMessage['text'];
  2228.     
  2229.                                             }else{
  2230.                                                 shuffle($placesFound);
  2231.                                             $seeMore $placesCount >= true false;
  2232.                                                     $places array_slice($placesFound0$placesCount);
  2233.                                             $meta->setLog("[META] Place Image Response"$utilities->ecrypt(json_encode($places)), $location$userPhoneCrypt);
  2234.                                             //SEND CAROUSEL
  2235.                                             $type $_ENV['meta_PAYLOAD__CAROUSEL'];
  2236.                                             
  2237.                                             $cards = array();
  2238.                                             $headerImg $_SERVER['HTTP_HOST']."/images/locations/".$location->getName()."/places_default.jpg";
  2239.                                                     
  2240.                                             foreach($places as $p){
  2241.                                                 // $buttonUrl = "https://visitcamprodon.cat/benvinguts/";
  2242.                                                         $p $p;
  2243.                                                         // dd($p->getImageUrl());
  2244.                                                 // dump($p);
  2245.                                                 $paramsPlaces = array(
  2246.                                                     "header" => array(
  2247.                                                         "type" => "image",
  2248.                                                                 "url" => ($p->getImageUrl()) ? $_SERVER['HTTP_HOST']."/images/locations/".$location->getName()."/".$p->getImageUrl() : $headerImg 
  2249.                                                     ),
  2250.                                                     "body" => array(
  2251.                                                         "parameters" => array(
  2252.                                                             array(
  2253.                                                                 "type" => "text",
  2254.                                                                         "text" => addslashes($p->getName())
  2255.                                                             )
  2256.                                                         )
  2257.                                                     ),
  2258.                                                     "buttons" => array(
  2259.                                                                 array("type" => "url""postback_id" => base64_encode("location=".$location->getId()."&event=null&user=".$user->getId()."&type=place"."&url=".base64_encode($p->getMaps())."&extra=".$p->getName())),
  2260.                                                     )
  2261.                                                 );
  2262.                                                         $assistantRes .= trim($p->getName());
  2263.                                                 array_push($cards
  2264.                                                     $paramsPlaces
  2265.                                                 );
  2266.                                             }
  2267.                                             $template $templateRepo->findOneBy(array("slug" => "carousel_places_".$placesCount"lang" => $langEntity"location" => $location));
  2268.                                             $payload = array(
  2269.                                                 "template_name" => $template->getName(),
  2270.                                                 "lang" => $this->templateLangCode[$lang],
  2271.                                                 "cards" => $cards
  2272.                                                 
  2273.                                             );
  2274.                                             $res = (object)$meta->sendTemplate(
  2275.                                                 $type,
  2276.                                                 Utilities::dcrypt($user->getPhone()),
  2277.                                                 $location,
  2278.                                                 $payload
  2279.                                             );
  2280.                                             
  2281.                                             // dd($res);
  2282.                                             $textLog $payload['template_name'];
  2283.                                                 }
  2284.                                             array_push($conversationDecoded, array("assistant" => $assistantRes));
  2285.                                             $conversation->setJson(json_encode($conversationDecoded));
  2286.                                             $conversation->setDateCreated$now );
  2287.                                             $em->persist($conversation);
  2288.                                             $em->flush();
  2289.                                             $messageId "";
  2290.                                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2291.                         
  2292.                                             $logWhatsapp = new LogWhatsapp();
  2293.                                             $logWhatsapp->setMessageId($messageId);
  2294.                                             $logWhatsapp->setPhone$userPhoneCrypt );
  2295.                                             $logWhatsapp->setPrefix$prefix );
  2296.                                             $logWhatsapp->setText$emoji->encode$textLog));
  2297.                                             $logWhatsapp->setStatus"outbound" );
  2298.                                             $logWhatsapp->setDateCreated$now );
  2299.                                             $logWhatsapp->setTimestampProvider$timestamp );
  2300.                                             $logWhatsapp->setUser$user );
  2301.                                             $logWhatsapp->setLocation$location );
  2302.                                             $logWhatsapp->setLang$user->getLang() );
  2303.                                             $logWhatsapp->setConversationId($conversationId);
  2304.                                             $logWhatsapp->setTemplate(null);
  2305.                         
  2306.                                             $em->persist($logWhatsapp);
  2307.                                             $em->flush();
  2308.                                             if($logQuestionUser){
  2309.                                                 $logQuestionUser->setResponse($logWhatsapp);
  2310.                                                 $em->persist($logQuestionUser);
  2311.                                                 $em->flush();
  2312.                                             }
  2313.                                             if($seeMore){
  2314.                                                 $responseMessage = ["text" => $translator->trans('dialog.more_places', [], "camprodon.messages"$lang). " https://www.google.com/maps/search/".$catName."+en+camprodon/"];
  2315.                                                 $options = array();
  2316.                                                 //Aquest llistat s'ha generat aleatoriament. Si vols veure més, fes clic en el següent botó.
  2317.                     
  2318.                                                 $res = (object)$meta->sendMessage
  2319.                                                     $_ENV['meta_PAYLOAD__TEXT'], 
  2320.                                                     $userPhone
  2321.                                                     $responseMessage
  2322.                                                     $location
  2323.                                                     $options
  2324.                                                 );
  2325.             
  2326.                                                 $textLog $responseMessage['text'];
  2327.                                                 $messageId "";
  2328.                                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2329.                             
  2330.                                                 $logWhatsapp = new LogWhatsapp();
  2331.                                                 $logWhatsapp->setMessageId($messageId);
  2332.                                                 $logWhatsapp->setPhone$userPhoneCrypt );
  2333.                                                 $logWhatsapp->setPrefix$prefix );
  2334.                                                 $logWhatsapp->setText$emoji->encode$textLog));
  2335.                                                 $logWhatsapp->setStatus"outbound" );
  2336.                                                 $logWhatsapp->setDateCreated$now );
  2337.                                                 $logWhatsapp->setTimestampProvider$timestamp );
  2338.                                                 $logWhatsapp->setUser$user );
  2339.                                                 $logWhatsapp->setLocation$location );
  2340.                                                 $logWhatsapp->setLang$user->getLang() );
  2341.                                                 $logWhatsapp->setConversationId($conversationId);
  2342.                                                 $logWhatsapp->setTemplate(null);
  2343.                             
  2344.                                                 $em->persist($logWhatsapp);
  2345.                                                 $em->flush();
  2346.                                             }
  2347.                                             usleep(500000);
  2348.                                             $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  2349.                                             die();
  2350.                                         }else{
  2351.                                             $result $resultPlaces;
  2352.                                         }
  2353.                                     }
  2354.                                 }else{
  2355.                                     $result $resultPlaces;
  2356.                                 }
  2357.                             }else{
  2358.                                 $meta->setLog("[META] GPT Layer - Embbeding question"$utilities->ecrypt($embeddingQuestion), $location$userPhoneCrypt);
  2359.                                 //Free message to Chat GPT
  2360.                                 $result $this->askGPT($embeddingQuestion$location$langEntity->getName(), $doctrine$meta$utilities);
  2361.                                 $meta->setLog("[META] GPT Response"$utilities->ecrypt($result), $location$userPhoneCrypt);
  2362.                             }
  2363.                             $sendSatisfaction false;
  2364.                             if(strpos(mb_strtolower($result), "places-") !== false){
  2365.                                 $url "None";
  2366.                                 $place $externalCalls->GPTPlaces($embeddingQuestion);
  2367.                                 $meta->setLog("[META] GPTPlaces Response"$utilities->ecrypt($place), $location$userPhoneCrypt);
  2368.                                 if(strpos($place'Error:') !== false){
  2369.                                     $result $translator->trans('dialog.no_info', [], "camprodon.messages"$lang);
  2370.                                 }else{
  2371.                                     //Buscar API Google
  2372.                                     $places $externalCalls->googleMapsApi($place$location);
  2373.                                     // dd($places);
  2374.                                     $meta->setLog("[META] googleMapsApi Response"$utilities->ecrypt(json_encode($places)), $location$userPhoneCrypt);
  2375.                                     if(is_array($places)){
  2376.                                         $seeMore count($places) > true false;
  2377.                                         $placesCount count($places) > count($places);
  2378.                                         if($placesCount === 1){
  2379.                                             $responseMessage = ["text" => $translator->trans('dialog.maps_first_part', [], "camprodon.messages"$lang).": *".$places[0]["name"]."*. ".$translator->trans('dialog.maps_second_part', [], "camprodon.messages"$lang).": ".addslashes($places[0]["url"])];
  2380.                                             $options = array();
  2381.                                             $assistantRes trim($places[0]["name"]);
  2382.                                             $res = (object)$meta->sendMessage
  2383.                                                 $_ENV['meta_PAYLOAD__TEXT'], 
  2384.                                                 $userPhone
  2385.                                                 $responseMessage
  2386.                                                 $location
  2387.                                                 $options
  2388.                                             );
  2389.         
  2390.                                             $textLog $responseMessage['text'];
  2391.                                         }else{
  2392.                                             // $seeMore = $placesCount > 9 ? true : false;
  2393.                                             // $seeMore = false;
  2394.                                             $assistantRes "";
  2395.                                             shuffle($places);
  2396.                                             // dd($places);
  2397.                                             $places array_slice($places0$placesCount);
  2398.     
  2399.                                             foreach($places as &$placeInfo){
  2400.                                                 if($placeInfo["photo_id"] != null){
  2401.                                                     $placeInfo["photo_id"] = $externalCalls->googleMapsApiImages($placeInfo["photo_id"]);
  2402.                                                 }
  2403.                                             }
  2404.     
  2405.                                             $meta->setLog("[META] Place Image Response"$utilities->ecrypt(json_encode($places)), $location$userPhoneCrypt);
  2406.     
  2407.                                             //SEND CAROUSEL
  2408.                                             $type $_ENV['meta_PAYLOAD__CAROUSEL'];
  2409.                                             
  2410.                                             $cards = array();
  2411.     
  2412.                                             $headerImg $_SERVER['HTTP_HOST']."/images/locations/".$location->getName()."/places_default.jpg";
  2413.                                             foreach($places as $p){
  2414.                                                 // $buttonUrl = "https://visitcamprodon.cat/benvinguts/";
  2415.                                                 // dd($p);
  2416.                                                 $paramsPlaces = array(
  2417.                                                     "header" => array(
  2418.                                                         "type" => "image",
  2419.                                                         "url" => (isset($p["photo_id"]) && $p["photo_id"] != "None" )? $p["photo_id"] : $headerImg 
  2420.                                                     ),
  2421.                                                     "body" => array(
  2422.                                                         "parameters" => array(
  2423.                                                             array(
  2424.                                                                 "type" => "text",
  2425.                                                                 "text" => addslashes($p["name"])
  2426.                                                             )
  2427.                                                         )
  2428.                                                     ),
  2429.                                                     "buttons" => array(
  2430.                                                         array("type" => "url""postback_id" => base64_encode("location=".$location->getId()."&event=null&user=".$user->getId()."&type=place"."&url=".base64_encode($p["url"])."&extra=".$p["name"])),
  2431.                                                     )
  2432.                                                 );
  2433.                                                 $assistantRes .= trim($p["name"]);
  2434.                                                 array_push($cards
  2435.                                                     $paramsPlaces
  2436.                                                 );
  2437.                                             }
  2438.     
  2439.                                             // if($seeMore){
  2440.                                             //     //See more
  2441.                                             //     $paramsPlaces = array(
  2442.                                             //         "header" => array(
  2443.                                             //             "type" => "image",
  2444.                                             //             "url" => $headerImg
  2445.                                             //         ),
  2446.                                             //         "buttons" => array(
  2447.                                             //             array("type" => "url", "postback_id" => base64_encode("location=".$location->getId()."&event=null&user=".$user->getId()."&type=place_more"."&url=".base64_encode("https://www.google.com/maps/search/".$place."+en+camprodon/")."&extra=".$place)),
  2448.                                             //         )
  2449.                                             //     );
  2450.                                         
  2451.                                             //     array_push($cards, 
  2452.                                             //         $paramsPlaces
  2453.                                             //     );
  2454.                                             // }
  2455.     
  2456.                                             // dd($placesCount);
  2457.                                             $template $templateRepo->findOneBy(array("slug" => "carousel_places_".$placesCount"lang" => $langEntity"location" => $location));
  2458.     
  2459.                                             $payload = array(
  2460.                                                 "template_name" => $template->getName(),
  2461.                                                 "lang" => $this->templateLangCode[$lang],
  2462.                                                 "cards" => $cards
  2463.                                                 
  2464.                                             );
  2465.     
  2466.                                             $res = (object)$meta->sendTemplate(
  2467.                                                 $type,
  2468.                                                 Utilities::dcrypt($user->getPhone()),
  2469.                                                 $location,
  2470.                                                 $payload
  2471.                                             );
  2472.                                             $textLog $payload['template_name'];
  2473.                                             if($seeMore){
  2474.                                                 $messageId "";
  2475.                                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2476.                             
  2477.                                                 $logWhatsapp = new LogWhatsapp();
  2478.                                                 $logWhatsapp->setMessageId($messageId);
  2479.                                                 $logWhatsapp->setPhone$userPhoneCrypt );
  2480.                                                 $logWhatsapp->setPrefix$prefix );
  2481.                                                 $logWhatsapp->setText$emoji->encode$textLog));
  2482.                                                 $logWhatsapp->setStatus"outbound" );
  2483.                                                 $logWhatsapp->setDateCreated$now );
  2484.                                                 $logWhatsapp->setTimestampProvider$timestamp );
  2485.                                                 $logWhatsapp->setUser$user );
  2486.                                                 $logWhatsapp->setLocation$location );
  2487.                                                 $logWhatsapp->setLang$user->getLang() );
  2488.                                                 $logWhatsapp->setConversationId($conversationId);
  2489.                                                 $logWhatsapp->setTemplate(null);
  2490.                             
  2491.                                                 $em->persist($logWhatsapp);
  2492.                                                 $em->flush();
  2493.     
  2494.                                                 $responseMessage = ["text" => $translator->trans('dialog.more_places', [], "camprodon.messages"$lang). " https://www.google.com/maps/search/".$place."+en+camprodon/"];
  2495.                                                 $options = array();
  2496.                                                 //Aquest llistat s'ha generat aleatoriament. Si vols veure més, fes clic en el següent botó.
  2497.                     
  2498.                                                 $res = (object)$meta->sendMessage
  2499.                                                     $_ENV['meta_PAYLOAD__TEXT'], 
  2500.                                                     $userPhone
  2501.                                                     $responseMessage
  2502.                                                     $location
  2503.                                                     $options
  2504.                                                 );
  2505.             
  2506.                                                 $textLog $responseMessage['text'];
  2507.                                             }
  2508.                                         }
  2509.                                     }else{
  2510.                                         $responseMessage = ["text" => $translator->trans('dialog.no_info', [], "camprodon.messages"$lang)];
  2511.                                         $options = array();
  2512.             
  2513.                                         $res = (object)$meta->sendMessage
  2514.                                             $_ENV['meta_PAYLOAD__TEXT'], 
  2515.                                             $userPhone
  2516.                                             $responseMessage
  2517.                                             $location
  2518.                                             $options
  2519.                                         );
  2520.     
  2521.                                         $textLog $responseMessage['text'];
  2522.                                     }
  2523.                                     // if($url !== "None"){
  2524.                                     //     $explodedResult = explode('{}',$url);
  2525.                                     //     $placeName = $explodedResult[0];
  2526.                                     //     $placeUrl = $explodedResult[1];
  2527.                                     //     // $placeUrl = "aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8=";
  2528.                                     //     // dd($placeUrl);
  2529.                                     //     /*$template = $templateRepo->findOneBy(array("slug" => "maps", "lang" => $langEntity, "location" => $location)); 
  2530.     
  2531.                                     //     $payload = array(
  2532.                                     //         "template_name" => $template->getName(),
  2533.                                     //         "lang" => $this->templateLangCode[$lang],
  2534.                                     //         "buttons" => array(
  2535.                                     //             array(
  2536.                                     //                 "type" => "url",
  2537.                                     //                 "postback_id" => $placeUrl
  2538.                                     //             )
  2539.                                     //         )
  2540.                                     //     );
  2541.     
  2542.     
  2543.                                     //     $res = (object)$meta->sendTemplate(
  2544.                                     //         $_ENV['meta_PAYLOAD__INTERACTIVE_TEXT'],
  2545.                                     //         $userPhone,
  2546.                                     //         $location,
  2547.                                     //         $payload
  2548.                                     //     );
  2549.     
  2550.     
  2551.                                     //     $textLog = $payload['template_name'];*/
  2552.     
  2553.                                     //     $responseMessage = ["text" => $translator->trans('dialog.maps_first_part', [], "camprodon.messages", $lang).": *$placeName*. ".$translator->trans('dialog.maps_second_part', [], "camprodon.messages", $lang).": ".addslashes($placeUrl)];
  2554.                                     //     $options = array();
  2555.             
  2556.                                     //     $res = (object)$meta->sendMessage( 
  2557.                                     //         $_ENV['meta_PAYLOAD__TEXT'], 
  2558.                                     //         $userPhone, 
  2559.                                     //         $responseMessage, 
  2560.                                     //         $location, 
  2561.                                     //         $options
  2562.                                     //     );
  2563.     
  2564.                                     //     $textLog = $responseMessage['text'];
  2565.     
  2566.                                     // }
  2567.                                 }
  2568.                                 
  2569.                             }else if(strpos(mb_strtolower($result), "ninfo-") !== false){
  2570.                                 $sendSatisfaction true;
  2571.                                 $result $externalCalls->GPTGeneral($embeddingQuestion$location$langEntity);
  2572.                                 if(strpos($result'Error:') !== false || !$result){
  2573.                                     $result $translator->trans('dialog.no_info', [], "camprodon.messages"$lang);
  2574.                                 } 
  2575.                                 $assistantRes $result;
  2576.                                 $meta->setLog("[META] GPTGeneral Response"$utilities->ecrypt($result), $location$userPhoneCrypt);
  2577.                                 $responseMessage = ["text" => $result];
  2578.                                 $options = array();
  2579.     
  2580.                                 $res = (object)$meta->sendMessage
  2581.                                     $_ENV['meta_PAYLOAD__TEXT'], 
  2582.                                     $userPhone
  2583.                                     $responseMessage
  2584.                                     $location
  2585.                                     $options
  2586.                                 );
  2587.                                 $textLog $responseMessage['text'];
  2588.                             }else{
  2589.                                 if(strpos($result'Error:') !== false || !$result){
  2590.                                     $result $translator->trans('dialog.no_info', [], "camprodon.messages"$lang);
  2591.                                 }
  2592.                                 // $result = preg_replace('/\t/','\n',$result);
  2593.                                 $assistantRes $result;
  2594.                                 $responseMessage = ['text' => $result];
  2595.                                 $options = array();
  2596.     
  2597.                                 $res = (object)$meta->sendMessage
  2598.                                     $_ENV['meta_PAYLOAD__TEXT'], 
  2599.                                     $userPhone
  2600.                                     $responseMessage
  2601.                                     $location
  2602.                                     $options
  2603.                                 );
  2604.                                 $textLog $responseMessage['text'];
  2605.                             }
  2606.                             //Get embbeding response from layer GPT, save it to the conversation, and save it to DB
  2607.                             // if($embeddingQuestion == $text){ //Means it's not relative to context, so we store the response to the question instead of the question, to give us more context
  2608.                             //     
  2609.                             // }else{
  2610.                             //     array_push($conversationDecoded, array("assistant" => $embeddingQuestion));
  2611.                             //     $assistantRes = $result;
  2612.                             // }
  2613.                             array_push($conversationDecoded, array("assistant" => $assistantRes));
  2614.                             $conversation->setJson(json_encode($conversationDecoded));
  2615.                             $em->persist($conversation);
  2616.                             $em->flush();
  2617.                             $messageId "";
  2618.                             if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2619.         
  2620.                             $logWhatsapp = new LogWhatsapp();
  2621.                             $logWhatsapp->setMessageId($messageId);
  2622.                             $logWhatsapp->setPhone$userPhoneCrypt );
  2623.                             $logWhatsapp->setPrefix$prefix );
  2624.                             $logWhatsapp->setText$emoji->encode$textLog));
  2625.                             $logWhatsapp->setStatus"outbound" );
  2626.                             $logWhatsapp->setDateCreated$now );
  2627.                             $logWhatsapp->setTimestampProvider$timestamp );
  2628.                             $logWhatsapp->setUser$user );
  2629.                             $logWhatsapp->setLocation$location );
  2630.                             $logWhatsapp->setLang$user->getLang() );
  2631.                             $logWhatsapp->setConversationId($conversationId);
  2632.                             $logWhatsapp->setTemplate(null);
  2633.         
  2634.                             $em->persist($logWhatsapp);
  2635.                             $em->flush();
  2636.                             if($logQuestionUser){
  2637.                                 $logQuestionUser->setResponse($logWhatsapp);
  2638.                                 $em->persist($logQuestionUser);
  2639.                                 $em->flush();
  2640.                             }
  2641.                             usleep(500000);
  2642.                             if($sendSatisfaction){
  2643.                                 $type $_ENV['gs_PAYLOAD__QUICK_REPLY'];
  2644.                                 $responseMessage = [
  2645.                                     "body" => $translator->trans('dialog.util_question_1', [], "camprodon.messages"$lang),
  2646.                                     "buttons" => [
  2647.                                         [
  2648.                                             "postback_id" => "util_info_no",
  2649.                                             "text" => $translator->trans('dialog.util_1_btn_2', [], "camprodon.messages"$lang)
  2650.                                         ],
  2651.                                         [
  2652.                                             "postback_id" => "util_info_yes",
  2653.                                             "text" => $translator->trans('dialog.util_1_btn_1', [], "camprodon.messages"$lang)
  2654.                                         ]
  2655.                                         
  2656.                                     ]
  2657.                                 ];
  2658.                                 $options = array();
  2659.     
  2660.                                 $res = (object)$meta->sendMessage
  2661.                                     $type
  2662.                                     $userPhone
  2663.                                     $responseMessage
  2664.                                     $location
  2665.                                     $options
  2666.                                 );
  2667.                                 $textLog $responseMessage['body'];
  2668.                                 $messageId "";
  2669.                                 if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2670.             
  2671.                                 $logWhatsapp = new LogWhatsapp();
  2672.                                 $logWhatsapp->setMessageId($messageId);
  2673.                                 $logWhatsapp->setPhone$userPhoneCrypt );
  2674.                                 $logWhatsapp->setPrefix$prefix );
  2675.                                 $logWhatsapp->setText$emoji->encode$textLog));
  2676.                                 $logWhatsapp->setStatus"outbound" );
  2677.                                 $logWhatsapp->setDateCreated$now );
  2678.                                 $logWhatsapp->setTimestampProvider$timestamp );
  2679.                                 $logWhatsapp->setUser$user );
  2680.                                 $logWhatsapp->setLocation$location );
  2681.                                 $logWhatsapp->setLang$user->getLang() );
  2682.                                 $logWhatsapp->setConversationId($conversationId);
  2683.                                 $logWhatsapp->setTemplate(null);
  2684.             
  2685.                                 $em->persist($logWhatsapp);
  2686.                                 $em->flush();
  2687.                             }else{
  2688.                                 $this->sendStartOver($doctrine$translator$meta$user$location$lang);
  2689.                             }
  2690.         
  2691.                             die();
  2692.                         }
  2693.                     }
  2694.                 }
  2695.             }
  2696.         }
  2697.         die();
  2698.     }
  2699.     public function askGPT($text$location$langManagerRegistry $doctrine$meta$utilities){
  2700.         $locationHash escapeshellarg($location->getHash());
  2701.         
  2702.         // $text .= " e indica entre asteriscos: lugares y personas en la respuesta.";
  2703.         //$text = escapeshellarg($text);
  2704.         // $meta->setLog("[META] $text", $utilities->ecrypt(json_encode($text)), $location, $utilities->ecrypt("log"));
  2705.         $preEmbedding ExternalCalls::GPTPreEmbedding($text);
  2706.         $meta->setLog("[META] preEmbedding"$utilities->ecrypt(json_encode($preEmbedding)), $location$utilities->ecrypt("log"));
  2707.         $question $text;
  2708.         $questionContext "";
  2709.         if(strpos($preEmbedding"when-") !== false || strpos($preEmbedding"activity-when") !== false){
  2710.             $meta->setLog("[META] contextActivity when-"$utilities->ecrypt($question), $location$utilities->ecrypt("log"));
  2711.             $context ExternalCalls::getContextActivities($question$locationHash);
  2712.             // dd($context);
  2713.             $result ExternalCalls::GPTPostEmbeddingActivities($question$context$lang);
  2714.             $meta->setLog("[META] GPTPostEmbeddingActivity when-"$utilities->ecrypt(json_encode($result)), $location$utilities->ecrypt("log"));
  2715.         }else if(strpos($preEmbedding"activity-") !== false){
  2716.             $activitySplit explode("activity"$preEmbedding);
  2717.             try{
  2718.                 $computedDateSunday "";
  2719.                 $dateCode str_replace('-','',$activitySplit[1]);
  2720.                 if(str_contains(mb_strtolower($dateCode ), 'saturday')){
  2721.                     $pre explode"Saturday"$dateCode)[0];
  2722.                     $computedDateSunday date('d-m-Y',strtotime($pre.'Sunday'));
  2723.                 }
  2724.                 $computedDate date('d-m-Y',strtotime(str_replace('-'''$activitySplit[1])));
  2725.             }catch(Exception $e){
  2726.                 $context ExternalCalls::getContextActivities($question$locationHash);
  2727.                 $meta->setLog("[META] contextActivity"$utilities->ecrypt($question), $location$utilities->ecrypt("log"));
  2728.                 $result ExternalCalls::GPTPostEmbeddingActivities($question$context$lang);
  2729.                 $meta->setLog("[META] GPTPostEmbeddingActivity"$utilities->ecrypt(json_encode($result)), $location$utilities->ecrypt("log"));
  2730.             }
  2731.             $datetime = new \DateTime($computedDate, new \DateTimeZone('Europe/Madrid'));
  2732.             $dateName $datetime->format('l');
  2733.             $dayName '';
  2734.             // switch($dateName){
  2735.             //     case 'Monday':
  2736.             //         $dayName = "Lunes";
  2737.             //         break;
  2738.             //     case 'Tuesday':
  2739.             //         $dayName = "Martes";
  2740.             //         break;
  2741.             //     case 'Wednesday':
  2742.             //         $dayName = "Miércoles";
  2743.             //         break;
  2744.             //     case 'Thursday':
  2745.             //         $dayName = "Jueves";
  2746.             //         break;
  2747.             //     case 'Friday':
  2748.             //         $dayName = "Viernes";
  2749.             //         break;
  2750.             //     case 'Saturday':
  2751.             //         $dayName = "Sábado";
  2752.             //         break;
  2753.             //     case 'Sunday':
  2754.             //         $dayName = "Domingo";
  2755.             //         break;
  2756.             //     default: 
  2757.             //         $dayName = '';
  2758.             //         break;
  2759.             // }
  2760.             switch($dateName){
  2761.                 case 'Monday':
  2762.                     $dayName "Dilluns";
  2763.                     break;
  2764.                 case 'Tuesday':
  2765.                     $dayName "Dimarts";
  2766.                     break;
  2767.                 case 'Wednesday':
  2768.                     $dayName "Dimecres";
  2769.                     break;
  2770.                 case 'Thursday':
  2771.                     $dayName "Dijous";
  2772.                     break;
  2773.                 case 'Friday':
  2774.                     $dayName "Divendres";
  2775.                     break;
  2776.                 case 'Saturday':
  2777.                     $dayName "Dissabte";
  2778.                     break;
  2779.                 case 'Sunday':
  2780.                     $dayName "Diumenge";
  2781.                     break;
  2782.                 default: 
  2783.                     $dayName '';
  2784.                     break;
  2785.             }
  2786.             $question .= " " $computedDate " "$dayName;
  2787.             if($computedDateSunday){
  2788.                 $question .= " y " $computedDateSunday " Domingo";
  2789.             }
  2790.             $context ExternalCalls::getContextActivities($computedDateSunday $computedDateSunday $computedDate$locationHash);
  2791.             $meta->setLog("[META] contextActivity"$utilities->ecrypt($question), $location$utilities->ecrypt("log"));
  2792.             $result ExternalCalls::GPTPostEmbeddingActivitiesWithDate($question$context$lang);
  2793.             $meta->setLog("[META] GPTPostEmbeddingActivity"$utilities->ecrypt(json_encode($result)), $location$utilities->ecrypt("log"));
  2794.         }else{
  2795.             $questionContext $question;
  2796.             $context ExternalCalls::getContext($questionContext$locationHash);
  2797.             $meta->setLog("[META] context"$utilities->ecrypt($question), $location$utilities->ecrypt("log"));
  2798.             $result ExternalCalls::GPTPostEmbedding($question$context$lang);
  2799.             $meta->setLog("[META] GPTPostEmbedding"$utilities->ecrypt(json_encode($result)), $location$utilities->ecrypt("log"));
  2800.         }
  2801.         
  2802.         // Llamar al script de Python con la información como argumento
  2803.         // $command = "python3 ".dirname(__DIR__,2)."/python/search.py $text $locationHash";
  2804.         // dd($command);
  2805.         // python3 search.py "quiero más información de Natura de Camprodon" b4a682ff6eb47ee58d5b00e47bc72884e9922d3209df787d15e0f3df7d524621
  2806.         
  2807.         // exec($command, $output);
  2808.         // $result = implode('\n', $output);
  2809.         // dd();
  2810.         // if(strpos($result, "Error:")){
  2811.            // $result = "Se ha producido un error, intentelo de nuevo mas tarde.";
  2812.         // } else {
  2813.             /* $em = $doctrine->getManager();
  2814.             $activitiesRepository = $em->getRepository(ActivityI18n::class);
  2815.             $activities = $activitiesRepository->findAllMetaValues();
  2816.             foreach($activities as $activity) {
  2817.                 //dump($result . " --> " . $activity->getMetaValue());
  2818.                 $result = preg_replace_callback('/\b' . preg_quote($activity->getMetaValue(), '/') . '\b(?![^(){}\[\]]*[\])}])/', function($matches) {
  2819.                     return '*' . $matches[0] . '*';
  2820.                 }, $result);
  2821.             } */
  2822.         // }
  2823.         // dd(urlencode(preg_replace("/\t/",'\n',$result)));
  2824.         return str_replace("**","*",$result);
  2825.     }
  2826.     public function createQuickReply($doctrineTranslatorInterface $translator$meta$user$location$lang$text$conversationId$timestamp$translateKey){
  2827.         $em $doctrine->getManager();
  2828.         $buttonsRepo $em->getRepository(Buttons::class);
  2829.         $buttonsI18nRepo $em->getRepository(ButtonsI18n::class);
  2830.         $now = new \DateTime('now');
  2831.         $now->setTimezone(new \DateTimeZone('Europe/Madrid'));
  2832.         $btns = array();            
  2833.         $parentButton $buttonsI18nRepo->findOneByLocation("text"$text$location);
  2834.         $buttons $buttonsRepo->findBy(array("parent" => $parentButton->getButton(), "status" => 1));
  2835.         // $meta->setLog("[META] Buttons", $utilities->ecrypt(json_encode($buttons)), $location, $userPhoneCrypt);
  2836.         foreach($buttons as $btn){
  2837.             $btnI18n $buttonsI18nRepo->findOneBy(array("button" => $btn"lang" => $lang));
  2838.             array_push($btns, [
  2839.                 "postback_id" => $btn->getPostbackText(),
  2840.                 "text" => $btnI18n->getText()
  2841.             ]);
  2842.         }
  2843.         $responseMessage = [
  2844.             "body" => $translator->trans("dialog." $translateKey, [], "camprodon.messages"$lang),
  2845.             "buttons" => $btns
  2846.         ];
  2847.         // dd($responseMessage);
  2848.         $options = array();
  2849.         $res = (object)$meta->sendMessage
  2850.             $_ENV['gs_PAYLOAD__QUICK_REPLY'], 
  2851.             Utilities::dcrypt($user->getPhone()), 
  2852.             $responseMessage
  2853.             $location
  2854.             $options
  2855.         );
  2856.         $messageId "";
  2857.         if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2858.         $logWhatsapp = new LogWhatsapp();
  2859.         $logWhatsapp->setConversationId($conversationId);
  2860.         $logWhatsapp->setMessageId($messageId);
  2861.         $logWhatsapp->setPhone$user->getPhone() );
  2862.         $logWhatsapp->setPrefix$user->getPrefix() );
  2863.         $logWhatsapp->setTemplatenull );
  2864.         $logWhatsapp->setTextEmoji::encode$responseMessage["body"] ) );
  2865.         $logWhatsapp->setStatus"outbound" );
  2866.         $logWhatsapp->setDateCreated$now );
  2867.         $logWhatsapp->setTimestampProvider$timestamp );
  2868.         $logWhatsapp->setUser$user );
  2869.         $logWhatsapp->setLocation$location );
  2870.         $logWhatsapp->setLang$user->getLang() );
  2871.         $em->persist($logWhatsapp);
  2872.         $em->flush();
  2873.         die();
  2874.     }
  2875.     
  2876.     public function createCarousel($doctrine$translator$meta$user$category$location$lang$seeMore$template$meteo$translateBodyKey ""$random false){
  2877.         $em $doctrine->getManager();
  2878.         $activityRepo $em->getRepository(Activity::class);
  2879.         $activityI18nRepo $em->getRepository(ActivityI18n::class);
  2880.         $categoryI18nRepo $em->getRepository(CategoryI18n::class);
  2881.         $placesRepo $em->getRepository(Places::class);
  2882.         $now = new \DateTime('now');
  2883.         $now->setTimezone(new \DateTimeZone('Europe/Madrid'));
  2884.         $type $_ENV['meta_PAYLOAD__CAROUSEL'];
  2885.         $categoryUrl $categoryI18nRepo->findOneBy(array("category" => $category"lang" => $lang"metaKey" => "url"));
  2886.         $cards = array();
  2887.         if($random){
  2888.             $activities $activityRepo->findBy(array("category" => $category"location" => $location), array("sort" => "ASC")); //Limit of cards to be showed
  2889.             shuffle($activities);
  2890.             $activities array_slice($activities0$this->carouselLimit);
  2891.         }else{
  2892.             $activities $activityRepo->findBy(array("category" => $category"location" => $location), array("sort" => "ASC"), $this->carouselLimit); //Limit of cards to be showed
  2893.         }
  2894.         $activitiesAI18n = [];
  2895.         $placesTrackingData = [];
  2896.         $placesTracking false;
  2897.         foreach($activities as $key => $activity){
  2898.             $bodyParam "";
  2899.             $headerImg $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg";
  2900.             $buttonUrl "https://visitcamprodon.cat/benvinguts/";
  2901.             if(in_array($category->getId(), [1,2,3,4,5,6,7,8,14])){ //If it's not places
  2902.                 $aI18n $activityI18nRepo->findBy(array("activity" => $activity"lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
  2903.                 
  2904.                 foreach($aI18n as $activityData){
  2905.                     if($activityData->getMetaKey() == "name"){
  2906.                         $bodyParam $activityData->getMetaValue();
  2907.     
  2908.                         //Save activities aI18n info into an array for later use
  2909.                         $activitiesAI18n[] = $activityData;
  2910.     
  2911.                     }else if($activityData->getMetaKey() == "image"){
  2912.                         $headerImg $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
  2913.                     }else if($activityData->getMetaKey() == "url"){
  2914.                         $buttonUrl $activityData->getMetaValue();
  2915.                     }
  2916.                 }
  2917.             }else{
  2918.                 $place $placesRepo->findOneBy(array("activity" => $activity));
  2919.                 $bodyParam $place->getName();
  2920.                 $headerImg $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$place->getImageUrl();
  2921.                 $buttonUrl $place->getWeb() ? $place->getWeb() : $place->getMaps();
  2922.                 $placesTrackingData[$key] = ["name" => $place->getName(), "actId" => $activity->getId()];
  2923.                 $placesTracking true;
  2924.             }
  2925.             $paramsActivity = array(
  2926.                 "header" => array(
  2927.                     "type" => "image",
  2928.                     "url" => $headerImg
  2929.                 ),
  2930.                 "body" => array(
  2931.                     "parameters" => array(
  2932.                         array(
  2933.                             "type" => "text",
  2934.                             "text" => $bodyParam
  2935.                             )
  2936.                     )
  2937.                 ),
  2938.                 "buttons" => array(
  2939.                     array("type" => "quick_reply""postback_id" => base64_encode("name_".$activity->getId()."_".$meteo)),
  2940.                     array("type" => "url""postback_id" => base64_encode("location=".$location->getId()."&event=".$activity->getId()."&user=".$user->getId()."&type=activity"."&url=".base64_encode($buttonUrl)."&extra=".$bodyParam)),
  2941.                 )
  2942.             );
  2943.             array_push($cards
  2944.                 $paramsActivity
  2945.             );
  2946.         }
  2947.         if($seeMore){
  2948.             //See more
  2949.             $paramsActivity = array(
  2950.                 "header" => array(
  2951.                     "type" => "image",
  2952.                     "url" => $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg"
  2953.                 ),
  2954.                 "buttons" => array(
  2955.                     array("type" => "quick_reply""postback_id" => base64_encode("more_".$categoryUrl->getMetaValue()."_".$meteo)),
  2956.                     array("type" => "url""postback_id" => base64_encode("location=".$location->getId()."&event=".$category->getId()."&user=".$user->getId()."&type=category"."&url=".base64_encode($categoryUrl->getMetaValue())."&extra=".$category->getMetaKey())),
  2957.                 )
  2958.             );
  2959.     
  2960.             array_push($cards
  2961.                 $paramsActivity
  2962.             );
  2963.         }
  2964.         $payload = array(
  2965.             "template_name" => $template->getName(),
  2966.             "lang" => $this->templateLangCode[$lang],
  2967.             // "body" => array(
  2968.             //     array(
  2969.             //         "type" => "text",
  2970.             //         "text" => $translator->trans("dialog." . $translateBodyKey, [], "camprodon.messages", $lang)
  2971.             //     )
  2972.             // ),
  2973.             "cards" => $cards
  2974.             
  2975.         );
  2976.         $res = (object)$meta->sendTemplate(
  2977.             $type,
  2978.             Utilities::dcrypt($user->getPhone()),
  2979.             $location,
  2980.             $payload
  2981.         );
  2982.         $messageId "";
  2983.         if ( $res && $res->messages[0]->id$messageId $res->messages[0]->id;
  2984.         $logWhatsapp = new LogWhatsapp();
  2985.         $logWhatsapp->setMessageId($messageId);
  2986.         $logWhatsapp->setPhone$user->getPhone() );
  2987.         $logWhatsapp->setPrefix$user->getPrefix() );
  2988.         $logWhatsapp->setTextEmoji::encode$payload["template_name"] ." - ".$category->getMetaKey()));
  2989.         $logWhatsapp->setStatus"outbound" );
  2990.         $logWhatsapp->setDateCreated$now );
  2991.         $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  2992.         $logWhatsapp->setUser$user );
  2993.         $logWhatsapp->setLocation$location );
  2994.         $logWhatsapp->setLang$user->getLang() );
  2995.         $logWhatsapp->setConversationId(null);
  2996.         $logWhatsapp->setTemplate(null);
  2997.         $em->persist($logWhatsapp);
  2998.         $em->flush();
  2999.         
  3000.         if($placesTracking){
  3001.             foreach($placesTrackingData as $act){
  3002.                 $logTracking = new LogTracking();
  3003.                 $logTracking->setEvent($act["actId"]);
  3004.                 $logTracking->setDateCreated($now);
  3005.                 $logTracking->setType("activity_shown");
  3006.                 $logTracking->setUser($user);
  3007.                 $logTracking->setLocation($location);
  3008.                 $logTracking->setExtraInfo($act['name']);
  3009.                 $logTracking->setUrl(null);
  3010.     
  3011.                 $em->persist($logTracking);
  3012.             }
  3013.         }else{
  3014.             foreach($activitiesAI18n as $act){
  3015.                 $logTracking = new LogTracking();
  3016.                 $logTracking->setEvent($act->getActivity()->getId());
  3017.                 $logTracking->setDateCreated($now);
  3018.                 $logTracking->setType("activity_shown");
  3019.                 $logTracking->setUser($user);
  3020.                 $logTracking->setLocation($location);
  3021.                 $logTracking->setExtraInfo($act->getMetaValue());
  3022.                 $logTracking->setUrl(null);
  3023.     
  3024.                 $em->persist($logTracking);
  3025.             }
  3026.         }
  3027.         
  3028.         $em->flush();
  3029.         // die();
  3030.     }
  3031.     //OLD
  3032.     // public function createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, $translateBodyKey = "", $random = false){
  3033.     //     $em = $doctrine->getManager();
  3034.     //     $activityRepo = $em->getRepository(Activity::class);
  3035.     //     $activityI18nRepo = $em->getRepository(ActivityI18n::class);
  3036.     //     $categoryI18nRepo = $em->getRepository(CategoryI18n::class);
  3037.     //     $now = new \DateTime('now');
  3038.     //     $now->setTimezone(new \DateTimeZone('Europe/Madrid'));
  3039.     //     $type = $_ENV['meta_PAYLOAD__CAROUSEL'];
  3040.     //     $categoryUrl = $categoryI18nRepo->findOneBy(array("category" => $category, "lang" => $lang, "metaKey" => "url"));
  3041.     //     $cards = array();
  3042.     //     if($random){
  3043.     //         $activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC")); //Limit of cards to be showed
  3044.     //         shuffle($activities);
  3045.     //         $activities = array_slice($activities, 0, $this->carouselLimit);
  3046.     //     }else{
  3047.     //         $activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC"), $this->carouselLimit); //Limit of cards to be showed
  3048.     //     }
  3049.     //     $activitiesAI18n = [];
  3050.     //     foreach($activities as $activity){
  3051.     //         $aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
  3052.                         
  3053.     //         $bodyParam = "";
  3054.     //         $headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg";
  3055.     //         $buttonUrl = "https://visitcamprodon.cat/benvinguts/";
  3056.     //         foreach($aI18n as $activityData){
  3057.     //             if($activityData->getMetaKey() == "name"){
  3058.     //                 $bodyParam = $activityData->getMetaValue();
  3059.     //                 //Save activities aI18n info into an array for later use
  3060.     //                 $activitiesAI18n[] = $activityData;
  3061.     //             }else if($activityData->getMetaKey() == "image"){
  3062.     //                 $headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
  3063.     //             }else if($activityData->getMetaKey() == "url"){
  3064.     //                 $buttonUrl = $activityData->getMetaValue();
  3065.     //             }
  3066.     //         }
  3067.     //         $paramsActivity = array(
  3068.     //             "header" => array(
  3069.     //                 "type" => "image",
  3070.     //                 "url" => $headerImg
  3071.     //             ),
  3072.     //             "body" => array(
  3073.     //                 "parameters" => array(
  3074.     //                     array(
  3075.     //                         "type" => "text",
  3076.     //                         "text" => $bodyParam
  3077.     //                         )
  3078.     //                 )
  3079.     //             ),
  3080.     //             "buttons" => array(
  3081.     //                 array("type" => "quick_reply", "postback_id" => base64_encode("name_".$activity->getId()."_".$meteo)),
  3082.     //                 array("type" => "url", "postback_id" => base64_encode("location=".$location->getId()."&event=".$activity->getId()."&user=".$user->getId()."&type=activity"."&url=".base64_encode($buttonUrl)."&extra=".$bodyParam)),
  3083.     //             )
  3084.     //         );
  3085.     //         array_push($cards, 
  3086.     //             $paramsActivity
  3087.     //         );
  3088.     //     }
  3089.     //     if($seeMore){
  3090.     //         //See more
  3091.     //         $paramsActivity = array(
  3092.     //             "header" => array(
  3093.     //                 "type" => "image",
  3094.     //                 "url" => $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg"
  3095.     //             ),
  3096.     //             "buttons" => array(
  3097.     //                 array("type" => "quick_reply", "postback_id" => base64_encode("more_".$categoryUrl->getMetaValue()."_".$meteo)),
  3098.     //                 array("type" => "url", "postback_id" => base64_encode("location=".$location->getId()."&event=".$category->getId()."&user=".$user->getId()."&type=category"."&url=".base64_encode($categoryUrl->getMetaValue())."&extra=".$category->getMetaKey())),
  3099.     //             )
  3100.     //         );
  3101.     
  3102.     //         array_push($cards, 
  3103.     //             $paramsActivity
  3104.     //         );
  3105.     //     }
  3106.     //     $payload = array(
  3107.     //         "template_name" => $template->getName(),
  3108.     //         "lang" => $this->templateLangCode[$lang],
  3109.     //         // "body" => array(
  3110.     //         //     array(
  3111.     //         //         "type" => "text",
  3112.     //         //         "text" => $translator->trans("dialog." . $translateBodyKey, [], "camprodon.messages", $lang)
  3113.     //         //     )
  3114.     //         // ),
  3115.     //         "cards" => $cards
  3116.             
  3117.     //     );
  3118.     //     $res = (object)$meta->sendTemplate(
  3119.     //         $type,
  3120.     //         Utilities::dcrypt($user->getPhone()),
  3121.     //         $location,
  3122.     //         $payload
  3123.     //     );
  3124.     //     $messageId = "";
  3125.     //     if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
  3126.     //     $logWhatsapp = new LogWhatsapp();
  3127.     //     $logWhatsapp->setMessageId($messageId);
  3128.     //     $logWhatsapp->setPhone( $user->getPhone() );
  3129.     //     $logWhatsapp->setPrefix( $user->getPrefix() );
  3130.     //     $logWhatsapp->setText( Emoji::encode( $payload["template_name"] ." - ".$category->getMetaKey()));
  3131.     //     $logWhatsapp->setStatus( "outbound" );
  3132.     //     $logWhatsapp->setDateCreated( $now );
  3133.     //     $logWhatsapp->setTimestampProvider( $now->getTimestamp() );
  3134.     //     $logWhatsapp->setUser( $user );
  3135.     //     $logWhatsapp->setLocation( $location );
  3136.     //     $logWhatsapp->setLang( $user->getLang() );
  3137.     //     $logWhatsapp->setConversationId(null);
  3138.     //     $logWhatsapp->setTemplate(null);
  3139.     //     $em->persist($logWhatsapp);
  3140.     //     $em->flush();
  3141.         
  3142.     //     foreach($activitiesAI18n as $act){
  3143.     //         $logTracking = new LogTracking();
  3144.     //         $logTracking->setEvent($act->getActivity()->getId());
  3145.     //         $logTracking->setDateCreated($now);
  3146.     //         $logTracking->setType("activity_shown");
  3147.     //         $logTracking->setUser($user);
  3148.     //         $logTracking->setLocation($location);
  3149.     //         $logTracking->setExtraInfo($act->getMetaValue());
  3150.     //         $logTracking->setUrl(null);
  3151.     //         $em->persist($logTracking);
  3152.     //     }
  3153.     //     $em->flush();
  3154.     //     // die();
  3155.     // }
  3156.     public function sendStartOver($doctrine$translator$meta$user$location$lang){
  3157.         $em $doctrine->getManager();
  3158.         $buttonsRepo $em->getRepository(Buttons::class);
  3159.         $now = new \DateTime('now');
  3160.         $now->setTimezone(new \DateTimeZone('Europe/Madrid'));
  3161.         $meta->setLog("[META] Camprodon Start FLow AGAIN"Utilities::ecrypt("Starts FLOW AGAIN"), $location$user->getPhone());
  3162.         $options = array();
  3163.         $buttons $buttonsRepo->getTextButton($location0$lang);
  3164.         $btns0 = array();
  3165.         foreach($buttons as $btn0){
  3166.             if($btn0['postbackText'] != 'meteo_yes_start'){
  3167.                 array_push($btns0, [
  3168.                     "postback_id" => $btn0['postbackText'],
  3169.                     "text" => $btn0['text']
  3170.                 ]);
  3171.             }
  3172.         }
  3173.         $responseMessage = [
  3174.             "body" => $translator->trans('dialog.start_over_flow_welcome', [], "camprodon.messages"$lang),
  3175.             "buttons" => $btns0
  3176.         ];
  3177.         //Escull una d'aquestes opcions o escriu la teva paraula
  3178.         //Si no es boton -> pregunta normal
  3179.         $res = (object)$meta->sendMessage
  3180.             $_ENV['gs_PAYLOAD__QUICK_REPLY'], 
  3181.             Utilities::dcrypt($user->getPhone()), 
  3182.             $responseMessage
  3183.             $location
  3184.             $options
  3185.         );
  3186.         
  3187.         $messageId "";
  3188.         if ($res && $res->messages[0]->id$messageId $res->messages[0]->id;
  3189.         $logWhatsapp = new LogWhatsapp();
  3190.         $logWhatsapp->setConversationId(null);
  3191.         $logWhatsapp->setMessageId($messageId);
  3192.         $logWhatsapp->setPhone$user->getPhone() );
  3193.         $logWhatsapp->setPrefix$user->getPrefix() );
  3194.         $logWhatsapp->setTemplatenull );
  3195.         $logWhatsapp->setTextEmoji::encode$responseMessage["body"] ) );
  3196.         $logWhatsapp->setStatus"outbound" );
  3197.         $logWhatsapp->setDateCreated$now );
  3198.         $logWhatsapp->setTimestampProvider$now->getTimestamp() );
  3199.         $logWhatsapp->setUser$user );
  3200.         $logWhatsapp->setLocation$location );
  3201.         $logWhatsapp->setLang$user->getLang() );
  3202.         $em->persist($logWhatsapp);
  3203.         $em->flush();
  3204.     }
  3205.     /**
  3206.      * @Route("/testtest", name="testtest", methods={"GET","POST"})
  3207.      * 
  3208.      */
  3209.     public function testtest(Request $requestManagerRegistry $doctrineExternalCalls $externalCalls){
  3210.         $em $doctrine->getManager();
  3211.         $locationsRepository $em->getRepository(Locations::class);
  3212.         $location $locationsRepository->findOneBy(array("name" => $this->location));
  3213.         $text "que carnicerias hay";
  3214.         $result $externalCalls->GPTCheckCategory($text);
  3215.         dd($result);
  3216.         if ( isset($_GET['question']) && !empty($_GET['question']) ) {
  3217.             $result $this->askGPT($_GET['question'], $location$doctrine);
  3218.         }
  3219.         echo $result;
  3220.         die();
  3221.     }
  3222.     
  3223.     /**
  3224.      * @Route("/testquestion", name="testquestion", methods={"GET","POST"})
  3225.      * 
  3226.      */
  3227.     public function testQuestion(Request $requestManagerRegistry $doctrine){
  3228.         $em $doctrine->getManager();
  3229.         $locationsRepository $em->getRepository(Locations::class);
  3230.         $location $locationsRepository->findOneBy(array("name" => $this->location));
  3231.         $result "Question empty";
  3232.         if ( isset($_GET['question']) && !empty($_GET['question']) ) {
  3233.             $result $this->askGPT($_GET['question'], $location$doctrine);
  3234.         }
  3235.         echo $result;
  3236.         die();
  3237.     }
  3238.     
  3239.     /**
  3240.      * @Route("/update/places", name="updtae_places", methods={"GET"})
  3241.      * 
  3242.      */
  3243.     // public function updatePlaces(Request $request, ManagerRegistry $doctrine, ExternalCalls $externalCalls){
  3244.     //     $em = $doctrine->getManager();
  3245.     //     $locationsRepository = $em->getRepository(Locations::class);
  3246.     //     $categoryRepo = $em->getRepository(Category::class);
  3247.     //     $activityRepo = $em->getRepository(Activity::class);
  3248.     //     $activityI18nRepo = $em->getRepository(ActivityI18n::class);
  3249.     //     $location = $locationsRepository->findOneBy(array("name" => $this->location));
  3250.     //     $catName = "hotels";
  3251.     //     $seeMore = false;
  3252.     //     $cats = ['hotels'];
  3253.     //     foreach($cats as $catego){
  3254.     //         $category = $categoryRepo->findOneBy(array("metaKey" => $catego));
  3255.     
  3256.     //         $activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC")); //Limit of cards to be showed
  3257.     
  3258.     //         $places = array();
  3259.     
  3260.     //         //How many places
  3261.     //         $placesCount = ($catName == 'campings' ? 2 : 4);
  3262.     
  3263.     //         // shuffle($activities);
  3264.     //         // $activities = array_slice($activities, 0, $placesCount);
  3265.     
  3266.     //         foreach($activities as $activity){
  3267.     //             $aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
  3268.     //             $place = array();
  3269.     //             $hasMaps = false;
  3270.     //             $hasPlace = false;
  3271.     
  3272.     //             foreach($aI18n as $activityData){
  3273.     
  3274.     //                 // if($activityData->getMetaKey() == "placeApi"){
  3275.     //                 //     $hasPlace = true;
  3276.     //                 //     $place = json_decode($activityData->getMetaValue());
  3277.     //                 //     if(is_array($place)){
  3278.     //                 //         array_push($places, $place[0]);
  3279.     //                 //     }
  3280.     //                 // }
  3281.     
  3282.     //                 if($activityData->getMetaKey() == "name"){
  3283.     //                     $place = $externalCalls->googleMapsApi($activityData->getMetaValue(), $location);
  3284.     //                     // dd($place);
  3285.     //                     if(is_array($place)){
  3286.     //                         $place[0]["photo_id"] = $externalCalls->googleMapsApiImages($place[0]["photo_id"]);
  3287.     //                         // dd($place);
  3288.     //                         array_push($places, $place[0]);
  3289.     //                     }
  3290.     //                 }
  3291.     
  3292.     //                 if($activityData->getMetaKey() == "maps"){
  3293.     //                     $hasMaps = true;
  3294.     //                 }
  3295.     //             }
  3296.     
  3297.     //             if(!$hasMaps && is_array($place) && count($place) > 0){
  3298.     //                 $aI18nNew = new ActivityI18n();
  3299.     //                 $aI18nNew->setMetaKey("maps");
  3300.     //                 $aI18nNew->setMetaValue($place[0]['url']);
  3301.     //                 $aI18nNew->setLang('ca');
  3302.     //                 $aI18nNew->setActivity($activity);
  3303.     
  3304.     //                 $em->persist($aI18nNew);
  3305.     //                 $em->flush();
  3306.     //             }
  3307.     
  3308.     //             if(!$hasPlace && is_array($place) && count($place) > 0){
  3309.     //                 $aI18nNew = new ActivityI18n();
  3310.     //                 $aI18nNew->setMetaKey("placeApi");
  3311.     //                 $aI18nNew->setMetaValue(json_encode($place[0]));
  3312.     //                 $aI18nNew->setLang('ca');
  3313.     //                 $aI18nNew->setActivity($activity);
  3314.     
  3315.     //                 $em->persist($aI18nNew);
  3316.     //                 $em->flush();
  3317.     //             }
  3318.     //         }
  3319.     //     }
  3320.     //     dump($places);
  3321.     //     die();
  3322.     // }
  3323. }