วิธี ที่ง่ายที่สุด และใช้งานง่ายที่สุดสำหรับ ธุรกิจ และ นักพัฒนา ในการเริ่มต้นสร้างบน Whatsapp Cloud API
ส่งข้อความที่มีรูปแบบอิสระถึงผู้รับ
ส่งข้อความตำแหน่งทางภูมิศาสตร์ไปยังผู้รับ
ส่งเอกสารไปยังผู้รับ
ส่งภาพไปยังผู้รับ
ส่งวิดีโอไปยังผู้รับ
ส่งเสียงไปยังผู้รับ
ส่งรายการปุ่มไปยังผู้รับ (จำนวนปุ่มสูงสุดที่อนุญาตคือ 3)
ส่งรายการปุ่มตัวเลือกไปยังผู้รับ (จำนวนปุ่มตัวเลือกสูงสุดที่อนุญาตคือ 10)
ส่งรายชื่อไปยังผู้รับ
สร้างรหัส QR ที่ผู้รับสามารถสแกนได้
ทำเครื่องหมายข้อความว่าอ่านแล้ว
แยกวิเคราะห์ข้อความที่เข้ามา
WhatsApp Cloud API คืออะไร ดูวิดีโอความยาว 60 วินาทีนี้ระหว่างการเปิดตัว Whatsapp Cloud API
แพ็คเกจนี้คืออะไร? แพ็คเกจนี้เป็น wrapper NodeJS แบบโอเพ่นซอร์ส และไม่เป็นทางการรอบๆ WhatsApp Cloud API อย่างเป็นทางการ
ทำไมแพ็คเกจนี้ถึงมีประโยชน์? เพราะช่วยให้คุณใช้ WhatsApp Cloud API ได้โดยไม่ต้องเขียนโค้ดจำนวนมาก
ฉันสามารถใช้แพ็คเกจนี้ในโครงการของฉันได้หรือไม่? ใช่ คุณสามารถใช้มันได้ตามต้องการ
ฉันสามารถบริจาคให้กับแพ็คเกจนี้ได้หรือไม่? ใช่ คุณสามารถสนับสนุนแพ็คเกจนี้ได้โดยการสร้างคำขอดึงข้อมูล
หากต้องการติดตั้งแพ็คเกจนี้ในโครงการของคุณ:
การใช้ NPM:
npm ติดตั้ง whatsappcloudapi_wrapper
การใช้เส้นด้าย:
เส้นด้ายเพิ่ม whatsappcloudapi_wrapper
ขั้นแรกให้นำเข้าแพ็คเกจดังต่อไปนี้:
const WhatsappCloudAPI = ต้องการ ('whatsappcloudapi_wrapper');
จากนั้นเริ่มต้นคลาสดังต่อไปนี้:
const Whatsapp = new WhatsappCloudAPI({accessToken: 'Your access token here',senderPhoneNumberId: 'Your sender phone number id here',WABA_ID: 'Your Whatsapp Business Account id here',});
await Whatsapp.sendText({ข้อความ: 'สวัสดีชาวโลก',ผู้รับโทรศัพท์: 'หมายเลขโทรศัพท์ผู้รับของคุณที่นี่',});
> 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: 'หมายเลขโทรศัพท์ผู้รับของคุณที่นี่', ละติจูด: 'ละติจูดของคุณที่นี่', ลองจิจูด: 'ลองจิจูดของคุณที่นี่', ชื่อ: 'ชื่อตำแหน่งของคุณที่นี่', ที่อยู่: 'ตำแหน่งถนน / ที่อยู่ของคุณที่นี่ ',});
// ส่งเอกสารที่โฮสต์บน URL สาธารณะawait Whatsapp.sendDocument({recipientPhone: 'your allowance phone number here',caption: 'Invoice #123.',url: 'http://pdfkit.org/demo/out .pdf',});//หรือ// ส่งเอกสารที่อยู่ในระบบไฟล์ในเครื่องของคุณ (ไฟล์จะถูกอัปโหลดไปยังเซิร์ฟเวอร์ WhatsApp ก่อนที่จะส่ง) รอ Whatsapp.sendDocument({recipientPhone: 'หมายเลขโทรศัพท์ผู้รับของคุณที่นี่',file_path: './output.pdf',คำบรรยาย: 'ใบแจ้งหนี้ #123',});
// ส่งภาพที่โฮสต์บน URL สาธารณะawait Whatsapp.sendImage({recipientPhone: 'your allowance phone number here',caption: 'Test',file_path: 'https://example.com/image.png',} );// หรือ// ส่งรูปภาพที่อยู่ในระบบไฟล์ในเครื่องของคุณ (ไฟล์จะถูกอัปโหลดไปยังเซิร์ฟเวอร์ WhatsApp ก่อนที่จะส่ง) รอ Whatsapp.sendImage ({recipientPhone: 'โทรศัพท์ผู้รับของคุณ หมายเลขที่นี่', คำอธิบายภาพ: 'ทดสอบ', file_path: './XEIDF3D5FTBDF1.png',});
// ส่งวิดีโอที่โฮสต์บน URL สาธารณะawait Whatsapp.sendVideo({recipientPhone: 'your allowance phone number here',caption: 'Test',url: 'https://test-videos.co.uk/vids/ bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4',});// หรือ// ส่งวิดีโอที่อยู่ใน ระบบไฟล์ในเครื่องของคุณ (ไฟล์จะถูกอัปโหลดไปยังเซิร์ฟเวอร์ WhatsApp ก่อนที่จะส่ง) รอ Whatsapp.sendVideo({recipientPhone: 'your allowance phone number here',caption: 'Test',file_path: './last.mp4' ,});
// ส่งเสียงที่โฮสต์บน URL สาธารณะawait Whatsapp.sendAudio({recipientPhone: 'your allowance phone number here',url: 'https://example.com/audio.mp3',});// OR/ / ส่งเสียงที่อยู่ในระบบไฟล์ในเครื่องของคุณ (ไฟล์จะถูกอัปโหลดไปยังเซิร์ฟเวอร์ WhatsApp ก่อนที่จะส่ง) รอ Whatsapp.sendAudio ({ผู้รับโทรศัพท์: 'หมายเลขโทรศัพท์ผู้รับของคุณที่นี่' คำบรรยายภาพ: 'ทดสอบ',file_path: './last.mp3',});
await Whatsapp.sendSimpleButtons({ผู้รับโทรศัพท์: 'หมายเลขโทรศัพท์ผู้รับของคุณที่นี่',ข้อความ: `ฉันจะช่วยคุณได้อย่างไรในวันนี้`,listOfButtons: [{title: 'ดูผลิตภัณฑ์บางอย่าง',id: 'see_categories',},{title: 'ส่งใบแจ้งหนี้ของฉัน',id: 'print_invoice',},{title: 'พูดคุยกับมนุษย์',id: 'talk_to_human',},],});
await Whatsapp.sendRadioButtons({recipientPhone: 'your allowance phone number here',headerText: 'Black Friday Top 10 Products',bodyText:'Daggie มีผลิตภัณฑ์ดีๆ เรียงรายอยู่สำหรับคุณโดยอิงจากประวัติการซื้อครั้งก่อนของคุณnโปรดเลือกหนึ่งใน ผลิตภัณฑ์ด้านล่าง',footerText: 'อนุมัติโดย Daggie Blanqx',listOfSections: [{title: 'แฟชั่น 3 อันดับแรก',แถว: [{title: 'Black LVX T-Shirt',description: 'KES 2999.00nLVX is a warm cotton t-shirt',id: 'SKU12_black_lvx_tshirt',},{title: 'Purple hoodie',description:'KES 1999.00nPurple ฮู้ด พร้อมโลโก้ Logrocket',id: 'SKU13_purple_hoodie',},{title: 'Air Jordan 1',description:'KES 10999.00nเราย้ายไปในที่ที่คนอื่นไม่ทำอยากบินไหม',id: 'SKU14_air_jordan_1',},],},{title: 'Top 3 Gadgets',แถว: [{title: 'Apple Watch',description:'KES 75999.00nเวลามีจำกัด สนุกไปกับทุกวินาที',id: 'SKU15_apple_watch',},{title: 'Surface Pro',description: `KES 59999.00nอย่าเพียงแค่ท่องเว็บ แต่ท่องโลก`,id: 'SKU16_surface_pro ',},{title: 'Xiaomi Beats Speaker',คำอธิบาย: `KES 45699nอยู่ที่จังหวะการเต้นของหัวใจของคุณ ในแบบที่ Xiaomi Beats`,id: 'SKU17_xiaomi_beats_speaker',},],},{title: 'Top 3 Kitchen',rows: [{title: 'Portable Hand Mixer',description: ` KES7899nยั่วยวนเหล่าคู่รักของคุณด้วยการผสมอาหารที่คุณชื่นชอบให้เข้ากัน`,id: 'SKU18_portable_hand_mixer',},{title: 'เครื่องทำวาฟเฟิลที่ไม่ติด',description: `KES7899nวาฟเฟิลชั้นเยี่ยมทำจากส่วนผสมที่ดีที่สุด`,id: 'SKU19_non_stick_waffle_maker',},{title: 'ช้อนทำอาหาร 6 ชุด' ,description: `KES7899nรักษาความสุขของคุณไว้ให้ดี'',id: 'SKU20_6_set_cooking_spoons',},],},{title: '1 สุ่มเลือก',แถว: [{title: 'Nivea Icy Soap',description: `KES899nคงความชุ่มชื้นและสดชื่น บำรุงผิวของคุณ`,id: 'SKU21_nivea_icy_soap',},],},]});
await Whatsapp.sendContact({recipientPhone:ผู้รับโทรศัพท์,contact_profile: {ที่อยู่: [{ถนน: '1 Hacker Way',เมือง: 'Menlo Park',สถานะ: 'CA',zip: '94025',ประเทศ: 'สหรัฐอเมริกา' ,country_code: 'us',ประเภท: 'HOME',},{ถนน: '200 Jefferson Dr',เมือง: 'Menlo Park',รัฐ: 'CA',zip: '94025',ประเทศ: 'สหรัฐอเมริกา',country_code: 'us',ประเภท: 'WORK',},],วันเกิด: '2002-02-14',อีเมล: [{email: ' [email protected]',ประเภท: 'งาน',},{อีเมล: '[email protected]',ประเภท: 'HOME',},],ชื่อ: {formatted_name: 'Daggie Blanqx',first_name: 'Daggie',last_name: 'Blanqx',middle_name: 'M.',คำต่อท้าย: 'Sr',คำนำหน้า: 'Sw Engr',},org: {บริษัท: 'WhatsApp' ,แผนก: 'การออกแบบ',หัวเรื่อง: 'ผู้จัดการ',},โทรศัพท์: [{โทรศัพท์: '+1 (940) 555-1234', พิมพ์: 'HOME', wa_id: '16505551234', // ตัวเลือก }, {โทรศัพท์: '+1 (650) 555-1234', พิมพ์: 'ทำงาน', // ตัวเลือก wa_id: ' 16505551234', // ตัวเลือก},], URL: [{url: 'https://www.facebook.com',ประเภท: 'งาน',},{url: 'https://www.whatsapp.com',ประเภท: 'HOME',},],},});
ให้ผลลัพธ์ = รอ Whatsapp.createQRCodeMessage({ข้อความ: `ข้อความรหัส QR ของคุณที่นี่ ฉันเป็นข้อความที่ซ่อนอยู่ในรหัส QR`,imageType: 'png' || 'svg',});let urlOfImage = result.data .qr_image_url;
ดูภาพด้านล่างเกี่ยวกับวิธีการแสดงรหัส QR:
await Whatsapp.markMessageAsRead({message_id: 'the id of your message here',});// ข้อผิดพลาดที่ไม่สามารถลองใหม่ได้จะปรากฏขึ้นหากไม่พบข้อความหรือข้อความที่ถูกอ่านแล้ว
รหัสปุ่มต้องมีความยาวระหว่าง 1 ถึง 256 อักขระ
ชื่อปุ่มต้องมีความยาวระหว่าง 1 ถึง 20 อักขระ
รายการสินค้ามีจำนวนจำกัดเพียง 10 รายการ
คำอธิบายของรายการในรายการต้องมีความยาวระหว่าง 1 ถึง 72 อักขระ
ชื่อของรายการต้องมีความยาวระหว่าง 1 ถึง 24 อักขระ
รหัสของรายการต้องมีความยาวระหว่าง 1 ถึง 200 อักขระ
// req.body คือส่วนเนื้อหาของคำขอที่ ping ไปยัง webhook เพย์โหลดที่ไม่ถูกต้องจะทำให้เกิดข้อผิดพลาด และคุณควรตอบกลับด้วยสถานะ HTTP 5** หรือ 4** ไม่ใช่ 200.// อย่าลืมตอบกลับด้วยสถานะ HTTP 200 เมื่อสิ้นสุดคำขอขาเข้าที่สำเร็จ ข้อมูล = Whatsapp.parseMessage( req.body);/*data.isMessage จะเป็นจริงหากเป็นข้อความจากลูกค้า จะเป็นเท็จ มิฉะนั้น data.isNotificationMessage จะเป็นจริงหากเป็นการแจ้งเตือนจาก Meta (เช่น ข้อความ การแจ้งเตือนสถานะการจัดส่ง/การอ่าน) มันจะเป็นเท็จ มิฉะนั้นข้อมูลจะทำให้เกิดข้อผิดพลาดหากเนื้อหาของคำขอ webhook ไม่ถูกต้องหรือไม่ได้มาจาก Meta.*/
ถ้า (data? .isMessage) {let incomingMessage = data.message; ให้ผู้รับโทรศัพท์ = incomingMessage.from.phone; // แยกหมายเลขโทรศัพท์ของลูกค้าผู้รับชื่อ = incomingMessage.from.name; // แยกชื่อของลูกค้า typeOfMsg = incomingMessage.type; // แยกประเภทของ messagelet message_id = incomingMessage.message_id; // แยก idif ของข้อความ (typeOfMsg === 'simple_button_message') {let button_id = incomingMessage.button_reply.id;if (button_id === 'book_appointment') {// ลูกค้าคลิกที่ปุ่มธรรมดาซึ่งมี id เป็น 'book_appointment '.// คุณสามารถตอบกลับพวกเขาด้วยการดำเนินการขาออก เช่น ข้อความ await Whatsapp.sendText({message: `สวัสดีลูกค้า คุณคลิกที่ปุ่ม 'จองนัดหมาย' 'โทรศัพท์ผู้รับ: 'หมายเลขโทรศัพท์ของผู้รับของคุณที่นี่',});};};
ถ้า (data? .isMessage) {let incomingMessage = data.message; ให้ผู้รับโทรศัพท์ = incomingMessage.from.phone; // แยกหมายเลขโทรศัพท์ของลูกค้าผู้รับชื่อ = incomingMessage.from.name; // แยกชื่อของลูกค้า typeOfMsg = incomingMessage.type; // แยกประเภทของ messagelet message_id = incomingMessage.message_id; // แยกข้อความ idif (typeOfMsg === 'radio_button_message') {let SelectId = incomingMessage.list_reply.id;if (selectionId === 'morning_session') {// ลูกค้าเลือกปุ่มตัวเลือกที่มี id เป็น 'morning_session' .// คุณสามารถตอบกลับพวกเขาด้วยการดำเนินการขาออก เช่น ข้อความรอ Whatsapp.sendText({message: `คุณได้เลือกตัวเลือก 'morning_session'`,recipientPhone: 'your allowance phone number here'});};};
หากคุณมีคำถามใดๆ โปรดถามผ่านฟอรัมสนทนา GitHub
หากคุณมีข้อเสนอแนะหรือข้อเสนอแนะ โปรดเปิดประเด็นหรือสร้างคำขอดึงข้อมูล
แพ็คเกจนี้อยู่ระหว่างการพัฒนา
ซึ่งหมายความว่ามีการเพิ่มคุณสมบัติใหม่เป็นประจำ
ในกรณีที่ฟีเจอร์โปรดของคุณหายไป คุณสามารถย้อนกลับเวอร์ชันหรือสร้างคำขอดึงข้อมูลซึ่งจะได้รับการตรวจสอบและรวมเข้ากับรุ่นถัดไปได้เสมอ
ขอบคุณสำหรับการสนับสนุนของคุณ
ขอให้มีความสุขในการเขียนโค้ด!
ติดตามฉันบน Twitter: @daggieblanqx
ฉันยังอยู่ใน LinkedIn ซึ่งคุณสามารถแท็กฉันให้เข้าร่วมโครงการที่ยอดเยี่ยมที่คุณสร้างขึ้นโดยใช้แพ็คเกจนี้: @daggieblanqx
โพสต์ในบล็อก: Logrocket/@Daggieblanqx