Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/modules/messageservice/lib/Providers/Edna/WhatsApp/Old/
Upload File :
Current File : /var/www/homesaver/www/bitrix/modules/messageservice/lib/Providers/Edna/WhatsApp/Old/Sender.php

<?php

namespace Bitrix\MessageService\Providers\Edna\WhatsApp\Old;

use Bitrix\Main\Error;
use Bitrix\Main\Result;
use Bitrix\Main\Localization\Loc;
use Bitrix\MessageService\Providers;
use Bitrix\MessageService\Providers\Constants\InternalOption;
use Bitrix\MessageService\Providers\Edna\WhatsApp\ExternalSender;
use Bitrix\MessageService\Providers\Edna\WhatsApp\StatusResolver;
use Bitrix\MessageService\Sender\Result\MessageStatus;
use Bitrix\MessageService\Sender\Result\SendMessage;

class Sender extends Providers\Edna\WhatsApp\Sender
{
	public function __construct(
		Providers\OptionManager $optionManager,
		Providers\SupportChecker $supportChecker,
		Providers\Edna\EdnaRu $utils,
		EmojiConverter $emoji
	)
	{
		parent::__construct($optionManager, $supportChecker, $utils, $emoji);

		$this->emoji = $emoji;
	}

	public function sendMessage(array $messageFields): SendMessage
	{
		if (!$this->supportChecker->canUse())
		{
			$result = new SendMessage();
			$result->addError(new Error('Service is unavailable'));

			return $result;
		}

		$requestParams = $this->getSendMessageParams($messageFields)->getData();
		$method = $this->getSendMessageMethod($messageFields);

		if ($method === 'imOutHSM')
		{
			$this->sendHSMtoChat($messageFields);
		}

		$result = new SendMessage();

		$externalSender =
			new ExternalSender(
				$this->optionManager->getOption(InternalOption::API_KEY),
				Constants::API_ENDPOINT
			)
		;

		$requestResult = $externalSender->callExternalMethod($method, $requestParams);
		if (!$requestResult->isSuccess())
		{
			$result->addErrors($requestResult->getErrors());

			return $result;
		}

		$apiData = $requestResult->getData();
		$result->setExternalId($apiData['id']);
		$result->setAccepted();

		return $result;
	}

	public function getMessageStatus(array $messageFields): MessageStatus
	{
		$result = new MessageStatus();
		$result->setId($messageFields['ID']);
		$result->setExternalId($messageFields['ID']);

		if (!$this->supportChecker->canUse())
		{
			$result->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_EDNARU_USE_ERROR')));
			return $result;
		}

		$externalSender =
			new ExternalSender(
				$this->optionManager->getOption(InternalOption::API_KEY),
				Constants::API_ENDPOINT
			)
		;

		$apiResult = $externalSender->callExternalMethod("imOutMessage/{$messageFields['ID']}");
		if (!$apiResult->isSuccess())
		{
			$result->addErrors($apiResult->getErrors());
		}
		else
		{
			$apiData = $apiResult->getData();

			$result->setStatusText($apiData['dlvStatus']);
			$result->setStatusCode((new StatusResolver())->resolveStatus($apiData['dlvStatus']));
		}

		return $result;
	}
	/**
	 * Converts message body text. Encodes emoji in the text, if there are any emoji.
	 *
	 * @param string $text
	 *
	 * @return string
	 */
	public function prepareMessageBodyForSave(string $text): string
	{
		return $this->emoji->convertEmoji($text, Providers\Constants\InternalOption::EMOJI_ENCODE);
	}

	/**
	 * Returns request params for sending template or simple message.
	 * @param array $messageFields Message fields.
	 *
	 * @return Result
	 */
	protected function getSendMessageParams(array $messageFields): Result
	{
		$messageFields['MESSAGE_BODY'] = $this->emoji->convertEmoji($messageFields['MESSAGE_BODY'], Providers\Constants\InternalOption::EMOJI_DECODE);
		$params = [
			'id' => uniqid('', true),
			'subject' => $messageFields['MESSAGE_FROM'],
			'address' => str_replace('+', '', $messageFields['MESSAGE_TO']),
			'contentType' => 'text',
			'text' => $messageFields['MESSAGE_BODY'],
		];

		if ($this->isTemplateMessage($messageFields))
		{
			$params['imType'] = 'whatsapp';
			$params['text'] = $messageFields['MESSAGE_HEADERS']['template']['text'];

			$templateFields = ['header', 'footer', 'keyboard'];

			foreach ($templateFields as $templateField)
			{
				if (
					isset($messageFields['MESSAGE_HEADERS']['template'][$templateField])
					&& count($messageFields['MESSAGE_HEADERS']['template'][$templateField]) > 0
				)
				{
					$params[$templateField] = $messageFields['MESSAGE_HEADERS']['template'][$templateField];
				}
			}

			$params = $this->emoji->convertEmojiInTemplate($params, InternalOption::EMOJI_DECODE);
		}

		return (new Result)->setData($params);
	}

	/**
	 * Returns method for sending template or simple message.
	 *
	 * @param array $messageFields Message fields.
	 *
	 * @return string
	 */
	protected function getSendMessageMethod(array $messageFields): string
	{
		$method = 'imOutMessage';
		if ($this->isTemplateMessage($messageFields))
		{
			$method = 'imOutHSM';
		}

		return $method;
	}


}