
シェア:
スタンダップ・コメディーの学位論文を持つ俳優の訓練を受け、ミートアップ・シーンを経てPHP開発に携わるようになった。技術について話したり書いたり、レコード・コレクションから変わったレコードを再生したり買ったりしています。
LaravelでレポートAPIを使用する
はじめに
Vonage Reports API Vonage Reports APIこのチュートリアルでは、これをLaravelと統合して同期および非同期のレポートを生成する方法を紹介します。例えばVoice APIやMessages APIを多用している場合、Vonage API Dashboardから統計を取ることができます。ただしこれには制限があり、過去30日分の記録しか取得できない。また、Reports APIを使用することで、APIエンドポイントが開放され、利用状況をより深く掘り下げたり、特定のパラメータを追加してデータをフィルタリングしたり、より大規模なレポートを非同期で作成したりすることができます。Video データを照会する場合は、30 日間ではなく、過去 13 ヶ月、または過去 90 日間のレコードを取得できます。レポートAPIを使用する場合は、レポートに取り込まれるレコード数に応じて課金されます。
この内訳を読んだ後、あなたはすでにオーダーメイドの価格を必要とするVonageのヘビーユーザーかもしれません:この場合、無制限プランのためにあなたのアカウントマネージャに連絡することをお勧めします。このような場合は、アカウントマネージャーにお問い合わせの上、無制限プランを選択されることをお勧めします。価格を選択する際の一般的なお勧めは、月に100万イベント、または年間1200万レコード以上を取得する場合は、無制限プランに切り替えることです。
この記事では、例としてLaravelを使ってこのデータを取得します。
前提条件
PHP8.2以上
Vonage APIアカウント
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Laravelのインストール
LaravelのインストーラーはComposerの create-projectのボイラープレート・コードを作成するメカニズムをラップしています。開発マシン上に新しいディレクトリを作成し laravel install reports-api-demo.ここではデフォルトのものを選択し、Laravel Starter Kitsオプションはスキップしてください。
ルートの設定
できるだけシンプルにするために、レポートを実装する3つの異なる方法に対応する3つのルートを用意します。これらのルートは次のようになります:
エンドポイント
GETエンドポイントをヒットする。 同期レポートを生成するエンドポイントを叩く。エンドポイントを
GETエンドポイントをヒットする。POST非同期レポートをVonageにリクエストするエンドポイントをヒットさせる。A
POSTVonageが非同期レポートを返信するエンドポイント
ルート1:同期レポートを作成する
あなたの routes/web.phpディレクトリに移動し、以下のコードを追加する:
Route::get('/report', function () {
$apiKey = '99913011';
$apiSecret = 's09IJad98fa0t9j09ad8fa999';
$url = 'https://api.nexmo.com/v2/reports/records';
$dateStart = \Carbon\Carbon::now()->subMonth();
$dateEnd = \Carbon\Carbon::now();
$queryParams = [
'product' => 'SMS',
'direction' => 'outbound',
'date_start' => $dateStart->format('Y-m-d\TH:i:s.vP'),
'date_end' => $endDate->format('Y-m-d\TH:i:s.vP'),
'account_id' => $apiKey,
];
$response = Http::withBasicAuth($apiKey, $apiSecret)
->get($url, $queryParams);
dd($response->json());
});(あなたの中の賢い人のために言っておくが、これはダミーのAPIキーである; 常に機密データを隠す!).環境変数の扱い方については、こちらのブログ記事をご覧ください、 このブログの記事.
コントローラを使うのではなく、ルートクロージャーにロジックを追加します。アプリケーションで /reportをクリックすると、キーとシークレットを使って Reports API へのリクエストが発行され (これらはダッシュボードで確認できます)、レスポンスが出力されます。
API設定ページを開く API設定ページを開き、Vonage API KeyとSecretにアクセスしてください。両者は以下のスクリーンショットのように表示されます。APIキーはページの上部にあり、APIシークレットにアクセスするには、"Account secret "サブセクションを参照してください。
注:以前に作成したAPIシークレットを覚えていない場合は、"+ Create new secret "をクリックし、安全に保存してください。

