Внедрение Twilio Video Calling API

Я реализую API-интерфейс вызова видео для моего проекта, когда я создаю токен доступа из https://www.twilio.com/user/account/video/dev-tools/testing-tools от «Создать токен доступа» опция даст мне новый сгенерированный токен и когда я буду использовать его, как показано ниже

var accessToken = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0.eyJqdGkiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0LTE0NjYwODE1NzQiLCJpc3MiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0Iiwic3ViIjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsImV4cCI6MTQ2NjA4NTE3NCwiZ3JhbnRzIjp7ImlkZW50aXR5IjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsInJ0YyI6eyJjb25maWd1cmF0aW9uX3Byb2ZpbGVfc2lkIjoiVlMwNmYzZDdiNTczNGVlYTJhZDdjMWEzYzY4YmMzNjhjNSJ9fX0.976iQ2bMB_tAORxjGkgZFJ-UYGfTidTwfvV0fzySMP0";

var accessManager = new Twilio.AccessManager(accessToken);

это будет прекрасно работать для меня.

Теперь, когда я использую второй вариант «Сгенерируйте токен доступа через вспомогательную библиотеку с PHP» и попробуйте сгенерировать токен с

// Create an Access Token
$token = new Services_Twilio_AccessToken(
$accountSid,
$apiKeySid,
$apiKeySecret,
$ttl=3600,
$identity=$identity
);

// Grant access to Conversations
$grant = new Services_Twilio_Auth_ConversationsGrant();
$grant->setConfigurationProfileSid($configurationProfileSid);
$token->addGrant($grant);

echo json_encode(array(
'identity' => $identity,
'token' => $token->toJWT(),
));

он также будет генерировать токен для меня, но когда я использую сгенерированный токен как

Токен ответа:

