https://d226lax1qjow5r.cloudfront.net/blog/blogposts/send-whatsapp-messages-in-laravel-with-vonages-native-sdk/whatsapp_laravel_v2.png

VonageのネイティブSDKを使ってLaravelでWhatsAppメッセージを送る

最終更新日 February 7, 2023

所要時間:3 分

Laravelアプリケーションでは、WhatsApp経由でユーザーに連絡を取りたい場合があります。ユーザーに通知を送ったり、潜在的なリードに販売促進を流したり。ユーザーの携帯電話に直接メッセージを送り、コミュニケーションを取ることができるのは、非常に強力なツールです。

しかし、WhatsApp APIと直接通信するのは少々負担がかかる場合があります。そこで、メッセージ送信とWhatsApp APIとの通信をVonageで行うことができます。

VonageはSMS、Voice、WhatsAppなど様々なAPIを提供するクラウドコミュニケーションプラットフォームです。WhatsApp APIの複雑さを気にすることなく、WhatsAppメッセージを送信する便利な方法を提供します。 また、Laravelパッケージパッケージもあり、Laravelアプリケーションへの統合も簡単です。

このチュートリアルでは、LaravelとVonageを使ってWhatsAppメッセージを送信する方法を見ていきます。

注意すべきこと

WhatsAppを使用する際、送信可能なメッセージの種類や送信可能なタイミングなど、注意すべき点がいくつかあります。

メッセージテンプレート

企業が人々に送ることができるスパムの量を減らすために、企業(あなたのような)は次のことができます。 のみメッセージテンプレート」(MTM)を送信することで、ユーザーとの会話を開始できます。MTMはWhatsAppビジネスマネージャーで作成し、WhatsAppの承認を得てから使用できる承認済みメッセージです。

MTMは、ユーザーに送信するメッセージをカスタマイズできるパラメータをサポートしています。例えば、以下のような内容のMTMを作成することができます:

Hello {{1}}. Your order {{2}} has been shipped.

仮に "John"を最初のパラメーター、そして "1234"を2番目のパラメーターとして使用した場合、ユーザーに送信されるメッセージは次のようになる:

Hello John. Your order 1234 has been shipped.

ただし、ユーザーが先にメッセージを送ってきた場合は、MTMを使わなくても24時間以内に返信することができます。

24時間カスタマーケア窓口

WhatsAppには24時間カスタマーケア窓口というコンセプトがある。この窓口では、企業はテンプレート化されたメッセージを送信することなく、エンドユーザーに自由にメッセージを送ることができます。

24時間ウィンドウは2つの異なる方法で開始できる:

  • ビジネスから送信されたMTMにユーザーが返信する。

  • ユーザーは企業にメッセージを送る。

このように、24時間ウィンドウでは、ユーザーが会話に参加する必要がある。

24時間以内にメッセージが送信されない場合、ウィンドウは失効し、再度新しいウィンドウを立ち上げる必要があります。

API キーと WhatsApp との接続

コードを説明する前に、まずWhatsApp Businessアカウントと電話番号が必要です。

Vonageのアカウントも必要です。アカウントをお持ちでない場合は、こちらからサインアップできます。 こちら.アカウントを取得したら、VonageダッシュボードからAPIキーとシークレットを取得する必要があります。

これでVonageダッシュボードの「外部アカウント」ページが表示されます。ここでWhatsAppアカウントとVonageアカウントを紐付けます。ステップに従ってアカウントをリンクして下さい。

これでVonageアカウントはWhatsAppに接続され、ご利用いただけるようになります。

Vonage アカウントの設定やWhatsApp Business アカウントの接続に問題がある場合は、以下のマニュアルをご参照ください。 Vonage ドキュメントをご覧下さい。

インストールと設定

Vonageアカウントが使えるようになったので、それを使うためにLaravelアプリケーションのセットアップを始めましょう。始めるには Vonage LaravelパッケージをComposerを使ってインストールします。これは、プロジェクトルートで以下のコマンドを実行することでできます:

composer require vonage/vonage-laravel

パッケージがインストールされたら、パッケージの設定ファイルを公開することができる。これでVonage APIキーとシークレットを設定できる。これは以下のコマンドを実行することでできる:

php artisan vendor:publish --provider="Vonage\Laravel\ServiceProvider"

このチュートリアルでは、WhatsAppメッセージを送信する際に毎回同じ電話番号を使用することを想定しています。 .envファイルに設定します。そのため、WhatsAppの電話番号をファイルに設定します。これを行うには、アプリケーションのコード内で電話番号を取得できるよう、新しい設定フィールドを追加する必要があります。この新しい設定フィールドを config/services.phpファイルに追加します:

return [

	// ...
    
	'vonage' => [
    	'whatsapp' => [
        	'from_phone_number' => env('WHATSAPP_PHONE_NUMBER'),
    	],
	],

	// ...

];

