在 WhatsApp Business API 上跟踪归因?
Tracking attribution on the WhatsApp Business API?
WhatsApp Business API 没有 ref
参数(例如 Messenger 有),它允许接收应用程序知道给定的 WhatsApp 用户来自哪里。
通过 WhatsApp 与企业的对话通常是通过 link 发起的——并且可以提供给 wa.me
link 的唯一字段是 number
和 text
个字段 (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
WhatsApp Business API 没有 ref
参数(例如 Messenger 有),它允许接收应用程序知道给定的 WhatsApp 用户来自哪里。
通过 WhatsApp 与企业的对话通常是通过 link 发起的——并且可以提供给 wa.me
link 的唯一字段是 number
和 text
个字段 (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