x1ongzhu 1 ano atrás
pai
commit
a0493155e2

+ 1 - 1
package.json

@@ -81,7 +81,7 @@
     "passport-jwt": "^4.0.1",
     "pem": "^1.14.7",
     "quick-lru": "^5.0.0",
-    "randomstring": "^1.2.3",
+    "randomstring": "^1.3.0",
     "reflect-metadata": "^0.1.13",
     "rimraf": "^4.1.2",
     "rxjs": "^7.8.0",

+ 3 - 0
src/operator_config/entities/operator-config.entiy.ts

@@ -17,6 +17,9 @@ export class OperatorConfig {
     @PrimaryColumn({ length: 50 })
     country: string
 
+    @Column()
+    areaCode: string
+
     @CreateDateColumn()
     createdAt: Date
 

+ 3 - 0
src/rcs-number/entities/rcs-number.entity.ts

@@ -35,6 +35,9 @@ export class RcsNumber {
     @Column()
     mnc: string
 
+    @Column()
+    areaCode: string
+
     @Column()
     country: string
 

+ 1 - 0
src/rcs-number/rcs-number.service.ts

@@ -117,6 +117,7 @@ export class RcsNumberService {
         number.deviceId = deviceId
         number.mcc = mapTo.mcc
         number.mnc = mapTo.mnc
+        number.areaCode = operatorConfig.areaCode
         number.country = operatorConfig.country.toLowerCase()
         number.status = RcsNumberStatus.PENDING
         number.expiryTime = addMinutes(new Date(), 5)

+ 22 - 0
src/task/task.service.ts

@@ -23,6 +23,7 @@ import * as AsyncLock from 'async-lock'
 import { UsersService } from 'src/users/users.service'
 import { addHours, addMinutes } from 'date-fns'
 import { SysConfig } from 'src/sys-config/entities/sys-config.entity'
+import * as randomstring from 'randomstring'
 
 @Injectable()
 export class TaskService implements OnModuleInit {
@@ -537,6 +538,24 @@ export class TaskService implements OnModuleInit {
             })
     }
 
+    refineContent(content: string) {
+        const match = /(?:(?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-&?=%.]+/g.exec(content)
+        if (match) {
+            const originUrl = match[0].replace(/\.+$/, '')
+            const http = originUrl.startsWith('http')
+            const url = new URL(http ? originUrl : 'http://' + originUrl)
+            url.searchParams.append('utm_source', 'sms')
+            url.searchParams.append('utm_medium', 'sms')
+            url.searchParams.append('utm_campaign', randomstring.generate(8))
+            let newUrl = url.toString()
+            if (!http) {
+                newUrl = newUrl.replace('http://', '')
+            }
+            return content.replace(originUrl, newUrl)
+        }
+        return content
+    }
+
     async dispatchTask(task: Task) {
         const batchSize = 200
         const taskItems = await this.taskItemRepository.find({
@@ -555,6 +574,9 @@ export class TaskService implements OnModuleInit {
             return
         }
 
+        taskItems.forEach((item) => {
+            item.message = this.refineContent(item.message)
+        })
         const taskConfig = {
             rcsWait: task.rcsWait || (await this.getConfig('rcs_wait', 2000)),
             rcsInterval: task.rcsInterval || (await this.getConfig('rcs_interval', 3000)),

+ 1 - 1
yarn.lock

@@ -6744,7 +6744,7 @@ randombytes@^2.1.0:
   dependencies:
     safe-buffer "^5.1.0"
 
-randomstring@^1.2.3:
+randomstring@^1.3.0:
   version "1.3.0"
   resolved "https://registry.npmmirror.com/randomstring/-/randomstring-1.3.0.tgz#1bf9d730066899e70aee3285573f84708278683d"
   integrity sha512-gY7aQ4i1BgwZ8I1Op4YseITAyiDiajeZOPQUbIq9TPGPhUm5FX59izIaOpmKbME1nmnEiABf28d9K2VSii6BBg==