기업 과 개발자가 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가 있습니다.',});
wait 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?
wait Whatsapp.sendLocation({recipientPhone: '여기에 수신자 전화번호', latitude: '여기에 위도', 경도: '여기에 경도',name: '여기에 위치 이름',address: '여기에 귀하의 위치 거리/주소 ',});
// 공개 URLawait Whatsapp.sendDocument({recipientPhone: '수신자 전화번호는 여기에 있습니다.',caption: 'Invoice #123.',url: 'http://pdfkit.org/demo/out)에 호스팅된 문서를 보냅니다. .pdf',});//또는// 로컬 파일 시스템에 있는 문서를 보냅니다(파일은 전송되기 전에 먼저 WhatsApp 서버에 업로드됩니다).await Whatsapp.sendDocument({recipientPhone: '수신자 전화번호',file_path: './output.pdf',caption: '송장 #123',});
// 공개 URLawait Whatsapp.sendImage({recipientPhone: '수신자 전화번호는 여기에 있습니다',caption: 'Test',file_path: 'https://example.com/image.png',}에 호스팅된 이미지를 보냅니다. );// 또는// 로컬 파일 시스템에 있는 이미지를 보냅니다(파일은 전송되기 전에 먼저 WhatsApp 서버에 업로드됩니다).await Whatsapp.sendImage({recipientPhone: '수신자 전화번호 여기',caption: '테스트',file_path: './XEIDF3D5FTBDF1.png',});
// 공용 URLawait 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',} );
// 공용 URLawait Whatsapp.sendAudio({recipientPhone: '수신자 전화번호는 여기에 있습니다.',url: 'https://example.com/audio.mp3',});// OR/에서 호스팅되는 오디오를 보냅니다. / 로컬 파일 시스템에 있는 오디오를 보냅니다(파일은 전송되기 전에 먼저 WhatsApp 서버에 업로드됩니다).await Whatsapp.sendAudio({recipientPhone: '수신자 전화번호는 여기에 있습니다',caption: '테스트',file_path: './last.mp3',});
wait Whatsapp.sendSimpleButtons({recipientPhone: '수신자 전화번호는 여기에 있습니다',message: `오늘 어떻게 도와드릴까요`,listOfButtons: [{title: '일부 제품 보기',id: 'see_categories',},{title: '내 송장 보내기',id: 'print_invoice',},{title: '사람과 대화',id: 'talk_to_human',},],});
wait Whatsapp.sendRadioButtons({recipientPhone: '수신자 전화번호는 여기에 있습니다.',headerText: '블랙 프라이데이 상위 10개 제품',bodyText:'Daggie는 이전 쇼핑 기록을 바탕으로 멋진 제품을 준비했습니다.n다음 중 하나를 선택하세요. 아래 제품.',footerText: 'Daggie Blanqx가 승인함',listOfSections: [{title: '상위 3대 패션',rows: [{title: 'Black LVX T-Shirt',description: 'KES 2999.00nLVX는 따뜻한 면 티셔츠입니다.',id: 'SKU12_black_lvx_tshirt',},{title: 'Purplehoodie',description:'KES 1999.00nLogrocket 로고가 있는 보라색 후드티 ',id: 'SKU13_purple_hoodie',},{title: '에어 조던 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',},{title: 'Xiaomi Beats Speaker',description : `KES 45699n심장이 뛰는 방식, Xiaomi가 뛰는 방식에 달려 있습니다.`,id: 'SKU17_xiaomi_beats_speaker',},],},{title: 'Top 3 Kitchen',rows: [{title: '휴대용 핸드 믹서',description: `KES7899n 좋아하는 음식을 균일하게 섞어서 친구들을 유혹하세요.`,id: 'SKU18_portable_hand_mixer ',},{title: '눌어붙지 않는 와플 메이커',설명: `KES7899n최고의 재료로 맛있는 와플을 만듭니다.`,id: 'SKU19_non_stick_waffle_maker',},{title: '6-set Cooking Spoons',description: `KES7899n행복을 지켜주세요.`,id: 'SKU20_6_set_cooking_spoons',},] ,},{title: '무작위 선택 1개',rows: [{제목: '니베아 아이시 비누', 설명: `KES899n 수분을 공급하고 상쾌하게 유지하세요. 피부에 영양을 공급하세요.`,id: 'SKU21_nivea_icy_soap',},],},],});
wait Whatsapp.sendContact({recipientPhone: receivePhone,contact_profile: {addresses: [{street: '1 Hacker Way',city: 'Menlo Park',state: 'CA',zip: '94025',country: 'United States' ,국가_코드: 'us', 유형: 'HOME',},{street: '200 Jefferson Dr',city: 'Menlo Park', 주: 'CA',zip: '94025',국가: '미국',국가 코드: 'us',유형: 'WORK',},],생일: '2002-02-14',이메일: [{email: ' [email protected]',유형: 'WORK',},{이메일: '[email protected]',유형: 'HOME',},],이름: {formatted_name: 'Daggie Blanqx',first_name: 'Daggie',last_name: 'Blanqx',middle_name: 'M.',suffix: 'Sr',prefix: 'Sw Engr',},org: {회사: 'WhatsApp',department: '디자인',제목: '관리자',},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: '작업',},{url: 'https://www.whatsapp.com',type: '홈',},],},});
let result = wait Whatsapp.createQRCodeMessage({message: `귀하의 QR 코드 메시지가 여기에 있습니다. 저는 QR 코드에 숨겨진 메시지입니다.`,imageType: 'png' || 'svg',});let urlOfImage = result.data .qr_image_url;
QR 코드를 표시하는 방법은 아래 이미지를 참조하세요.
wait 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는 웹훅을 ping하는 요청의 본문입니다. 잘못된 페이로드는 오류를 발생시키며 200이 아닌 HTTP 상태 5** 또는 4**로 응답해야 합니다.// 성공적인 인바운드 요청이 끝나면 HTTP 200 상태로 응답해야 합니다.let data = Whatsapp.parseMessage( req.body);/*data.isMessage는 고객이 보낸 메시지인 경우 true이고, 그렇지 않으면 false입니다.data.isNotificationMessage가 Meta(예: 메시지 전달/읽기 상태 알림), 그렇지 않으면 거짓이 됩니다. 웹후크 요청의 본문이 유효하지 않거나 Meta에서 온 것이 아니면 데이터가 오류를 발생시킵니다.*/
if (data?.isMessage) {let receivedMessage = data.message;let receivePhone = receivedMessage.from.phone; // 고객의 전화번호를 추출합니다. receiveName =comingMessage.from.name; // 고객의 이름을 추출합니다. typeOfMsg =comingMessage.type; // 메시지렛 유형 추출 message_id =comingMessage.message_id; // 메시지 추출 idif (typeOfMsg === 'simple_button_message') {let button_id = receivedMessage.button_reply.id;if (button_id === 'book_appointment') {// 고객이 ID가 'book_appointment'인 간단한 버튼을 클릭했습니다. '.// 아웃바운드 작업(예: Whatsapp.sendText({message: `안녕하세요 고객님, '약속 예약' 버튼을 클릭하셨습니다`,recipientPhone: '여기에 수신자 전화번호',});};};
if (data?.isMessage) {let receivedMessage = data.message;let receivePhone = receivedMessage.from.phone; // 고객의 전화번호를 추출합니다. receiveName =comingMessage.from.name; // 고객의 이름을 추출합니다. typeOfMsg =comingMessage.type; // 메시지렛 유형 추출 message_id =comingMessage.message_id; // 메시지 추출 idif (typeOfMsg === 'radio_button_message') {let SelectionId = receivedMessage.list_reply.id;if (selectionId === 'morning_session') {// 고객이 ID가 'morning_session'인 라디오 버튼을 선택했습니다. .// 아웃바운드 작업(예: Whatsapp.sendText({message: `You)을 기다리는 문자 메시지)으로 응답할 수 있습니다. 'morning_session' 옵션을 선택했습니다`,recipientPhone: '수신자 전화번호는 여기에 있습니다'});};};
질문이 있는 경우 GitHub 토론 포럼을 통해 질문하세요.
제안이나 피드백이 있으면 이슈를 열거나 끌어오기 요청을 작성해 주세요.
이 패키지는 활발하게 개발 중입니다.
이는 새로운 기능이 정기적으로 추가된다는 의미입니다.
자주 사용하는 기능이 누락된 경우 언제든지 버전을 이전으로 되돌리거나 검토 후 다음 릴리스에 병합될 풀 요청을 생성할 수 있습니다.
귀하의 기여에 감사드립니다.
즐거운 코딩하세요!
트위터에서 나를 팔로우하세요: @daggieblanqx
저는 또한 LinkedIn에 있습니다. 여기에서 이 패키지를 사용하여 구축한 멋진 프로젝트에 저를 태그할 수 있습니다: @daggieblanqx
블로그 게시물: Logrocket/@Daggieblanqx