![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/app/bundles/SmsBundle/Integration/Twilio/ |
<?php namespace Mautic\SmsBundle\Integration\Twilio; use libphonenumber\NumberParseException; use libphonenumber\PhoneNumberFormat; use libphonenumber\PhoneNumberUtil; use Mautic\LeadBundle\Entity\Lead; use Mautic\SmsBundle\Sms\TransportInterface; use Psr\Log\LoggerInterface; use Twilio\Exceptions\ConfigurationException; use Twilio\Exceptions\TwilioException; use Twilio\Rest\Client; class TwilioTransport implements TransportInterface { private ?Client $client = null; public function __construct( private Configuration $configuration, private LoggerInterface $logger ) { } /** * @param string $content * * @return bool|string */ public function sendSms(Lead $lead, $content) { $number = $lead->getLeadPhoneNumber(); if (null === $number) { return false; } try { $messagingServiceSid = $this->configuration->getMessagingServiceSid(); $this->configureClient(); $this->client->messages->create( $this->sanitizeNumber($number), $this->createPayload($messagingServiceSid, $content) ); return true; } catch (NumberParseException $numberParseException) { $this->logger->warning( $numberParseException->getMessage(), ['exception' => $numberParseException] ); return $numberParseException->getMessage(); } catch (ConfigurationException $configurationException) { $message = $configurationException->getMessage() ?: 'mautic.sms.transport.twilio.not_configured'; $this->logger->warning( $message, ['exception' => $configurationException] ); return $message; } catch (TwilioException $twilioException) { $this->logger->warning( $twilioException->getMessage(), ['exception' => $twilioException] ); return $twilioException->getMessage(); } } /** * @param string $number * * @return string * * @throws NumberParseException */ private function sanitizeNumber($number) { $util = PhoneNumberUtil::getInstance(); $parsed = $util->parse($number, 'US'); return $util->format($parsed, PhoneNumberFormat::E164); } /** * @return mixed[] */ private function createPayload(string $messagingServiceSid, string $content): array { return [ 'messagingServiceSid' => $messagingServiceSid, 'body' => $content, ]; } /** * @throws ConfigurationException */ private function configureClient(): void { if ($this->client) { // Already configured return; } $this->client = new Client( $this->configuration->getAccountSid(), $this->configuration->getAuthToken() ); } }