Как уведомить мобильное приложение о входящем вызове Twilio? Уже протестировано демо-приложение Twilio для Android с сервером узла, но оно не работает

public function mobileCallTwimlResponse(Request $request): VoiceResponse
    {
        $from = $request->From ?? config('services.twilio.number');
        $to = $request->To;
        $dial = $this->twimlResponse->dial(null, ['callerId' => $from]);

        if (!$to) {
            $this->twimlResponse->say('  "Congratulations! You have made your first call! Good bye."');
        } elseif (is_string($to)) {
            $dial->number($to);
        } else {
            $dial->client($from);
        }

        return $this->twimlResponse;
    }

    public function receiveCall(Request $request)
    {

        $account_sid = config('services.twilio.accountSid');
        $auth_token = config('services.twilio.authToken');
        $twilio_client = new Client($account_sid, $auth_token);
        $from = $request->From ?? config('services.twilio.number');
        $to = $request->To;
        $call = null;
        $url = route('mobile_receive_call');
        if (!$to) {
            $call = $twilio_client->calls->create("client:customer", $from,
                array(
                    "url" => $url,
                ));
        } elseif (is_numeric($to)) {
            $call = $twilio_client->calls->create($to, $from,
                array(
                    "url" => $url,
                ));
        } else {
            $to = "client:" . $to;
            $call = $twilio_client->calls->create($to, $from,
                array(
                    "url" => $url,
                ));
        }

        return $call->sid;
    }

    public function incomingCall()
    {
        return $this->twimlResponse->say('incoming call responding');
    }

У меня есть приведенный выше код для получения входящего вызова в мое мобильное приложение, но я не могу понять, как twilio отправляет уведомление о входящем вызове в мое мобильное приложение и через какое мобильное приложение пользователь отвечает на вызов. Я установил push-учетные данные в API создания токена.

 private $accessToken;

    public function __construct(AccessToken $accessToken)
    {
        $this->accessToken = $accessToken;
    }

    public function token($applicationSid, $identity = 'customer', $page_url = null): string
    {
        $forPage = $page_url;
        /*if ($forPage === route('dashboard', [], false)) {
            $this->accessToken->setIdentity('support_agent');
        } else {
            $this->accessToken->setIdentity('customer');
        }*/

        $this->accessToken->setIdentity($identity);

        // Create Voice grant
        $voiceGrant = new VoiceGrant();
        $voiceGrant->setOutgoingApplicationSid($applicationSid);

        // Optional: add to allow incoming calls
        $voiceGrant->setIncomingAllow(true);
        $voiceGrant->setPushCredentialSid(config('services.twilio.push_credential_sid'));
        // Add grant to token
        $this->accessToken->addGrant($voiceGrant);

        // render token to string
        return $this->accessToken->toJWT();
    } 

но как триггер Twilio уведомляет FCM? он справится с этим сам по себе, или им нужно написать код на стороне сервера, где вызывается веб-перехватчик входящего вызова, и через этот код уведомление о входящем вызове отправляется в мобильное приложение?


person khawar Ali    schedule 29.12.2020    source источник


Ответы (1)


Токен для приложения Android/Ios:

public function __construct(VoiceCallTokenService $callTokenService)
    {
        $this->callTokenService = $callTokenService;
    }

 public function tokenForMobile(): JsonResponse
    {
        $user = auth()->user();
        $identity = TwilioHelper::substrPhoneNumber($user->twilio_number);
        $this->callTokenService->setPushCredentialSid(config('services.twilio.ios_push_credential_sid'));
        $token = $this->callTokenService->token(config('services.twilio.applicationSidForMobile'), $identity);
        return response()->json(['voice_call_token' => $token]);
    }

Вспомогательный метод SubStrPhoneNumber:

public static function substrPhoneNumber($phone)
    {
        if ($phone[0] === "+") {
            $phone = substr($phone, 1);
        }
        return $phone;
    }

В качестве идентификатора для вызова использовался $to:

$to = $request->To; //+923222333322

Но этот номер содержит знак +, исключая знак +, он начинает работать для меня. то есть

$to = "923222333322"

person khawar Ali    schedule 16.03.2021