アプリケーションのコードでこの値を取得するには、次のようにする。 config('services.vonage.whatsapp.from_phone_number').

新しい設定フィールドを作成したので、電話番号、APIキー、APIシークレットを .envファイルに追加します:

VONAGE_KEY=YOUR-API-KEY-HERE VONAGE_SECRET=YOUR-VONAGE-SECRET-HERE VONAGE_WHATSAPP_FROM=YOUR-WHATSAPP-PHONE-NUMBER

これで完了です!WhatsAppメッセージの送信が完了しました。

Vonageを使ったWhatsAppメッセージの送信

アプリケーションの準備が整いましたので、WhatsAppメッセージの送信を開始します。

WhatsAppメッセージテンプレート(MTM)の送信

先に説明したように、ビジネスが24時間ウィンドウを新規に開いてユーザーと会話を始めたい場合、まずMTMを送信する必要がある。

MTMを送信するには、WhatsApp Business Managerで "テンプレートネームスペース "を確認する必要があります。同じテンプレート名が世界中の他のユーザーにも使用されている可能性があります。

メッセージを送信する際には、テンプレートの名前空間をテンプレート名と連結する必要があります。 :をセパレーターとして使用します。例えば、テンプレートの名前空間が abc123で、テンプレート名が sample_issue_resolution.この2つの値を連結して abc123:sample_issue_resolutionを完全なテンプレート名としてVonageに渡します。

例として、WhatsAppが提供するメッセージテンプレートのサンプルを見てみましょう。このテンプレートは sample_issue_resolutionテンプレートは以下のような構造になっています:

Hi {{1}}, were we able to solve the issue that you were facing?

このテンプレートでは、ユーザー名をひとつのパラメーターとして渡すことができる。したがって、このメッセージをユーザーに送信したい場合は、次のようにする必要があります:

use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppTemplate;
use Vonage\Messages\MessageObjects\TemplateObject;

$toNumber = '447123456789';
$locale = 'en_US';
$templateName = 'abc_123:sample_issue_resolution';
$templateParams = [
	'John',
];

$whatsAppMessage = new WhatsAppTemplate(
	to: $toNumber,
	from: config('services.vonage.whatsapp.from_phone_number'),
	templateObject: new TemplateObject(
    	name: $templateName,
    	parameters: $templateParams,
	),
	locale: $locale,
);

app(Client::class)
	->messages()
	->send($whatsAppMessage);

このコードを実行すると、次のようなメッセージが電話番号に送信される。 +447123456789次のようなメッセージが送信される:

Hi John, were we able to solve the issue that you were facing?

コード例からわかるように、まず新しい WhatsAppTemplateオブジェクトを作成して指定します:

  • テンプレートが送信される電話番号。

  • テンプレートが送信される電話番号。

  • テンプレート名とパラメータを含むテンプレート・オブジェクト。

  • テンプレートのロケール。

いったん WhatsAppTemplateオブジェクトを作成したら、Vonageの Client.

にパラメータを渡していることにもお気づきだろう。 localeパラメータを WhatsAppTemplateオブジェクトにパラメータを渡していることにもお気づきでしょう。これは、WhatsAppでは複数の言語でメッセージテンプレートを作成できるためです。例えば同じテンプレートを英語とスペイン語で作成した場合、ロケールに en_USをロケールとして渡し(上記の例)、スペイン語版は esをロケールとして渡します。つまり esをロケールとして渡すと、ユーザーは次のようなメッセージを受け取ることになります:

Hola, Ashley. ¿Pudiste solucionar el problema que tenías?

これは本当に強力な機能で、アプリケーションから国際的なコミュニケーションを提供する必要がある場合に役立ちます。例えば、ユーザーを多言語でサポートする場合などに利用できます。

WhatsAppテキストメッセージの送信

24時間カスタマーケアの受付時間内であれば、Laravelアプリケーションから自由形式のテキストメッセージを送信することもできます。これを行うには、新しい WhatsAppTextオブジェクトを作成し、それをVonage Client:

use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppText;

$toNumber = '447123456789';
$message = 'Hello, this is a test message.';

$whatsAppMessage = new WhatsAppText(
	to: $toNumber,
	from: config('services.vonage.whatsapp.from_phone_number'),
	text: $message,
);

app(Client::class)
	->messages()
	->send($whatsAppMessage);

上記のコードを実行すると、WhatsAppメッセージがその電話番号に送信されます。 +447123456789というメッセージが送信されます:

Hello, this is a test message.

WhatsApp画像メッセージの送信

Vonageを使用すると、ユーザーに画像を送信することもできます。そのためには、新しい WhatsAppImageオブジェクトを作成し、Vonage Client:

use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppImage;
use Vonage\Messages\MessageObjects\ImageObject;

