Sending One-to-One Messages to One User

Last updated: 2021-10-09 15:50:24

    Feature Description

    • When the admin sends a message to an account, the sender displayed to the recipient is the admin.
    • When the admin specifies an account to send a message to another account, the sender displayed to the recipient is not the admin, but the account specified by the admin.
    • This API does not check whether the sender and the recipient are friends or blocklisted by either party or whether the recipient is muted.
    • For one-to-one messages, the MsgSeq field is specified by the user when the message is sent. Its value can be repeated. It is not generated by the backend and not globally unique. For group chat messages, the value of the MsgSeq field is generated by the backend, and each group maintains its respective MsgSeq which increases strictly from 1. For one-to-one messages, the historical messages of the same conversation are sorted by timestamp first, and then the historical messages of the same second are sorted by MsgSeq.
    Note:

    When calling this API to send a one-to-one message, you must specify whether to synchronize the message to the sender, which is the admin account or the account specified by the admin. Synchronization can be implemented via online terminals and roaming servers. This API provides the SyncOtherMachine parameter to determine whether to synchronize the message. For more information, see Sample requests below.

    API Calling Description

    Sample request URL

    https://xxxxxx/v4/openim/sendmsg?sdkappid=88888888&identifier=admin&usersig=xxx&random=99999999&contenttype=json
    

    Request parameters

    The following table only describes the modified parameters when this API is called. For more information on other parameters, please see RESTful API Overview.

    Parameter Description
    https The request protocol is HTTPS, and the request method is POST.
    xxxxxx The country/region where your SDKAppID is located.
  • China: console.tim.qq.com
  • Singapore: adminapisgp.im.qcloud.com
  • Seoul: adminapikr.im.qcloud.com
  • Frankfurt: adminapiger.im.qcloud.com
  • v4/openim/sendmsg Request API
    sdkappid SDKAppID assigned by the IM console when an app is created
    identifier App admin account. For more information, please see the App Admin section in Login Authentication.
    usersig Signature generated in the app admin account. For details on how to generate the signature, please see Generating UserSig.
    random A random 32-bit unsigned integer ranging from 0 to 4294967295
    contenttype Request format. The value is always json.

    Maximum call frequency

    200 calls per second

    Sample requests

    Here, we use sending a text message as an example. To send messages of other types, set MsgBody to the corresponding message type. For more information, see Message Formats.

    The admin sends a message to another account.

    Note:

    If you do not want to synchronize the message to From_Account, set SyncOtherMachine to 2. To synchronize the message to From_Account, set SyncOtherMachine to 1.

    {
      "SyncOtherMachine": 2, // Do not synchronize the message to the sender.
      "To_Account": "lumotuwe2",
      "MsgLifeTime":60, // Retain the message for 60 seconds.
      "MsgSeq": 93847636,
      "MsgRandom": 1287657,
      "MsgTimeStamp": 1557387418,
      "MsgBody": [
          {
              "MsgType": "TIMTextElem",
              "MsgContent": {
                  "Text": "hi, beauty"
              }
          }
      ],
      "CloudCustomData": "your cloud custom data"
    }
    

    The admin sends a message to another account and forbids callbacks for the message.

    Note:

    If you do not want to synchronize the message to From_Account, set SyncOtherMachine to 2. To synchronize the message to From_Account, set SyncOtherMachine to 1.

    {
      "SyncOtherMachine": 2, // Do not synchronize the message to the sender.
      "To_Account": "lumotuwe2",
      "MsgLifeTime":60, // Retain the message for 60 seconds.
      "MsgSeq": 93847636,
      "MsgRandom": 1287657,
      "MsgTimeStamp": 1557387418,
      "ForbidCallbackControl":[
          "ForbidBeforeSendMsgCallback",
          "ForbidAfterSendMsgCallback"], // Callback forbidding control option
      "MsgBody": [
          {
              "MsgType": "TIMTextElem",
              "MsgContent": {
                  "Text": "hi, beauty"
              }
          }
      ],
      "CloudCustomData": "your cloud custom data"
    }
    

    The admin specifies an account to send a message to another account and set the information of offline push, without synchronizing the message to From_Account.

    Note:

    If you do not want to synchronize the message to From_Account, set SyncOtherMachine to 2.

    {
      "SyncOtherMachine": 2,
      "From_Account": "lumotuwe1",
      "To_Account": "lumotuwe2",
      "MsgLifeTime":3600, // Retain the message for one hour.
      "MsgSeq": 93847636,
      "MsgRandom": 1287657,
      "MsgTimeStamp": 1557387418,
      "MsgBody": [
          {
              "MsgType": "TIMTextElem",
              "MsgContent": {
                  "Text": "hi, beauty"
              }
          }
      ],
      "CloudCustomData": "your cloud custom data",
      "OfflinePushInfo": {
          "PushFlag": 0,
          "Desc": "Content to push offline",
          "Ext": "Passthrough content",
          "AndroidInfo": {
              "Sound": "android.mp3"
          },
          "ApnsInfo": {
              "Sound": "apns.mp3",
              "BadgeMode": 1, // If this field is left as default or is set to `0`, the message is counted. If this field is set to `1`, the message is not counted, that is, the icon number in the upper-right corner does not increase.
              "Title":"apns title", // APNs title
              "SubTitle":"apns subtitle", // APNs subtitle
              "Image":"www.image.com" // Image URL
          }
      }
    }
    

    The admin specifies an account to send a message to another account and allows synchronization of the message to From_Account (the sender’s terminal).

    Note:

    To synchronize the message to From_Account, set SyncOtherMachine to 1.

    {
      "SyncOtherMachine": 1, // Synchronize the message to the sender.
      "From_Account": "lumotuwe1",
      "To_Account": "lumotuwe2",
      "MsgSeq": 93847636,
      "MsgRandom": 1287657,
      "MsgTimeStamp": 1557387418,
      "MsgBody": [
          {
              "MsgType": "TIMTextElem",
              "MsgContent": {
                  "Text": "hi, beauty"
              }
          }
      ],
      "CloudCustomData": "your cloud custom data"
    }
    

    Request fields

    Field Type Required Description
    SyncOtherMachine Integer No 1: synchronize the message to the From_Account online terminal and roaming server.
    2: do not synchronize the message to From_Account.
    If this field is not specified, the message will be synchronized to the From_Account roaming server.
    From_Account String No UserID of the sender (used to specify the message sender)
    To_Account String Yes UserID of the recipient
    MsgLifeTime Integer No Offline retention period (seconds) of the message; max. period: 7 days (604800 seconds).
  • If this field is set to 0, the message will only be sent to the recipient online and not retained offline.
  • If this field is set to a period longer than 7 days (604800 seconds), the message will still be retained for only 7 days.
  • If this field is not set, the message will be retained for 7 days by default.
  • MsgSeq Integer No Sequence number of the message. The backend will use this field to deduplicate messages and sort messages in the same second. For details, see Feature Description. If this field is left empty, the backend will enter a random number.
    MsgRandom Integer Yes Random number of the message. It is used by the backend for message deduplication within a second. Make sure the random number is entered.
    MsgTimeStamp Integer No The message timestamp in UNIX format (unit: second)
    ForbidCallbackControl Array No Message callback forbidding field, which is valid only for this message. ForbidBeforeSendMsgCallback forbids the callback before sending the message. ForbidAfterSendMsgCallback forbids the callback after sending the message.
    SendMsgControl Array No Message sending control option. It is a string array and is valid only for this message. NoUnread means not to include this message in the unread count, and "NoLastMsg" means not to refresh the conversation list. Example: "SendMsgControl": ["NoUnread","NoLastMsg"]
    MsgBody Object Yes Message body. For details on formats, please see Message Formats. (Note: a message can contain multiple message elements, in which case MsgBody is an array.)
    MsgType String Yes TIM message object type. Valid values:
    • TIMTextElem (text message)
    • TIMLocationElem (location message)
    • TIMFaceElem (emoji message)
    • TIMCustomElem (custom message)
    • TIMSoundElem (voice message)
    • TIMImageElem (image message)
    • TIMFileElem (file message)
    • TIMVideoFileElem (video message)
    MsgContent Object Yes Different message object types (MsgType) have different formats (MsgContent). For details, see Message Formats.
    CloudCustomData String No Custom message data. It is saved in the cloud and will be sent to the peer end. Such data can be pulled after the app is uninstalled and reinstalled.
    OfflinePushInfo Object No The information to be pushed offline. For more information, see Message Formats.

    Sample response

    • Response to a successful request

      {
       "ActionStatus":"OK", 
       "ErrorInfo": "", 
       "ErrorCode": 0, 
       "MsgTime": 1572870301,
       "MsgKey": "89541_2574206_1572870301"
      }
      
    • Response to a failed request

      {
       "ActionStatus": "FAIL", 
       "ErrorInfo": "Fail to Parse json data of body, Please check it", 
       "ErrorCode": 90001
      }
      

    Response fields

    Field Type Description
    ActionStatus String Request result. OK: successful; FAIL: failed
    ErrorCode Integer Error code. 0: successful; other values: failed
    ErrorInfo String Error information
    MsgTime Integer Message timestamp in the UNIX format
    MsgKey String Unique identifier of the message. This field is required to recall a message. The value is a string of no more than 50 characters.

    Error Codes

    The returned HTTP status code for this API is always 200 unless a network error (such as error 502) occurs. The specific error code and details can be found in the response fields ErrorCode and ErrorInfo respectively.
    For public error codes (60000 to 79999), please see Error Codes.
    The following table describes the error codes specific to this API:

    Error Code Description
    20001 Invalid request.
    20002 UserSig or A2 has expired.
    20003 The UserID of the sender or recipient is invalid or does not exist. Make sure that the UserID has been imported into IM.
    20004 Network exception. Try again.
    20005 Internal server error. Try again.
    20006 The callback before sending a one-to-one message was triggered, and the app backend returned a response to forbid delivering the message.
    90001 Failed to parse the JSON request. Make sure the format is valid.
    90002 The MsgBody in the JSON request does not meet message format requirements or it is not an array. For more information, see the Message Element TIMMsgElement section in Message Formats.
    90003 The JSON request does not contain the To_Account field or the To_Account field is not a string.
    90005 The JSON request does not contain the MsgRandom field or the MsgRandom field is not an integer.
    90006 The MsgTimeStamp field in the JSON request is not an integer.
    90007 The MsgBody field in the JSON request is not an array. Change it to an array.
    90009 The request requires app admin permissions.
    90010 The JSON request does not meet message format requirements. For more information, see the Message Element TIMMsgElement section in Message Formats.
    90012 The account specified in To_Account does not exist or is not registered. Make sure the account has been imported to IM and is correct.
    90026 The offline retention time of the message is incorrect. Messages cannot be retained offline for more than 7 days.
    90031 The SyncOtherMachine field in the JSON request is not an integer.
    90044 The MsgLifeTime field in the JSON request is not an integer.
    91000 Internal service error. Try again.
    90992 Internal service error. Try again. If this error code is returned for all requests and third-party callback is enabled, make sure the app server returns the callback results to the IM backend normally.
    93000 The JSON packet has exceeded the maximum size of 8 KB.
    90048 The requested account does not exist.

    Debugging Tool

    Use the RESTful API online debugging tool to debug this API.

    References
    Sending One-to-One Messages to Multiple Users (v4/openim/batchsendmsg)
    Querying One-to-One Messages (v4/openim/admin_getroammsg)
    Recalling One-to-One Messages (v4/openim/admin_msgwithdraw)

    Possible Callbacks