このリクエストでは、クエリパラメータでその製品でフィルタリングしているため、レポートはSMS APIからのイベントのみを返します。このAPIには、クエリに利用できる多くのオプションがある:
SMS
Voice(In-App-VOICE、WEBSOCKET-CALL、VOICE-TTS、ASR、AMDを含む)
メッセージ API (WhatsApp、RCS、SMS、Viber、SMS)
ナンバー・インサイト
Verify
In-App Messaging
ネットワークAPI
Video
これは少量のデータには適しているが、数百万行が必要な場合はどうなるのだろうか?そこで非同期レポートの出番となる。
ルート2:非同期レポートの作成
何百万というレコードは、クライアントにもサーバーにも負担がかかりすぎる。そこで POSTJSONボディにレポート・クエリ・パラメータを含むリクエストを作成し、完了時にWebhookを配信するコールバックURLを指定します。Vonageはレポート・データを送信するエンドポイントを必要とするので、アプリケーションをインターネットに公開する必要があります。これを行う最も簡単な方法は、まさにこれを行うngrokを使用することです。一度 ngrokをインストールしたらをインストールしたら、それを実行してアプリケーションを公開し、URLをメモしてください。
レポートを受け取るエンドポイントが必要です。今のところ、デモンストレーションとして、アプリケーション・ログ・ファイルにデータをダンプするだけです。
Route::post('/incoming', function (\Illuminate\Http\Request $request) {
\Illuminate\Support\Facades\Log::info($request->json());
});次に、新しい GETエンドポイントが必要です:
Route::get('/async', function (\Illuminate\Http\Request $request) {
$apiKey = '99913011';
$apiSecret = 's09IJad98fa0t9j09ad8fa999';
$url = 'https://api.nexmo.com/v2/reports';
$dateStart = Carbon::now()->subMonth();
$endDate = Carbon::now();
$queryParams = [
'product' => 'SMS',
'direction' => 'outbound',
'date_start' => $dateStart->format('Y-m-d\TH:i:s.vP'),
'date_end' => $endDate->format('Y-m-d\TH:i:s.vP'),
'account_id' => $apiKey,
];
$response = Http::withBasicAuth($apiKey, $apiSecret)
->post($url, $queryParams);
dd($response->json());
});APIキーとシークレットをライブの ダッシュボードクレデンシャルに置き換え callback_urlフィールドを ngrok URL に置き換える。 /asyncを追加して、Vonage を POSTを正しい場所に追加します。この GETリクエストにアクセスすると、レポートがトリガーされます。レコードは 行ごとに課金されます。 ただし、マネージド・アカウントをお持ちの場合はこの限りではありません。, そのため、この実装をテストしている間、数百万のレコードを持っていて、テストのためにこの実装に従っただけの場合、サーバーを攻撃しようとしていないことを確認してください。
最終的には(レポートのサイズにもよるが)、以下の場所に移動し、非同期レポートデータを見ることができるようになる。 storage/logs/laravel.logに移動し、非同期レポート・データを見ることができるようになります。
非同期レポートのステータスの表示
例えば、解析エラーにより無効なURLにレポートが送信された場合などです。ステータスを表示し、完了したらレポートをダウンロードします。チェックレポートエンドポイントを押すことでこれを行うことができます。
Route::get('/status', function (\Illuminate\Http\Request $request) {
$apiKey = 'your-api-key';
$apiSecret = 'your-api-secret';
$requestId = 'aaaaaaaa-bbbb-cccc-dddd-0123456789ab';
$url = 'https://api.nexmo.com/v2/reports/' . $requestId;
$response = Http::withBasicAuth($apiKey, $apiSecret)
->get($url);
dd($response->json());
});その回答は、必要なすべての情報を与えてくれる。ただし request_statusが SUCCESSであれば download_reportHALフィールドからダウンロードリンクを抽出できます。
"request_status": "SUCCESS",
"_links": {
"self": {
"href": "https://api.nexmo.com/v2/reports/aaaaaaaa-bbbb-cccc-dddd- 0123456789ab"
},
"download_report": {
"href": "https://api.nexmo.com/v3/media/aaaaaaaa-bbbb-cccc-dddd-0123456789ab"
}
}
} 結論
これで、Cloud Platform Communicationsのすべてをクエリする完全に非同期な方法ができました!Account IDでクエリできるようになったことで、さらにオプションが増えました。しかし、通信の再販業者であれば、サブアカウントごとにカスタムレポートを生成することができます。これはまた、再販業者として顧客に請求書を発行する際に特に役立ちます。また、Reports APIを使用して、潜在的に悪質なリクエストのパターンを独自に監視・特定し、次の機能を使用して番号をブロックすることもできます。 不正防御機能.
ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。
会話に参加する VonageコミュニティSlack
登録する 開発者ニュースレター
フォローする X(旧ツイッター)最新情報
チュートリアルを見る YouTubeチャンネル
LinkedInの LinkedIn の Vonage デベロッパーページ
最新の開発者向けニュース、ヒント、イベント情報をお届けします。
