public function onCall(CallbackEvent $event) { $callEvent = $event->getCallEvent(); /** @var Call $call */ $call = $callEvent->getCall(); $account = $call->getAccount(); if ($call->getDirection() != CallInterface::DIRECTION_INCOMING) { return; } $converter = new ObjectScalarConverter(); if ($callEvent instanceof CallEventInterface) { if (!$call->getClient() instanceof ClientInterface) { return; } $client = $call->getClient(); $managerIds = []; if ($call->getCalledUsers()->count()) { $managerIds = $converter->reverseConvertCollection($call->getCalledUsers()); } $company = null; if ($client->getCompany() instanceof CompanyInterface) { $company = $client->getCompany()->getName(); } $message = ['managerIds' => $managerIds, 'event' => 'incoming-call', 'data' => ['clientId' => $client->getId(), 'name' => $client->getFirstName() . ' ' . $client->getLastName(), 'company' => $company, 'position' => $client->getPosition()]]; $this->redis->publish('events.' . $account->getDomain(), json_encode($message)); } }
public function onNewCaller(CallbackEvent $event) { $callEvent = $event->getCallEvent(); /** @var Call $call */ $call = $callEvent->getCall(); // Prepare new client information $client = $call->getClient(); $client->setFirstName('from call center'); if ($callEvent->getTreeName() || $callEvent->getTreeNumber()) { $condition = new ChannelCondition(); $condition->setAccount($this->accountManager->getCurrentAccount()); $condition->setTreeName($callEvent->getTreeName())->setTreeNumber($callEvent->getTreeNumber()); $channel = $this->channelManager->searchOne($condition); if ($channel instanceof Channel) { $call->getClient()->setChannel($channel); } } }
public function onHangup(CallbackEvent $event) { $callEvent = $event->getCallEvent(); /** @var Call $call */ $call = $callEvent->getCall(); if ($call->getDirection() == CallInterface::DIRECTION_INCOMING) { if ($call->getUser() instanceof UserInterface && $call->getAnswerEvent() instanceof AnswerEvent) { $this->callManager->calcTalkDuration($call); $call->setNumber($call->getAnswerEvent()->getDstNumber()); $this->activityManager->prepareIncomingCallNote($call); } } else { if ($call->getDirection() == CallInterface::DIRECTION_OUTBOUND) { if ($call->getAnswerEvent() instanceof AnswerEvent) { $this->callManager->calcTalkDuration($call); } } else { throw new CallDirectionException($callEvent); } } }