
シェア:
スタンダップ・コメディーの学位論文を持つ俳優の訓練を受け、ミートアップ・シーンを経て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アカウント
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を使用して、潜在的に悪質なリクエストのパターンを独自に監視・特定し、次の機能を使用して番号をブロックすることもできます。 不正防御機能.
ご質問がある場合、またはあなたが作っているものを共有したい場合は、こちらをクリックしてください。
登録する 開発者ニュースレター
フォローする X(旧ツイッター)最新情報
チュートリアルを見る YouTubeチャンネル
LinkedInの LinkedIn の Vonage デベロッパーページ
最新の開発者向けニュース、ヒント、イベント情報をお届けします。