You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Flutter实现WhatsApp一次性向多个号码发送消息

问题原因

你代码的核心问题是Dart的forEach方法不会等待内部异步函数执行完成,循环内的所有launch调用会在极短时间内依次触发,前一次跳转WhatsApp的请求还未执行完成,就被后一次跳转请求覆盖,最终只有列表最后一个号码的发送请求能被WhatsApp接收。

解决方案

将forEach替换为支持异步等待的for...in循环,同时在两次跳转之间添加合理的等待时长,给用户留出发送操作的响应时间,也避免跳转请求互相覆盖。修正后的代码如下:

sendMessage() async {
  var number = ["201020402642", "201030666895"];
  var baseUrl = "https://api.whatsapp.com/send/";

  // 用for in循环替代forEach,支持异步等待
  for (var element in number) {
    var url = baseUrl + "?phone=${element}&text=msg";
    if (await canLaunch(url)) {
      await launch(url);
      // 每次跳转后等待15秒,可根据实际需求调整时长,留足用户手动点击发送的时间
      await Future.delayed(const Duration(seconds: 15));
    } else {
      print("not installed");
    }
  }
}
注意事项
  • 上述方案使用的是WhatsApp公开的跳转协议,无法实现完全自动发送,每次跳转后都需要用户手动点击发送按钮才能完成消息发送,这是WhatsApp的安全限制,没有绕过方案。
  • 请勿频繁批量发送营销类等非私人消息,否则会被WhatsApp判定为垃圾账号,触发封禁限制。
  • 如果你使用的是新版url_launcher库,可将代码中的canLaunch替换为canLaunchUrl、launch替换为launchUrl,参数改为Uri.parse(url)即可。

内容的提问来源于stack exchange,提问作者Ahmed Khalid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:21:00