Home
/
Desk
/
iOS
/
Messages

CSAT message

Customer satisfaction rating (CSAT) message enables your customers to give a score or leave a comment on the support provided within a ticket. The satisfaction rating scale ranges from 1 to 5, and the average CSAT score an agent or a team received can be found in Reports on the Sendbird Dashboard.


Prerequisite

To send a CSAT message to a client app, turn on the Customer satisfaction rating feature on your dashboard first. The message is customizable in Settings > Triggers on the dashboard.


Message types

CSAT messages can have two types of states as below:

Confirmation states

StateDescription

WAITING

Set when an agent sends a CSAT message.

CONFIRMED

Set when a customer sends a response to a CSAT message.


Submit feedback

To submit feedback from a client app, call the ticket.submitFeedback() method on the client app. When a customer replies to the CSAT message, the state of the message changes from WAITING to CONFIRMED.

Light Color Skin
Copy
ticket.submitFeedback(with: USER_MESSAGE, score: SCORE, comment: COMMENT) { (ticket, error) in
    guard error == nil else {
        // Handle error.
    }
    ...
}
Arguments
RequiredTypeDescription

USER_MESSAGE

string

Specifies a text message for a CSAT message.

SCORE

int

Specifies the score of a satisfaction rating scale. The value ranges from 1 to 5 and can be nil.

COMMENT

string

Specifies a comment on the provided support. The value can be nil.


Update the CSAT message

Sendbird server notifies the updates to your app through the channel(_ sender: SBDBaseChannel, didUpdate message: SBDBaseMessage) delegate method of the SBDChannelDelegate. You can implement your code to customize the UI of the updated message depending on the request status.

Light Color Skin
Copy
func channel(_ sender: SBDBaseChannel, didUpdate message: SBDBaseMessage) {
    SBDSKTicket.getByChannelUrl(sender.channelUrl) { (ticket, error) in
        guard error == nil else {
            // Handle error.
        }

        if let data = Data(base64Encoded: message.data), data.isEmpty == false {
            let dataObject = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any]
            let type = dataObject?["type"] as? String

            let isFeedbackMessage = (type == "SENDBIRD_DESK_CUSTOMER_SATISFACTION")
            if isFeedbackMessage {
                let closureInquiry = dataObject?["body"] as? [String: Any]
                let state = closureInquiry?["state"] as? String

                switch state {
                    case "CONFIRMED":
                    // Implement your code for the UI when there is a response from a customer.
                    case "WAITING":
                    // Implement your code for the UI when there is no response from a customer.
                    default: break
                }
            }
        }
    }
}

message.data

You can find the stringified JSON object of the following in the message.data property within the channel(_ sender: SBDBaseChannel, didUpdate message: SBDBaseMessage) delegate method of SBDChannelDelegate.

Light Color Skin
Copy
{
    "type": "SENDBIRD_DESK_CUSTOMER_SATISFACTION",
    "body": {
        "state": "CONFIRMED",
        "customerSatisfactionScore": 3,                             // Score ranges from 1 to 5
        "customerSatisfactionComment": "It was really helpful :)."  // Comment is optional.
    }
}