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

如何在Rails应用中集成WhatsApp并发送消息?是否有可用Gem或插件?

集成WhatsApp到Rails应用&发送消息的方案

嘿,我来给你详细讲讲怎么把WhatsApp集成到Rails应用里,还有怎么实现消息发送——这事儿我之前做过几次,总结下来主要有两种靠谱的方式:用官方的WhatsApp Business Platform,或者用现成的Gem来简化流程。

一、官方WhatsApp Business Platform(最正规的方式)

这是Meta官方提供的渠道,功能最完整,适合需要深度定制的场景。步骤大概是这样:

  1. 准备开发者账号与配置

    • 先注册Meta开发者账号,创建一个新应用,然后添加「WhatsApp」产品
    • 获取你的ACCESS_TOKEN和PHONE_NUMBER_ID(在WhatsApp产品的设置里能找到)
    • 配置Webhook:WhatsApp会给你的Rails应用发送回调(比如接收消息、状态更新),你需要写一个控制器来处理这些请求。比如:
      # app/controllers/whatsapp_webhook_controller.rb
      class WhatsappWebhookController < ApplicationController
        skip_before_action :verify_authenticity_token
      
        def verify
          if params['hub.mode'] == 'subscribe' && params['hub.verify_token'] == ENV['WHATSAPP_VERIFY_TOKEN']
            render plain: params['hub.challenge']
          else
            render plain: 'Invalid verify token', status: 403
          end
        end
      
        def receive
          # 处理收到的消息或状态更新
          payload = JSON.parse(request.body.read)
          # 这里可以根据payload做逻辑处理,比如回复消息
          head :ok
        end
      end
      
      别忘了在routes.rb里加路由:
      post '/whatsapp/webhook', to: 'whatsapp_webhook#receive'
      get '/whatsapp/webhook', to: 'whatsapp_webhook#verify'
      
  2. 发送消息
    用Rails自带的Net::HTTP或者Faraday这类HTTP客户端调用官方API就行。比如发送文本消息的示例:

    require 'net/http'
    require 'uri'
    
    uri = URI("https://graph.facebook.com/v18.0/#{ENV['WHATSAPP_PHONE_NUMBER_ID']}/messages")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    
    request = Net::HTTP::Post.new(uri)
    request['Authorization'] = "Bearer #{ENV['WHATSAPP_ACCESS_TOKEN']}"
    request['Content-Type'] = 'application/json'
    request.body = JSON.dump({
      messaging_product: 'whatsapp',
      to: '目标用户的WhatsApp号码(带国家码,比如+123456789)',
      text: { body: '你好,这是来自Rails应用的消息!' }
    })
    
    response = http.request(request)
    puts response.read_body
    

二、用Gem简化操作(快速上手)

如果不想自己写太多HTTP请求的代码,可以用第三方Gem,最常用的是whatsapp-sdk,维护得比较好,文档也清晰。

  1. 安装Gem
    在你的Gemfile里添加:

    gem 'whatsapp-sdk'
    

    然后运行bundle install。

  2. 配置初始化文件
    在config/initializers/whatsapp.rb里添加配置:

    WhatsappSdk.configure do |config|
      config.access_token = ENV['WHATSAPP_ACCESS_TOKEN']
      config.phone_number_id = ENV['WHATSAPP_PHONE_NUMBER_ID']
      config.graph_api_version = 'v18.0' # 可以根据官方最新版本调整
    end
    
  3. 发送消息的示例
    发送文本消息:

    client = WhatsappSdk::Client.new
    response = client.messages.send_text(
      to: '+123456789',
      text: '这是通过Gem发送的WhatsApp消息!'
    )
    puts response.success? # 检查是否发送成功
    

    发送图片消息:

    client.messages.send_image(
      to: '+123456789',
      image: { link: 'https://example.com/image.jpg' }
    )
    

一些注意事项

  • 所有敏感信息(比如access token、verify token)都要存在环境变量里,别硬编码在代码里,推荐用dotenv-railsGem来管理
  • 正式使用前,需要在Meta平台申请并激活正式的WhatsApp号码,测试阶段可以用官方提供的测试号码
  • 要遵守WhatsApp的政策,不要发送垃圾消息,否则可能会被封号

内容的提问来源于stack exchange,提问作者Santosh Kumbhar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:00:03