Viswanath VB Posted July 28, 2022 Share Posted July 28, 2022 It will be great if have Trustpilot’s automatic invitation feature. https://support.trustpilot.com/hc/en-us/articles/360016393399 https://developers.trustpilot.com/ Quote Link to comment Share on other sites More sharing options...
Seb Posted July 28, 2022 Share Posted July 28, 2022 We've got this on the roadmap. In the meantime I actually wrote a standalone script for this as a proof of concept using the Upmind API just to test how the AFS worked. It's very very basic and was simply a proof of concept, but should work fine for you until we do a proper integration into Upmind You'll need to configure the settings in Trustpilot -- <?php class upmindAuth { public $api_url; public $origin; public $token; function __construct($origin){ $this->api_url = 'api.upmind.io'; //live api url $this->origin = $origin; // Brand Origin } public function validate($username,$password){ if (!$this->api_token(array('username'=>$username,'password'=>$password,'grant_type'=>'admin'))){ return false; } return true; } public function api_token($params){ $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://".$this->api_url."/oauth/access_token", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode($params), CURLOPT_HTTPHEADER => array( "accept: application/vnd.pub.v1+json", "cache-control: no-cache", "content-type: application/json", "origin: $this->origin", ), )); $response = curl_exec($curl); $err = curl_error($curl); if ($err) { return array('success'=>false,'error'=>"cURL Error #:" . $err); } else { $actor = json_decode($response); $this->token = $actor->access_token; return true; } } public function get($endpoint){ $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://".$this->api_url.$endpoint, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "authorization: Bearer ".$this->token, "cache-control: no-cache", "origin: ".$this->origin, ), )); $response = curl_exec($curl); $err = curl_error($curl); if ($err) { echo "cURL Error #:" . $err; } else { return json_decode($response); } } public function post($endpoint,$params){ $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://".$this->api_url.$endpoint, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $params, CURLOPT_HTTPHEADER => array( "authorization: Bearer ".$this->token, "cache-control: no-cache", "origin: ".$this->origin, ), )); $response = curl_exec($curl); $err = curl_error($curl); if ($err) { echo "cURL Error #:" . $err; } else { return json_decode($response); } } } // Upmind API Creds $instance = ""; // Your Upmind Brand URL (E.g. https://my.domain.com) $user = ""; // username $pass = ""; // password //Trustpilot email $tpemail = ""; // Trustpilot invite email // Overrides $templateId = false; $senderEmail = ""; // e.g. [email protected] $senderName = ""; // e.g. Brand Name $replyTo = ""; // e.g. [email protected] $delay = 90; // Number of days after signup to send the email // Now we get latest orders from Upmind $upmind = new upmindAuth($instance); if (!$upmind->validate($user,$pass)){ echo "Username and password incorrect"; die; } // Single API call to get the data we need $endpoint = "/api/admin/invoices?filter[category.slug]=new_contract&with=client,status,products,products.contracts_product,products.product.image&limit=50&offset=0&order=-created_at"; if ($delay){ $startdate = date("Y-m-d",time()-(86400*$delay)); $endpoint = $endpoint."&filter[created_at%7Clte]=".$startdate; } $output = $upmind->get($endpoint); // Loop through data foreach ($output->data as $d){ $skip = false; empty($client); $client['email'] = $d->client->email;// $client['name'] = $d->client->public_name; $client['orderid'] = $d->number; $client['products'] = array(); foreach ($d->products as $p){ $client['products'][] = array("name" => $p->product_name, "sku" => $p->product_id, "brand" => $p->invoice_brand->name, "productUrl" => $instance."/order/product?pid=".$p->product_id, "imageUrl" => $p->product->image->full_url ); if ($p->contracts_product->status->code !== 'contract_active') { // This service is not active so do not request review $skip = true; } } $snippet = array( "recipientEmail" => $client['email'], "recipientName"=> $client['name'], "referenceId"=> "Order " . $client['orderid'], "locale" => "en-GB", "senderEmail" => $senderEmail, "senderName" => $senderName, "replyTo" => $replyTo, "products" => $client['products'] ); // Set overrride values if they exist if ($templateId){ $snippet['templateId'] = $templateId; } if (!$skip){ $emailContent = "<script type=\"application/json+trustpilot\">" . json_encode($snippet) . "</script>"; mail($tpemail,"Invoice " . $client['orderid'],$emailContent); } } 1 Quote Link to comment Share on other sites More sharing options...
Seb Posted September 27, 2023 Share Posted September 27, 2023 To add to this now, you can also set up BCCs on email templates to use the Trustpilot invite service, but we do not think this is the best solution because you are sharing your emails with a third party Quote Link to comment Share on other sites More sharing options...
Recommended Posts