تتطلب هذه المكتبة إصدار PHP على الأقل 8.1
هذه هي مكتبة عميل PHP لاستخدام Vonage's API. لاستخدام هذا، سوف تحتاج إلى حساب Vonage. قم بالتسجيل مجانا هنا.
لاستخدام مكتبة العميل، ستحتاج إلى إنشاء حساب Vonage.
لتثبيت مكتبة عميل PHP على مشروعك، نوصي باستخدام Composer.
composer require vonage/client
لاحظ أن هذا يشير في الواقع إلى مكتبة مجمعة تتضمن عميل HTTP -و- هذه المكتبة الأساسية. يمكنك تثبيت هذه المكتبة مباشرة من Composer إذا كنت ترغب في ذلك، مع إمكانية اختيار عميل HTTP الذي يستخدمه مشروعك.
لا تحتاج إلى استنساخ هذا المستودع لاستخدام هذه المكتبة في مشاريعك الخاصة. استخدم Composer لتثبيته من Packagist.
إذا كنت جديدًا في Composer، فإليك بعض الموارد التي قد تجدها مفيدة:
إذا كنت تستخدم Composer، فتأكد من تضمين أداة التحميل التلقائي في ملف التمهيد الخاص بمشروعك:
require_once " vendor/autoload.php " ;
قم بإنشاء عميل باستخدام مفتاح واجهة برمجة التطبيقات (API) والسر الخاص بك:
$ client = new Vonage Client ( new Vonage Client Credentials Basic ( API_KEY , API_SECRET ));
لأغراض الاختبار، قد ترغب في تغيير عنوان URL الذي يرسل إليه vonage/client
الطلبات من api.vonage.com
إلى شيء آخر. يمكنك القيام بذلك عن طريق توفير مصفوفة تحتوي على base_api_url
كمعلمة ثانية عند إنشاء مثيل VonageClient
.
$ client = new Vonage Client (
new Vonage Client Credentials Basic ( API_KEY , API_SECRET ),
[
' base_api_url ' => ' https://example.com '
]
);
بالنسبة لواجهات برمجة التطبيقات التي عادةً ما تصل إلى rest.nexmo.com
، فإن توفير base_rest_url
كخيار للمنشئ سيؤدي إلى تغيير تلك الطلبات.
لاستخدام واجهة برمجة التطبيقات SMS الخاصة بـ Vonage لإرسال رسالة 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 إلى رسائل متعددة، فإن الاستجابة تحتوي على كائن لكل رسالة تم إنشاؤها. يمكنك التحقق لمعرفة عدد الرسائل التي تم إنشاؤها باستخدام وظيفة count()
القياسية في PHP. إذا كنت ترغب في الحصول على الرسالة الأولى، يمكنك استخدام الأسلوب current()
على الاستجابة.
$ data = $ response -> current ();
$ data -> getRemainingBalance ();
foreach ( $ response as $ index => $ data ){
$ data -> getRemainingBalance ();
}
يحتوي مثال الإرسال أيضًا على أمثلة عمل كاملة.
يمكنك استخدام طريقة isGsm7()
ثابتة داخل رمز عميل SMS لتحديد ما إذا كنت تريد إرسال الرسالة باستخدام تشفير GSM-7 أو Unicode. هنا مثال:
$ 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 إلى الاتفاق على الخوارزمية المستخدمة. في لوحة التحكم، قم بزيارة صفحة إعدادات حسابك وضمن "إعدادات واجهة برمجة التطبيقات" يمكنك تحديد الخوارزمية المراد استخدامها. وهذا أيضًا هو الموقع الذي ستجد فيه "سر التوقيع" (وهو يختلف عن سر واجهة برمجة التطبيقات).
قم بإنشاء عميل باستخدام بيانات الاعتماد هذه والخوارزمية التي سيتم استخدامها، على سبيل المثال:
$ client = new Vonage Client ( new Vonage Client Credentials SignatureSecret ( API_KEY , SIGNATURE_SECRET , ' sha256 ' ));
باستخدام هذا العميل، سيتم إرسال رسائل SMS API الخاصة بك كرسائل موقعة.
قد ترغب أيضًا في قراءة الوثائق المتعلقة بتوقيع الرسائل.
إذا قمت بتمكين توقيع الرسائل للرسائل الواردة، فسيتضمن خطاف الويب للرسائل النصية القصيرة الحقول sig
و nonce
و timestamp
. للتحقق من أن التوقيع من Vonage، يمكنك إنشاء كائن التوقيع باستخدام البيانات الواردة وسر التوقيع الخاص بك وطريقة التوقيع. ثم استخدم طريقة check()
مع التوقيع الفعلي الذي تم استلامه (عادةً _GET['sig']
) للتأكد من صحته.
$ signature = new Vonage Client Signature ( $ _GET , SIGNATURE_SECRET , ' sha256 ' );
// is it valid? Will be true or false
$ isValid = $ signature -> check ( $ _GET [ ' sig ' ]);
باستخدام سر التوقيع الخاص بك والمعلمات الأخرى المتوفرة، يمكن حساب التوقيع والتحقق منه مقابل قيمة التوقيع الوارد.
يتم استخدام واجهة برمجة تطبيقات الرسائل لإرسال مجموعة متنوعة من الرسائل الصادرة. الأنظمة الأساسية التالية مدعومة حاليًا:
تحتوي كل منصة من هذه المنصات على فئة مختلفة من الرسائل التي يمكنك إرسالها (على سبيل المثال، باستخدام WhatsApp، يمكنك إرسال نص أو صورة أو صوت أو فيديو أو ملف أو قالب، ولكن بالنسبة لـ Viber، يمكنك فقط إرسال نص أو صورة) . يمكنك العثور على جميع أنواع الرسائل القابلة للإرسال ضمن مساحة الاسم VonageMessagesChannel
. السبب وراء فصل كل نوع بهذه الطريقة هو أن النظام الأساسي ونوع الرسالة يتطلبان معلمات مختلفة في استدعاء واجهة برمجة التطبيقات.
تم تكوين VonageMessagesClient
بطريقة مشابهة لعميل SMS API. الفرق هو أن المصادقة يمكن أن تكون إما JSON Web Token (JWT) أو مصادقة أساسية. يمكنك العثور على مزيد من المعلومات حول كيفية إعداد بيانات اعتماد العميل الخاص بك ضمن قسم "الاستخدام" في الملف التمهيدي هذا.
هنا بعض الأمثلة:
أولاً، نحتاج إلى إنشاء كائن 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 );
ستكون استجابتك عبارة عن حمولة JSON إذا كان نطاق الخطأ هو 200، أو ستطرح APIException
ذي الصلة إذا كان ضمن 400/500.
تتطلب بعض كائنات Channel
المزيد من الوسائط حتى يتم إنشاؤها. يمكنك رؤية التعيين التقريبي لهذه المتطلبات من خلال مقارنة وسيطات المُنشئ مقابل وثائق واجهة برمجة التطبيقات (API). تأخذ بعض هذه الرسائل كائنات مخصصة قابلة لإعادة الاستخدام (الموجودة ضمن مساحة الاسم VonageMessagesMessageObjects
). إحدى هذه الصور هي صورة - لذا إليك مثال لكيفية إرسال صورة فايبر:
$ 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's Verify API إثبات أن المستخدم قد قدم رقم هاتفه الخاص أثناء التسجيل، أو تنفيذ مصادقة العامل الثاني أثناء تسجيل الدخول.
يمكنك بدء عملية التحقق باستخدام رمز مثل هذا:
$ request = new Vonage Verify Request ( ' 14845551212 ' , ' My App ' );
$ response = $ client -> verify ()-> start ( $ request );
echo " Started verification with an id of: " . $ response -> getRequestId ();
بمجرد قيام المستخدم بإدخال الرمز السري الذي تلقاه، اتصل بطريقة check()
(انظر أدناه) باستخدام معرف الطلب ورقم التعريف الشخصي للتأكد من صحة رقم التعريف الشخصي.
لإلغاء التحقق الجاري، أو لبدء المحاولة التالية لإرسال رمز التأكيد، يمكنك تمرير إما كائن التحقق الموجود إلى مكتبة العميل، أو ببساطة استخدام معرف الطلب:
$ client -> verify ()-> trigger ( ' 00e6c3377e5348cdaf567e1417c707a5 ' );
$ client -> verify ()-> cancel ( ' 00e6c3377e5348cdaf567e1417c707a5 ' );
بنفس الطريقة، يتطلب التحقق من التحقق رقم التعريف الشخصي الذي قدمه المستخدم، ومعرف الطلب:
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" ;
}
يمكنك التحقق من حالة التحقق، أو الوصول إلى نتائج عمليات التحقق السابقة باستخدام معرف الطلب. سيوفر كائن التحقق بعد ذلك واجهة غنية:
$ 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's Verify API بدعم SCA (المصادقة الآمنة للعملاء)، المطلوب بواسطة PSD2 (توجيه خدمات الدفع) وتستخدمه التطبيقات التي تحتاج إلى الحصول على تأكيد من العملاء للمدفوعات. ويشمل المستفيد والمبلغ الموجود في الرسالة.
ابدأ التحقق من دفعة مثل هذا:
$ request = new Vonage Verify RequestPSD2 ( ' 14845551212 ' , ' My App ' );
$ response = $ client -> verify ()-> requestPSD2 ( $ request );
echo " Started verification with an id of: " . $ response [ ' request_id ' ];
بمجرد قيام المستخدم بإدخال الرمز السري الذي تلقاه، اتصل بنقطة النهاية /check
باستخدام معرف الطلب والرقم السري للتأكد من صحة الرقم السري.
يعتمد Vonage's Verify v2 بشكل أكبر على سير العمل غير المتزامن عبر. خطافات الويب، والمزيد من عمليات سير عمل التحقق القابلة للتخصيص للمطور. لبدء عملية التحقق، ستحتاج إلى عميل واجهة برمجة التطبيقات (API)، الموجود ضمن مساحة الاسم verify2
.
يحتاج إجراء طلب التحقق إلى قناة اتصال "أساسية" لتقديم طريقة التحقق. يمكنك تخصيص هذه التفاعلات عن طريق إضافة "سير عمل" مختلف. لكل نوع من أنواع سير العمل، هناك فئة 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
بحل الإعدادات الافتراضية نيابةً عنك، كما سيقوم بإنشاء كائن workflow
افتراضي لاستخدام SMS. ومع ذلك، يمكنك إضافة مهام سير عمل متعددة تعمل باستخدام المنطق الاحتياطي. على سبيل المثال، إذا كنت تريد إنشاء عملية تحقق تحاول الحصول على رمز PIN من المستخدم عبر. الرسائل القصيرة، ولكن في حالة وجود مشكلة في تسليم الرسائل القصيرة، فأنت ترغب في إضافة خيار صوتي احتياطي: يمكنك إضافته.
$ 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 );
يؤدي هذا إلى إضافة سير العمل الصوتي إلى طلب الرسائل القصيرة الأصلي. سيحاول طلب التحقق حل العملية بالترتيب الذي تم تقديمه (بدءًا بالإعداد الافتراضي لنوع الطلب).
أنواع الطلبات الأساسية هي كما يلي:
SMSRequest
WhatsAppRequest
WhatsAppInterativeRequest
EmailRequest
VoiceRequest
SilentAuthRequest
لإضافة مهام سير العمل، يمكنك رؤية مهام سير العمل الصالحة المتوفرة كثوابت داخل كائن VerificationWorkflow
. للحصول على تجربة مطور أفضل، لا يمكنك إنشاء سير عمل غير صالح بسبب التحقق من الصحة الذي يحدث على الكائن.
لإرسال رمز، ستحتاج إلى إحاطة الطريقة بمحاولة/التقاط نظرًا لطبيعة واجهة برمجة التطبيقات (API). إذا كان الكود صحيحًا، فستُرجع الطريقة قيمة منطقية 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
أو VonageClientCredentialsContainer
الذي يتضمن بيانات اعتماد Keypair
:
$ 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 معايير CAMARA لتحديد مدة بقاء بطاقة SIM داخل الجهاز الخلوي. وهذا يعني أن آلية المصادقة أكثر تعقيدًا قليلاً من واجهات برمجة التطبيقات الأخرى. سوف تحتاج إلى:
أن يكون لديك رقم المشترك الخاص بك الذي تم تسجيله في منصة شبكة Vonage العالمية. معرف تطبيق لوحة المعلومات الخاص بك هو مفتاحك الخاص
هناك طريقتان متاحتان لواجهة برمجة التطبيقات هذه: 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 Global Network Platform. معرف تطبيق لوحة المعلومات الخاص بك هو مفتاحك الخاص، الذي تم تنزيله من لوحة معلومات 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
$ 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 ' );
افتراضيًا، سيؤدي هذا إلى عرض النتائج العشرة الأولى فقط. يمكنك إضافة مرشح 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) الخاصة بك. يمكنك إنشاء سر جديد (بحد أقصى سرين) وحذف السر الموجود بمجرد تحديث جميع التطبيقات.
للحصول على قائمة الأسرار:
$ 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 ());
قم بتحديث عناوين URL الافتراضية لرد الاتصال لرسائل SMS الواردة وإيصالات التسليم:
$ 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، ستحتاج إلى التمكين داخل Vonage Network Registry
بمجرد تسجيلك لـ MSNDIN، ستتمكن من استخدام SimSwap.
يستخدم SimSwap آلية مصادقة Global Network Platform، لذا يبدو تدفق التفويض مختلفًا قليلاً عن عملاء 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 للمستخدم بالتحقق من صحة الرقم ومعرفة المزيد حول كيفية استخدامه.
يمكنك استخدام إما الطريقة basic()
أو الطريقة standard()
(تتوفر طريقة advanced()
، ولكن يوصى باستخدام خيار المزامنة للحصول على معلومات متقدمة)، مثل هذا:
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) في حسابك.
$ 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 | بيتا | |
واجهة برمجة التطبيقات للحسابات الخارجية | بيتا | |
واجهة برمجة تطبيقات الوسائط | بيتا | |
واجهة برمجة تطبيقات الاجتماعات | التوفر العام | |
واجهة برمجة تطبيقات الرسائل | التوفر العام | |
واجهة برمجة تطبيقات انسايت للأرقام | التوفر العام | |
واجهة برمجة تطبيقات إدارة الأرقام | التوفر العام | |
واجهة برمجة التطبيقات للتسعير | التوفر العام | |
واجهة برمجة التطبيقات للاتصال الاستباقي | بيتا | |
تنقيح واجهة برمجة التطبيقات | التوفر العام | |
واجهة برمجة التطبيقات للتقارير | بيتا | |
واجهة برمجة تطبيقات الرسائل القصيرة | التوفر العام | |
واجهة برمجة التطبيقات للحسابات الفرعية | التوفر العام | |
التحقق من واجهة برمجة التطبيقات | التوفر العام | |
التحقق من واجهة برمجة التطبيقات (الإصدار 2) | التوفر العام | |
واجهة برمجة التطبيقات الصوتية | التوفر العام |
بمرور الوقت، تتطور واجهات برمجة تطبيقات Vonage وتضيف ميزات جديدة، وتغير كيفية عمل الميزات الحالية، وتجاهل الأساليب والميزات القديمة وإزالتها. لمساعدة المطورين على معرفة متى يتم إجراء تغييرات الإهمال، ستطلق SDK تحذير E_USER_DEPRECATION
. لن تؤدي هذه التحذيرات إلى إيقاف تنفيذ التعليمات البرمجية، ولكنها قد تكون مصدر إزعاج في بيئات الإنتاج.
للمساعدة في هذا الأمر، يتم منع هذه الإشعارات بشكل افتراضي. أثناء التطوير، يمكنك تمكين هذه التحذيرات عن طريق تمرير خيار تكوين إضافي إلى المُنشئ VonageClient
، المسمى show_deprecations
. سيؤدي تمكين هذا الخيار إلى إظهار جميع إشعارات الإيقاف.
$ 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 أو عميل HTTP متوافق مع PSR-18، حتى تتمكن من إنشاء عميل بتكوين بديل إذا كنت في حاجة إليه، على سبيل المثال لمراعاة الوكيل المحلي، أو التعامل مع شيء آخر محدد لإعدادك.
فيما يلي مثال يقلل المهلة الافتراضية إلى 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
طريقة getEntity()
إضافية يمكنك استخدامها بالإضافة إلى getCode()
و getMessage()
لمعرفة المزيد حول الأخطاء التي حدثت. سيكون الكيان الذي يتم إرجاعه عادةً عبارة عن كائن متعلق بالعملية، أو كائن استجابة من استدعاء API.
إذا كان لديك تثبيت حزمة متعارضة لا يمكن أن تتواجد مع حزمة guzzlehttp/guzzle
الموصى بها، فيمكنك تثبيت الحزمة vonage/client-core
مع أي حزمة تلبي متطلبات php-http/client-implementation
.
راجع صفحة 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
تم تطوير هذه المكتبة بنشاط، ونحن نحب أن نسمع منك! لا تتردد في إنشاء مشكلة أو فتح طلب سحب مع أسئلتك وتعليقاتك واقتراحاتك وملاحظاتك.