# Unread Message

When the customer service replies user's message, user can receive a notification of unread messages, even if the AIHelp page is not currently displayed.

You can implement this function either by proactively fetching or by third-party push.

WARNING

By default, AIHelp uses a randomly generated deviceId as userId to poll for the count of unread messages.

So, until you sync the correct userId to AIHelp, the unread message count may be inaccurate.

# By Fetching

# API

# fetchUnreadMessageCount / fetchUnreadTaskCount

Calling this method allows you to actively retrieve the unread message count for the current user.

[AIHelpSupportSDK fetchUnreadMessageCount];
[AIHelpSupportSDK fetchUnreadTaskCount];

You can call these APIs at any time to query the unread message count for the current user, but please note:

  1. This method has a frequency limit:

Repeated calls within the limit period will return the result of the previous query. During development, you can check the logs to see the time until the next valid call.

  1. This method will return 0 in the following situations to notify the caller that the current user has no unread messages:
  • When the user has no ongoing complaints or tasks.
  • After the user has opened the customer service conversation window, or checked all unread tasks.

# Event

Subscribe to the AIHelpEventMessageArrival and AIHelpEventUnreadTaskCount events to receive notifications about unread message changes for the current user.

void listener(const char *eventData, void (*acknowledge)(const char *ackData)) {
    // `eventData`: { "eventType": 5, "msgCount": 1 }
    // `eventData`: { "eventType": 8, "taskCount": 1 }
}

[AIHelpSupportSDK registerAsyncListener:listener eventType:AIHelpEventMessageArrival];
[AIHelpSupportSDK registerAsyncListener:listener eventType:AIHelpEventUnreadTaskCount];

# By Third-Party Push

Now we take APNs as an example to illustrate how the in-app notification works.

1、register APNs:

#import <UserNotifications/UserNotifications.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if (@available(iOS 10.0, *)) {
        [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {
            if (granted) {
                // The user has allowed push permissions
            }
        }];
    } else {
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }
}

2、call the following method to inform AIHelp of the player's push token and push platform

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
   if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 13) {
       if (![deviceToken isKindOfClass:[NSData class]]) {
           return;
       }
       const unsigned *tokenBytes = (const unsigned *)[deviceToken bytes];
       NSString *strToken = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                             ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                             ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                             ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
       token = strToken;
   } else {
       token = [NSString stringWithFormat:@"%@", deviceToken];
       token = [token stringByReplacingOccurrencesOfString:@"<" withString:@""];
       token = [token stringByReplacingOccurrencesOfString:@">" withString:@""];
       token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
   } 
   AIHelpUserConfigBuilder *userConfigBuider = [[AIHelpUserConfigBuilder alloc] init];
   userConfigBuider.userId = @"userId";
   [AIHelpSupportSDK updateUserInfo:userConfigBuider.build];
   [AIHelpSupportSDK setPushToken:token pushPlatform:AIHelpTokenPlatformAPNS];
}

3、alert your users when you receive a new message from AIHelp:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    NSDictionary *data = userInfo[@"data"];
    if (data && [data[@"elva"] isEqualToString:@"yes"]) {
        // alert your users that he/she has received a new message
    }
}

4、AIHelp push data format is as follows:

{
    "to":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification":{
        "body":"This is your new message content",
        "title":"customer service sends you a message.",
        "sound":"Enabled",
        "priority":"high",
        "uid":"..."
    },
    "data":{
        "body":"This is your new message content",
        "title":"customer service sends you a message.",
        "uid":"...",
        "elva":"yes",
        "entry_tag":"..."
    }
}
Last Updated: 7/25/2024, 4:33:52 AM