เอกสารประกอบ

พุชการแจ้งเตือน

ส่งมอบคำตอบของเจ้าหน้าที่และแคมเปญขณะที่แอปปิดอยู่ พร้อม deep link ตรงเข้าสู่บทสนทนาที่ถูกต้อง แอปของคุณเป็นเจ้าของระบบพุช; ส่วน SDK ลงทะเบียน token และเปิดบทสนทนา

Respondo ส่งอะไร#

  • พุชข้อความ — คำตอบของเจ้าหน้าที่หรือ AI ในบทสนทนาที่ผู้เข้าชมเป็นส่วนหนึ่งอยู่
  • พุชแคมเปญ — แคมเปญพุชขาออก ซึ่งยังรายงาน beacon การเปิดด้วย

พุชข้อความมี deep link ในรูปแบบ respondo://conversation/<id> เสมอ ส่วนพุชแคมเปญมี deep link ที่กำหนดค่าไว้บนแคมเปญ — มันเป็นทางเลือก และเมื่อไม่ได้ตั้งค่า พุชจะไม่มี deep link

Apple (APNs)#

พุชบน iOS ทำงานบน APNs โดยตรง — ไม่มี dependency กับ Firebase จากบัญชี Apple Developer ของคุณ ให้ขอสิ่งเหล่านี้:

  • APNs Auth Key (token key แบบ .p8)
  • Key ID ของ key นั้น
  • Team ID ของคุณ
  • bundle id ของแอป

Google (FCM)#

พุชบน Android ไปผ่าน Firebase Cloud Messaging จากโปรเจกต์ Firebase ของคุณ ให้ขอสิ่งเหล่านี้:

  • service account JSON ที่มี role Cloud Messaging
  • Firebase project ID (คอนโซล Firebase → Project settings) — กรอกเป็นฟิลด์ของตัวเองในฟอร์มพุชของแดชบอร์ดควบคู่กับ service-account JSON
  • package name ของแอป Android และเชื่อมต่อแอปเข้ากับโปรเจกต์ Firebase เดียวกัน (google-services.json)

การตั้งค่าใน Respondo#

เพิ่ม APNs key และ FCM service account พร้อม project ID ของมันเข้ากับช่องวิดเจ็ตของคุณในแดชบอร์ด เพียงเท่านี้ Respondo ก็ต้องการทั้งหมดที่จำเป็นเพื่อส่งไปยังทั้งสองแพลตฟอร์ม

การตั้งค่าข้อมูลรับรองผ่าน API และเอกสารอ้างอิงฟิลด์แบบเต็ม ครอบคลุมอยู่ในคู่มือตั้งค่าพุช ที่ส่งมาพร้อมกับการเข้าถึง SDK ของคุณ

รูปแบบ payload#

payload อยู่ใต้ key ราก respondo เสมอ — การมีอยู่ของมันคือวิธีที่ SDK แยกแยะพุชของตนเองออกจากพุชอื่น (บน iOS อยู่ใน userInfo, บน Android เป็นสตริง JSON ใน data["respondo"])

respondo payloadjson
{
  "respondo": {
    "type": "message",
    "conversation_id": "a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90",
    "message_id": "e9a3c1f6-4b8d-4e0a-b5f3-1d7b2a4e9c63",
    "deep_link": "respondo://conversation/a1c4e7b2-5d38-4f6a-9e10-3b7c2d5f8a90"
  }
}

ค่าทั้งหมดเป็นสตริงแบบแบน ชื่อและเนื้อหาของการแจ้งเตือนถูกส่งมอบโดย transport ของแพลตฟอร์ม — aps.alert บน APNs และ message.notification บน FCM — ไม่ได้อยู่ในออบเจ็กต์ respondo

พุชแคมเปญยังมี delivery_id ที่ใช้รายงาน beacon การเปิดด้วย และอาจมี key สตริงแบบแบนเพิ่มเติมจากข้อมูลพุชของแคมเปญ

การจัดการการแตะและ foreground#

เมื่อแตะการแจ้งเตือน ให้ส่ง payload ดิบให้ SDK มันจะแยกวิเคราะห์ payload และเปิดบทสนทนาที่ถูกต้อง โดยคืน false หากพุชนั้นไม่ใช่พุชของ Respondo (ในกรณีนั้นให้คุณจัดการเอง)

การจัดการการแตะ (แยกตามแพลตฟอร์ม)text
Android:  RespondoPushPayload.from(data)?.let { Respondo.handlePush(it) }
iOS:      Respondo.handlePush(userInfo: userInfo)
Flutter:  Respondo.handlePushData(message.data)

รายการซ้ำจะถูกยุบรวมด้วย message_id, และขณะที่บทสนทนาเดียวกันเปิดอยู่ที่ foreground การแจ้งเตือนของระบบจะถูกระงับ — SDK จัดการทั้งสองอย่างโดยอัตโนมัติ

การลงทะเบียน device token#

แอปของคุณได้ device token จากระบบพุชของตนและส่งไปยัง setPushToken เรียก clearPushToken เมื่อออกจากระบบ

token ตัวไหนที่ต้องส่ง backend จะกำหนดเส้นทางการส่งมอบแต่ละครั้งตามแพลตฟอร์ม — iOS ไปที่ APNs โดยตรง, Android ไปที่ FCM — ดังนั้นคุณต้องลงทะเบียน token ของ transport เนทีฟของแพลตฟอร์มนั้น ไม่ใช่สิ่งที่ไลบรารีพุชของคุณบังเอิญคืนกลับมา:
  • Android — FCM registration token จาก FirebaseMessaging.getToken()
  • iOS (เนทีฟ) — APNs device token (hex) จาก didRegisterForRemoteNotificationsWithDeviceToken
  • iOS ผ่าน Flutter (firebase_messaging) — ใช้ getAPNSToken(), ไม่ใช่ getToken()การส่ง FCM token บน iOS จะส่งมันไปที่ APNs ซึ่งมันไม่ใช่ device token ที่ถูกต้อง และพุชจะไม่มีวันมาถึง getAPNSToken() อาจเป็น null ในช่วงแรกหลังเปิดแอป — หากเป็นเช่นนั้นให้ลองใหม่หลังหน่วงเวลาสั้น ๆ
Android — FirebaseMessagingServicekotlin
override fun onNewToken(token: String) {
    Respondo.setPushToken(token)
}
iOS — AppDelegateswift
func application(
    _ application: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
    let token = deviceToken.map { String(format: "%02x", $0) }.joined()
    Respondo.setPushToken(token)
}
Flutter — firebase_messagingdart
// iOS ต้องใช้ APNs token; Android ต้องใช้ FCM token
final token = Platform.isIOS
    ? await FirebaseMessaging.instance.getAPNSToken()
    : await FirebaseMessaging.instance.getToken();
if (token != null) Respondo.setPushToken(token);

// FCM หมุน registration token ของมัน; ให้ Android sync อยู่เสมอ
if (!Platform.isIOS) {
  FirebaseMessaging.instance.onTokenRefresh.listen(Respondo.setPushToken);
}