企业和开发人员开始构建Whatsapp Cloud API 的最简单、最直观的方式。
向收件人发送自由格式的短信
向收件人发送地理位置消息
将文档发送给收件人
将图像发送给收件人
将视频发送给收件人
向收件人发送音频
向收件人发送按钮列表(允许的最大按钮数量为 3)
向收件人发送单选按钮列表(允许的单选按钮最大数量为 10)
将联系人发送给收件人
生成可由收件人扫描的二维码
将消息标记为已读
解析传入消息
什么是 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: '这里是您的纬度',longitude: '这里是您的经度',name: '这里是您的位置名称',address: '这里是您的位置街道/地址',});
// 发送托管在公共 URL 上的文档等待 Whatsapp.sendDocument({recipientPhone: '此处是您的收件人电话号码',caption: 'Invoice #123.',url: 'http://pdfkit.org/demo/out .pdf',});//或// 发送本地文件系统中的文档(文件将在发送之前先上传到 WhatsApp 服务器).await Whatsapp.sendDocument({recipientPhone: '这里是您的收件人电话号码',file_path: './output.pdf',caption: '发票 #123',});
// 发送托管在公共 URL 上的图像等待 Whatsapp.sendImage({recipientPhone: '您的收件人电话号码在这里',caption: 'Test',file_path: 'https://example.com/image.png',} );// 或者// 发送本地文件系统中的图像(文件在发送之前将首先上传到 WhatsApp 服务器).await Whatsapp.sendImage({recipientPhone: '这里是您的收件人电话号码',caption: '测试',file_path: './XEIDF3D5FTBDF1.png',});
// 发送托管在公共 URL 上的视频等待 Whatsapp.sendVideo({recipientPhone: '您的收件人电话号码在这里',caption: '测试',url: 'https://test-videos.co.uk/vids/ bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_1MB.mp4',});// 或者// 发送一个视频在您的本地文件系统中(文件在发送之前将首先上传到 WhatsApp 服务器)。await Whatsapp.sendVideo({recipientPhone: '您的收件人电话号码在这里',caption: '测试',file_path: './last.mp4 ',});
// 发送托管在公共 URL 上的音频等待 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: '与人类交谈',},],});
wait Whatsapp.sendRadioButtons({recipientPhone: '此处是您的收件人电话号码',headerText: '黑色星期五十大产品',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.00n紫色连帽衫带有 Logrocket 徽标',id: 'SKU13_purple_hoodie',},{title: 'Air Jordan 1',description:'KES 10999.00n我们搬到别人不去的地方。想飞吗?',id: 'SKU14_air_jordan_1',},],},{title: '前 3 名小工具',行:[{标题:'Apple Watch',描述:'KES 75999.00n时间有限,享受每一秒',id: 'SKU15_apple_watch',},{title: 'Surface Pro',description: `KES 59999.00n不要只是上网冲浪,而是畅游世界`,id: 'SKU16_surface_pro ',},{title: '小米打败音箱',description: 'KES 45699n它是你的心跳方式,小米的节拍方式。`,id: 'SKU17_xiaomi_beats_speaker',},],},{title: 'Top 3 Kitchen',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 random pick',rows: [{title: 'Nivea Icy Soap',description: `KES899n保持水分和清爽。滋养您的肌肤。`,id: 'SKU21_nivea_icy_soap',},],},],});
等待Whatsapp.sendContact({recipientPhone:recipientPhone,contact_profile:{地址:[{街道:'1 Hacker Way',城市:'门洛帕克',州:'CA',邮政编码:'94025',国家:'美国' ,country_code: 'us',type: 'HOME',},{街道: '200 Jefferson Dr',城市: '门洛帕克',州:'CA',邮政编码:'94025',国家:'美国',国家代码:'us',类型:'工作',},],生日:'2002-02-14',电子邮件:[{电子邮件:'[email protected]',类型:'工作',},{电子邮件:'[email protected]',类型: 'HOME',},],名称: {formatted_name: 'Daggie Blanqx',first_name: 'Daggie',last_name: 'Blanqx',middle_name: 'M.',后缀: 'Sr',前缀: 'Sw Engr', },org: {公司: 'WhatsApp',部门: '设计',职称: '经理',},电话: [{phone: '+1 (940) 555-1234',type: 'HOME',wa_id: '16505551234', // 可选},{phone: '+1 (650) 555-1234',type: '工作', // 可选wa_id: '16505551234', // 可选},],urls: [{url: 'https://www.facebook.com',类型:'工作',},{url:'https://www.whatsapp.com',类型:'HOME',},],},});
let result = wait Whatsapp.createQRCodeMessage({message: `这里是您的二维码消息。我是隐藏在二维码中的消息`,imageType: 'png' || 'svg',});let urlOfImage = result.data .qr_image_url;
如何显示二维码请参见下图:
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 webhook 的请求正文。无效的有效负载将引发错误,您应该以 HTTP 状态 5** 或 4** 进行响应,而不是 200。//记住在成功的入站请求结束时以 HTTP 200 状态进行响应。let data = Whatsapp.parseMessage( req.body);/*如果是来自客户的消息,data.isMessage 将为 true,否则为 false。如果是来自 Meta 的通知(例如消息传递/读取状态通知),否则将为 false。如果 webhook 请求的正文无效或不是来自 Meta,则数据将抛出错误。*/
if (data?.isMessage) {让传入消息 = data.message;让收件人电话 =传入消息.from.phone; // 提取客户的电话号码recipientName =comingMessage.from.name; // 提取 customerlet 的名称 typeOfMsg =comingMessage.type; // 提取messagelet的类型 message_id =传入Message.message_id; // 提取消息 idif (typeOfMsg === 'simple_button_message') {let button_id =comingMessage.button_reply.id;if (button_id === 'book_appointment') {// 客户点击了一个 id 为 'book_appointment 的简单按钮'.// 您可以通过出站操作来响应它们,例如短信await Whatsapp.sendText({message: `您好,客户,您点击了“预约”按钮`,recipientPhone: '此处是您的收件人电话号码',});};};
if (data?.isMessage) {让传入消息 = data.message;让收件人电话 =传入消息.from.phone; // 提取客户的电话号码recipientName =comingMessage.from.name; // 提取 customerlet 的名称 typeOfMsg =comingMessage.type; // 提取messagelet的类型 message_id =传入Message.message_id; // 提取消息 idif (typeOfMsg === 'radio_button_message') {let SelectionId =comingMessage.list_reply.id;if (selectionId === 'morning_session') {// 客户选择了 id 为 'morning_session' 的单选按钮.// 您可以通过出站操作来响应它们,例如短信await Whatsapp.sendText({message: `您已选择'morning_session' 选项`,recipientPhone: '此处是您的收件人电话号码'});};};
如果您有任何疑问,请通过 GitHub 讨论论坛提问
如果您有任何建议或反馈,请提出问题或创建拉取请求。
该软件包正在积极开发中。
这意味着定期添加新功能。
如果缺少您最喜欢的功能,您可以随时向后推送版本或创建拉取请求,该请求将被审查并合并到下一个版本中。
感谢您的贡献。
快乐编码!
在 Twitter 上关注我:@daggieblanqx
我也在 LinkedIn,您可以在其中将我标记为您使用此包构建的出色项目:@daggieblanqx
博客文章:Logrocket/@Daggieblanqx