$toNumber = '447123456789';
$imageUrl = 'https://example.com/image.png';
$caption = 'This is an example image.';

$whatsAppMessage = new WhatsAppImage(
	to: $toNumber,
	from: config('services.vonage.whatsapp.from_phone_number'),
	image: new ImageObject(
    	url: $imageUrl,
    	caption: $caption,
	),
);

app(Client::class)
	->messages()
	->send($whatsAppMessage);

以下のコードを実行すると、WhatsAppメッセージがその電話番号に送信されます。 +447123456789というキャプションの画像が含まれたメッセージが送信される。

WhatsAppビデオメッセージの送信

LaravelアプリケーションからVideoメッセージを送信することもできます。これを行うには、新しい WhatsAppVideoオブジェクトを作成し、それをVonage Client:

use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppVideo;
use Vonage\Messages\MessageObjects\VideoObject;

$toNumber = '447123456789';
$videoUrl = 'https://example.com/video.mp4';

$whatsAppMessage = new WhatsAppVideo(
	to: $toNumber,
	from: config('services.vonage.whatsapp.from_phone_number'),
	videoObject: new VideoObject(
    	url: $videoUrl,
	),
);

app(Client::class)
	->messages()
	->send($whatsAppMessage);

以下のコードを実行すると、WhatsAppメッセージがその電話番号に送信されます。 +447123456789に送信される。

WhatsApp オーディオメッセージの送信

Vonageを使って、Laravelアプリケーションから音声メッセージを送信することもできます。これを行うには、新しい WhatsAppAudioオブジェクトを作成し、それをVonage Client:

use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppAudio;
use Vonage\Messages\MessageObjects\AudioObject;

$toNumber = '447123456789';
$audioUrl = 'https://example.com/audio.mp3';

$whatsAppMessage = new WhatsAppAudio(
	to: $toNumber,
	from: config('services.vonage.whatsapp.from_phone_number'),
	audioObject: new AudioObject(
    	url: $audioUrl,
	),
);

app(Client::class)
	->messages()
	->send($whatsAppMessage);

以下のコードを実行すると、WhatsAppメッセージがその電話番号に送信されます。 +447123456789に送信される。

WhatsApp ファイルメッセージの送信

Laravelアプリケーションからユーザーにファイルを送信したい場合もあるでしょう。これを行うには、新しい WhatsAppFileオブジェクトを作成し、それをVonage Client:

use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppFile;
use Vonage\Messages\MessageObjects\FileObject;

$toNumber = '447123456789';
$fileUrl = 'https://example.com/file.pdf';
$caption = 'This is an example file.';

$whatsAppMessage = new WhatsAppFile(
	to: $toNumber,
	from: config('services.vonage.whatsapp.from_phone_number'),
	fileObject: new FileObject(
    	url: $fileUrl,
    	caption: $caption,
	),
);

app(Client::class)
	->messages()
	->send($whatsAppMessage);

以下のコードを実行すると、WhatsAppメッセージがその電話番号に送信されます。 +447123456789というキャプションのファイルが含まれる。

位置情報メッセージの送信

シナリオによっては(道案内など)、ユーザーに位置情報を送信したい場合もあるでしょう。そのためには、新しい WhatsAppLocationオブジェクトを作成し、Vonage Client:

use Vonage\Client;
use Vonage\Messages\Channel\WhatsApp\WhatsAppCustom;

$toNumber = '447123456789';
$longitude = -40.34764;
$latitude = -74.18875;
$name = Vonage HQ';
$address = '23 Main Street, Holmdel, NJ 07733';

$whatsAppMessage = new WhatsAppCustom(
	to: $toNumber,
	from: config('services.vonage.whatsapp.from_phone_number'),
	custom: [
    	'type' => 'location',
    	'location' => [
        	'longitude' => $longitude,
        	'latitude' => $latitude,
        	'name' => $name,
        	'address' => $address,
    	],
	],
);

app(Client::class)
	->messages()
	->send($whatsAppMessage);

以下のコードを実行すると、WhatsAppメッセージが電話番号に送信されます。 +447123456789には "Vonage HQ "という名前と "23 Main Street, Holmdel, NJ 07733 "という住所を含むWhatsAppメッセージが送信される。

結論

Vonageを使ってLaravelアプリケーションから様々なタイプのWhatsAppメッセージを送信する方法についてご理解いただけたでしょうか。また、WhatsAppメッセージのテンプレートや24時間メッセージ送信可能なウィンドウについてもご理解いただけたと思います。

シェア:

https://a.storyblok.com/f/270183/400x267/746f012da9/ashley-allen.png
Ashley Allenゲスト執筆者

アシュリーはフリーランスのLaravelウェブ開発者で、オープンソースプロジェクトに貢献すること、エキサイティングなシステムを構築すること、ウェブ開発について学ぶ人を支援することが大好きです。