在 WhatsApp Business API 上跟踪归因?

Tracking attribution on the WhatsApp Business API?

WhatsApp Business API 没有 ref 参数(例如 Messenger 有),它允许接收应用程序知道给定的 WhatsApp 用户来自哪里。

通过 WhatsApp 与企业的对话通常是通过 link 发起的——并且可以提供给 wa.me link 的唯一字段是 numbertext 个字段 (source)。

有什么办法可以绕过这个限制,并在 link 中添加一个 ref 参数(例如 ref=google-ad)?

找到一个 detailed post on encoding params into the WhatsApp link 来解决这个具体问题。

没有官方解决方案,但作者有一个聪明的技巧:使用不可打印的字符将 DeviceID(或 ref 参数,在您的情况下)编码为 text 参数。

encoding/decoding 参数的代码转载如下,但我建议 reading the article 了解所有相关细节:

# This class handles encoding and decoding of non printable characters
# into strings

class NonPrintableCoder
  NON_PRINTABLES = %W(\u200a \u200b \u200c \u200d \u200e)

  class << self
    def encode(num)
      base = NON_PRINTABLES.length
      output = ""

      while(num > 0) do
        output = NON_PRINTABLES[num % base] + output # MSB -> LSB
        num /= base
      end

      output
    end

    def decode(str)
      base = NON_PRINTABLES.length
      output = 0

      str.length.times do |i|
        chr = str[str.length - i - 1]
        output += NON_PRINTABLES.index(chr) * base ** i
      end

      output
    end
  end
end

用法:

# Generate link (encode '12345' into text string)
"https://wa.me/..?text=" + NonPrintableCoder.encode(12345) + "hi there!"

# Incoming webhook (extract '12345' from text string)
non_printables = msg.split("").filter do |char|
  char.in? NonPrintableCoder::NON_PRINTABLES
end
NonPrintableCoder.decode(non_printables) # => 12345