{"identity":"GoldenZeldaGunsight","token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImN0eSI6InR3aWxpby1mcGE7dj0xIn0
.eyJqdGkiOiJTSzk3ZDI2NGIyOTU1YjM2OWMyOGU4MjA4M2E5MjlmMmE0LTE0NjYxMzc4MTkiLCJpc3MiOiJTSzk3ZDI2NGIyOTU
1YjM2OWMyOGU4MjA4M2E5MjlmMmE0Iiwic3ViIjoiQUM5ZWE5YjY3ZmM3ZjBjMzE2NTBjNGRmNzkyYzhjYjI2NiIsIm5iZiI6MTQ
2NjEzNzgxOSwiZXhwIjoxNDY2MTQxNDE5LCJncmFudHMiOnsiaWRlbnRpdHkiOiJHb2xkZW5aZWxkYUd1bnNpZ2h0IiwicnRjIjp7ImNvbmZpZ3VyYXRpb25fcHJvZmlsZV9zaWQiOiJWUzA2ZjNkN2I1NzM0ZWVhMmFkN2MxYTNjNjhiYzM2OGM1In19fQ
.vkOxI1tMIWNQVm1AUL1ySTZY5ZyjYDTdvWCKnVIkLmk"}

Я использую этот токен ответа в

var accessManager = new Twilio.AccessManager(data.token);

это не будет работать для меня. это даст мне ошибку как

«Не удалось подключиться к Twilio: undefined …»

Отклик :

Thu Jun 23 2016 13:22:58 GMT+0530 (India Standard Time) | sip.transport | received WebSocket text message:

SIP/2.0 403 Forbidden
CSeq: 81 REGISTER
Call-ID: 4704t9hejng0hmhih2ui8m
From: <sip:AC9ea9b67fc7f0c31650c4df792c8cb266@AC9ea9b67fc7f0c31650c4df792c8cb266.endpoint.twilio.com>;tag=l3bsmhddlr
To: <sip:AC9ea9b67fc7f0c31650c4df792c8cb266@AC9ea9b67fc7f0c31650c4df792c8cb266.endpoint.twilio.com>;tag=72132201_50f4772f_8dc5c7c0-ce8e-4a6e-803a-72f6c761338b
Via: SIP/2.0/WSS 127.0.0.1:60911;branch=z9hG4bK2792018;rport=60911
Server: Twilio
X-Twilio-Error: 31201 Authentication failed
Content-Length: 0

Также я проверил оба токена на https://jwt.io , его работа идеально подходит для меня.

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

Заранее спасибо.

решаемая

Ребята, я получил решение этой проблемы с помощью службы поддержки.

Решение

В моей старой версии /Services/Twilio/AccessToken.php У меня есть атрибут «nbf»: 1466743969(not-before time), which means it is not valid until04:52:49 UTC. However according to the timestamp in the log file it was04:50:27 UTC (10:20:27 IST) `. Если системные часы сервера, генерирующего маркер доступа, будут быстрыми в пару минут, это приведет к недопустимому не ранее времени.

Более поздние версии библиотеки twilio-php опускали "nbf" атрибут по умолчанию, из-за этой проблемы с перекосом часов. Если вы получили последнюю версию AccessToken.php здесь:

https://github.com/twilio/twilio-php/blob/master/Services/Twilio/AccessToken.php

он будет генерировать токены доступа без "nbf",

Альтернативным решением было бы убедиться, что время сервера точное, но вам потребуется доступ администратора для его настройки.

4

Решение

Похоже, вы не включили twilio’sability.php. Согласно Twilio Docs, Ваш PHP должен выглядеть примерно так

include '/pathto/Services/Twilio/Capability.php';

// Twilio API credentials here
$accountSid = 'ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$authToken  = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy';

$capability = new Services_Twilio_Capability($accountSid, $authToken);
$capability->allowClientOutgoing('APabe7650f654fc34655fc81ae71caa3ff');
$token = $capability->generateToken();

затем вы получаете доступ к токену через js:

     <script type="text/javascript">

Twilio.Device.setup("<?php echo $token; ?>");

Twilio.Device.ready(function (device) {
$("#log").text("Ready");
});

Twilio.Device.error(function (error) {
$("#log").text("Error: " + error.message);
});

Twilio.Device.connect(function (conn) {
$("#log").text("Successfully established call");
});

function call() {
Twilio.Device.connect();
}
</script>

Я надеюсь, что это ставит вас на правильный путь.

РЕДАКТИРОВАТЬ:

Я не осознавал, что приведенный выше скрипт предназначен для аудио, поэтому просто для будущих пользователей решил разместить здесь видео-сценарии.

  1. Клиент: запрос токена доступа (используйте jquery)

    $.getJSON('/token', function(data) {
    // The data sent back from the server should contain a long string - this is
    // the JWT token you need to initialize the SDK. Read more about JWT
    // (JSON Web Token) at http://jwt.io
    console.log(data.token);
    
    //If your app has an existing authentication system, you can use
    // the e-mail address or username that uniquely identifies a user instead.
    console.log(data.identity);
    });
    
  2. Сервер: создайте токен доступа (php)

      <?php
    require_once('./twilio-php/Services/Twilio.php');
    require_once('./randos.php');
    require_once('./config.php');
    
    // choose a random username for the connecting user
    $identity = randomUsername();
    
    // Create access token, which we will serialize and send to the client
    $token = new Services_Twilio_AccessToken(
    $TWILIO_ACCOUNT_SID,
    $TWILIO_API_KEY,
    $TWILIO_API_SECRET,
    3600,
    $identity
    );
    
    // Grant access to Conversations
    $grant = new Services_Twilio_Auth_ConversationsGrant();
    $grant->setConfigurationProfileSid($TWILIO_CONFIGURATION_SID);
    $token->addGrant($grant);
    
    // return serialized token and the user's randomly generated ID
    echo json_encode(array(
    'identity' => $identity,
    'token' => $token->toJWT(),
    ));
    
  3. Клиент: инициализируйте SDK с помощью токена доступа

    // Create an AccessManager to manage our Access Token
    var accessManager = new Twilio.AccessManager('$TWILIO_ACCESS_TOKEN');
    
    // Create a Conversations Client and connect to Twilio's backend
    conversationsClient = new Twilio.Conversations.Client(accessManager);
    conversationsClient.listen().then(function() {
    console.log('Connected to Twilio!');
    }, function (error) {
    console.log('Could not connect to Twilio: ' + error.message);
    });
    

Есть дополнительная информация на Twilio Video Docs и больше информации о работе с разговорами Вот

3

Другие решения

Я получил решение этой проблемы с помощью службы поддержки.

Решение

В моей старой версии /Services/Twilio/AccessToken.php У меня есть атрибут "nbf": 1466743969(not-before time)Это означает, что он не действителен до 04:52:49 UTC. Однако согласно метке времени в файле журнала это было 04:50:27 UTC (10:20:27 IST) `. Если системные часы сервера, генерирующего маркер доступа, будут быстрыми в пару минут, это приведет к недопустимому не ранее времени.

В более поздних версиях библиотеки twilio-php атрибут nbf по умолчанию пропущен из-за этой проблемы с перекосом часов. Если вы получили последнюю версию AccessToken.php здесь:

https://github.com/twilio/twilio-php/blob/master/Services/Twilio/AccessToken.php

он сгенерирует токены доступа без «nbf».

Альтернативным решением было бы убедиться, что время сервера точное, но вам потребуется доступ администратора для его настройки.

0

По вопросам рекламы [email protected]