<?php
namespace App\Controller;
use App\Entity\Activity;
use App\Entity\ActivityI18n;
use App\Entity\Buttons;
use App\Entity\ButtonsI18n;
use App\Entity\LangLocation;
use App\Entity\Category;
use App\Entity\CategoryI18n;
use App\Entity\LocationPhone;
use App\Entity\Locations;
use App\Entity\LogWhatsapp;
use App\Entity\Meteo;
use App\Entity\TemplateWhatsapp;
use App\Entity\User;
use App\Entity\UserLocation;
use App\Entity\LogUser;
use App\Entity\Countries;
use App\Entity\Lang;
use App\Entity\LogConversation;
use App\Entity\LogQuestionUser;
use App\Entity\LogTracking;
use App\Entity\Places;
use App\Entity\PollQuestion;
use App\Entity\PollResponse;
use App\Service\Utilities;
use App\Service\Meta;
use App\Service\Emoji;
use App\Service\ExternalCalls;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\Persistence\ManagerRegistry;
use Exception;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Contracts\Translation\TranslatorInterface;
class CamprodonController extends AbstractController
{
private $location;
private $locationName;
private $carouselLimit;
private $limitTimeContext;
private $templateLangCode;
public function __construct(){
$this->location = "camprodon";
$this->locationName = "Camprodon Turisme";
$this->carouselLimit = 4;
$this->templateLangCode = array(
"es" => "es_ES",
"ca" => "ca",
"fr" => "fr",
"en" => "en"
);
$this->limitTimeContext = 10;
}
/**
* @Route("/camprodon/{lang}/", name="camprodon_home_lang", methods={"GET"})
* @Route("/camprodon", name="camprodon_home", methods={"GET"})
*
*/
public function camprodonHomeLang(Request $request, Utilities $utilities, ManagerRegistry $doctrine, SessionInterface $session, TranslatorInterface $translator){
//dd($utilities->ecrypt("34636622029"));
//dd($utilities->dcrypt("ogUakiDUr2AxuXw="));
/* Debug session
$session->remove('logUser');
$session->remove('user');
$session->remove('templateSended');
*/
//$result = $this->askGPT("quiero más información de Natura de Camprodon", "b4a682ff6eb47ee58d5b00e47bc72884e9922d3209df787d15e0f3df7d524621", $doctrine);
$session->set('location', $this->location);
/* $hash = $request->get('hash');
if ( !$hash ) {
$hash = $session->get('logUser');
} */
$logUserId = ( $session->get('logUser') ) ? $session->get('logUser') : "";
$em = $doctrine->getManager();
$locationsRepository = $em->getRepository(Locations::class);
$pollQuestionRepository = $em->getRepository(PollQuestion::class);
$pollResponseRepository = $em->getRepository(PollResponse::class);
$langLocationsRepository = $em->getRepository(LangLocation::class);
$userRepository = $em->getRepository(User::class);
// Get domain
$domain = "http" . ($_SERVER['HTTPS'] ? 's' : '') . "://" . $_SERVER['HTTP_HOST'];
// ---
// Get Location
$location = $locationsRepository->findOneBy(array("name" => $this->location));
// ---
// Detect language
$langDefault = "";
$prefixDefault = "";
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
$langDetected = $lang;
if ( $request->get('lang') && !empty($request->get('lang')) ) {
$lang = $request->get('lang');
}
$langs = $langLocationsRepository->getLangs($location->getId());
if ( $lang == "gl" || $lang == "eu" ) $lang = "es";
$langFound = false;
foreach($langs as $l) {
if ( $l['default'] == 1 ) {
$langDefault = $l['lang'];
$prefixDefault = $l['prefix'];
}
if ( $l['lang'] == $lang ) {
$lang = $l['lang'];
$prefix = $l['prefix'];
$langFound = true;
break;
}
}
if ( !$langFound ) {
$lang = $langDefault;
$prefix = $prefixDefault;
}
if ( $request->get('lang') == "" ) {
$fulluri = explode("?", $_SERVER["REQUEST_URI"]);
$redirect = $fulluri[0] . "/" . $lang . "/";
/* if ( ( count($fulluri) > 1 ) && ( !empty($fulluri[1])) ) {
$redirect .= "?" . $fulluri[1];
} */
//dd($redirect);
return $this->redirect($redirect);
}
// ---
// Get countries
$countries = $em->getRepository(Countries::class)->getCountries($lang);
// ---
// Find hash
//$logUser = $em->getRepository(LogUser::class)->findOneBy(array("hash" => $hash ));
if ($logUserId) {
$logUser = $em->getRepository(LogUser::class)->find($logUserId);
if ($logUser) {
if ( !$logUser->getUser() && $session->get('user') ) {
$userFound = $userRepository->find($session->get('user'));
$logUser->setUser($userFound);
$em->persist($logUser);
$em->flush();
$logUserId = $logUser->getId();
}
}
}
// $hash = $session->get('logUser');
// ---
// Template sended
$templateSended = ( $session->get('templateSended') ) ? "templateSended" : "";
// ---
//Go to Form passing the logUser id to update later on when user gives phone number
//TODO - Carregar logo depenent del projecte
$args = array(
"domain" => $domain,
"baseUrl" => $this->getParameter("app.base_url"),
"logUser" => $logUserId,
"user" => $session->get('user'),
"lang" => $lang,
"langDetected" => $langDetected,
"countries" => $countries,
"prefix" => $prefix,
"langs" => $langs,
"location" => $this->location,
"locationName" => $this->locationName,
"templateSended" => $templateSended
);
//dd($args);
return $this->render('form_flux/form.html.twig', $args);
}
// /**
// * @Route("/guestassistant/webhook/facebook/whatsapp", name="guestassistant_webhook_whatsapp", methods={"GET","POST"})
// *
// */
public function main(Request $request, Utilities $utilities, Meta $meta, Emoji $emoji, ManagerRegistry $doctrine, TranslatorInterface $translator, ExternalCalls $externalCalls, SessionInterface $session){
// die();
/**
* ?Revisar si el prefix ve en algun a peticio, sino es igual ja que es un camp que nomes fem servir nosaltres per ordenar
* ?Ifs per idioma o alguna manera millor?
* ?Log whatsapp agafar eventos de send, delivered...
*/
$em = $doctrine->getManager();
$locationsRepository = $em->getRepository(Locations::class);
$logWhatsappRepository = $em->getRepository(LogWhatsapp::class);
$logConversationRepository = $em->getRepository(LogConversation::class);
$userRepository = $em->getRepository(User::class);
$userLocationRepository = $em->getRepository(UserLocation::class);
$locationsPhoneRepo = $em->getRepository(LocationPhone::class);
$buttonsRepo = $em->getRepository(Buttons::class);
$buttonsI18nRepo = $em->getRepository(ButtonsI18n::class);
$activityRepo = $em->getRepository(Activity::class);
$activityI18nRepo = $em->getRepository(ActivityI18n::class);
$categoryRepo = $em->getRepository(Category::class);
$categoryI18nRepo = $em->getRepository(CategoryI18n::class);
$meteoRepo = $em->getRepository(Meteo::class);
$templateRepo = $em->getRepository(TemplateWhatsapp::class);
$langRepo = $em->getRepository(Lang::class);
$pollQuestionRepository = $em->getRepository(PollQuestion::class);
$pollResponseRepository = $em->getRepository(PollResponse::class);
$logQuestionUserRepository = $em->getRepository(LogQuestionUser::class);
$placesRepo = $em->getRepository(Places::class);
$location = $locationsRepository->findOneBy(array("name" => $this->location));
$now = new \DateTime('now');
$now->setTimezone(new \DateTimeZone('Europe/Madrid'));
$postValues = json_decode($request->getContent());
// $meta->setLog("[META] ENTRA", $utilities->ecrypt(json_encode($postValues)), $location, $utilities->ecrypt('602354321'));
if($postValues){
$metaResponse = $postValues->entry[0]->changes[0];
if(property_exists($metaResponse->value, "statuses")){
$status = $metaResponse->value->statuses[0]->status;
$timestamp = $metaResponse->value->statuses[0]->timestamp;
$messageId = $metaResponse->value->statuses[0]->id;
$phone = $metaResponse->value->statuses[0]->recipient_id;
$conversationId = null;
// $meta->setLog("[META] - Status update", $utilities->ecrypt(json_encode($metaResponse->value)), $location, $utilities->ecrypt($phone));
// $conversationId = $metaResponse->value->statuses->id;
$user = $userRepository->findOneBy(array("phone" => $utilities->ecrypt($phone)));
if($status == "sent"){
$conversationId = $metaResponse->value->statuses[0]->conversation->id;
$outbounds = $logWhatsappRepository->findBy(array("phone" => $utilities->ecrypt($phone), "conversationId" => null, "location" => $location), array("dateCreated" => "DESC"));
foreach( $outbounds as $o){
$o->setConversationId($conversationId);
$em->persist($o);
}
$em->flush();
}else{
$lwr = $logWhatsappRepository->findOneBy(array("messageId"=> $messageId), array("dateCreated" => "DESC"));
if($lwr) $conversationId = $lwr->getConversationId();
}
//STATUS UPDATE
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId( $messageId );
$logWhatsapp->setPhone( $utilities->ecrypt($phone) );
$logWhatsapp->setPrefix( $user->getPrefix() );
$logWhatsapp->setText(null );
$logWhatsapp->setStatus( $status );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$em->persist($logWhatsapp);
$em->flush();
die();
}else{
$type = $metaResponse->value->messages[0]->type;
$userPhone = $metaResponse->value->messages[0]->from;
$userPhoneCrypt = $utilities->ecrypt($userPhone);
$contactName = $metaResponse->value->contacts[0]->profile->name;
$meta->setLog("[META] Camprodon post info", $utilities->ecrypt(json_encode($metaResponse)), $location, $userPhoneCrypt);
$timestamp = $metaResponse->value->messages[0]->timestamp;
$text = "";
$postbackId = "";
$responseForm = array();
if($type == "text") $text = $metaResponse->value->messages[0]->text->body;
if($type == $_ENV['meta_PAYLOAD__BUTTON']) {
$text = $metaResponse->value->messages[0]->button->text;
$postbackId = $metaResponse->value->messages[0]->button->payload;
}
$catalogId = '';
$productsCart = array();
if($type == "order"){
$catalogId = $metaResponse->value->messages[0]->order->catalog_id;
$productsCart = $metaResponse->value->messages[0]->order->product_items;
}
$interactiveType = "";
if($type == "interactive") {
$interactiveType = $metaResponse->value->messages[0]->interactive->type;
if($interactiveType == $_ENV['meta_PAYLOAD__LIST_REPLY']){
$text = $metaResponse->value->messages[0]->interactive->list_reply->title;
$postbackId = $metaResponse->value->messages[0]->interactive->list_reply->id;
}else if($interactiveType == $_ENV['meta_PAYLOAD__BUTTON_REPLY']){
$text = $metaResponse->value->messages[0]->interactive->button_reply->title;
$postbackId = $metaResponse->value->messages[0]->interactive->button_reply->id;
}else if($interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
$responseForm = json_decode($metaResponse->value->messages[0]->interactive->nfm_reply->response_json);
}
}
$meta->setLog("[META] - Camprodon TEXT", $utilities->ecrypt($text), $location, $utilities->ecrypt($userPhone));
//Find User
$user = $userRepository->findOneBy(array("phone" => $userPhoneCrypt));
$conversationId = null;
//Create user if it doesn't exist
if(!$user){
$user = new User();
$user->setPhone($userPhoneCrypt);
$user->setPrefix( $utilities->ecrypt(34) );
$user->setName($utilities->ecrypt($contactName));
$user->setHash(bin2hex(random_bytes(16)));
$user->setTermsPolicy(0);
$user->setDateCreated($now);
$lang = $externalCalls->detectLang($text);
$meta->setLog("[META] Camprodon - Create new user - Lang detected", $utilities->ecrypt($lang), $location, $userPhoneCrypt);
$user->setLang($lang);
$user->setRegisteredLocation($location);
$em->persist($user);
$em->flush();
$meta->setLog("[META] Camprodon - Create new user", $utilities->ecrypt("ID: ".$user->getId()), $location, $userPhoneCrypt);
}else if(!$user->getName()){
$user->setName($utilities->ecrypt($contactName));
$meta->setLog("[META] - Update username", $utilities->ecrypt("ID: ".$user->getId()), $location, $userPhoneCrypt);
$em->persist($user);
$em->flush();
}
if($user->getStatus() == 0){ //If the user has unsuscribed
$meta->setLog("[META] - User unsuscribed", $utilities->ecrypt("User is unsuscribed"), $location, $userPhoneCrypt);
die();
}
$lang = $user->getLang();
$langEntity = $langRepo->findOneBy(array("lang" => $lang));
$prefix = $user->getPrefix();
$currentLocations = $userLocationRepository->findBy(array("user" => $user),array("dateCreated" => "DESC"));
$currentLocation = null;
//TODO - Potser tornar a crear un registre si ha passat un temps desde l'ultima user_location
//If first time or last location wasn't this location, create a new UserLocation
if(!$currentLocations || ($currentLocations && $currentLocations[0]->getLocation()->getName() != $this->location)){
$userLocation = new UserLocation();
$userLocation->setLocation($location);
$userLocation->setUser($user);
$userLocation->setDateCreated($now);
$em->persist($userLocation);
$em->flush();
$currentLocation = $userLocation;
$meta->setLog("[META] Camprodon - Create User Location", $utilities->ecrypt($userPhone." - ".$location->getName()), $location, $utilities->ecrypt($userPhone));
}else if(($currentLocations && $currentLocations[0]->getLocation()->getName() == $this->location)){
$currentLocation = $currentLocations[0];
}
//INBOUND
$isQuestion = false;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId( $metaResponse->value->messages[0]->id );
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
if($interactiveType == $_ENV['gs_PAYLOAD__BUTTON_REPLY'] || $type == $_ENV['meta_PAYLOAD__BUTTON'] || $interactiveType == $_ENV['gs_PAYLOAD__LIST_REPLY']){
$postbackIdAux = $postbackId;
if(base64_decode($postbackId, true)){
$postbackIdAux = strpos(base64_decode($postbackId), "_") !== false ? base64_decode($postbackId) : $postbackId;
}
$logWhatsapp->setText( $emoji->encode( ($text ." - {". $postbackIdAux. "}") ) );
}else if($interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
$logWhatsapp->setText( $emoji->encode( json_encode($responseForm) ) );
}else{
$logWhatsapp->setText( $emoji->encode( $text ) );
$isQuestion = true;
}
$logWhatsapp->setStatus( "inbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$em->persist($logWhatsapp);
$em->flush();
if($isQuestion){
$logQuestionUser = new LogQuestionUser();
$logQuestionUser->setLocation($location);
$logQuestionUser->setDateCreated($now);
$logQuestionUser->setQuestion($logWhatsapp);
$logQuestionUser->setUser($user);
$em->persist($logQuestionUser);
$em->flush();
}
//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
if($type == $_ENV['meta_PAYLOAD__BUTTON'] || $interactiveType == $_ENV['meta_PAYLOAD__LIST_REPLY'] || $interactiveType == $_ENV['meta_PAYLOAD__BUTTON_REPLY'] || $interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
$meta->setLog("[META] Interactive response", $utilities->ecrypt("Fluxe botons"), $location, $userPhoneCrypt);
if($interactiveType == $_ENV['meta_PAYLOAD__BUTTON_REPLY'] || $type == $_ENV['meta_PAYLOAD__BUTTON'] || $interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
/*
* Postback id of the button pressed by the user
*/
//STEP - 0: Response
if($postbackId == "recomendation"){
$buttons1 = $buttonsRepo->getTextButton($location, 1, $lang); //STEP - 1 : What to do & What to visit & Others
$btns1 = array();
foreach($buttons1 as $btn1){
array_push($btns1, [
"postback_id" => $btn1['postbackText'],
"text" => $btn1['text']
]);
}
$responseMessage = [
"body" => $translator->trans('dialog.step_1_manual_flow', [], "camprodon.messages", $lang),
"buttons" => $btns1
];
// dd($responseMessage);
//$translator->trans('dialog.start_manual_flow_buttons.button_1', [], "camprodon.messages", $lang)
//Escull una d'aquestes opcions o escriu la teva paraula
//Si no es boton -> pregunta normal
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['gs_PAYLOAD__QUICK_REPLY'],
$userPhone,
$responseMessage,
$location,
$options
);
// dd($res);
$meta->setLog("[META] Camprodon response", $utilities->ecrypt(json_encode($res)), $location, $userPhoneCrypt);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( $emoji->encode( $responseMessage["body"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
die();
}else if($postbackId == "free_ask"){
$responseMessage = ["text" => $translator->trans('dialog.free_ask_start', [], "camprodon.messages", $lang)];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $user->getPrefix() );
$logWhatsapp->setText( $emoji->encode( $responseMessage["text"]));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
$logConversation = $logConversationRepository->findOneBy(array("user" => $user->getId()));
if($logConversation){
$em->remove($logConversation);
$em->flush();
}
die();
}
//STEP - 1: Response
if($postbackId == "visit"){
$this->createQuickReply($doctrine, $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, "step_2_manual_flow_visit");
die();
}else if($postbackId == "do"){
$this->createQuickReply($doctrine, $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, "step_2_manual_flow_do");
die();
}else if($postbackId == "other"){
$this->createQuickReply($doctrine, $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, "step_2_manual_flow_other");
die();
}
//STEP - 2: Response(VISIT)
if($postbackId == "essential"){
$category = $categoryRepo->find(7);
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$meteo = 'n'; //y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_essentials");
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else if($postbackId == "guided_tours"){
$category = $categoryRepo->find(8);
$template = $templateRepo->findOneBy(array("slug" => "carousel_four", "lang" => $langEntity, "location" => $location)); //Template with 4 carousels
$seeMore = false;
$meteo = 'n'; //y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_guided_visits");
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else if($postbackId == "nature_sports"){
$this->createQuickReply($doctrine, $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, "step_3_manual_flow_nature_sports");
die();
}
// STEP - 2: Response(DO)
if($postbackId == "cultural_activities"){
$category = $categoryRepo->find(15);
$template = $templateRepo->findOneBy(array("slug" => "carousel_calendar", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$type = $_ENV['meta_PAYLOAD__CAROUSEL'];
$categoryUrl = $categoryI18nRepo->findOneBy(array("category" => $category, "lang" => $lang, "metaKey" => "url"));
$activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC"), $this->carouselLimit); //Limit of cards to be showed
$cards = array();
foreach($activities as $activity){
$aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
$bodyParam1 = "";
$bodyParam2 = "";
$headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg";
$buttonUrl = "https://ripollesturisme.cat/wp-content/uploads/2021/12/Web-Folleto-Camprodon-Cat-Cas.pdf";
foreach($aI18n as $activityData){
if($activityData->getMetaKey() == "name"){
$bodyParam1 = addslashes($activityData->getMetaValue());
}else if($activityData->getMetaKey() == "image"){
// $headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
// $headerImg = $activityData->getMetaValue();
}else if($activityData->getMetaKey() == "url"){
$buttonUrl = $activityData->getMetaValue();
}else if($activityData->getMetaKey() == "start_date"){
$bodyParam2 = $activityData->getMetaValue();
}
}
$paramsActivity = array(
"header" => array(
"type" => "image",
"url" => $headerImg //TODO - Substituir per imatge
),
"body" => array(
"parameters" => array(
array(
"type" => "text",
"text" => $bodyParam1
),
array(
"type" => "text",
"text" => $bodyParam2
)
)
),
"buttons" => array(
array("type" => "quick_reply", "postback_id" => base64_encode("name_".$activity->getId()."_".$meteo))
)
);
array_push($cards,
$paramsActivity
);
}
if($seeMore){
//See more
$paramsActivity = array(
"header" => array(
"type" => "image",
"url" => $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg"
),
"buttons" => array(
array("type" => "quick_reply", "postback_id" => base64_encode("more_".$categoryUrl->getMetaValue()."_".$meteo)),
)
);
array_push($cards,
$paramsActivity
);
}
$payload = array(
"template_name" => $template->getName(),
"lang" => $this->templateLangCode[$lang],
// "body" => array(
// array(
// "type" => "text",
// "text" => $translator->trans("dialog.carousel_body_cultural_activities", [], "camprodon.messages", $lang)
// )
// ),
"cards" => $cards
);
$meta->setLog("[META] Cultural payload", $utilities->ecrypt(json_encode($payload)), $location, $userPhoneCrypt);
$res = (object)$meta->sendTemplate(
$type,
Utilities::dcrypt($user->getPhone()),
$location,
$payload
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $user->getPhone() );
$logWhatsapp->setPrefix( $user->getPrefix() );
$logWhatsapp->setText( Emoji::encode( $payload["template_name"] ." - ".$category->getMetaKey()));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else if($postbackId == "sport_activities"){
$this->createQuickReply($doctrine, $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, "step_3_manual_flow_sport_activities");
die();
}
//STEP - 2: Response(OTHER)
if($postbackId == "sleep"){
$this->createQuickReply($doctrine, $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, "step_3_manual_flow_sleep");
die();
}else if($postbackId == "eat"){
$this->createQuickReply($doctrine, $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, "step_3_manual_flow_eat");
die();
}else if($postbackId == "pool"){
die();
}
//STEP - 3: Response(ROUTES)
if($postbackId == "mountain_routes"){
$this->createQuickReply($doctrine, $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, "step_4_manual_flow_mountain_routes");
die();
}else if($postbackId == "mountain_activities"){
$category = $categoryRepo->find(5);
$template = $templateRepo->findOneBy(array("slug" => "carousel_three", "lang" => $langEntity, "location" => $location)); //Template with 3 carousels
$seeMore = false;
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_mountain_activities", true);
die();
}
//STEP - 3: Response(SPORT ACTIVITIES)
if($postbackId == "ski"){
$category = $categoryRepo->find(3);
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_ski");
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else if($postbackId == "horses"){
$category = $categoryRepo->find(4);
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC"), $this->carouselLimit);
// dd($activities);
if(count($activities) > 1){
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_horses");
}else{
$activity = $activities[0];
$bodyParam = "";
$headerImg = "https://whatsapp.tridenia.com/camprodon/lluna.jpg";
$buttonUrl = "https://ripollesturisme.cat/wp-content/uploads/2021/12/Web-Folleto-Camprodon-Cat-Cas.pdf";
$aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
foreach($aI18n as $activityData){
if($activityData->getMetaKey() == "name"){
$bodyParam = $activityData->getMetaValue();
}else if($activityData->getMetaKey() == "image"){
$headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
}else if($activityData->getMetaKey() == "url"){
$buttonUrl = $activityData->getMetaValue();
}
}
$now = new \DateTime('now');
$now->setTimezone(new \DateTimeZone('Europe/Madrid'));
// $meta->setLog("[META] Buttons", $utilities->ecrypt(json_encode($buttons)), $location, $userPhoneCrypt);
$responseMessage = [
"header" => array(
"type" => "image",
"text" => $headerImg),
"body" => $translator->trans('dialog.horses_message', [], "camprodon.messages", $lang),
"buttons" => array(
[
"postback_id" => base64_encode('name_'.$activity->getId().'_'.$meteo),
"text" => $translator->trans('dialog.more_info', [], "camprodon.messages", $lang)
],
[
"postback_id" => base64_encode("more_".$buttonUrl."_".$meteo),
"text" => $translator->trans('dialog.web', [], "camprodon.messages", $lang)
]
)
];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['gs_PAYLOAD__QUICK_REPLY'],
$utilities->dcrypt($user->getPhone()),
$responseMessage,
$location,
$options
);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $user->getPhone() );
$logWhatsapp->setPrefix( $user->getPrefix() );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( $emoji->encode( $responseMessage["body"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
sleep(1);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
}
die();
}else if($postbackId == "golf"){
$category = $categoryRepo->find(6);
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC"), $this->carouselLimit);
// dd($activities);
if(count($activities) > 1){
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_golf");
}else{
$activity = $activities[0];
$bodyParam = "";
$headerImg = "https://whatsapp.tridenia.com/camprodon/lluna.jpg";
$buttonUrl = "https://ripollesturisme.cat/wp-content/uploads/2021/12/Web-Folleto-Camprodon-Cat-Cas.pdf";
$aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
$activityAI18n = "";
foreach($aI18n as $activityData){
if($activityData->getMetaKey() == "name"){
$bodyParam = $activityData->getMetaValue();
$activityAI18n = $activityData;
}else if($activityData->getMetaKey() == "image"){
$headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
}else if($activityData->getMetaKey() == "url"){
$buttonUrl = $activityData->getMetaValue();
}
}
$now = new \DateTime('now');
$now->setTimezone(new \DateTimeZone('Europe/Madrid'));
// $meta->setLog("[META] Buttons", $utilities->ecrypt(json_encode($buttons)), $location, $userPhoneCrypt);
$responseMessage = [
"header" => array(
"type" => "image",
"text" => $headerImg),
"body" => $translator->trans('dialog.golf_message', [], "camprodon.messages", $lang),
"buttons" => array(
[
"postback_id" => base64_encode('name_'.$activity->getId().'_'.$meteo),
"text" => $translator->trans('dialog.more_info', [], "camprodon.messages", $lang)
],
[
"postback_id" => base64_encode("more_".$buttonUrl."_".$meteo),
"text" => $translator->trans('dialog.web', [], "camprodon.messages", $lang)
]
)
];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['gs_PAYLOAD__QUICK_REPLY'],
$utilities->dcrypt($user->getPhone()),
$responseMessage,
$location,
$options
);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $user->getPhone() );
$logWhatsapp->setPrefix( $user->getPrefix() );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( $emoji->encode( $responseMessage["body"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
$logTracking = new LogTracking();
$logTracking->setEvent($activity->getId());
$logTracking->setDateCreated($now);
$logTracking->setType("activity_shown");
$logTracking->setUser($user);
$logTracking->setLocation($location);
if($activityAI18n){
$logTracking->setExtraInfo($activityAI18n->getMetaValue());
}
$logTracking->setUrl(null);
$em->persist($logTracking);
$em->flush();
sleep(1);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
}
die();
}
//STEP - 3: Response(SLEEP)
if($postbackId == "hotels"){
$category = $categoryRepo->find(9);
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_hotels", true);
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else if($postbackId == "campsites"){
$category = $categoryRepo->find(10);
$template = $templateRepo->findOneBy(array("slug" => "carousel_two", "lang" => $langEntity, "location" => $location)); //Template with 2 carousels
$seeMore = false;
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_campsites", true);
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else if($postbackId == "rural"){
$category = $categoryRepo->find(11);
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_rural", true);
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}
//STEP - 3: Response(EAT)
if($postbackId == "bars"){
$category = $categoryRepo->find(12);
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_bars", true);
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else if($postbackId == "restaurants"){
$category = $categoryRepo->find(13);
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location)); //Template with 5 carousels
$seeMore = true;
$meteo = 'n';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_restaurants", true);
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}
//STEP - 4: Response(ON FOOT) - Send Carousel
if($postbackId == "on_foot"){
//Category Rutes = 1
$category = $categoryRepo->find(1);
$template = $templateRepo->findOneBy(array("slug" => "carousel_five", "lang" => $langEntity, "location" => $location));
$seeMore = true;
$meteo = 'y';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_routes");
die();
}else if($postbackId == "btt"){
//Category btt = 2
$category = $categoryRepo->find(2);
$template = $templateRepo->findOneBy(array("slug" => "carousel_two", "lang" => $langEntity, "location" => $location)); //Template of 2 carousels
$seeMore = false;
$meteo = 'y';//y = Show Meteo message/ n = Don't show meteo message
$this->createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, "carousel_body_btt");
die();
}
//STEP - 5: Response(METEO) - Send Carousel METEO
if($postbackId == "meteo_yes" || $postbackId == "meteo_yes_start"){
$type = $_ENV['meta_PAYLOAD__CAROUSEL'];
//Category Rutes = 1
$meteoData = $meteoRepo->findOneBy(array("location" => $location));
$meteoReport = json_decode($meteoData->getMeteoData());
$cards = array();
foreach($meteoReport as $key => $meteo){
// dd($meteo);
$dateMeteo = new \DateTime($key);
$url = dirname(__DIR__,2)."/public/images/meteo/" . $translator->trans("meteo." . $meteo->description.'.img', [], "camprodon.messages", $lang);
// dd(file_exists($url));
if(!file_exists($url)){
$url = $_SERVER['HTTP_HOST']."/images/meteo/nuboso.jpg";
}else{
$url = $_SERVER['HTTP_HOST']."/images/meteo/" . $translator->trans("meteo." . $meteo->description.'.img', [], "camprodon.messages", $lang);
}
$paramsActivity = array(
"header" => array(
"type" => "image",
"url" => $url
),
"body" => array(
"parameters" => array(
array(
"type" => "text",
"text" => $dateMeteo->format('d-m-Y')
),
array(
"type" => "text",
"text" => strpos($translator->trans("meteo." . $meteo->description.'.name', [], "camprodon.messages", $lang),".") !== false ? $meteo->description : $translator->trans("meteo." . $meteo->description.'.name', [], "camprodon.messages", $lang)
),
array(
"type" => "text",
"text" => $meteo->prob_precipitation."%"
),
array(
"type" => "text",
"text" => $meteo->temp_max."ºC"
),
array(
"type" => "text",
"text" => $meteo->temp_min."ºC"
)
)
),
"buttons" => array(
array("type" => "quick_reply", "postback_id" => "start_over")
)
);
array_push($cards,
$paramsActivity
);
}
$templateSlug = "carousel_meteo";
switch(count((array)$meteoReport)){
case 7: $templateSlug = "carousel_meteo";
break;
case 6: $templateSlug = "carousel_meteo_6";
break;
case 5: $templateSlug = "carousel_meteo_5";
break;
default: $templateSlug = "carousel_meteo";
break;
}
$template = $templateRepo->findOneBy(array("slug" => $templateSlug, "lang" => $langEntity, "location" => $location));
$payload = array(
"template_name" => $template->getName(),
"lang" => $this->templateLangCode[$lang],
"cards" => $cards
);
$res = (object)$meta->sendTemplate(
$type,
$userPhone,
$location,
$payload
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $payload["template_name"] ));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
die();
}else if($postbackId == "meteo_no"){
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}
//START OVER
if($postbackId == "start_over"){
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}
//START POLL
if($postbackId == "pre_poll_yes" || $postbackId == "pre_poll_no"){
$pollQuestion = $pollQuestionRepository->find(1);
// $pollResponse = $pollResponseRepository->findResponse($user, $pollQuestion);
// if($pollResponse && is_array($pollResponse) && count($pollResponse) > 0){
// $pollResponse = $pollResponse[0];
// }else{
// $pollResponse = null;
// }
// if(!$pollResponse){
$pollResponse = new PollResponse;
$pollResponse->setUser($user);
$pollResponse->setPollQuestion($pollQuestion);
$pollResponse->setDateCreated($now);
// }
$pollResponse->setDateModified($now);
$pollResponse->setText(($postbackId == "pre_poll_yes")? 1 : 0);
$em->persist($pollResponse);
$em->flush();
$text = "";
if($postbackId == "pre_poll_no"){
// $responseMessage = [
// "body" => $translator->trans('poll.question_1', [], "camprodon.messages", $lang),
// "buttons" => array(
// [
// "postback_id" => "poll_q1_no",
// "text" => $translator->trans('poll.question_1_qr_2', [], "camprodon.messages", $lang)
// ],
// [
// "postback_id" => "poll_q1_yes",
// "text" => $translator->trans('poll.question_1_qr_1', [], "camprodon.messages", $lang)
// ]
// )
// ];
// $options = array();
// $res = (object)$meta->sendMessage(
// $_ENV['gs_PAYLOAD__QUICK_REPLY'],
// $utilities->dcrypt($user->getPhone()),
// $responseMessage,
// $location,
// $options
// );
// $text = $responseMessage["body"];
//SEND POLL DIRECTLY
$template = $templateRepo->findOneBy(array("slug" => "poll", "lang" => $langEntity , "location" => $location->getId(), "status" => 1));
$payload = array(
"template_name" => $template->getName(),
"lang" => $this->templateLangCode[$user->getLang()],
"buttons" => array(
array(
"type" => "FLOW",
"postback_id" => "form_poll"
)
)
);
$res = (object)$meta->sendTemplate(
$_ENV['meta_PAYLOAD__INTERACTIVE_TEXT'],
Utilities::dcrypt($user->getPhone()),
$location,
$payload
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( "FORM"));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate($template);
$em->persist($logWhatsapp);
$em->flush();
}else{
$type = $_ENV['meta_PAYLOAD__CONTACTS'];
$options = array();
$options["first_name"] = "Camprodon Turisme";
$options["formatted_name"] = "Camprodon Turisme";
$options["company"] = "Guest Assistant";
$options["phone"] = "+34622775117";
$res = (object)$meta->sendMessage(
$type,
$utilities->dcrypt($user->getPhone()),
array(),
$location,
$options
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode("Contact: ".$options["formatted_name"]." ".$options["phone"]));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
$responseMessage = ["text" => $translator->trans('poll.finish', [], "camprodon.messages", $lang)];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$text = $responseMessage["text"];
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode($text));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
}
}
if($postbackId == "poll_q1_yes"){
$pollQuestion = $pollQuestionRepository->find(2);
// $pollResponse = $pollResponseRepository->findResponse($user, $pollQuestion);
// if($pollResponse && is_array($pollResponse) && count($pollResponse) > 0){
// $pollResponse = $pollResponse[0];
// }else{
// $pollResponse = null;
// }
// if(!$pollResponse){
$pollResponse = new PollResponse;
$pollResponse->setUser($user);
$pollResponse->setPollQuestion($pollQuestion);
$pollResponse->setDateCreated($now);
// }
$pollResponse->setDateModified($now);
$pollResponse->setText(1);
$em->persist($pollResponse);
$em->flush();
$template = $templateRepo->findOneBy(array("slug" => "poll", "lang" => $langEntity , "location" => $location->getId(), "status" => 1));
$payload = array(
"template_name" => $template->getName(),
"lang" => $this->templateLangCode[$user->getLang()],
"buttons" => array(
array(
"type" => "FLOW",
"postback_id" => "form_poll"
)
)
);
$res = (object)$meta->sendTemplate(
$_ENV['meta_PAYLOAD__INTERACTIVE_TEXT'],
Utilities::dcrypt($user->getPhone()),
$location,
$payload
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( "FORM"));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate($template);
$em->persist($logWhatsapp);
$em->flush();
}else if($postbackId == "poll_q1_no"){
$pollQuestion = $pollQuestionRepository->find(2);
// $pollResponse = $pollResponseRepository->findResponse($user, $pollQuestion);
// if($pollResponse && is_array($pollResponse) && count($pollResponse) > 0){
// $pollResponse = $pollResponse[0];
// }else{
// $pollResponse = null;
// }
// if(!$pollResponse){
$pollResponse = new PollResponse;
$pollResponse->setUser($user);
$pollResponse->setPollQuestion($pollQuestion);
$pollResponse->setDateCreated($now);
// }
$pollResponse->setDateModified($now);
$pollResponse->setText(0);
$em->persist($pollResponse);
$em->flush();
$type = $_ENV['meta_PAYLOAD__CONTACTS'];
$options = array();
$options["first_name"] = "Camprodon Turisme";
$options["formatted_name"] = "Camprodon Turisme";
$options["company"] = "Guest Assistant";
$options["phone"] = "+34622775117";
$res = (object)$meta->sendMessage(
$type,
$utilities->dcrypt($user->getPhone()),
array(),
$location,
$options
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode("Contact: ".$options["formatted_name"]." ".$options["phone"]));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
$responseMessage = ["text" => $translator->trans('poll.finish', [], "camprodon.messages", $lang)];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$text = $responseMessage["text"];
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode($text));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
}
if($postbackId == "util_info_yes"){
$options = array();
$responseMessage = [
"text" => $translator->trans('dialog.util_question_2_thanks', [], "camprodon.messages", $lang)
];
$res = (object)$meta->sendMessage(
$_ENV["meta_PAYLOAD__TEXT"],
$userPhone,
$responseMessage,
$location,
$options
);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( $emoji->encode( $responseMessage["text"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else if($postbackId == "util_info_no"){
$type = $_ENV['gs_PAYLOAD__QUICK_REPLY'];
$responseMessage = [
"body" => $translator->trans('dialog.util_question_2', [], "camprodon.messages", $lang),
"buttons" => [
[
"postback_id" => "util_info_poc_concreta",
"text" => $translator->trans('dialog.util_2_btn_1', [], "camprodon.messages", $lang)
],
[
"postback_id" => "util_info_erronea",
"text" => $translator->trans('dialog.util_2_btn_2', [], "camprodon.messages", $lang)
],
]
];
$options = array();
$res = (object)$meta->sendMessage(
$type,
$userPhone,
$responseMessage,
$location,
$options
);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( $emoji->encode( $responseMessage["body"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
die();
}
if($postbackId == "util_info_poc_concreta" || $postbackId == "util_info_erronea"){
$options = array();
$responseMessage = [
"text" => $translator->trans('dialog.util_question_2_thanks', [], "camprodon.messages", $lang)
];
$res = (object)$meta->sendMessage(
$_ENV["meta_PAYLOAD__TEXT"],
$userPhone,
$responseMessage,
$location,
$options
);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( $emoji->encode( $responseMessage["text"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}
if($interactiveType == $_ENV['meta_PAYLOAD__FORM_REPLAY']){
// dump($responseForm);
foreach($responseForm as $key => $rf){
// dd($key." --> ".$rf);
$idQuestion = null;
$textResponse = "";
switch($key){
case "screen_0_TextInput_0":
$idQuestion = 3;
$textResponse = $rf;
break;
case "screen_0_TextInput_1":
$idQuestion = 4;
$textResponse = $rf;
break;
case "screen_1_RadioButtonsGroup_0":
case "screen_1_question2RadioButtons_0":
$idQuestion = 5;
$aux = explode("_",$rf);
$textResponse = $aux[0];
break;
case "screen_2_DatePicker_0":
$idQuestion = 6;
$textResponse = $rf;
break;
case "screen_2_DatePicker_1":
$idQuestion = 7;
$textResponse = $rf;
break;
case "screen_3_CheckboxGroup_0":
$idQuestion = 8;
foreach($rf as $rfkey => $rfc){
$aux = explode("_",$rfc);
$rf[$rfkey] = $aux[1];
}
$textResponse = implode(",",$rf);
break;
case "screen_4_TextArea_0":
$idQuestion = 9;
$textResponse = $rf;
break;
}
if($idQuestion){
$pollQuestion = $pollQuestionRepository->find($idQuestion);
// $pollResponse = $pollResponseRepository->findResponse($user, $pollQuestion);
// if($pollResponse && is_array($pollResponse) && count($pollResponse) > 0){
// $pollResponse = $pollResponse[0];
// }else{
// $pollResponse = null;
// }
// if(!$pollResponse){
$pollResponse = new PollResponse;
$pollResponse->setUser($user);
$pollResponse->setPollQuestion($pollQuestion);
$pollResponse->setDateCreated($now);
// }
$pollResponse->setDateModified($now);
$pollResponse->setText($emoji->encode($textResponse));
$em->persist($pollResponse);
}
}
$em->flush();
$type = $_ENV['meta_PAYLOAD__CONTACTS'];
$options = array();
$options["first_name"] = "Camprodon Turisme";
$options["formatted_name"] = "Camprodon Turisme";
$options["company"] = "Guest Assistant";
$options["phone"] = "+34622775117";
$res = (object)$meta->sendMessage(
$type,
$utilities->dcrypt($user->getPhone()),
array(),
$location,
$options
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode("Contact: ".$options["formatted_name"]." ".$options["phone"]));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
$responseMessage = ["text" => $translator->trans('poll.finish', [], "camprodon.messages", $lang)];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$text = $responseMessage["text"];
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode($text));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
}
//UNSUSCRIBE
if($postbackId == "unsuscribe_yes"){
$user->setStatus(0);
$em->persist($user);
$em->flush();
//Thanks message
$responseMessage = ["text" => $translator->trans('dialog.unsuscribe_finish', [], "camprodon.messages", $lang)];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $responseMessage["text"]));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
die();
}else if($postbackId == "unsuscribe_no"){
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}
/*
* CAROUSEL RESPONSE
* Postback id in base64 of the button pressed by the user on a carousel
*/
if(base64_decode($postbackId, true)){
$meta->setLog("[META] BUTTON REPLY", $utilities->ecrypt("Is base64"), $location, $userPhoneCrypt);
//Carousel response
$decodedString = base64_decode($postbackId);
$exploded = explode("_",$decodedString);
$key = $exploded[0];
$activityId = $exploded[1];
$meteo = $exploded[2];
//SEE MORE
if($key == "more"){
$responseMessage = ["text" => $translator->trans('dialog.see_more_info_response_text', [], "camprodon.messages", $lang)." ".$activityId];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $responseMessage["text"]));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
}else{ //MORE INFO
$activity = $activityRepo->find($activityId);
$aI18n = $activityI18nRepo->findOneBy(array("activity" => $activity, "metaKey" => $key, "lang" => "ca")); //TODO - Canviar la llengua quan ho haguin traduccions
if(!$aI18n){
$aI18n = $placesRepo->findOneBy(array("activityId" => $activityId));
$text = $translator->trans('dialog.ask_more_info', [], "camprodon.messages", $lang)." ".$aI18n->getName();
}else{
$text = $translator->trans('dialog.ask_more_info', [], "camprodon.messages", $lang)." ".$aI18n->getMetaValue();
}
$text = $translator->trans('dialog.ask_more_info', [], "camprodon.messages", $lang)." ".$aI18n->getMetaValue();
$result = $this->askGPT($text, $location, $langEntity->getName(), $doctrine, $meta, $utilities);
$meta->setLog("[META]Camprodon GPT RESPONSE CAROUSEL", $utilities->ecrypt($result), $location, $userPhoneCrypt);
if(strpos(mb_strtolower($result), "ninfo-") !== false){
$sendSatisfaction = true;
$result = $externalCalls->GPTGeneral($text, $location, $langEntity);
if(strpos($result, 'Error:') !== false){
$result = $translator->trans('dialog.no_info', [], "camprodon.messages", $lang);
}
$assistantRes = $result;
$meta->setLog("[META]Camprodon GPTGeneral Response", $utilities->ecrypt($result), $location, $userPhoneCrypt);
$responseMessage = ["text" => $result];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
}else{
if(strpos($result, 'Error:') !== false){
$result = $translator->trans('dialog.no_info', [], "camprodon.messages", $lang);
}
$responseMessage = ['text' => $result];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
}
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $textLog));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
//METEO
if($meteo == "y"){
sleep(1);
$buttons = $buttonsRepo->getTextButton($location, 5, $lang); //STEP 5
$btns = array();
foreach($buttons as $btn){
// $btnI18n = $buttonsI18nRepo->findOneBy(array("button" => $btn, "lang" => $lang));
array_push($btns, [
"postback_id" => $btn['postbackText'],
"text" => $btn['text']
]);
}
$responseMessage = [
"body" => $translator->trans('dialog.meteo_question', [], "camprodon.messages", $lang),
"buttons" => $btns
];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['gs_PAYLOAD__QUICK_REPLY'],
$userPhone,
$responseMessage,
$location,
$options
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $responseMessage["body"]));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
}
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
}
die();
}
}
}else{
$sendedMsg = $logWhatsappRepository->findOneBy(array("phone" => $userPhoneCrypt, "status" => "delivered"));
//If is the first
if(strpos(mb_strtolower($text), mb_strtolower($translator->trans('dialog.start_manual_flow', [], "camprodon.messages", $lang))) !== false || (!$sendedMsg && $session->get('messageSended'))){
/*
* Starts Guided Flow
*/
$meta->setLog("[META] Camprodon Start Flow", $utilities->ecrypt("Starts FLOW"), $location, $userPhoneCrypt);
$options = array();
$buttons = $buttonsRepo->getTextButton($location, 0, $lang);
$btns0 = array();
foreach($buttons as $btn0){
array_push($btns0, [
"postback_id" => $btn0['postbackText'],
"text" => $btn0['text']
]);
}
// dd($buttons[0]['text']);
$responseMessage = [
"body" => $translator->trans('dialog.start_manual_flow_welcome', [], "camprodon.messages", $lang),
"header" => [
"type" => "image",
// "text" => dirname(__FILE__,3)."/public/images/locations/".$location->getName()."/logo.png"
"text" => $_SERVER['HTTP_HOST']."/images/locations/".$location->getName()."/logo_padding.png"
],
"footer" => $translator->trans('dialog.start_manual_flow_footer', [], "camprodon.messages", $lang),
"buttons" => $btns0
];
// $this->translations[$user->getLang()]["start_manual_flow_buttons"]["button_1"];
//Escull una d'aquestes opcions o escriu la teva paraula
//Si no es boton -> pregunta normal
$res = (object)$meta->sendMessage(
$_ENV['gs_PAYLOAD__QUICK_REPLY'],
$userPhone,
$responseMessage,
$location,
$options
);
// dd($res);
$meta->setLog("[META] Camprodon response", $utilities->ecrypt(json_encode($res)), $location, $userPhoneCrypt);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( $emoji->encode( $responseMessage["body"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
//Llista activitats
// $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"] ];
// $options = array(
// $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_title"] => array(
// // array( "id"=> 1, "title" => "Activitats", "description" => ""),
// array( "id"=> "visits_1", "title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_1_title"], "description" => ""),
// array( "id" => "nature_1", "title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_2_title"], "description" => ""),
// array( "id" => "pool_1", "title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_3_title"], "description" => ""),
// array( "id" => "food_1", "title" => $this->translations[$user->getLang()]["start_manual_flow_discover_list"]["options_4_title"], "description" => "")
// )
// );
// $res = (object)$meta->sendMessage(
// $_ENV['gs_PAYLOAD__LIST'],
// $userPhone,
// $responseMessage,
// $location,
// $options
// );
// $messageId = "";
// if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
// $logWhatsapp = new LogWhatsapp();
// $logWhatsapp->setMessageId($messageId);
// $logWhatsapp->setPhone( $userPhoneCrypt );
// $logWhatsapp->setPrefix( $prefix );
// $logWhatsapp->setText( $emoji->encode( $responseMessage["body"]));
// $logWhatsapp->setStatus( "outbound" );
// $logWhatsapp->setDateCreated( $now );
// $logWhatsapp->setTimestampProvider( $timestamp );
// $logWhatsapp->setUser( $user );
// $logWhatsapp->setLocation( $location );
// $logWhatsapp->setLang( $user->getLang() );
// $logWhatsapp->setConversationId($conversationId);
// $logWhatsapp->setTemplate(null);
// $em->persist($logWhatsapp);
// $em->flush();
die();
}else{
if($location){
$meta->setLog("[META] Camprodon GPT", $utilities->ecrypt("Entra pregunta lliure"), $location, $userPhoneCrypt);
// $text = $translator->trans('dialog.todayIs', [], "camprodon.messages", $lang)." ".$now->format("d-m-Y").". ".$text;
// dd($text);
$logQuestionUser = $logQuestionUserRepository->findQuestion($user, $location);
if($logQuestionUser){
$logQuestionUser = $logQuestionUser[0];
}
//Prepare question with First gpt layer
$conversation = $logConversationRepository->findOneBy(array("user" => $user, "location" => $location ));
if($conversation){
if(intval($now->format("YmdHi")) - intval($conversation->getDateCreated()->format("YmdHi")) > $this->limitTimeContext){
$em->remove($conversation);
$em->flush();
$conversation = null;
}
}
if(!$conversation){
$conversationDecoded = array();
$auxConversation = array();
array_push($conversationDecoded, array("user" => $text));
array_push($auxConversation, array("last_inbound" => $text));
$conversation = new LogConversation();
$conversation->setUser($user);
$conversation->setLocation($location);
$conversation->setJson(json_encode($conversationDecoded));
$conversation->setDateCreated($now);
$em->persist($conversation);
$em->flush();
}else{
$conversationDecoded = json_decode($conversation->getJson(), true);
$auxConversation = array_replace([], $conversationDecoded);
array_push($conversationDecoded, array("user" => $text));
array_push($auxConversation, array("last_inbound" => $text));
}
$auxConversation = array_filter($auxConversation, function ($item){
return key($item) != 'user_old_question';
// dd(key($item));
});
// dump('auxConversation', $auxConversation);
//Remove first dialogs if conversation is too big, so it doesn't surpass the max token lenght of OpenAi
if(count($conversationDecoded) > 6){
$conversationDecoded = array_slice($conversationDecoded, 2);
$auxConversation = array_slice($auxConversation, 2);
}
// dd($conversationDecoded);
$unsuscribeWords = ["baja", "baixa", "unsubscribe", "désabonner"];
if(in_array(mb_strtolower($text), $unsuscribeWords)){
$type = $_ENV['gs_PAYLOAD__QUICK_REPLY'];
$responseMessage = [
"body" => $translator->trans('dialog.unsuscribe', [], "camprodon.messages", $lang),
"buttons" => [
[
"postback_id" => "unsuscribe_yes",
"text" => $translator->trans('dialog.unsuscribe_yes', [], "camprodon.messages", $lang)
],
[
"postback_id" => "unsuscribe_no",
"text" => $translator->trans('dialog.unsuscribe_no', [], "camprodon.messages", $lang)
]
]
];
$options = array();
$res = (object)$meta->sendMessage(
$type,
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['body'];
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $textLog));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
die();
}
$excludeWords = ["no", "no gracias", "no gracies", "no gràcies", "no quiero", "no vull", "res més", "res mes", "nada mas", "adeu"];
if(in_array(mb_strtolower($text), $excludeWords)) die();
$embeddingQuestion = $text;
//Check if meteo
if($externalCalls->isMeteo($text) == "meteo-"){
$type = $_ENV['meta_PAYLOAD__CAROUSEL'];
//Category Rutes = 1
$meteoData = $meteoRepo->findOneBy(array("location" => $location));
$meteoReport = json_decode($meteoData->getMeteoData());
$cards = array();
foreach($meteoReport as $key => $meteo){
// dd($meteo);
$dateMeteo = new \DateTime($key);
$url = dirname(__DIR__,2)."/public/images/meteo/" . $translator->trans("meteo." . $meteo->description.'.img', [], "camprodon.messages", $lang);
// dd(file_exists($url));
if(!file_exists($url)){
$url = $_SERVER['HTTP_HOST']."/images/meteo/nuboso.jpg";
}else{
$url = $_SERVER['HTTP_HOST']."/images/meteo/" . $translator->trans("meteo." . $meteo->description.'.img', [], "camprodon.messages", $lang);
}
$paramsActivity = array(
"header" => array(
"type" => "image",
"url" => $url
),
"body" => array(
"parameters" => array(
array(
"type" => "text",
"text" => $dateMeteo->format('d-m-Y')
),
array(
"type" => "text",
"text" => strpos($translator->trans("meteo." . $meteo->description.'.name', [], "camprodon.messages", $lang),".") !== false ? $meteo->description : $translator->trans("meteo." . $meteo->description.'.name', [], "camprodon.messages", $lang)
),
array(
"type" => "text",
"text" => $meteo->prob_precipitation."%"
),
array(
"type" => "text",
"text" => $meteo->temp_max."ºC"
),
array(
"type" => "text",
"text" => $meteo->temp_min."ºC"
)
)
),
"buttons" => array(
array("type" => "quick_reply", "postback_id" => "start_over")
)
);
array_push($cards,
$paramsActivity
);
}
$templateSlug = "carousel_meteo";
switch(count((array)$meteoReport)){
case 7: $templateSlug = "carousel_meteo";
break;
case 6: $templateSlug = "carousel_meteo_6";
break;
case 5: $templateSlug = "carousel_meteo_5";
break;
default: $templateSlug = "carousel_meteo";
break;
}
$template = $templateRepo->findOneBy(array("slug" => $templateSlug, "lang" => $langEntity, "location" => $location));
$payload = array(
"template_name" => $template->getName(),
"lang" => $this->templateLangCode[$lang],
"cards" => $cards
);
$res = (object)$meta->sendTemplate(
$type,
$userPhone,
$location,
$payload
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $payload["template_name"] ));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
array_push($conversationDecoded, array("assistant" => $embeddingQuestion));
$conversation->setJson(json_encode($conversationDecoded));
if($logQuestionUser){
$logQuestionUser->setResponse($logWhatsapp);
$em->persist($logQuestionUser);
$em->flush();
}
die();
}
//Get intention of the question, if there is no intention, ask what is the question
$excludeWordsIntention = ['Bonjour', 'Salut', 'Hola','Buenas', 'Hi', 'Hello', 'Hey', 'Ei'];
if(count(explode(" ",$embeddingQuestion)) == 1 && !in_array($embeddingQuestion, $excludeWordsIntention)){
$intention = $externalCalls->getIntention($auxConversation);
$meta->setLog("[META] getIntention", $utilities->ecrypt(json_encode($intention)), $location, $userPhoneCrypt);
if($intention && property_exists($intention,"intention") && !$intention->intention){
//If there is no intention found, we ask about what the user is talking about.
$why = $externalCalls->askWhy($embeddingQuestion);
$meta->setLog("[META] askWhy", $utilities->ecrypt($why), $location, $userPhoneCrypt);
if($why){
//Send the message and update conversation
$responseMessage = ["text" => $why];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
array_push($conversationDecoded, array("assistant" => $why));
$conversation->setJson(json_encode($conversationDecoded));
$em->persist($conversation);
$em->flush();
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $why));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
if($logQuestionUser){
$logQuestionUser->setResponse($logWhatsapp);
$em->persist($logQuestionUser);
$em->flush();
}
die();
}
}
}
if(count($conversationDecoded) > 1){
$analizeConversationQuestion = (array) $externalCalls->GPTAnalizeConversationQuestion(json_encode($auxConversation));
$meta->setLog("[META] GPTAnalizeConversationQuestion input", $utilities->ecrypt(json_encode($auxConversation)), $location, $userPhoneCrypt);
$meta->setLog("[META] GPTAnalizeConversationQuestion", $utilities->ecrypt($analizeConversationQuestion), $location, $userPhoneCrypt);
if(isset($analizeConversationQuestion["has_relation"]) && ($analizeConversationQuestion["has_relation"] || $analizeConversationQuestion["has_relation"] == "true")){
$meta->setLog("[META] GPTAnalizePrincipalQuestion input", $utilities->ecrypt(array($analizeConversationQuestion["first_inbound"] ? $analizeConversationQuestion["first_inbound"] : $analizeConversationQuestion["principal_context_relation"], $text)), $location, $userPhoneCrypt);
$embeddingQuestion = $externalCalls->GPTAnalizePrincipalQuestion($analizeConversationQuestion["first_inbound"] ? $analizeConversationQuestion["first_inbound"] : $analizeConversationQuestion["principal_context_relation"], $text);
//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
// $conversationDecoded[count($conversationDecoded) - 1]['user'] = $embeddingQuestion;
$conversationDecoded = array_reverse($conversationDecoded, true);
foreach($conversationDecoded as &$conver){
if(isset($conver['user'])) {
$conver['user'] = $embeddingQuestion;
break;
}
}
$conversationDecoded = array_reverse($conversationDecoded, true);
array_push($conversationDecoded, array("user_old_question" => $text));
$meta->setLog("[META] GPTAnalizePrincipalQuestion", $utilities->ecrypt($embeddingQuestion), $location, $userPhoneCrypt);
}else{
$conversationDecoded = array(array("user" => $text));
}
}
$result = $embeddingQuestion;
$meta->setLog("[META] embeddingQuestion", $utilities->ecrypt($embeddingQuestion), $location, $userPhoneCrypt);
// else{
// //Send context to GPT
// $embeddingQuestion = $externalCalls->GPTLayer($conversationDecoded, $langEntity);
// }
// $embeddingQuestion = $text;
// dd($embeddingQuestion);
$resultPlaces = $externalCalls->GPTIsPlaces($embeddingQuestion, $location);
//GPT per detectar categoria
//Si es una de la llista, anar al embedding
//
$assistantRes = $embeddingQuestion;
$meta->setLog("[META] GPTIsPlaces - Is Places", $utilities->ecrypt($resultPlaces), $location, $userPhoneCrypt);
if(strpos(mb_strtolower($resultPlaces), "places-") !== false){
$meta->setLog("[META] PRE GPTCheckCategory - Category", $utilities->ecrypt($resultPlaces), $location, $userPhoneCrypt);
//Get meta_key of all categories that we want
$notAllowedCategories = [1,2,3,4,5,6,7,8,14,15];
$categories = array_map(function($item){
return $item->getMetaKey();
},array_filter($categoryRepo->findBy(array("location" => $location)), function($cat) use($notAllowedCategories) {
return !in_array($cat->getId(), $notAllowedCategories);
}));
$resultCategory = $externalCalls->GPTCheckCategory($embeddingQuestion, join(', ',$categories));
$meta->setLog("[META] GPTCheckCategory - Category", $utilities->ecrypt($resultCategory), $location, $userPhoneCrypt);
if(strpos(mb_strtolower($resultCategory), "cat-") !== false){
// $result = $this->askGPT($embeddingQuestion, $location, $doctrine);
// dd($result);
$catName = explode('cat-', $resultCategory)[1];
$categoriesToCarouselDB = $categories;
if(in_array($catName, $categoriesToCarouselDB)){
$category = $categoryRepo->findOneBy(array("metaKey" => $catName));
$seeMore = false;
//Find places by category
$placesFound = $placesRepo->findPlacesByCategory($category, $location);
$activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC")); //Limit of cards to be showed
if($placesFound){
//How many places
if($catName == 'campings') $placesCount = 2;
else if(count($placesFound) > 4) $placesCount = 4;
else $placesCount = count($placesFound);
// foreach($activities as $activity){
// $aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
// $place = array();
// $hasMaps = false;
// $hasPlace = false;
// // foreach($aI18n as $activityData){
// // if($activityData->getMetaKey() == "placeApi"){
// // $hasPlace = true;
// // $place = json_decode($activityData->getMetaValue());
// // array_push($places, $place);
// // }
// // // if($activityData->getMetaKey() == "name"){
// // // $place = $externalCalls->googleMapsApi($activityData->getMetaValue(), $location);
// // // if(is_array($place)){
// // // array_push($places, $place[0]);
// // // }
// // // }
// // if($activityData->getMetaKey() == "maps"){
// // $hasMaps = true;
// // }
// // }
// if(!$hasMaps && is_array($place) && count($place) > 0){
// $aI18nNew = new ActivityI18n();
// $aI18nNew->setMetaKey("maps");
// $aI18nNew->setMetaValue($place[0]['url']);
// $aI18nNew->setLang($lang);
// $aI18nNew->setActivity($activity);
// $em->persist($aI18nNew);
// $em->flush();
// }
// // if(!$hasPlace && is_array($place) && count($place) > 0){
// // $aI18nNew = new ActivityI18n();
// // $aI18nNew->setMetaKey("placeApi");
// // $aI18nNew->setMetaValue(json_encode($place));
// // $aI18nNew->setLang('ca');
// // $aI18nNew->setActivity($activity);
// // $em->persist($aI18nNew);
// // $em->flush();
// // }
// }
$assistantRes = "";
// dd($placesFound);
if($placesCount === 1){
$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())];
$options = array();
$assistantRes = trim($placesFound[0]->getName());
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
}else{
shuffle($placesFound);
$seeMore = $placesCount >= 4 ? true : false;
$places = array_slice($placesFound, 0, $placesCount);
$meta->setLog("[META] Place Image Response", $utilities->ecrypt(json_encode($places)), $location, $userPhoneCrypt);
//SEND CAROUSEL
$type = $_ENV['meta_PAYLOAD__CAROUSEL'];
$cards = array();
$headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName()."/places_default.jpg";
foreach($places as $p){
// $buttonUrl = "https://visitcamprodon.cat/benvinguts/";
$p = $p;
// dd($p->getImageUrl());
// dump($p);
$paramsPlaces = array(
"header" => array(
"type" => "image",
"url" => ($p->getImageUrl()) ? $_SERVER['HTTP_HOST']."/images/locations/".$location->getName()."/".$p->getImageUrl() : $headerImg
),
"body" => array(
"parameters" => array(
array(
"type" => "text",
"text" => addslashes($p->getName())
)
)
),
"buttons" => array(
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())),
)
);
$assistantRes .= trim($p->getName());
array_push($cards,
$paramsPlaces
);
}
$template = $templateRepo->findOneBy(array("slug" => "carousel_places_".$placesCount, "lang" => $langEntity, "location" => $location));
$payload = array(
"template_name" => $template->getName(),
"lang" => $this->templateLangCode[$lang],
"cards" => $cards
);
$res = (object)$meta->sendTemplate(
$type,
Utilities::dcrypt($user->getPhone()),
$location,
$payload
);
// dd($res);
$textLog = $payload['template_name'];
}
array_push($conversationDecoded, array("assistant" => $assistantRes));
$conversation->setJson(json_encode($conversationDecoded));
$conversation->setDateCreated( $now );
$em->persist($conversation);
$em->flush();
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $textLog));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
if($logQuestionUser){
$logQuestionUser->setResponse($logWhatsapp);
$em->persist($logQuestionUser);
$em->flush();
}
if($seeMore){
$responseMessage = ["text" => $translator->trans('dialog.more_places', [], "camprodon.messages", $lang). " https://www.google.com/maps/search/".$catName."+en+camprodon/"];
$options = array();
//Aquest llistat s'ha generat aleatoriament. Si vols veure més, fes clic en el següent botó.
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $textLog));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
}
usleep(500000);
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
die();
}else{
$result = $resultPlaces;
}
}
}else{
$result = $resultPlaces;
}
}else{
$meta->setLog("[META] GPT Layer - Embbeding question", $utilities->ecrypt($embeddingQuestion), $location, $userPhoneCrypt);
//Free message to Chat GPT
$result = $this->askGPT($embeddingQuestion, $location, $langEntity->getName(), $doctrine, $meta, $utilities);
$meta->setLog("[META] GPT Response", $utilities->ecrypt($result), $location, $userPhoneCrypt);
}
$sendSatisfaction = false;
if(strpos(mb_strtolower($result), "places-") !== false){
$url = "None";
$place = $externalCalls->GPTPlaces($embeddingQuestion);
$meta->setLog("[META] GPTPlaces Response", $utilities->ecrypt($place), $location, $userPhoneCrypt);
if(strpos($place, 'Error:') !== false){
$result = $translator->trans('dialog.no_info', [], "camprodon.messages", $lang);
}else{
//Buscar API Google
$places = $externalCalls->googleMapsApi($place, $location);
// dd($places);
$meta->setLog("[META] googleMapsApi Response", $utilities->ecrypt(json_encode($places)), $location, $userPhoneCrypt);
if(is_array($places)){
$seeMore = count($places) > 4 ? true : false;
$placesCount = count($places) > 4 ? 4 : count($places);
if($placesCount === 1){
$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"])];
$options = array();
$assistantRes = trim($places[0]["name"]);
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
}else{
// $seeMore = $placesCount > 9 ? true : false;
// $seeMore = false;
$assistantRes = "";
shuffle($places);
// dd($places);
$places = array_slice($places, 0, $placesCount);
foreach($places as &$placeInfo){
if($placeInfo["photo_id"] != null){
$placeInfo["photo_id"] = $externalCalls->googleMapsApiImages($placeInfo["photo_id"]);
}
}
$meta->setLog("[META] Place Image Response", $utilities->ecrypt(json_encode($places)), $location, $userPhoneCrypt);
//SEND CAROUSEL
$type = $_ENV['meta_PAYLOAD__CAROUSEL'];
$cards = array();
$headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName()."/places_default.jpg";
foreach($places as $p){
// $buttonUrl = "https://visitcamprodon.cat/benvinguts/";
// dd($p);
$paramsPlaces = array(
"header" => array(
"type" => "image",
"url" => (isset($p["photo_id"]) && $p["photo_id"] != "None" )? $p["photo_id"] : $headerImg
),
"body" => array(
"parameters" => array(
array(
"type" => "text",
"text" => addslashes($p["name"])
)
)
),
"buttons" => array(
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"])),
)
);
$assistantRes .= trim($p["name"]);
array_push($cards,
$paramsPlaces
);
}
// if($seeMore){
// //See more
// $paramsPlaces = array(
// "header" => array(
// "type" => "image",
// "url" => $headerImg
// ),
// "buttons" => array(
// 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)),
// )
// );
// array_push($cards,
// $paramsPlaces
// );
// }
// dd($placesCount);
$template = $templateRepo->findOneBy(array("slug" => "carousel_places_".$placesCount, "lang" => $langEntity, "location" => $location));
$payload = array(
"template_name" => $template->getName(),
"lang" => $this->templateLangCode[$lang],
"cards" => $cards
);
$res = (object)$meta->sendTemplate(
$type,
Utilities::dcrypt($user->getPhone()),
$location,
$payload
);
$textLog = $payload['template_name'];
if($seeMore){
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $textLog));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
$responseMessage = ["text" => $translator->trans('dialog.more_places', [], "camprodon.messages", $lang). " https://www.google.com/maps/search/".$place."+en+camprodon/"];
$options = array();
//Aquest llistat s'ha generat aleatoriament. Si vols veure més, fes clic en el següent botó.
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
}
}
}else{
$responseMessage = ["text" => $translator->trans('dialog.no_info', [], "camprodon.messages", $lang)];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
}
// if($url !== "None"){
// $explodedResult = explode('{}',$url);
// $placeName = $explodedResult[0];
// $placeUrl = $explodedResult[1];
// // $placeUrl = "aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8=";
// // dd($placeUrl);
// /*$template = $templateRepo->findOneBy(array("slug" => "maps", "lang" => $langEntity, "location" => $location));
// $payload = array(
// "template_name" => $template->getName(),
// "lang" => $this->templateLangCode[$lang],
// "buttons" => array(
// array(
// "type" => "url",
// "postback_id" => $placeUrl
// )
// )
// );
// $res = (object)$meta->sendTemplate(
// $_ENV['meta_PAYLOAD__INTERACTIVE_TEXT'],
// $userPhone,
// $location,
// $payload
// );
// $textLog = $payload['template_name'];*/
// $responseMessage = ["text" => $translator->trans('dialog.maps_first_part', [], "camprodon.messages", $lang).": *$placeName*. ".$translator->trans('dialog.maps_second_part', [], "camprodon.messages", $lang).": ".addslashes($placeUrl)];
// $options = array();
// $res = (object)$meta->sendMessage(
// $_ENV['meta_PAYLOAD__TEXT'],
// $userPhone,
// $responseMessage,
// $location,
// $options
// );
// $textLog = $responseMessage['text'];
// }
}
}else if(strpos(mb_strtolower($result), "ninfo-") !== false){
$sendSatisfaction = true;
$result = $externalCalls->GPTGeneral($embeddingQuestion, $location, $langEntity);
if(strpos($result, 'Error:') !== false || !$result){
$result = $translator->trans('dialog.no_info', [], "camprodon.messages", $lang);
}
$assistantRes = $result;
$meta->setLog("[META] GPTGeneral Response", $utilities->ecrypt($result), $location, $userPhoneCrypt);
$responseMessage = ["text" => $result];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
}else{
if(strpos($result, 'Error:') !== false || !$result){
$result = $translator->trans('dialog.no_info', [], "camprodon.messages", $lang);
}
// $result = preg_replace('/\t/','\n',$result);
$assistantRes = $result;
$responseMessage = ['text' => $result];
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['meta_PAYLOAD__TEXT'],
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['text'];
}
//Get embbeding response from layer GPT, save it to the conversation, and save it to DB
// 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
//
// }else{
// array_push($conversationDecoded, array("assistant" => $embeddingQuestion));
// $assistantRes = $result;
// }
array_push($conversationDecoded, array("assistant" => $assistantRes));
$conversation->setJson(json_encode($conversationDecoded));
$em->persist($conversation);
$em->flush();
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $textLog));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
if($logQuestionUser){
$logQuestionUser->setResponse($logWhatsapp);
$em->persist($logQuestionUser);
$em->flush();
}
usleep(500000);
if($sendSatisfaction){
$type = $_ENV['gs_PAYLOAD__QUICK_REPLY'];
$responseMessage = [
"body" => $translator->trans('dialog.util_question_1', [], "camprodon.messages", $lang),
"buttons" => [
[
"postback_id" => "util_info_no",
"text" => $translator->trans('dialog.util_1_btn_2', [], "camprodon.messages", $lang)
],
[
"postback_id" => "util_info_yes",
"text" => $translator->trans('dialog.util_1_btn_1', [], "camprodon.messages", $lang)
]
]
];
$options = array();
$res = (object)$meta->sendMessage(
$type,
$userPhone,
$responseMessage,
$location,
$options
);
$textLog = $responseMessage['body'];
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $userPhoneCrypt );
$logWhatsapp->setPrefix( $prefix );
$logWhatsapp->setText( $emoji->encode( $textLog));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
}else{
$this->sendStartOver($doctrine, $translator, $meta, $user, $location, $lang);
}
die();
}
}
}
}
}
die();
}
public function askGPT($text, $location, $lang, ManagerRegistry $doctrine, $meta, $utilities){
$locationHash = escapeshellarg($location->getHash());
// $text .= " e indica entre asteriscos: lugares y personas en la respuesta.";
//$text = escapeshellarg($text);
// $meta->setLog("[META] $text", $utilities->ecrypt(json_encode($text)), $location, $utilities->ecrypt("log"));
$preEmbedding = ExternalCalls::GPTPreEmbedding($text);
$meta->setLog("[META] preEmbedding", $utilities->ecrypt(json_encode($preEmbedding)), $location, $utilities->ecrypt("log"));
$question = $text;
$questionContext = "";
if(strpos($preEmbedding, "when-") !== false || strpos($preEmbedding, "activity-when") !== false){
$meta->setLog("[META] contextActivity when-", $utilities->ecrypt($question), $location, $utilities->ecrypt("log"));
$context = ExternalCalls::getContextActivities($question, $locationHash);
// dd($context);
$result = ExternalCalls::GPTPostEmbeddingActivities($question, $context, $lang);
$meta->setLog("[META] GPTPostEmbeddingActivity when-", $utilities->ecrypt(json_encode($result)), $location, $utilities->ecrypt("log"));
}else if(strpos($preEmbedding, "activity-") !== false){
$activitySplit = explode("activity", $preEmbedding);
try{
$computedDateSunday = "";
$dateCode = str_replace('-','',$activitySplit[1]);
if(str_contains(mb_strtolower($dateCode ), 'saturday')){
$pre = explode( "Saturday", $dateCode)[0];
$computedDateSunday = date('d-m-Y',strtotime($pre.'Sunday'));
}
$computedDate = date('d-m-Y',strtotime(str_replace('-', '', $activitySplit[1])));
}catch(Exception $e){
$context = ExternalCalls::getContextActivities($question, $locationHash);
$meta->setLog("[META] contextActivity", $utilities->ecrypt($question), $location, $utilities->ecrypt("log"));
$result = ExternalCalls::GPTPostEmbeddingActivities($question, $context, $lang);
$meta->setLog("[META] GPTPostEmbeddingActivity", $utilities->ecrypt(json_encode($result)), $location, $utilities->ecrypt("log"));
}
$datetime = new \DateTime($computedDate, new \DateTimeZone('Europe/Madrid'));
$dateName = $datetime->format('l');
$dayName = '';
// switch($dateName){
// case 'Monday':
// $dayName = "Lunes";
// break;
// case 'Tuesday':
// $dayName = "Martes";
// break;
// case 'Wednesday':
// $dayName = "Miércoles";
// break;
// case 'Thursday':
// $dayName = "Jueves";
// break;
// case 'Friday':
// $dayName = "Viernes";
// break;
// case 'Saturday':
// $dayName = "Sábado";
// break;
// case 'Sunday':
// $dayName = "Domingo";
// break;
// default:
// $dayName = '';
// break;
// }
switch($dateName){
case 'Monday':
$dayName = "Dilluns";
break;
case 'Tuesday':
$dayName = "Dimarts";
break;
case 'Wednesday':
$dayName = "Dimecres";
break;
case 'Thursday':
$dayName = "Dijous";
break;
case 'Friday':
$dayName = "Divendres";
break;
case 'Saturday':
$dayName = "Dissabte";
break;
case 'Sunday':
$dayName = "Diumenge";
break;
default:
$dayName = '';
break;
}
$question .= " " . $computedDate . " ". $dayName;
if($computedDateSunday){
$question .= " y " . $computedDateSunday . " Domingo";
}
$context = ExternalCalls::getContextActivities($computedDateSunday ? $computedDateSunday : $computedDate, $locationHash);
$meta->setLog("[META] contextActivity", $utilities->ecrypt($question), $location, $utilities->ecrypt("log"));
$result = ExternalCalls::GPTPostEmbeddingActivitiesWithDate($question, $context, $lang);
$meta->setLog("[META] GPTPostEmbeddingActivity", $utilities->ecrypt(json_encode($result)), $location, $utilities->ecrypt("log"));
}else{
$questionContext = $question;
$context = ExternalCalls::getContext($questionContext, $locationHash);
$meta->setLog("[META] context", $utilities->ecrypt($question), $location, $utilities->ecrypt("log"));
$result = ExternalCalls::GPTPostEmbedding($question, $context, $lang);
$meta->setLog("[META] GPTPostEmbedding", $utilities->ecrypt(json_encode($result)), $location, $utilities->ecrypt("log"));
}
// Llamar al script de Python con la información como argumento
// $command = "python3 ".dirname(__DIR__,2)."/python/search.py $text $locationHash";
// dd($command);
// python3 search.py "quiero más información de Natura de Camprodon" b4a682ff6eb47ee58d5b00e47bc72884e9922d3209df787d15e0f3df7d524621
// exec($command, $output);
// $result = implode('\n', $output);
// dd();
// if(strpos($result, "Error:")){
// $result = "Se ha producido un error, intentelo de nuevo mas tarde.";
// } else {
/* $em = $doctrine->getManager();
$activitiesRepository = $em->getRepository(ActivityI18n::class);
$activities = $activitiesRepository->findAllMetaValues();
foreach($activities as $activity) {
//dump($result . " --> " . $activity->getMetaValue());
$result = preg_replace_callback('/\b' . preg_quote($activity->getMetaValue(), '/') . '\b(?![^(){}\[\]]*[\])}])/', function($matches) {
return '*' . $matches[0] . '*';
}, $result);
} */
// }
// dd(urlencode(preg_replace("/\t/",'\n',$result)));
return str_replace("**","*",$result);
}
public function createQuickReply($doctrine, TranslatorInterface $translator, $meta, $user, $location, $lang, $text, $conversationId, $timestamp, $translateKey){
$em = $doctrine->getManager();
$buttonsRepo = $em->getRepository(Buttons::class);
$buttonsI18nRepo = $em->getRepository(ButtonsI18n::class);
$now = new \DateTime('now');
$now->setTimezone(new \DateTimeZone('Europe/Madrid'));
$btns = array();
$parentButton = $buttonsI18nRepo->findOneByLocation("text", $text, $location);
$buttons = $buttonsRepo->findBy(array("parent" => $parentButton->getButton(), "status" => 1));
// $meta->setLog("[META] Buttons", $utilities->ecrypt(json_encode($buttons)), $location, $userPhoneCrypt);
foreach($buttons as $btn){
$btnI18n = $buttonsI18nRepo->findOneBy(array("button" => $btn, "lang" => $lang));
array_push($btns, [
"postback_id" => $btn->getPostbackText(),
"text" => $btnI18n->getText()
]);
}
$responseMessage = [
"body" => $translator->trans("dialog." . $translateKey, [], "camprodon.messages", $lang),
"buttons" => $btns
];
// dd($responseMessage);
$options = array();
$res = (object)$meta->sendMessage(
$_ENV['gs_PAYLOAD__QUICK_REPLY'],
Utilities::dcrypt($user->getPhone()),
$responseMessage,
$location,
$options
);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId($conversationId);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $user->getPhone() );
$logWhatsapp->setPrefix( $user->getPrefix() );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( Emoji::encode( $responseMessage["body"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $timestamp );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
die();
}
public function createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, $translateBodyKey = "", $random = false){
$em = $doctrine->getManager();
$activityRepo = $em->getRepository(Activity::class);
$activityI18nRepo = $em->getRepository(ActivityI18n::class);
$categoryI18nRepo = $em->getRepository(CategoryI18n::class);
$placesRepo = $em->getRepository(Places::class);
$now = new \DateTime('now');
$now->setTimezone(new \DateTimeZone('Europe/Madrid'));
$type = $_ENV['meta_PAYLOAD__CAROUSEL'];
$categoryUrl = $categoryI18nRepo->findOneBy(array("category" => $category, "lang" => $lang, "metaKey" => "url"));
$cards = array();
if($random){
$activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC")); //Limit of cards to be showed
shuffle($activities);
$activities = array_slice($activities, 0, $this->carouselLimit);
}else{
$activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC"), $this->carouselLimit); //Limit of cards to be showed
}
$activitiesAI18n = [];
$placesTrackingData = [];
$placesTracking = false;
foreach($activities as $key => $activity){
$bodyParam = "";
$headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg";
$buttonUrl = "https://visitcamprodon.cat/benvinguts/";
if(in_array($category->getId(), [1,2,3,4,5,6,7,8,14])){ //If it's not places
$aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
foreach($aI18n as $activityData){
if($activityData->getMetaKey() == "name"){
$bodyParam = $activityData->getMetaValue();
//Save activities aI18n info into an array for later use
$activitiesAI18n[] = $activityData;
}else if($activityData->getMetaKey() == "image"){
$headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
}else if($activityData->getMetaKey() == "url"){
$buttonUrl = $activityData->getMetaValue();
}
}
}else{
$place = $placesRepo->findOneBy(array("activity" => $activity));
$bodyParam = $place->getName();
$headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$place->getImageUrl();
$buttonUrl = $place->getWeb() ? $place->getWeb() : $place->getMaps();
$placesTrackingData[$key] = ["name" => $place->getName(), "actId" => $activity->getId()];
$placesTracking = true;
}
$paramsActivity = array(
"header" => array(
"type" => "image",
"url" => $headerImg
),
"body" => array(
"parameters" => array(
array(
"type" => "text",
"text" => $bodyParam
)
)
),
"buttons" => array(
array("type" => "quick_reply", "postback_id" => base64_encode("name_".$activity->getId()."_".$meteo)),
array("type" => "url", "postback_id" => base64_encode("location=".$location->getId()."&event=".$activity->getId()."&user=".$user->getId()."&type=activity"."&url=".base64_encode($buttonUrl)."&extra=".$bodyParam)),
)
);
array_push($cards,
$paramsActivity
);
}
if($seeMore){
//See more
$paramsActivity = array(
"header" => array(
"type" => "image",
"url" => $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg"
),
"buttons" => array(
array("type" => "quick_reply", "postback_id" => base64_encode("more_".$categoryUrl->getMetaValue()."_".$meteo)),
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())),
)
);
array_push($cards,
$paramsActivity
);
}
$payload = array(
"template_name" => $template->getName(),
"lang" => $this->templateLangCode[$lang],
// "body" => array(
// array(
// "type" => "text",
// "text" => $translator->trans("dialog." . $translateBodyKey, [], "camprodon.messages", $lang)
// )
// ),
"cards" => $cards
);
$res = (object)$meta->sendTemplate(
$type,
Utilities::dcrypt($user->getPhone()),
$location,
$payload
);
$messageId = "";
if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $user->getPhone() );
$logWhatsapp->setPrefix( $user->getPrefix() );
$logWhatsapp->setText( Emoji::encode( $payload["template_name"] ." - ".$category->getMetaKey()));
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$logWhatsapp->setConversationId(null);
$logWhatsapp->setTemplate(null);
$em->persist($logWhatsapp);
$em->flush();
if($placesTracking){
foreach($placesTrackingData as $act){
$logTracking = new LogTracking();
$logTracking->setEvent($act["actId"]);
$logTracking->setDateCreated($now);
$logTracking->setType("activity_shown");
$logTracking->setUser($user);
$logTracking->setLocation($location);
$logTracking->setExtraInfo($act['name']);
$logTracking->setUrl(null);
$em->persist($logTracking);
}
}else{
foreach($activitiesAI18n as $act){
$logTracking = new LogTracking();
$logTracking->setEvent($act->getActivity()->getId());
$logTracking->setDateCreated($now);
$logTracking->setType("activity_shown");
$logTracking->setUser($user);
$logTracking->setLocation($location);
$logTracking->setExtraInfo($act->getMetaValue());
$logTracking->setUrl(null);
$em->persist($logTracking);
}
}
$em->flush();
// die();
}
//OLD
// public function createCarousel($doctrine, $translator, $meta, $user, $category, $location, $lang, $seeMore, $template, $meteo, $translateBodyKey = "", $random = false){
// $em = $doctrine->getManager();
// $activityRepo = $em->getRepository(Activity::class);
// $activityI18nRepo = $em->getRepository(ActivityI18n::class);
// $categoryI18nRepo = $em->getRepository(CategoryI18n::class);
// $now = new \DateTime('now');
// $now->setTimezone(new \DateTimeZone('Europe/Madrid'));
// $type = $_ENV['meta_PAYLOAD__CAROUSEL'];
// $categoryUrl = $categoryI18nRepo->findOneBy(array("category" => $category, "lang" => $lang, "metaKey" => "url"));
// $cards = array();
// if($random){
// $activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC")); //Limit of cards to be showed
// shuffle($activities);
// $activities = array_slice($activities, 0, $this->carouselLimit);
// }else{
// $activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC"), $this->carouselLimit); //Limit of cards to be showed
// }
// $activitiesAI18n = [];
// foreach($activities as $activity){
// $aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
// $bodyParam = "";
// $headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg";
// $buttonUrl = "https://visitcamprodon.cat/benvinguts/";
// foreach($aI18n as $activityData){
// if($activityData->getMetaKey() == "name"){
// $bodyParam = $activityData->getMetaValue();
// //Save activities aI18n info into an array for later use
// $activitiesAI18n[] = $activityData;
// }else if($activityData->getMetaKey() == "image"){
// $headerImg = $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/'.$activityData->getMetaValue();
// }else if($activityData->getMetaKey() == "url"){
// $buttonUrl = $activityData->getMetaValue();
// }
// }
// $paramsActivity = array(
// "header" => array(
// "type" => "image",
// "url" => $headerImg
// ),
// "body" => array(
// "parameters" => array(
// array(
// "type" => "text",
// "text" => $bodyParam
// )
// )
// ),
// "buttons" => array(
// array("type" => "quick_reply", "postback_id" => base64_encode("name_".$activity->getId()."_".$meteo)),
// array("type" => "url", "postback_id" => base64_encode("location=".$location->getId()."&event=".$activity->getId()."&user=".$user->getId()."&type=activity"."&url=".base64_encode($buttonUrl)."&extra=".$bodyParam)),
// )
// );
// array_push($cards,
// $paramsActivity
// );
// }
// if($seeMore){
// //See more
// $paramsActivity = array(
// "header" => array(
// "type" => "image",
// "url" => $_SERVER['HTTP_HOST']."/images/locations/".$location->getName().'/categories/'.$category->getMetaKey().".jpg"
// ),
// "buttons" => array(
// array("type" => "quick_reply", "postback_id" => base64_encode("more_".$categoryUrl->getMetaValue()."_".$meteo)),
// 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())),
// )
// );
// array_push($cards,
// $paramsActivity
// );
// }
// $payload = array(
// "template_name" => $template->getName(),
// "lang" => $this->templateLangCode[$lang],
// // "body" => array(
// // array(
// // "type" => "text",
// // "text" => $translator->trans("dialog." . $translateBodyKey, [], "camprodon.messages", $lang)
// // )
// // ),
// "cards" => $cards
// );
// $res = (object)$meta->sendTemplate(
// $type,
// Utilities::dcrypt($user->getPhone()),
// $location,
// $payload
// );
// $messageId = "";
// if ( $res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
// $logWhatsapp = new LogWhatsapp();
// $logWhatsapp->setMessageId($messageId);
// $logWhatsapp->setPhone( $user->getPhone() );
// $logWhatsapp->setPrefix( $user->getPrefix() );
// $logWhatsapp->setText( Emoji::encode( $payload["template_name"] ." - ".$category->getMetaKey()));
// $logWhatsapp->setStatus( "outbound" );
// $logWhatsapp->setDateCreated( $now );
// $logWhatsapp->setTimestampProvider( $now->getTimestamp() );
// $logWhatsapp->setUser( $user );
// $logWhatsapp->setLocation( $location );
// $logWhatsapp->setLang( $user->getLang() );
// $logWhatsapp->setConversationId(null);
// $logWhatsapp->setTemplate(null);
// $em->persist($logWhatsapp);
// $em->flush();
// foreach($activitiesAI18n as $act){
// $logTracking = new LogTracking();
// $logTracking->setEvent($act->getActivity()->getId());
// $logTracking->setDateCreated($now);
// $logTracking->setType("activity_shown");
// $logTracking->setUser($user);
// $logTracking->setLocation($location);
// $logTracking->setExtraInfo($act->getMetaValue());
// $logTracking->setUrl(null);
// $em->persist($logTracking);
// }
// $em->flush();
// // die();
// }
public function sendStartOver($doctrine, $translator, $meta, $user, $location, $lang){
$em = $doctrine->getManager();
$buttonsRepo = $em->getRepository(Buttons::class);
$now = new \DateTime('now');
$now->setTimezone(new \DateTimeZone('Europe/Madrid'));
$meta->setLog("[META] Camprodon Start FLow AGAIN", Utilities::ecrypt("Starts FLOW AGAIN"), $location, $user->getPhone());
$options = array();
$buttons = $buttonsRepo->getTextButton($location, 0, $lang);
$btns0 = array();
foreach($buttons as $btn0){
if($btn0['postbackText'] != 'meteo_yes_start'){
array_push($btns0, [
"postback_id" => $btn0['postbackText'],
"text" => $btn0['text']
]);
}
}
$responseMessage = [
"body" => $translator->trans('dialog.start_over_flow_welcome', [], "camprodon.messages", $lang),
"buttons" => $btns0
];
//Escull una d'aquestes opcions o escriu la teva paraula
//Si no es boton -> pregunta normal
$res = (object)$meta->sendMessage(
$_ENV['gs_PAYLOAD__QUICK_REPLY'],
Utilities::dcrypt($user->getPhone()),
$responseMessage,
$location,
$options
);
$messageId = "";
if ($res && $res->messages[0]->id) $messageId = $res->messages[0]->id;
$logWhatsapp = new LogWhatsapp();
$logWhatsapp->setConversationId(null);
$logWhatsapp->setMessageId($messageId);
$logWhatsapp->setPhone( $user->getPhone() );
$logWhatsapp->setPrefix( $user->getPrefix() );
$logWhatsapp->setTemplate( null );
$logWhatsapp->setText( Emoji::encode( $responseMessage["body"] ) );
$logWhatsapp->setStatus( "outbound" );
$logWhatsapp->setDateCreated( $now );
$logWhatsapp->setTimestampProvider( $now->getTimestamp() );
$logWhatsapp->setUser( $user );
$logWhatsapp->setLocation( $location );
$logWhatsapp->setLang( $user->getLang() );
$em->persist($logWhatsapp);
$em->flush();
}
/**
* @Route("/testtest", name="testtest", methods={"GET","POST"})
*
*/
public function testtest(Request $request, ManagerRegistry $doctrine, ExternalCalls $externalCalls){
$em = $doctrine->getManager();
$locationsRepository = $em->getRepository(Locations::class);
$location = $locationsRepository->findOneBy(array("name" => $this->location));
$text = "que carnicerias hay";
$result = $externalCalls->GPTCheckCategory($text);
dd($result);
if ( isset($_GET['question']) && !empty($_GET['question']) ) {
$result = $this->askGPT($_GET['question'], $location, $doctrine);
}
echo $result;
die();
}
/**
* @Route("/testquestion", name="testquestion", methods={"GET","POST"})
*
*/
public function testQuestion(Request $request, ManagerRegistry $doctrine){
$em = $doctrine->getManager();
$locationsRepository = $em->getRepository(Locations::class);
$location = $locationsRepository->findOneBy(array("name" => $this->location));
$result = "Question empty";
if ( isset($_GET['question']) && !empty($_GET['question']) ) {
$result = $this->askGPT($_GET['question'], $location, $doctrine);
}
echo $result;
die();
}
/**
* @Route("/update/places", name="updtae_places", methods={"GET"})
*
*/
// public function updatePlaces(Request $request, ManagerRegistry $doctrine, ExternalCalls $externalCalls){
// $em = $doctrine->getManager();
// $locationsRepository = $em->getRepository(Locations::class);
// $categoryRepo = $em->getRepository(Category::class);
// $activityRepo = $em->getRepository(Activity::class);
// $activityI18nRepo = $em->getRepository(ActivityI18n::class);
// $location = $locationsRepository->findOneBy(array("name" => $this->location));
// $catName = "hotels";
// $seeMore = false;
// $cats = ['hotels'];
// foreach($cats as $catego){
// $category = $categoryRepo->findOneBy(array("metaKey" => $catego));
// $activities = $activityRepo->findBy(array("category" => $category, "location" => $location), array("sort" => "ASC")); //Limit of cards to be showed
// $places = array();
// //How many places
// $placesCount = ($catName == 'campings' ? 2 : 4);
// // shuffle($activities);
// // $activities = array_slice($activities, 0, $placesCount);
// foreach($activities as $activity){
// $aI18n = $activityI18nRepo->findBy(array("activity" => $activity, "lang" => "ca")); //TODO - Ficar $lang quan estiguin totes les traduccions
// $place = array();
// $hasMaps = false;
// $hasPlace = false;
// foreach($aI18n as $activityData){
// // if($activityData->getMetaKey() == "placeApi"){
// // $hasPlace = true;
// // $place = json_decode($activityData->getMetaValue());
// // if(is_array($place)){
// // array_push($places, $place[0]);
// // }
// // }
// if($activityData->getMetaKey() == "name"){
// $place = $externalCalls->googleMapsApi($activityData->getMetaValue(), $location);
// // dd($place);
// if(is_array($place)){
// $place[0]["photo_id"] = $externalCalls->googleMapsApiImages($place[0]["photo_id"]);
// // dd($place);
// array_push($places, $place[0]);
// }
// }
// if($activityData->getMetaKey() == "maps"){
// $hasMaps = true;
// }
// }
// if(!$hasMaps && is_array($place) && count($place) > 0){
// $aI18nNew = new ActivityI18n();
// $aI18nNew->setMetaKey("maps");
// $aI18nNew->setMetaValue($place[0]['url']);
// $aI18nNew->setLang('ca');
// $aI18nNew->setActivity($activity);
// $em->persist($aI18nNew);
// $em->flush();
// }
// if(!$hasPlace && is_array($place) && count($place) > 0){
// $aI18nNew = new ActivityI18n();
// $aI18nNew->setMetaKey("placeApi");
// $aI18nNew->setMetaValue(json_encode($place[0]));
// $aI18nNew->setLang('ca');
// $aI18nNew->setActivity($activity);
// $em->persist($aI18nNew);
// $em->flush();
// }
// }
// }
// dump($places);
// die();
// }
}