企業や開発者がWhatsapp Cloud APIの構築を開始する最も簡単で直感的な方法。
自由形式のテキスト メッセージを受信者に送信します
地理位置情報メッセージを受信者に送信する
受信者にドキュメントを送信する
画像を受信者に送信する
受信者にビデオを送信する
受信者に音声を送信する
ボタンのリストを受信者に送信します (許可されるボタンの最大数は 3 です)
ラジオ ボタンのリストを受信者に送信します (許可されるラジオ ボタンの最大数は 10 です)
受信者に連絡先を送信する
受信者がスキャンできる QR コードを生成します
メッセージを既読としてマークする
受信メッセージを解析する
WhatsAppクラウドAPIとは何ですか? Whatsapp Cloud API の起動中にこの 60 秒のビデオをご覧ください。
このパッケージは何ですか?このパッケージは、公式 WhatsApp Cloud API の非公式のオープンソースNodeJS ラッパーです。
このパッケージが役立つのはなぜですか?大量のコードを記述せずに WhatsApp Cloud API を使用できるためです。
このパッケージを自分のプロジェクトで使用できますか?はい、お好きなようにお使いいただけます。
このパッケージに貢献できますか?はい、プル リクエストを作成することでこのパッケージに貢献できます。
このパッケージをプロジェクトにインストールするには:
NPM の使用:
npm インストール whatsappcloudapi_wrapper
糸の使用:
糸追加 whatsappcloudapi_wrapper
まず次のようにパッケージをインポートします。
const WhatsappCloudAPI = require('whatsappcloudapi_wrapper');
次に、次のようにクラスを初期化します。
const Whatsapp = new WhatsappCloudAPI({accessToken: 'アクセス トークンはこちら',senderPhoneNumberId: '送信者の電話番号 ID はこちら',WABA_ID: 'Whatsapp ビジネス アカウント ID はこちら',});
await Whatsapp.sendText({message: 'Hello world',recipientPhone: '受信者の電話番号はこちら',});
> Quick Question: - How does a recipient phone number look like? > Quick Answer: - A recipient phone number is the international phone number of the recipient without the '+' prefix. - For example, where a Kenyan phone number is '+254712345678' we would send the message to a recipientPhone 254712345678. - For a phone number +15550253483 we would send the message to a recipientPhone 15550253483. - For an US phone number +1 555-555-5555 we would send the message to a recipientPhone 5555555555. Makes sense?
await Whatsapp.sendLocation({recipientPhone: '受信者の電話番号はここです',latitude: 'あなたの緯度はここです',longitude: 'あなたの経度はここです',name: 'あなたの場所の名前はここです',address: 'あなたの場所の番地/住所はここです',});
// パブリック URL でホストされているドキュメントを送信しますawait Whatsapp.sendDocument({recipientPhone: '受信者の電話番号はこちら',caption: '請求書 #123.',url: 'http://pdfkit.org/demo/out .pdf',});//または// ローカル ファイル システムにあるドキュメントを送信します (ファイルは、送信される前にまず WhatsApp サーバーにアップロードされます)。 Whatsapp.sendDocument({recipientPhone: '受信者の電話番号はこちら',file_path: './output.pdf',caption: '請求書 #123',});
// パブリック URL でホストされている画像を送信しますawait Whatsapp.sendImage({recipientPhone: '受信者の電話番号をここに',caption: 'Test',file_path: 'https://example.com/image.png',} );// または// ローカル ファイル システムにある画像を送信します (ファイルは、送信される前にまず WhatsApp サーバーにアップロードされます)。 Whatsapp.sendImage({recipientPhone: 'ここに受信者の電話番号',caption: 'Test',file_path: './XEIDF3D5FTBDF1.png',});
// パブリック URL でホストされているビデオを送信しますawait Whatsapp.sendVideo({recipientPhone: '受信者の電話番号はこちら',caption: 'Test',url: 'https://test-videos.co.uk/vids/ bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4',});// または// を送信しますローカル ファイル システムにあるビデオ (ファイルは送信前にまず WhatsApp サーバーにアップロードされます).await Whatsapp.sendVideo({recipientPhone: '受信者の電話番号はここにあります',caption: 'Test',file_path: './ last.mp4',});
// パブリック URL でホストされている音声を送信しますawait Whatsapp.sendAudio({recipientPhone: '受信者の電話番号をここに',url: 'https://example.com/audio.mp3',});// または/ / ローカル ファイル システムにある音声を送信します (ファイルは、送信される前にまず WhatsApp サーバーにアップロードされます)。await Whatsapp.sendAudio({recipientPhone: '受信者ここの電話番号',caption: 'Test',file_path: './last.mp3',});
await Whatsapp.sendSimpleButtons({recipientPhone: '受信者の電話番号はこちら',message: '今日は何かお手伝いできますか',listOfButtons: [{title: 'いくつかの製品を見る',id: 'see_categories',},{title: '請求書を送信',id: 'print_invoice',},{title: '人間と話す',id: '人間と話す',},],});
await Whatsapp.sendRadioButtons({recipientPhone: '受信者の電話番号はこちら',headerText: 'ブラック フライデー トップ 10 製品',bodyText:'Daggie では、以前のショッピング履歴に基づいて、いくつかの素晴らしい製品をご用意しています。n次のいずれかを選択してください',footerText: 'Daggie Blanqx による承認',listOfSections: [{title: 'トップ 3ファッション',rows: [{title: 'ブラック LVX T シャツ',description: 'KES 2999.00nLVX は暖かいコットン T シャツ',id: 'SKU12_black_lvx_tshirt',},{title: 'パープル パーカー',description: 「KES 1999.00nLogrocket ロゴ付き紫色のパーカー」、id: 'SKU13_purple_hoodie',},{title: 'Air Jordan 1',description:'KES 10999.00n他の人が行かない場所に移動します。飛行機に乗りたいですか?',id: 'SKU14_air_jordan_1',},],},{title: 'トップ 3ガジェット',rows: [{title: 'Apple Watch',description:'KES 75999.00n時間は有限です、一秒一秒を楽しんでください',id: 'SKU15_apple_watch',},{title: 'Surface Pro',description: `KES 59999.00nネットサーフィンするだけでなく、世界をサーフィンしましょう`,id: 'SKU16_surface_pro ',},{タイトル: 'Xiaomi Beats スピーカー',説明: `KES 45699nそれはあなたの心臓の鼓動、Xiaomi Beats のやり方にあります。`,id: 'SKU17_xiaomi_beats_speaker',},],},{title: 'トップ 3 キッチン',rows: [{title: 'ポータブル ハンド ミキサー',description : `KES7899n好きな食べ物を均一に混ぜて、甘いつぼみを誘惑してください。`,id: 'SKU18_portable_hand_mixer',},{title: 'ノンスティック ワッフルメーカー',description: 'KES7899n素晴らしいワッフルは最高の材料で作られています。',id: 'SKU19_non_stick_waffle_maker',},{title: 'クッキング スプーン 6 セット' 、説明: `KES7899n幸福を持ち続けてください`,id: 'SKU20_6_set_cooking_spoons',},],},{title: 'ランダムピック 1 個',rows: [{title: 'ニベア アイシー ソープ',description: `KES899n水分補給してリフレッシュしましょう。肌に栄養を与えましょう。`,id: 'SKU21_nivea_icy_soap',},],},],});
await Whatsapp.sendContact({recipientPhone: 受信者電話,contact_profile: {addresses: [{street: '1 Hacker Way',city: 'Menlo Park',state: 'CA',zip: '94025',country: 'United States' ,country_code: 'us',type: 'HOME',},{street: '200 ジェファーソンDr'、都市: 'メンローパーク'、州: 'CA'、郵便番号: '94025'、国: '米国'、国コード: '米国'、タイプ: 'WORK',},]、誕生日: '2002- 02-14'、メール: [{メール: '[email protected]'、タイプ: 'WORK'、}、{メール: '[email protected]'、タイプ: 'HOME'、}、]、名前: {formatted_name: 'Daggie Blanqx'、first_name: 'Daggie'、last_name: 'Blanqx'、middle_name: 'M.'、suffix: ' Sr'、プレフィックス: 'Sw Engr'、}、組織: {会社: 'WhatsApp'、部門: 'デザイン',タイトル: 'マネージャー',},phones: [{phone: '+1 (940) 555-1234',type: 'HOME',wa_id: '16505551234', // オプション},{phone: ' +1 (650) 555-1234',type: 'WORK', // オプションの wa_id: '16505551234', // オプション},],urls: [{url: 'https://www.facebook.com',type: 'WORK',},{url: 'https://www.whatsapp.com ',type: 'HOME',},],},});
let result = await Whatsapp.createQRCodeMessage({message: `ここに QR コード メッセージが表示されます。私は QR コードに隠されたメッセージです。`,imageType: 'png' || 'svg',});let urlOfImage = result.data .qr_image_url;
QRコードを表示する方法については、以下の画像を参照してください。
await Whatsapp.markMessageAsRead({message_id: 'the id of your message here',});// メッセージが見つからない場合、またはメッセージがすでに読まれている場合は、再試行不可能なエラーがスローされます。
ボタン ID の長さは 1 ~ 256 文字である必要があります。
ボタンのタイトルの長さは 1 ~ 20 文字にする必要があります。
アイテムのリストは 10 個に制限されています。
リスト内の項目の説明は、1 ~ 72 文字の長さである必要があります。
リストのタイトルの長さは 1 ~ 24 文字にする必要があります。
リストの ID の長さは 1 ~ 200 文字である必要があります。
// req.body は Webhook に ping を送信するリクエストの本文です。無効なペイロードはエラーをスローするため、HTTP ステータス 200 ではなく 5** または 4** で応答する必要があります。// 成功した受信リクエストの最後には HTTP 200 ステータスで応答することを忘れないでください。let data = Whatsapp.parseMessage( req.body);/*data.isMessage は、顧客からのメッセージの場合は true、そうでない場合は false になります。data.isNotificationMessage は、顧客からの通知の場合は true Meta (例: メッセージ配信/読み取りステータス通知)、それ以外の場合は false になります。Webhook リクエストの本文が有効でない場合、または Meta からのものではない場合、data はエラーをスローします。*/
if (data?.isMessage) {let incomingMessage = data.message;letrecipientPhone = incomingMessage.from.phone; // カスタマーレットの電話番号を抽出しますrecipientName = incomingMessage.from.name; // カスタマーレットの名前を抽出します。 typeOfMsg = incomingMessage.type; // メッセージレットのタイプを抽出します message_id = incomingMessage.message_id; // メッセージ ID を抽出します (typeOfMsg === 'simple_button_message') {let button_id = incomingMessage.button_reply.id;if (button_id === 'book_appointment') {// 顧客が ID が 'book_appointment であるシンプル ボタンをクリックしました'.// アウトバウンド アクション (テキスト メッセージ await など) で応答できます。 Whatsapp.sendText({message: `こんにちは、お客様。「予約の予約」ボタンをクリックしました`,recipientPhone: '受信者の電話番号はここにあります',});};};
if (data?.isMessage) {let incomingMessage = data.message;letrecipientPhone = incomingMessage.from.phone; // カスタマーレットの電話番号を抽出しますrecipientName = incomingMessage.from.name; // カスタマーレットの名前を抽出します。 typeOfMsg = incomingMessage.type; // メッセージレットのタイプを抽出します message_id = incomingMessage.message_id; // メッセージ ID を抽出します (typeOfMsg === 'radio_button_message') {let selectId = incomingMessage.list_reply.id;if (selectionId === 'Morning_session') {// 顧客は ID が 'Morning_session' のラジオ ボタンを選択しました.// アウトバウンドアクション、たとえばテキストメッセージawait Whatsapp.sendText({message: `You 「Morning_session」オプションを選択しました`,recipientPhone: '受信者の電話番号はここにあります'});};};
質問がある場合は、GitHub ディスカッション フォーラム経由で質問してください。
ご提案やフィードバックがある場合は、問題を開くか、プル リクエストを作成してください。
このパッケージは現在開発中です。
これは、新しい機能が定期的に追加されることを意味します。
お気に入りの機能が欠けている場合は、いつでもバージョンを後方に上げたり、プル リクエストを作成したりできます。プル リクエストはレビューされて次のリリースにマージされます。
ご貢献いただきありがとうございます。
コーディングを楽しんでください!
Twitter でフォローしてください: @daggieblanqx
私は LinkedIn にも参加しています。このパッケージを使用して構築した素晴らしいプロジェクトに私をタグ付けできます: @daggieblanqx
ブログ投稿: Logrocket/@Daggieblanqx