Skip to content

Commit e13495b

Browse files
committed
chatbot medium
1 parent 3a78928 commit e13495b

File tree

7 files changed

+99
-1
lines changed

7 files changed

+99
-1
lines changed

src/main/scala/com/snowplowanalytics/refererparser/Medium.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ object Medium {
2929
case SocialMedium.value => Some(SocialMedium)
3030
case EmailMedium.value => Some(EmailMedium)
3131
case PaidMedium.value => Some(PaidMedium)
32+
case ChatbotMedium.value => Some(ChatbotMedium)
3233
case _ => None
3334
}
3435

@@ -38,6 +39,7 @@ object Medium {
3839
val Social = SocialMedium
3940
val Email = EmailMedium
4041
val Paid = PaidMedium
42+
val Chatbot = ChatbotMedium
4143
}
4244

4345
case object UnknownMedium extends Medium("unknown")
@@ -46,3 +48,4 @@ case object InternalMedium extends Medium("internal")
4648
case object SocialMedium extends Medium("social")
4749
case object EmailMedium extends Medium("email")
4850
case object PaidMedium extends Medium("paid")
51+
case object ChatbotMedium extends Medium("chatbot")

src/main/scala/com/snowplowanalytics/refererparser/Parser.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ class Parser private[refererparser] (referers: Map[String, RefererLookup]) {
120120
case SocialMedium => SocialReferer(SocialMedium, lookup.source)
121121
case EmailMedium => EmailReferer(EmailMedium, lookup.source)
122122
case PaidMedium => PaidReferer(PaidMedium, lookup.source)
123+
case ChatbotMedium => ChatbotReferer(ChatbotMedium, lookup.source)
123124
}
124125
}
125126
.getOrElse(UnknownReferer(UnknownMedium))

src/main/scala/com/snowplowanalytics/refererparser/Referer.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,4 @@ final case class InternalReferer(medium: Medium) extends Referer
2929
final case class SocialReferer(medium: Medium, source: String) extends Referer
3030
final case class EmailReferer(medium: Medium, source: String) extends Referer
3131
final case class PaidReferer(medium: Medium, source: String) extends Referer
32+
final case class ChatbotReferer(medium: Medium, source: String) extends Referer

src/test/resources/referer-tests.json

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,5 +246,37 @@
246246
"source": null,
247247
"term": null,
248248
"known": false
249-
}
249+
},
250+
{
251+
"spec": "ChatGPT",
252+
"uri": "https://www.chatgpt.com",
253+
"medium": "chatbot",
254+
"source": "ChatGPT",
255+
"term": null,
256+
"known": true
257+
},
258+
{
259+
"spec": "Google Gemini",
260+
"uri": "https://gemini.google.com",
261+
"medium": "chatbot",
262+
"source": "Google Gemini",
263+
"term": null,
264+
"known": true
265+
},
266+
{
267+
"spec": "Microsoft Copilot",
268+
"uri": "https://www.copilot.microsoft.com/account?u=1&id=1",
269+
"medium": "chatbot",
270+
"source": "Microsoft Copilot",
271+
"term": null,
272+
"known": true
273+
},
274+
{
275+
"spec": "META.ai",
276+
"uri": "https://meta.ai",
277+
"medium": "chatbot",
278+
"source": "META.ai",
279+
"term": null,
280+
"known": true
281+
}
250282
]

src/test/resources/referers.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,5 +1100,28 @@
11001100
"odnoklassniki.ru"
11011101
]
11021102
}
1103+
},
1104+
"chatbot": {
1105+
"ChatGPT": {
1106+
"domains": [
1107+
"chatgpt.com",
1108+
"chat.openai.com"
1109+
]
1110+
},
1111+
"Google Gemini": {
1112+
"domains": [
1113+
"gemini.google.com"
1114+
]
1115+
},
1116+
"Microsoft Copilot": {
1117+
"domains": [
1118+
"copilot.microsoft.com"
1119+
]
1120+
},
1121+
"META.ai": {
1122+
"domains": [
1123+
"meta.ai"
1124+
]
1125+
}
11031126
}
11041127
}

src/test/scala/com/snowplowanalytics/refererparser/JsonParseTest.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class JsonParseTest extends Specification {
7272
case Some(SocialMedium) => Some(SocialReferer(SocialMedium, test.source.get))
7373
case Some(EmailMedium) => Some(EmailReferer(EmailMedium, test.source.get))
7474
case Some(PaidMedium) => Some(PaidReferer(PaidMedium, test.source.get))
75+
case Some(ChatbotMedium) => Some(ChatbotReferer(ChatbotMedium, test.source.get))
7576
case _ => throw new Exception(s"Bad medium: ${test.medium}")
7677
}
7778
val ioActual = ioParser.parse(new URI(test.uri), Some(pageHost), internalDomains)

src/test/scala/com/snowplowanalytics/refererparser/ParseTest.scala

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,42 @@ class ParseTest extends Specification with DataTables {
396396
Some("keyword 1%")
397397
)
398398
)
399+
test(
400+
RefererSpec(
401+
"ChatGPT",
402+
"https://www.chatgpt.com",
403+
Medium.Chatbot,
404+
Some("ChatGPT"),
405+
None
406+
)
407+
)
408+
test(
409+
RefererSpec(
410+
"Google Gemini",
411+
"https://gemini.google.com",
412+
Medium.Chatbot,
413+
Some("Google Gemini"),
414+
None
415+
)
416+
)
417+
test(
418+
RefererSpec(
419+
"Microsoft Copilot",
420+
"https://www.copilot.microsoft.com/account?u=1&id=1",
421+
Medium.Chatbot,
422+
Some("Microsoft Copilot"),
423+
None
424+
)
425+
)
426+
test(
427+
RefererSpec(
428+
"META.ai",
429+
"https://meta.ai",
430+
Medium.Chatbot,
431+
Some("META.ai"),
432+
None
433+
)
434+
)
399435
}
400436

401437
def genExpected(medium: Medium, source: Option[String], term: Option[String]) =
@@ -406,5 +442,6 @@ class ParseTest extends Specification with DataTables {
406442
case SocialMedium => SocialReferer(SocialMedium, source.get)
407443
case EmailMedium => EmailReferer(EmailMedium, source.get)
408444
case PaidMedium => PaidReferer(PaidMedium, source.get)
445+
case ChatbotMedium => ChatbotReferer(ChatbotMedium, source.get)
409446
}
410447
}

0 commit comments

Comments
 (0)