• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_incoming.php
  • Класс: CVoxImplantIncoming
  • Вызов: CVoxImplantIncoming::SendCommand
static function SendCommand($params, $waitResponse = false)
{
	// TODO check $params
	$result = new BitrixMainResult();
	$call = VIModelCallTable::getByCallId($params['CALL_ID']);
	if (!$call)
	{
		$result->addError(new BitrixMainError('Call not found', 'NOT_FOUND'));
		return $result;
	}

	global $USER;

	$answer['COMMAND'] = $params['COMMAND'];
	$answer['OPERATOR_ID'] = $params['OPERATOR_ID'] ?? $USER->GetId();
	if ($params['COMMAND'] == CVoxImplantIncoming::COMMAND_INVITE)
	{
	}
	else if ($params['COMMAND'] == CVoxImplantIncoming::RULE_WAIT)
	{
	}
	else if ($params['COMMAND'] == CVoxImplantIncoming::RULE_QUEUE)
	{
	}
	else if ($params['COMMAND'] == CVoxImplantIncoming::RULE_USER)
	{
		$answer['USER_ID'] = intval($params['USER_ID']);
	}
	else if ($params['COMMAND'] == CVoxImplantIncoming::RULE_VOICEMAIL)
	{
		$answer['USER_ID'] = intval($params['USER_ID']);
	}
	else if ($params['COMMAND'] == CVoxImplantIncoming::COMMAND_BUSY)
	{
	}
	else if ($params['COMMAND'] == CVoxImplantIncoming::COMMAND_DEQUEUE)
	{
		$answer['OPERATOR'] = $params['OPERATOR'];
	}
	else if ($params['COMMAND'] == CVoxImplantIncoming::COMMAND_INTERCEPT)
	{
		$answer['OPERATOR'] = $params['OPERATOR'];
	}
	else
	{
		$answer['COMMAND'] = CVoxImplantIncoming::RULE_HUNGUP;
	}

	if(isset($params['DEBUG_INFO']))
	{
		$answer['DEBUG_INFO'] = $params['DEBUG_INFO'];
	}
	$answer['CALL_ID'] = $params['CALL_ID'];

	$http = VIHttpClientFactory::create(array(
		'waitResponse' => $waitResponse
	));
	$queryResult = $http->query('POST', $call['ACCESS_URL'], Json::encode($answer));
	if($waitResponse)
	{
		if ($queryResult === false)
		{
			$httpClientErrors = $http->getError();
			if(!empty($httpClientErrors))
			{
				foreach ($httpClientErrors as $code => $message)
				{
					$result->addError(new BitrixMainError($message, $code));
				}
			}
		}

		$responseStatus = $http->getStatus();
		if ($responseStatus == 200)
		{
			// nothing here
		}
		else if ($http->getStatus() == 404)
		{
			$result->addError(new BitrixMainError('Call scenario is not running', 'NOT_FOUND'));
		}
		else
		{
			$result->addError(new BitrixMainError("Scenario server returns code " . $http->getStatus()));

		}
	}

	return $result;
}