이 라이브러리에는 최소 PHP 버전 8.1이 필요합니다.
Vonage의 API를 사용하기 위한 PHP 클라이언트 라이브러리입니다. 이를 사용하려면 Vonage 계정이 필요합니다. 여기에서 무료로 가입하세요.
클라이언트 라이브러리를 사용하려면 Vonage 계정을 만들어야 합니다.
프로젝트에 PHP 클라이언트 라이브러리를 설치하려면 Composer를 사용하는 것이 좋습니다.
composer require vonage/client
이는 실제로 HTTP 클라이언트와 이 핵심 라이브러리를 포함하는 래퍼 라이브러리를 가리킨다는 점에 유의하세요. 원하는 경우 프로젝트에서 사용하는 HTTP 클라이언트를 선택할 수 있는 기능을 통해 Composer에서 직접 이 라이브러리를 설치할 수 있습니다.
자신의 프로젝트에서 이 라이브러리를 사용하기 위해 이 저장소를 복제할 필요는 없습니다. Composer를 사용하여 Packagist에서 설치하세요.
Composer를 처음 사용하는 경우 유용할 수 있는 몇 가지 리소스는 다음과 같습니다.
Composer를 사용하는 경우 프로젝트의 부트스트랩 파일에 오토로더가 포함되어 있는지 확인하세요.
require_once " vendor/autoload.php " ;
API 키와 비밀번호를 사용하여 클라이언트를 만듭니다.
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
테스트 목적으로 vonage/client
api.vonage.com
에서 요청하는 URL을 다른 URL로 변경할 수 있습니다. VonageClient
인스턴스를 생성할 때 base_api_url
이 포함된 배열을 두 번째 매개변수로 제공하면 이를 수행할 수 있습니다.
$ client = new Vonage Client (
new Vonage Client Credentials Basic ( API_KEY , API_SECRET ),
[
' base_api_url ' => ' https://example.com '
]
);
일반적으로 rest.nexmo.com
에 도달하는 API의 경우 생성자에 대한 옵션으로 base_rest_url
을 제공하면 해당 요청이 변경됩니다.
Vonage의 SMS API를 사용하여 SMS 메시지를 보내려면 $client->sms()->send()
메서드를 호출하세요.
메시지 객체는 SMS 메시지를 생성하는 데 사용됩니다. 각 메시지 유형은 필수 매개변수로 구성될 수 있으며 유창한 인터페이스는 선택적 매개변수에 대한 액세스를 제공합니다.
$ text = new Vonage SMS Message SMS ( VONAGE_TO , VONAGE_FROM , ' Test message using PHP client library ' );
$ text -> setClientRef ( ' test-message ' );
메시지 객체는 send
메소드로 전달됩니다:
$ response = $ client -> sms ()-> send ( $ text );
전송되면 메시지 객체를 사용하여 응답 데이터에 액세스할 수 있습니다.
$ data = $ response -> current ();
echo " Sent message to " . $ data -> getTo () . " . Balance is now " . $ data -> getRemainingBalance () . PHP_EOL ;
각 SMS 메시지는 여러 메시지로 분할될 수 있으므로 응답에는 생성된 각 메시지에 대한 개체가 포함됩니다. PHP의 표준 count()
함수를 사용하여 생성된 메시지 수를 확인할 수 있습니다. 첫 번째 메시지를 얻으려면 응답에 current()
메서드를 사용할 수 있습니다.
$ data = $ response -> current ();
$ data -> getRemainingBalance ();
foreach ( $ response as $ index => $ data ){
$ data -> getRemainingBalance ();
}
보내기 예제에는 전체 작업 예제도 있습니다.
SMS 클라이언트 코드 내에서 정적 isGsm7()
메서드를 사용하여 메시지를 GSM-7 인코딩으로 보낼지 아니면 유니코드로 보낼지 결정할 수 있습니다. 예는 다음과 같습니다.
$ sms = new Vonage SMS Message SMS ( ' 123 ' , ' 456 ' , ' is this gsm7? ' );
if ( Vonage SMS Message SMS :: isGsm7 ( $ text )) {
$ sms -> setType ( ' text ' );
} else {
$ sms -> setType ( ' unicode ' );
}
인바운드 메시지는 웹훅으로 애플리케이션에 전송됩니다. 클라이언트 라이브러리는 웹후크에서 인바운드 메시지 객체를 생성하는 방법을 제공합니다.
try {
$ inbound = Vonage SMS Webhook Factory:: createFromGlobals ();
error_log ( $ inbound -> getText ());
} catch ( InvalidArgumentException $ e ) {
error_log ( ' invalid message ' );
}
메시지 서명에 관한 문서를 읽어볼 수도 있습니다.
SMS API는 API 비밀이 아닌 "서명 비밀"을 사용하여 서명을 생성하고 추가함으로써 메시지에 서명하는 기능을 지원합니다. 지원되는 알고리즘은 다음과 같습니다.
md5hash1
md5
sha1
sha256
sha512
귀하의 애플리케이션과 Vonage 모두 어떤 알고리즘이 사용되는지에 동의해야 합니다. 대시보드에서 계정 설정 페이지를 방문하고 "API 설정"에서 사용할 알고리즘을 선택할 수 있습니다. 이는 또한 "서명 비밀"(API 비밀과 다름)을 찾을 수 있는 위치이기도 합니다.
이러한 자격 증명과 사용할 알고리즘을 사용하여 클라이언트를 만듭니다. 예를 들면 다음과 같습니다.
$ client = new Vonage Client ( new Vonage Client Credentials SignatureSecret ( API_KEY , SIGNATURE_SECRET , ' sha256 ' ));
이 클라이언트를 사용하면 SMS API 메시지가 서명된 메시지로 전송됩니다.
메시지 서명에 관한 문서를 읽어볼 수도 있습니다.
수신 메시지에 대해 메시지 서명을 활성화한 경우 SMS 웹후크에는 sig
, nonce
및 timestamp
필드가 포함됩니다. Vonage의 서명인지 확인하려면 수신 데이터, 서명 비밀 및 서명 방법을 사용하여 서명 개체를 생성합니다. 그런 다음 수신된 실제 서명(보통 _GET['sig']
)과 함께 check()
메서드를 사용하여 서명이 올바른지 확인합니다.
$ signature = new Vonage Client Signature ( $ _GET , SIGNATURE_SECRET , ' sha256 ' );
// is it valid? Will be true or false
$ isValid = $ signature -> check ( $ _GET [ ' sig ' ]);
서명 비밀 및 기타 제공된 매개변수를 사용하여 서명을 계산하고 수신 서명 값과 비교하여 확인할 수 있습니다.
메시지 API는 다양한 아웃바운드 메시지를 보내는 데 사용됩니다. 현재 지원되는 플랫폼은 다음과 같습니다.
각 플랫폼에는 보낼 수 있는 메시지 카테고리가 다릅니다. 예를 들어 WhatsApp에서는 텍스트, 이미지, 오디오, 비디오, 파일 또는 템플릿을 보낼 수 있지만 Viber에서는 텍스트나 이미지만 보낼 수 있습니다. . VonageMessagesChannel
네임스페이스에서 보낼 수 있는 모든 메시지 유형을 찾을 수 있습니다. 각 유형이 이런 방식으로 분리되는 이유는 플랫폼과 메시지 유형에 따라 API 호출에서 서로 다른 매개변수가 필요하기 때문입니다.
VonageMessagesClient
SMS API 클라이언트와 유사한 방식으로 구성됩니다. 차이점은 인증이 JWT(JSON 웹 토큰)이거나 기본 인증일 수 있다는 것입니다. 이 ReadMe의 '사용' 섹션에서 고객의 자격 증명을 설정하는 방법에 대한 자세한 정보를 찾을 수 있습니다.
다음은 몇 가지 예입니다.
먼저 다음과 같이 새로운 WhatsAppText 개체를 만들어야 합니다.
$ whatsAppText = new Vonage Messages Channel WhatsApp WhatsAppText (
FROM_NUMBER ,
TO_NUMBER ,
' this is a WA text from vonage '
);
메시지 API 클라이언트에는 제공된 모든 메시지 유형을 보낼 수 있는 send()
메서드가 있습니다. 따라서 이 메시지를 보내기 위해 Vonage 클라이언트를 이미 올바르게 설정했다고 가정하고 다음 코드를 사용합니다.
$ client -> messages ()-> send ( $ whatsAppText );
오류 범위가 200인 경우 응답은 JSON 페이로드가 되고, 400/500 내에 있는 경우 관련 APIException
발생합니다.
일부 Channel
개체를 만들려면 더 많은 인수가 필요합니다. 생성자 인수와 API 문서를 비교하여 이러한 요구 사항의 대략적인 매핑을 확인할 수 있습니다. 이러한 메시지 중 일부는 재사용 가능한 사용자 지정 개체( VonageMessagesMessageObjects
네임스페이스 아래에 있음)를 사용합니다. 그 중 하나는 이미지입니다. Viber 이미지를 보내는 방법의 예는 다음과 같습니다.
$ imageObject = Vonage Messages MessageObjects ImageObject (
' https://picsum.photos/200/300 ' ,
' image caption '
);
$ viberImage = new Vonage Messages Channel Viber ViberImage (
FROM_NUMBER ,
TO_NUMBER ,
$ imageObject
);
$ client -> messages ()-> send ( $ viberImage );
Vonage의 확인 API를 사용하면 사용자가 가입 중에 자신의 전화번호를 제공했음을 쉽게 증명하거나 로그인 중에 2단계 인증을 구현할 수 있습니다.
다음과 같은 코드를 사용하여 확인 프로세스를 시작할 수 있습니다.
$ request = new Vonage Verify Request ( ' 14845551212 ' , ' My App ' );
$ response = $ client -> verify ()-> start ( $ request );
echo " Started verification with an id of: " . $ response -> getRequestId ();
사용자가 수신된 PIN 코드를 입력하면 요청 ID와 PIN을 사용하여 check()
메서드(아래 참조)를 호출하여 PIN이 올바른지 확인합니다.
진행 중인 확인을 취소하거나 다음번 확인 코드 전송 시도를 트리거하려면 기존 확인 개체를 클라이언트 라이브러리에 전달하거나 간단히 요청 ID를 사용하면 됩니다.
$ client -> verify ()-> trigger ( ' 00e6c3377e5348cdaf567e1417c707a5 ' );
$ client -> verify ()-> cancel ( ' 00e6c3377e5348cdaf567e1417c707a5 ' );
마찬가지로 확인을 확인하려면 사용자가 제공한 PIN과 요청 ID가 필요합니다.
try {
$ client -> verify ()-> check ( ' 00e6c3377e5348cdaf567e1417c707a5 ' , ' 1234 ' );
echo " Verification was successful (status: " . $ verification -> getStatus () . " ) n" ;
} catch ( Exception $ e ) {
echo " Verification failed with status " . $ e -> getCode ()
. " and error text "" . $ e -> getMessage () . ""n" ;
}
요청 ID를 이용하여 인증 상태를 확인하거나, 과거 인증 결과를 확인할 수 있습니다. 그러면 검증 객체는 풍부한 인터페이스를 제공합니다.
$ client -> verify ()-> search ( ' 00e6c3377e5348cdaf567e1417c707a5 ' );
echo " Codes checked for verification: " . $ verification -> getRequestId () . PHP_EOL ;
foreach ( $ verification -> getChecks () as $ check ){
echo $ check -> getDate ()-> format ( ' d-m-y ' ) . ' ' . $ check -> getStatus () . PHP_EOL ;
}
Vonage의 확인 API에는 PSD2(결제 서비스 지침)에서 요구하고 결제에 대해 고객으로부터 확인을 받아야 하는 애플리케이션에서 사용되는 SCA(보안 고객 인증) 지원이 있습니다. 여기에는 메시지의 수취인과 금액이 포함됩니다.
다음과 같이 결제 확인을 시작하세요.
$ request = new Vonage Verify RequestPSD2 ( ' 14845551212 ' , ' My App ' );
$ response = $ client -> verify ()-> requestPSD2 ( $ request );
echo " Started verification with an id of: " . $ response [ ' request_id ' ];
사용자가 받은 핀 코드를 입력하면 요청 ID와 핀을 사용하여 /check
엔드포인트를 호출하여 핀이 올바른지 확인합니다.
Vonage의 검증 v2는 비동기식 워크플로에 더 많이 의존합니다. 웹후크 및 개발자에게 더욱 맞춤화된 확인 워크플로를 제공합니다. 확인을 시작하려면 verify2
네임스페이스 아래에 있는 API 클라이언트가 필요합니다.
확인 요청을 하려면 확인 모드를 전달하기 위한 '기본' 통신 채널이 필요합니다. 다양한 '워크플로'를 추가하여 이러한 상호 작용을 맞춤 설정할 수 있습니다. 각 워크플로 유형에 대해 초기 워크플로를 처리하도록 만들 수 있는 verify2 클래스가 있습니다. 예를 들어:
$ client = new Vonage Client (
new Vonage Client Credentials Basic ( API_KEY , API_SECRET ),
);
$ smsRequest = new Vonage Verify2 Request SMSRequest ( ' TO_NUMBER ' );
$ client -> verify2 ()-> startVerification ( $ smsRequest );
SMSRequest
개체는 기본값을 확인하고 SMS를 사용하기 위한 기본 workflow
개체를 만듭니다. 그러나 대체 논리로 작동하는 여러 워크플로를 추가할 수 있습니다. 예를 들어, 사용자로부터 PIN 코드를 알아내려고 시도하는 확인을 생성하려는 경우입니다. SMS이지만 SMS 전달에 문제가 있는 경우 음성 대체를 추가하고 싶다면 추가할 수 있습니다.
$ client = new Vonage Client (
new Vonage Client Credentials Basic ( API_KEY , API_SECRET ),
);
$ smsRequest = new Vonage Verify2 Request SMSRequest ( ' TO_NUMBER ' , ' my-verification ' );
$ voiceWorkflow = new Vonage Verify2 VerifyObjects VerificationWorkflow ( Vonage Verify2 VerifyObjects VerificationWorkflow:: WORKFLOW_VOICE , ' TO_NUMBER ' );
$ smsRequest -> addWorkflow ( $ voiceWorkflow );
$ client -> verify2 ()-> startVerification ( $ smsRequest );
이렇게 하면 원래 SMS 요청에 음성 워크플로가 추가됩니다. 확인 요청은 제공된 순서대로 프로세스를 해결하려고 시도합니다(요청 유형에 대한 기본값부터 시작).
기본 요청 유형은 다음과 같습니다.
SMSRequest
WhatsAppRequest
WhatsAppInterativeRequest
EmailRequest
VoiceRequest
SilentAuthRequest
워크플로를 추가하려면 VerificationWorkflow
개체 내에서 사용 가능한 유효한 워크플로를 상수로 볼 수 있습니다. 더 나은 개발자 환경을 위해 개체에서 발생하는 유효성 검사로 인해 잘못된 워크플로를 생성할 수 없습니다.
코드를 제출하려면 API의 특성상 메소드를 try/catch로 묶어야 합니다. 코드가 정확하면 메서드는 true
부울을 반환합니다. 실패하면 API에서 포착해야 하는 관련 예외가 발생합니다.
$ code = ' 1234 ' ;
try {
$ client -> verify2 ()-> check ( $ code );
} catch ( Exception $ e ) {
var_dump ( $ e -> getMessage ())
}
확인 워크플로 중에 이벤트가 발생하면 이벤트와 업데이트가 웹훅으로 실행됩니다. PSR-7 표준을 준수하는 수신 서버 요청은 더 나은 상호 작용을 위해 웹훅 값 개체로 수화될 수 있습니다. 원시 배열에서 수분을 공급할 수도 있습니다. 성공하면 이벤트/업데이트 유형에 대한 값 개체를 다시 받게 됩니다. 가능한 웹후크는 다음과 같습니다:
VerifyEvent
VerifyStatusUpdate
VerifySilentAuthUpdate
// From a request object
$ verificationEvent = Vonage Verify2 Webhook Factory:: createFromRequest ( $ request );
var_dump ( $ verificationEvent -> getStatus ());
// From an array
$ payload = $ request -> getBody ()-> getContents ()
$ verificationEvent = Vonage Verify2 Webhook Factory:: createFromArray ( $ payload );
var_dump ( $ verificationEvent -> getStatus ());
필요한 경우 최종 사용자가 조치를 취하기 전에 요청을 취소할 수 있습니다.
$ requestId = ' c11236f4-00bf-4b89-84ba-88b25df97315 ' ;
$ client -> verify2 ()-> cancel ( $ requestId );
모든 $client->voice()
메서드에서는 VonageClientCredentialsKeypair
또는 Keypair
자격 증명을 포함하는 VonageClientCredentialsContainer
사용하여 클라이언트를 구성해야 합니다.
$ basic = new Vonage Client Credentials Basic ( VONAGE_API_KEY , VONAGE_API_SECRET );
$ keypair = new Vonage Client Credentials Keypair (
file_get_contents ( VONAGE_APPLICATION_PRIVATE_KEY_PATH ),
VONAGE_APPLICATION_ID
);
$ client = new Vonage Client ( new Vonage Client Credentials Container ( $ basic , $ keypair ));
OutboundCall
개체를 사용하여 통화를 시작할 수 있습니다.
$ outboundCall = new Vonage Voice OutboundCall (
new Vonage Voice Endpoint Phone ( ' 14843331234 ' ),
new Vonage Voice Endpoint Phone ( ' 14843335555 ' )
);
$ outboundCall
-> setAnswerWebhook (
new Vonage Voice Webhook ( ' https://example.com/webhooks/answer ' )
)
-> setEventWebhook (
new Vonage Voice Webhook ( ' https://example.com/webhooks/event ' )
)
;
$ response = $ client -> voice ()-> createOutboundCall ( $ outboundCall );
시스템이 애플리케이션에 연결된 번호에서 FROM 번호를 무작위로 선택하도록 하려면 VonageVoiceOutboundCall
생성자에 대한 두 번째 매개변수를 생략하면 시스템이 무작위로 번호를 선택합니다. .
SimSwap은 SIM이 셀룰러 장치 내부에 있었던 기간을 확인하기 위해 CAMARA 표준을 사용합니다. 이는 인증 메커니즘이 다른 API보다 약간 더 복잡하다는 것을 의미합니다. 다음이 필요합니다.
Vonage 글로벌 네트워크 플랫폼에 등록된 자신만의 가입자 번호를 갖기 위해. 대시보드 애플리케이션 ID 개인 키
이 API에는 checkSimSwap
및 checkSimSwapDate
두 가지 방법을 사용할 수 있습니다.
다음은 두 가지를 모두 사용하는 예입니다.
$ credentials = new Vonage Client Credentials Gnp (
' 0777888888 ' ,
file_get_contents ( ' ./private.key ' ),
' 0dadaeb4-7c79-4d39-b4b0-5a6cc08bf537 '
);
$ client = new Vonage Client ( $ credentials );
$ swapResult = $ client -> simswap ()-> checkSimSwap ( ' 07999999999 ' , 500 );
if ( $ swapResult ) {
echo " Warning: SIM Swapped recently "
} else {
echo " SIM OK "
};
// Finding the swap date
echo $ client -> simswap ()-> checkSimSwapDate ( ' 07999999999 ' );
번호 확인은 CAMARA API 표준을 사용하며 요청이 유효한지 확인하는 데 사용됩니다. 다른 SDK와 달리 SDK는 프로세스 시작과 프로세스 끝으로 분할됩니다.
다음이 필요합니다.
Vonage 글로벌 네트워크 플랫폼에 등록된 자신만의 가입자 번호를 갖기 위해. 대시보드 애플리케이션 ID Vonage 대시보드에서 다운로드한 개인 키
buildFrontEndUrl()
메소드를 사용하십시오. 이를 호출할 때 애플리케이션이 고유 code
포함된 콜백을 수신할 것으로 예상되는 경로를 제공해야 합니다. 이 기능이 작동하려면 승인된 지역에서 승인된 전화번호가 있어야 합니다. 다음은 더미 예입니다. class VerificationController extends MyFrameworkAbsractController
{
$ credentials = new Vonage Client Credentials Gnp(
' 077380777111 ' ,
file_get_contents ( ' ../private.key ' ),
' 0dadaeb4-7c79-4d39-b4b0-5a6cc08bf537 '
)
$ client = new Vonage Client ( $ credentials );
$ verifyUrl = $ client -> numberVerification ()-> buildFrontEndUrl (
' 07777777777 ' ,
' https://myapp.com/auth/numberVerify '
);
return $ this -> render ( ' verify.html.twig ' , [
' verifyLink ' => $ verifyUrl
]);
}
code
추출한 후 이를 수행하는 데 필요한 인증 방법을 처리합니다. 이 메서드는 API에서 부울을 반환합니다. 예는 다음과 같습니다. $ code = $ request -> get ( ' code ' );
$ result = $ client -> numberVerification ()-> verifyNumber (
' 09947777777 ' ,
$ code
);
if ( $ result ) {
Auth:: login ( $ request -> user ())
}
return redirect ( ' login ' );
}
이 API는 인앱 메시징에 사용되며 광범위한 기능과 개념을 포함합니다. 자세한 내용은 API 문서를 참조하세요.
$ credentials = new Vonage Client Credentials Keypair ( file_get_contents ( ' ./path-to-my-key.key ' , ' my-app-id ' ));
$ client = new Vonage Client ( $ credentials );
$ filter = new Vonage Conversation Filter ListConversationFilter ();
$ filter -> setStartDate ( ' 2018-01-01 10:00:00 ' );
$ filter -> setEndDate ( ' 2019-01-01 10:00:00 ' )
$ conversations = $ client -> conversations ()-> listConversations ( $ filter )
var_dump ( $ conversations );
$ credentials = new Vonage Client Credentials Keypair ( file_get_contents ( ' ./path-to-my-key.key ' , ' my-app-id ' ));
$ client = new Vonage Client ( $ credentials );
$ conversation = new CreateConversationRequest ( ' customer_chat ' , ' Customer Chat ' , ' https://example.com/image.png ' );
$ conversation -> setTtl ( 60 );
$ conversationNumber = new ConversationNumber ( ' 447700900000 ' );
$ conversationCallback = new ConversationCallback ( ' https://example.com/eventcallback ' );
$ conversationCallback -> setEventMask ( ' member:invited, member:joined ' );
$ conversationCallback -> setApplicationId ( ' afa393df-2c46-475b-b2d6-92da4ea05481 ' );
$ conversationCallback -> setNccoUrl ( ' https://example.com/ncco ' );
$ conversation -> setNumber ( $ conversationNumber );
$ conversation -> setConversationCallback ( $ conversationCallback );
$ response = $ this -> conversationsClient -> createConversation ( $ conversation );
var_dump ( $ response );
$ credentials = new Vonage Client Credentials Keypair ( file_get_contents ( ' ./path-to-my-key.key ' , ' my-app-id ' ));
$ client = new Vonage Client ( $ credentials );
$ filter = new ListUserConversationsFilter ();
$ filter -> setState ( ' INVITED ' );
$ filter -> setIncludeCustomData ( true );
$ filter -> setOrderBy ( ' created ' );
$ filter -> setStartDate ( ' 2018-01-01 10:00:00 ' );
$ filter -> setEndDate ( ' 2018-01-01 12:00:00 ' );
$ filter -> setPageSize ( 5 );
$ filter -> setOrder ( ' asc ' );
$ response = $ this -> conversationsClient -> listUserConversationsByUserId ( ' CON-d66d47de-5bcb-4300-94f0-0c9d4b948e9a ' );
foreach ( $ response as $ member ) {
$ members [] = $ member ;
}
var_dump ( $ members );
$ channel = Channel:: createChannel (Channel:: CHANNEL_TYPE_APP );
$ channel -> addUserFromTypes ([
' sms ' ,
' phone '
]);
$ channel -> addUserToField ( ' USR-82e028d9-9999-4f1e-8188-604b2d3471ec ' );
$ createMemberRequest = new CreateMemberRequest (
' invited ' ,
$ channel ,
' USR-82e028d9-5201-4f1e-8188-604b2d3471ec ' ,
' my_user_name ' ,
);
$ createMemberRequest -> setAudioPossible ( true );
$ createMemberRequest -> setAudioEnabled ( true );
$ createMemberRequest -> setAudioEarmuffed ( false );
$ createMemberRequest -> setAudioMuted ( false );
$ createMemberRequest -> setKnockingId ( ' 4f1e-8188 ' );
$ createMemberRequest -> setMemberIdInviting ( ' MEM-63f61863-4a51-4f6b-86e1-46edebio0391 ' );
$ createMemberRequest -> setFrom ( ' value ' );
$ response = $ this -> conversationsClient -> createMember (
$ createMemberRequest ,
' CON-63f61863-4a51-4f6b-86e1-46edebio0391 '
);
var_dump ( $ response );
NCCO 작업의 전체 매개변수 목록은 Voice API 문서에서 찾을 수 있습니다.
이러한 각 예에서는 다음 구조를 사용하여 호출에 작업을 추가합니다.
$ outboundCall = new Vonage Voice OutboundCall (
new Vonage Voice Endpoint Phone ( ' 14843331234 ' ),
new Vonage Voice Endpoint Phone ( ' 14843335555 ' )
);
$ ncco = new NCCO ();
// ADD ACTIONS TO THE NCCO OBJECT HERE
$ outboundCall -> setNCCO ( $ ncco );
$ response = $ client -> voice ()-> createOutboundCall ( $ outboundCall );
$ outboundCall = new Vonage Voice OutboundCall (
new Vonage Voice Endpoint Phone ( ' 14843331234 ' ),
new Vonage Voice Endpoint Phone ( ' 14843335555 ' )
);
$ ncco = new NCCO ();
$ ncco -> addAction ( Vonage Voice NCCO Action Record:: factory ([
' eventUrl ' => ' https://example.com/webhooks/event '
]);
$ outboundCall -> setNCCO ( $ ncco );
$ response = $ client -> voice ()-> createOutboundCall ( $ outboundCall );
귀하의 웹훅 URL은 다음과 같은 페이로드를 받게 됩니다.
{
"start_time": "2020-10-29T14:30:24Z",
"recording_url": "https://api.nexmo.com/v1/files/<recording-id>",
"size": 27918,
"recording_uuid": "<recording-id>",
"end_time": "2020-10-29T14:30:31Z",
"conversation_uuid": "<conversation-id>",
"timestamp": "2020-10-29T14:30:31.619Z"
}
그런 다음 다음과 같이 녹음을 가져와 저장할 수 있습니다.
$recordingId = '<recording-id>';
$recordingUrl = 'https://api.nexmo.com/v1/files/' . $recordingId;
$data = $client->get($recordingUrl);
file_put_contents($recordingId.'.mp3', $data->getBody());
$ outboundCall = new Vonage Voice OutboundCall (
new Vonage Voice Endpoint Phone ( ' 14843331234 ' ),
new Vonage Voice Endpoint Phone ( ' 14843335555 ' )
);
$ ncco = new NCCO ();
$ ncco -> addAction ( new Vonage Voice NCCO Action Talk ( ' This is a text to speech call from Vonage ' ));
$ outboundCall -> setNCCO ( $ ncco );
$ response = $ client -> voice ()-> createOutboundCall ( $ outboundCall );
$ outboundCall = new Vonage Voice OutboundCall (
new Vonage Voice Endpoint Phone ( ' 14843331234 ' ),
new Vonage Voice Endpoint Phone ( ' 14843335555 ' )
);
$ ncco = new NCCO ();
$ ncco -> addAction ( new Vonage Voice NCCO Action Stream ( ' https://example.com/sounds/my-audio.mp3 ' ));
$ outboundCall -> setNCCO ( $ ncco );
$ response = $ client -> voice ()-> createOutboundCall ( $ outboundCall );
음성은 물론 키패드 입력도 지원합니다. 주의. 입력 작업은 bargeIn
이 true
로 설정된 작업을 따라야 합니다.
$ outboundCall = new Vonage Voice OutboundCall (
new Vonage Voice Endpoint Phone ( ' 14843331234 ' ),
new Vonage Voice Endpoint Phone ( ' 14843335555 ' )
);
$ ncco = new NCCO ();
$ ncco -> addAction ( Vonage Voice NCCO Action Talk:: factory ( ' Please record your name. ' ,[
' bargeIn ' => true ,
]));
$ ncco -> addAction ( Vonage Voice NCCO Action Input:: factory ([
' eventUrl ' => ' https://example.com/webhooks/event ' ,
' type ' => [
' speech ' ,
],
' speech ' => [
' endOnSilence ' => true ,
],
]));
$ outboundCall -> setNCCO ( $ ncco );
$ response = $ client -> voice ()-> createOutboundCall ( $ outboundCall );
웹후크 URL은 음성 입력에 대한 상대적 신뢰 등급과 함께 사용자의 입력이 포함된 페이로드를 수신합니다.
$ outboundCall = new Vonage Voice OutboundCall (
new Vonage Voice Endpoint Phone ( ' 14843331234 ' ),
new Vonage Voice Endpoint Phone ( ' 14843335555 ' )
);
$ ncco = new NCCO ();
$ ncco -> addAction ( new Vonage Voice NCCO Action Talk ( ' We are just testing the notify function, you do not need to do anything. ' ));
$ ncco -> addAction ( new Vonage Voice NCCO Action Notify ([
' foo ' => ' bar ' ,
], new Vonage Voice Webhook ( ' https://example.com/webhooks/notify ' )));
$ outboundCall -> setNCCO ( $ ncco );
$ response = $ client -> voice ()-> createOutboundCall ( $ outboundCall );
웹훅 URL은 요청에 지정된 페이로드를 수신합니다.
VonageCallCall
객체를 사용하거나 통화의 UUID를 문자열로 사용하여 통화를 가져올 수 있습니다.
$ call = $ client -> voice ()-> get ( ' 3fd4d839-493e-4485-b2a5-ace527aacff3 ' );
echo $ call -> getDirection ();
필터를 사용하여 통화를 검색할 수도 있습니다.
$ filter = new Vonage Voice Filter VoiceFilter ();
$ filter -> setStatus ( ' completed ' );
foreach ( $ client -> search ( $ filter ) as $ call ){
echo $ call -> getDirection ();
}
응용 프로그램은 구성 컨테이너입니다. 배열 구조를 사용하여 하나를 만들 수 있습니다.
$ application = new Vonage Application Application ();
$ application -> fromArray ([
' name ' => ' test application ' ,
' keys ' => [
' public_key ' => ' -----BEGIN PUBLIC KEY-----nMIIBIjANBgkqhkiG9w0BAQEFAAOCAnKOxjsU4pf/sMFi9N0jqcSLcjxu33Gnd/vynKnlw9SENi+UZR44GdjGdmfm1ntL1eA7IBh2HNnkYXnAwYzKJoa4eO3n0kYWekeIZawIwe/g9faFgkev+1xsOnOUNhPx2LhuLmgwWSRS4L5W851Xe3fnUQIDAQABn-----END PUBLIC KEY-----n '
],
' capabilities ' => [
' voice ' => [
' webhooks ' => [
' answer_url ' => [
' address ' => ' https://example.com/webhooks/answer ' ,
' http_method ' => ' GET ' ,
],
' event_url ' => [
' address ' => ' https://example.com/webhooks/event ' ,
' http_method ' => ' POST ' ,
],
]
],
' messages ' => [
' webhooks ' => [
' inbound_url ' => [
' address ' => ' https://example.com/webhooks/inbound ' ,
' http_method ' => ' POST '
],
' status_url ' => [
' address ' => ' https://example.com/webhooks/status ' ,
' http_method ' => ' POST '
]
]
],
' rtc ' => [
' webhooks ' => [
' event_url ' => [
' address ' => ' https://example.com/webhooks/event ' ,
' http_method ' => ' POST ' ,
],
]
],
' vbc ' => []
]
]);
$ client -> applications ()-> create ( $ application );
클라이언트에 애플리케이션 객체를 전달할 수도 있습니다.
$ a = new Vonage Application Application ();
$ a -> setName ( ' PHP Client Example ' );
$ a -> getVoiceConfig ()-> setWebhook ( ' answer_url ' , ' https://example.com/webhooks/answer ' , ' GET ' );
$ a -> getVoiceConfig ()-> setWebhook ( ' event_url ' , ' https://example.com/webhooks/event ' , ' POST ' );
$ a -> getMessagesConfig ()-> setWebhook ( ' status_url ' , ' https://example.com/webhooks/status ' , ' POST ' );
$ a -> getMessagesConfig ()-> setWebhook ( ' inbound_url ' , ' https://example.com/webhooks/inbound ' , ' POST ' );
$ a -> getRtcConfig ()-> setWebhook ( ' event_url ' , ' https://example.com/webhooks/event ' , ' POST ' );
$ a -> disableVbc ();
$ client -> applications ()-> create ( $ a );
모든 애플리케이션을 반복할 수 있습니다.
foreach ( $ client -> applications ()-> getAll () as $ application ){
echo $ application -> getName () . PHP_EOL ;
}
또는 문자열 UUID나 애플리케이션 객체를 사용하여 애플리케이션을 가져올 수 있습니다.
$ application = $ client -> applications ()-> get ( ' 1a20a124-1775-412b-b623-e6985f4aace0 ' );
응용 프로그램 개체가 있으면 이를 수정하고 저장할 수 있습니다.
$ application = $ client -> applications ()-> get ( ' 1a20a124-1775-412b-b623-e6985f4aace0 ' );
$ application -> setName ( ' Updated Application ' );
$ client -> applications ()-> update ( $ application );
귀하의 계정이 소유한 번호를 나열하고 선택적으로 필터링을 포함할 수 있습니다.
search_pattern
:
0
- 숫자가 pattern
으로 시작됩니다.1
- 숫자에 pattern
포함됩니다.2
- 숫자가 pattern
으로 끝남 $ filter = new Vonage Numbers Filter OwnedNumbers ();
$ filter
-> setPattern ( 234 )
-> setSearchPattern ( Vonage Numbers Filter OwnedNumbers:: SEARCH_PATTERN_CONTAINS )
;
$ response = $ client -> numbers ()-> searchOwned ( null , $ filter );
has_application
:
true
- 번호가 애플리케이션에 첨부되어 있습니다.false
- 번호가 신청서에 첨부되지 않았습니다. $ filter = new Vonage Numbers Filter OwnedNumbers ();
$ filter -> setHasApplication ( true );
$ response = $ client -> numbers ()-> searchOwned ( $ filter );
application_id
:
$ filter = new Vonage Numbers Filter OwnedNumbers ();
$ filter -> setApplicationId ( " 66c04cea-68b2-45e4-9061-3fd847d627b8 " );
$ response = $ client -> numbers ()-> searchOwned ( $ filter );
특정 국가에서 구매할 수 있는 번호를 검색할 수 있습니다.
$ numbers = $ client -> numbers ()-> searchAvailable ( ' US ' );
기본적으로 처음 10개의 결과만 반환됩니다. 추가 VonageNumbersFilterAvailableNumbers
필터를 추가하여 검색 범위를 좁힐 수 있습니다.
번호를 구매하려면 번호 검색에서 반환된 값을 전달할 수 있습니다.
$ numbers = $ client -> numbers ()-> searchAvailable ( ' US ' );
$ number = $ numbers -> current ();
$ client -> numbers ()-> purchase ( $ number -> getMsisdn (), $ number -> getCountry ());
또는 번호와 국가를 수동으로 지정할 수도 있습니다.
$ client -> numbers ()-> purchase ( ' 14155550100 ' , ' US ' );
번호를 업데이트하려면 numbers()->update
사용하고 변경하려는 구성 옵션을 전달하세요. 설정을 지우려면 빈 값을 전달하세요.
$ number = $ client -> numbers ()-> get ( VONAGE_NUMBER );
$ number
-> setAppId ( ' 1a20a124-1775-412b-b623-e6985f4aace0 ' )
-> setVoiceDestination ( ' 447700900002 ' , ' tel ' )
-> setWebhook (
Vonage Number Number:: WEBHOOK_VOICE_STATUS ,
' https://example.com/webhooks/status '
)
-> setWebhook (
Vonage Number Number:: WEBHOOK_MESSAGE ,
' https://example.com/webhooks/inbound-sms '
)
;
$ client -> numbers ()-> update ( $ number );
echo " Number updated " . PHP_EOL ;
번호를 취소하려면 msisdn
을 제공하세요.
$ client -> numbers ()-> cancel ( ' 447700900002 ' );
API 비밀을 교체할 수 있도록 API가 제공됩니다. 모든 애플리케이션이 업데이트되면 새 비밀(최대 2개)을 생성하고 기존 비밀을 삭제할 수 있습니다.
비밀 목록을 얻으려면 다음 안내를 따르세요.
$ secretsCollection = $ client -> account ()-> listSecrets ( API_KEY );
/** @var VonageAccountSecret $secret */
foreach ( $ secretsCollection -> getSecrets () as $ secret ) {
echo " ID: " . $ secret -> getId () . " (created " . $ secret -> getCreatedAt () . " ) n" ;
}
새 비밀을 만들 수 있습니다(만든 날짜를 보면 어느 것이 어느 것인지 알 수 있습니다).
$ client -> account ()-> createSecret ( API_KEY , ' awes0meNewSekret!!; ' );
그리고 이전 비밀을 삭제하세요(아직 이 자격 증명을 사용하는 모든 애플리케이션은 작동이 중지됩니다).
try {
$ response = $ client -> account ()-> deleteSecret ( API_KEY , ' d0f40c7e-91f2-4fe0-8bc6-8942587b622c ' );
} catch ( Vonage Client Exception Request $ e ) {
echo $ e -> getMessage ();
}
전화하려는 국가의 국번을 알고 있는 경우 prefix-pricing
엔드포인트를 사용하여 해당 번호로 전화하는 데 드는 비용을 확인할 수 있습니다. 각 접두사는 여러 국가를 반환할 수 있습니다(예: 1
US
, CA
및 UM
반환).
$ results = $ client -> account ()-> getPrefixPricing ( ' 1 ' );
foreach ( $ results as $ price ) {
echo $ price -> getCountryCode (). PHP_EOL ;
echo $ price -> getCountryName (). PHP_EOL ;
foreach ( $ price -> getNetworks () as $ network ) {
echo $ network -> getName () . ' :: ' . $ network -> getCode (). ' :: ' . $ network -> getPrefixPrice (). PHP_EOL ;
}
echo " ---------------- " . PHP_EOL ;
}
계정에 얼마나 많은 크레딧이 남아 있는지 확인하세요.
$ response = $ client -> account ()-> getBalance ();
echo round ( $ response -> getBalance (), 2 ) . " EUR n" ;
계정의 현재 설정을 검사합니다.
$ response = $ client -> account ()-> getConfig ();
print_r ( $ response -> toArray ());
수신 SMS 메시지 및 배달 확인에 대한 기본 콜백 URL을 업데이트합니다.
$ response = $ client -> account ()-> updateConfig ([
" sms_callback_url " => " http://example.com/webhooks/incoming-sms " ,
" dr_callback_url " => " http://example.com/webhooks/delivery-receipt "
]);
print_r ( $ response -> toArray ());
Vonage의 네트워크 API를 사용하려면 Vonage 네트워크 레지스트리 내에서 활성화해야 합니다.
MSNDIN을 등록하면 SimSwap을 사용할 수 있습니다.
SimSwap은 글로벌 네트워크 플랫폼 인증 메커니즘을 사용하므로 인증 흐름이 다른 API 클라이언트와 약간 다르게 보입니다. 내부적으로 SDK는 CAMARA 표준 액세스 토큰을 구성하기 위한 여러 호출을 처리합니다.
다음은 SIM이 최근 교체되었는지 확인하는 예입니다.
$ credentials = new Vonage Client Credentials Gnp (
' tel:+447700900000 ' ,
fopen ( ' ./my-private-key ' ),
' my-application-id '
);
$ client = new Vonage Client ( $ credentials );
if ( $ client -> simswap ()-> checkSimSwap ( ' 07700009999 ' , 240 )) {
echo ' Warning: SIM Swap Check Failed '
} else {
echo ' SIM Swap Check Pass '
}
스왑 날짜를 검색하는 방법은 다음과 같습니다.
$ credentials = new Vonage Client Credentials Gnp (
' tel:+447700900000 ' ,
fopen ( ' ./my-private-key ' ),
' my-application-id '
);
$ client = new Vonage Client ( $ credentials );
$ date = $ client -> simswap ()-> checkSimSwapDate ( ' 07700009999 ' )
echo $ date;
Number Insights API를 사용하면 사용자는 번호가 유효한지 확인하고 사용 방법에 대해 자세히 알아볼 수 있습니다.
다음과 같이 basic()
또는 standard()
메서드를 사용할 수 있습니다( advanced()
메서드도 사용 가능하지만 고급 정보를 얻으려면 async 옵션을 사용하는 것이 좋습니다).
try {
$ insights = $ client -> insights ()-> basic ( PHONE_NUMBER );
echo $ insights -> getNationalFormatNumber ();
} catch ( Exception $ e ) {
// for the Vonage-specific exceptions, try the `getEntity()` method for more diagnostic information
}
데이터는 위 예의 $insights
변수에 반환됩니다.
고급 통찰력을 얻으려면 비동기 기능을 사용하고 웹훅이 전송될 URL을 제공하십시오.
try {
$ client -> insights ()-> advancedAsync ( PHONE_NUMBER , ' http://example.com/webhooks/number-insights ' );
} catch ( Exception $ e ) {
// for the Vonage-specific exceptions, try the `getEntity()` method for more diagnostic information
}
요청한 데이터가 포함된 수신 웹훅에서 예상되는 내용은 설명서를 확인하세요.
이 API는 기본 계정과 관련된 하위 계정을 생성 및 구성하고 계정 간에 크레딧, 잔액 및 구매 번호를 전송하는 데 사용됩니다. 하위 계정 API는 기본적으로 비활성화되어 있습니다. 하위 계정을 사용하려면 지원팀에 문의하여 계정에서 API를 활성화하세요.
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' 34kokdf ' ;
$ subaccounts = $ client -> subaccount ()-> getSubaccounts ( $ apiKey );
var_dump ( $ subaccounts );
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' acc6111f ' ;
$ payload = [
' name ' => ' sub name ' ,
' secret ' => ' s5r3fds ' ,
' use_primary_account_balance ' => false
];
$ account = new Account ();
$ account -> fromArray ( $ payload );
$ response = $ client -> subaccount ()-> createSubaccount ( $ apiKey , $ account );
var_dump ( $ response );
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' acc6111f ' ;
$ subaccountKey = ' bbe6222f ' ;
$ response = $ client -> subaccount ()-> getSubaccount ( $ apiKey , $ subaccountKey );
var_dump ( $ response );
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' acc6111f ' ;
$ subaccountKey = ' bbe6222f ' ;
$ payload = [
' suspended ' => true ,
' use_primary_account_balance ' => false ,
' name ' => ' Subaccount department B '
];
$ account = new Account ();
$ account -> fromArray ( $ payload );
$ response = $ client -> subaccount ()-> updateSubaccount ( $ apiKey , $ subaccountKey , $ account )
var_dump ( $ response );
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' acc6111f ' ;
$ filter = new Vonage Subaccount Filter Subaccount([ ' subaccount ' => ' 35wsf5 ' ])
$ transfers = $ client -> subaccount ()-> getCreditTransfers ( $ apiKey );
var_dump ( $ transfers );
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' acc6111f ' ;
$ transferRequest = ( new TransferCreditRequest ( $ apiKey ))
-> setFrom ( ' acc6111f ' )
-> setTo ( ' s5r3fds ' )
-> setAmount ( ' 123.45 ' )
-> setReference ( ' this is a credit transfer ' );
$ response = $ this -> subaccountClient -> makeCreditTransfer ( $ transferRequest );
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' acc6111f ' ;
$ filter = new Vonage Subaccount Filter Subaccount ([ ' end_date ' => ' 2022-10-02 ' ]);
$ transfers = $ client -> subaccount ()-> getBalanceTransfers ( $ apiKey , $ filter );
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' acc6111f ' ;
$ transferRequest = ( new TransferBalanceRequest ( $ apiKey ))
-> setFrom ( ' acc6111f ' )
-> setTo ( ' s5r3fds ' )
-> setAmount ( ' 123.45 ' )
-> setReference ( ' this is a credit transfer ' );
$ response = $ client -> subaccount ()-> makeBalanceTransfer ( $ transferRequest );
var_dump ( $ response );
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
$ apiKey = ' acc6111f ' ;
$ numberTransferRequest = ( new NumberTransferRequest ( $ apiKey ))
-> setFrom ( ' acc6111f ' )
-> setTo ( ' s5r3fds ' )
-> setNumber ( ' 4477705478484 ' )
-> setCountry ( ' GB ' );
$ response = $ client -> subaccount ()-> makeNumberTransfer ( $ numberTransferRequest );
var_dump ( $ response );
API | API 출시 상태 | 지원되나요? |
---|---|---|
계정 API | 일반 가용성 | |
알림 API | 일반 가용성 | |
애플리케이션 API | 일반 가용성 | |
감사 API | 베타 | |
대화 API | 베타 | |
디스패치 API | 베타 | |
외부 계정 API | 베타 | |
미디어 API | 베타 | |
회의 API | 일반 가용성 | |
메시지 API | 일반 가용성 | |
숫자 통찰력 API | 일반 가용성 | |
번호 관리 API | 일반 가용성 | |
가격 API | 일반 가용성 | |
사전 예방적 연결 API | 베타 | |
API 수정 | 일반 가용성 | |
보고서 API | 베타 | |
SMS API | 일반 가용성 | |
하위 계정 API | 일반 가용성 | |
API 확인 | 일반 가용성 | |
API 확인(버전 2) | 일반 가용성 | |
음성 API | 일반 가용성 |
시간이 지남에 따라 Vonage API는 발전하여 새로운 기능을 추가하고, 기존 기능의 작동 방식을 변경하고, 이전 방법과 기능을 더 이상 사용하지 않고 제거합니다. 개발자가 지원 중단 변경 사항을 알 수 있도록 SDK는 E_USER_DEPRECATION
경고를 트리거합니다. 이러한 경고로 인해 코드 실행이 중단되지는 않지만 프로덕션 환경에서는 문제가 될 수 있습니다.
이를 돕기 위해 기본적으로 이러한 알림은 표시되지 않습니다. 개발 중에는 show_deprecations
라는 추가 구성 옵션을 VonageClient
생성자에 전달하여 이러한 경고를 활성화할 수 있습니다. 이 옵션을 활성화하면 모든 지원 중단 알림이 표시됩니다.
$ client = new Vonage Client (
new Vonage Client Credentials Basic ( API_KEY , API_SECRET ),
[
' show_deprecations ' => true
]
);
프로덕션 환경에서 더 이상 사용되지 않는 알림이 너무 많다는 것을 알게 되면 구성 옵션이 없거나 최소한 false
로 설정되어 있는지 확인하세요.
unable to get local issuer certificate
일부 사용자는 다음 오류로 인해 요청하는 데 문제가 있습니다.
Fatal error: Uncaught exception 'GuzzleHttpExceptionRequestException' with message 'cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'
이는 일부 PHP 설치가 신뢰할 수 있는 CA 인증서 목록과 함께 제공되지 않기 때문입니다. 이는 시스템 구성 문제이며 cURL이나 Vonage에만 국한된 문제는 아닙니다.
중요 : 다음 단락에서는 CA 인증서 번들에 대한 링크를 제공합니다. Vonage는 이 번들의 안전성을 보장하지 않으므로 시스템에 CA 번들을 설치하기 전에 직접 검토해야 합니다.
이 문제를 해결하려면 신뢰할 수 있는 CA 인증서(예: 컬 번들) 목록을 다운로드하여 컴퓨터에 복사하세요. 이 작업이 완료되면 php.ini
편집하고 curl.cainfo
매개변수를 설정합니다.
# Linux/MacOS
curl.cainfo = "/etc/pki/tls/cacert.pem"
# Windows
curl.cainfo = "C:phpextrassslcacert.pem"
HTTPlug 어댑터 또는 PSR-18 호환 HTTP 클라이언트의 사용을 허용하므로 필요한 경우 대체 구성으로 클라이언트를 생성할 수 있습니다. 예를 들어 로컬 프록시를 고려하거나 설정과 관련된 다른 것을 처리할 수 있습니다.
다음은 서버에 대한 경로가 없는 경우 긴 지연을 피하기 위해 기본 시간 제한을 5초로 줄이는 예입니다.
$ adapter_client = new Http Adapter Guzzle6 Client ( new GuzzleHttp Client ([ ' timeout ' => 5 ]));
$ vonage_client = new Vonage Client ( new Vonage Client Credentials Basic ( $ api_key , $ api_secret ), [], $ adapter_client );
문제가 발생하면 Exception
을 받게 됩니다. Vonage 예외 클래스 VonageClientExceptionRequest
및 VonageClientExceptionServer
getCode()
및 getMessage()
외에 사용할 수 있는 추가 getEntity()
메서드를 지원하여 무엇이 잘못되었는지 자세히 알아볼 수 있습니다. 반환되는 엔터티는 일반적으로 작업과 관련된 개체이거나 API 호출의 응답 개체입니다.
권장되는 guzzlehttp/guzzle
패키지와 공존할 수 없는 충돌하는 패키지 설치가 있는 경우 php-http/client-implementation
요구 사항을 충족하는 패키지와 함께 vonage/client-core
패키지를 설치할 수 있습니다.
옵션에 대한 클라이언트 구현은 Packagist 페이지를 참조하세요.
우리의 클라이언트 라이브러리는 PSR-3 호환 로깅 메커니즘을 통해 디버깅을 위한 요청 및 응답 로깅을 지원합니다. debug
옵션이 클라이언트에 전달되고 PSR-3 호환 로거가 클라이언트의 서비스 팩토리에 설정된 경우 디버깅 목적으로 로거를 사용합니다.
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( ' abcd1234 ' , ' s3cr3tk3y ' ), [ ' debug ' => true ]);
$ logger = new Monolog Logger ( ' test ' );
$ logger -> pushHandler ( new Monolog Handler StreamHandler ( __DIR__ . ' /log.txt ' , Monolog Logger:: DEBUG ));
$ client -> getFactory ()-> set ( PSR Log LoggerInterface::class, $ logger );
디버깅 로깅을 활성화하면 민감한 정보를 로깅할 가능성이 있으므로 프로덕션에서는 활성화하지 마십시오.
이 라이브러리에는 PHPUnit과 함께 실행되도록 설계된 전체 테스트 모음이 있습니다.
실행하려면 작곡가를 사용하십시오.
composer test
참고: 이 테스트 모음은 규모가 크므로 실행하는 데 상당한 양의 메모리가 필요할 수 있습니다. MacOS 또는 Linux에서 "열린 파일이 너무 많습니다" 오류가 발생하는 경우 허용되는 파일 포인터의 양을 늘리는 해킹이 있습니다. 명령줄에 다음을 입력하여 열 수 있는 파일의 양을 늘립니다. (10240은 MacOS가 현재 열 수 있는 최대 포인터 양입니다.)
ulimit -n 10240
이 라이브러리는 적극적으로 개발되고 있으며 여러분의 의견을 듣고 싶습니다! 질문, 의견, 제안 및 피드백이 포함된 이슈를 생성하거나 끌어오기 요청을 열어 주시기 바랍니다.