├── line_main.thrift ├── README.md ├── tools └── view-android-settings.py ├── line-android.md ├── line-protocol.md └── line.thrift /line_main.thrift: -------------------------------------------------------------------------------- 1 | ! This file is no longer needed ! 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | LINE instant messenger protocol documentation 2 | ============================================= 3 | 4 | These files are the results of research into the LINE instant messenger protocol. The purpose of the 5 | research is to provide information about its inner workings and security to its users as well as 6 | produce documentation required to create compatible client software implementations. 7 | 8 | The information provided here was gathered by examining official LINE client software. 9 | 10 | Files 11 | ----- 12 | 13 | * **line-protocol.md:** Explanation of the wire protocol, the usage of the different functions and 14 | other implementation details. 15 | * **line.thrift:** An Apache Thrift interface file produced by analyzing official LINE software. 16 | * **line_main.thrift:** A filtered version of line.thrift with only the core services required for 17 | an instant messenger and some identifiers renamed for better compatibility with some programming 18 | languages. 19 | 20 | *This work is not connected with LINE Corporation.* 21 | -------------------------------------------------------------------------------- /tools/view-android-settings.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Requires: PyCrypto 4 | 5 | import sys 6 | import base64 7 | import re 8 | import sqlite3 9 | from Crypto.Cipher import AES 10 | 11 | def get_setting(path, name): 12 | """Gets a setting value from the settings database.""" 13 | 14 | db = sqlite3.connect(path) 15 | 16 | r = db.execute("SELECT value FROM setting WHERE key = ?", (name,)).fetchone() 17 | 18 | return r[0] if r else None 19 | 20 | def crazy_operation(key, constant): 21 | """Derives an AES key from two values using an unknown algorithm.""" 22 | 23 | def byte(n): 24 | return n & 0xff 25 | 26 | arr = [0] * 16 27 | arr[0] = byte(key) 28 | arr[1] = byte(key - 71) 29 | arr[2] = byte(key - 142) 30 | 31 | for i in range(3, 16): 32 | arr[i] = byte(i ^ (0xffffffb9 ^ (arr[i - 3] ^ arr[i - 2]))) 33 | 34 | if constant < 2 and constant > -2: 35 | constant = 0xfffffffffffb389d + 0xd2dfaf * constant; 36 | 37 | i = 0 38 | k = -7 39 | 40 | larr = len(arr) 41 | for _ in range(0, larr): 42 | k1 = (i + 1) & (larr - 1) 43 | l1 = constant * arr[k1] + k 44 | k = byte(l1 >> 32) 45 | i2 = l1 + k 46 | 47 | if i2 < k: 48 | i2 += 1 49 | k += 1 50 | 51 | arr[k1] = byte(-2 - i2) 52 | i = k1 53 | 54 | return bytes(arr) 55 | 56 | def decrypt_setting(value, key): 57 | """Decrypts an encrypted setting using the supplied 8-bit integer key.""" 58 | 59 | ciphertext = base64.b64decode(value) 60 | 61 | # generate AES key from 8-bit key 62 | aes_key = crazy_operation(key, 0xec4ba7) 63 | 64 | # decrypt setting with AES 65 | aes = AES.new(aes_key, AES.MODE_ECB) 66 | plaintext = aes.decrypt(ciphertext) 67 | 68 | if len(plaintext) == 0: 69 | return plaintext 70 | 71 | # remove PKCS#7 padding 72 | plaintext = plaintext[0:-plaintext[-1]] 73 | 74 | return plaintext 75 | 76 | def java_string_hash(string): 77 | """Equivalent of java.lang.String.hashCode().""" 78 | 79 | r = 0 80 | for c in string: 81 | r = (31 * r + ord(c)) & 0xffffffff 82 | 83 | return r 84 | 85 | def is_profile_auth_key(value): 86 | """Checks if a value looks like a PROFILE_AUTH_KEY.""" 87 | 88 | return re.match(b"^u[a-z0-9]{32}:[a-zA-Z0-9+/]+$", value) != None 89 | 90 | def bruteforce_key(auth_key_value): 91 | """Brute forces the key for a PROFILE_AUTH_KEY.""" 92 | 93 | for key in range(0x00, 0xff): 94 | plaintext = decrypt_setting(auth_key_value, key) 95 | 96 | if is_profile_auth_key(plaintext): 97 | return key 98 | 99 | raise Exception("Couldn't brute force key.") 100 | 101 | def get_encrypted_setting(path, key, name): 102 | """Shorthand for getting the value of an encrypted settings.""" 103 | 104 | value = get_setting(path, name) 105 | if value is None: 106 | return None 107 | 108 | return decrypt_setting(value, key).decode("utf-8") 109 | 110 | if __name__ == "__main__": 111 | if len(sys.argv) == 1: 112 | print("USAGE: {0} SQLITE_DB [ANDROID_ID]".format(sys.argv[0])) 113 | print() 114 | sys.exit(1) 115 | 116 | path = sys.argv[1] 117 | 118 | auth_key_value = get_setting(path, "PROFILE_AUTH_KEY") 119 | 120 | if len(sys.argv) == 2: 121 | print("No ANDROID_ID given, bruteforcing.") 122 | key = bruteforce_key(auth_key_value) 123 | else: 124 | key = java_string_hash(sys.argv[2]) 125 | 126 | auth_key_plaintext = decrypt_setting(auth_key_value, key) 127 | if not is_profile_auth_key(auth_key_plaintext): 128 | print("Key seems to be wrong.") 129 | sys.exit(2) 130 | 131 | mid, auth_key = get_encrypted_setting(path, key, "PROFILE_AUTH_KEY").split(":") 132 | 133 | print("User MID: " + mid) 134 | print("Auth key: " + auth_key) 135 | print("Name: " + get_encrypted_setting(path, key, "PROFILE_NAME")) 136 | print("LINE ID: " + get_encrypted_setting(path, key, "PROFILE_ID")) 137 | print("Region: " + get_encrypted_setting(path, key, "PROFILE_REGION")) 138 | print("Phone: " + get_encrypted_setting(path, key, "PROFILE_NORMALIZED_PHONE")) 139 | -------------------------------------------------------------------------------- /line-android.md: -------------------------------------------------------------------------------- 1 | LINE instant messenger protocol - Android version 2 | ================================================= 3 | 4 | Matti Virkkunen 5 | 6 | Document is accurate as of 2015-04-02 (LINE 5.0.4) 7 | 8 | This document describes the custom protocols used by the Android version of LINE. It's meant to be a 9 | companion to line-protocol.md, as it mostly describes the differences. 10 | 11 | Overview 12 | -------- 13 | 14 | The Android version of LINE also uses Apache Thrift as the serialization format for most of its 15 | communications. There are however significant differences. This makes the total protocol suite more 16 | complicated, but it saves a lot of bandwidth, which is presumably their main goal. The mobile 17 | versions of LINE have vastly more users than the desktop versions, so it makes sense to primarily 18 | optimize them. 19 | 20 | SPDY instead of HTTP 21 | -------------------- 22 | 23 | The Android client primarily uses SPDY (Draft 2) instead of HTTP. This has numerous advantages, for 24 | instance the ability to use one TCP stream for multiple transactions and header compression. 25 | 26 | Custom SPDY encryption 27 | ---------------------- 28 | 29 | SPDY is normally encrypted using standard SSL, but LINE implements its own custom encryption. Their 30 | justification for it is that it does away with SSL handshakes and overhead and therefore puts less 31 | of a burder on mobile devices and networks. 32 | 33 | The encryption scheme encrypts the body part of the SPDY request only. The standard headers portion 34 | of SPDY is left unencrypted, but the body can also optionally contain encrypted headers. 35 | 36 | When the client connects to the server, it generates a 128 bit random key, encrypts it with an RSA 37 | public key, and sends it to the server as a header with the first request. This key is used by both 38 | the client and the server to encrypt the body with AES in CBC mode with a fixed IV. The AES context 39 | is reset for each message. Cryptanalysts may have something to say about the fixed IV and new 40 | context for each message. 41 | 42 | The AES encrypted messages are signed with a custom 32-bit HMAC called legy_hmac, which is curiously 43 | only available in native code. I haven't yet analyzed how it works. I am not sure if the native 44 | library approach is taken to enable code re-use between platforms, or as some futile attempt to add 45 | security by obscurity. It seems to be built on this hash algorithm: 46 | 47 | https://github.com/Cyan4973/xxHash 48 | 49 | Interestingly they seem to have forgotten to include the copyright notice for xxHash in their app. 50 | 51 | (TODO) 52 | 53 | (TODO attach: RSA key and AES IV) 54 | 55 | (TODO add example code: custom encryption) 56 | 57 | (TODO add example code: legy_hmac implementation) 58 | 59 | Authentication 60 | -------------- 61 | 62 | The mobile version of LINE does not require the user to manually register an account - one is 63 | automatically generated when the app is first installed. Therefore the user authentication method is 64 | also different. 65 | 66 | The Android client stores a 15 byte auth key which is used to authenticate it to the LINE servers. 67 | The key is stored in an encrypted settings database, but obviously since the app needs to be able to 68 | read it, this is easy to circumvent (it turns out they essentially use an 8-bit encryption key, 69 | which is generated from the phone's ANDROID_ID value). The auth key is likely generated when the app 70 | is first installed and it does not seem to ever change. 71 | 72 | You can use the tools/view-android-settings.py script to view the auth key for your account. It 73 | needs the LINE settings SQLite database and optionally the ANDROID_ID (it can also bruteforce it 74 | which takes about a millisecond on a modern computer). The database on my phone is located at: 75 | 76 | /data/data/jp.naver.line.android/databases/naver_line 77 | 78 | The displayed user MID and auth key are used to generate an authentication token whenever the client 79 | connects to the server. 80 | 81 | (TODO) 82 | 83 | (TODO add example code: mobile authentication token generation) 84 | 85 | Custom Thrift protocol 86 | ---------------------- 87 | 88 | The custom protocol, among other things, stores GUIDs (which are used as user IDs throughout the 89 | system) as binary instead of strings, halving their size. 90 | 91 | (TODO) 92 | 93 | Compact message protocol 94 | ------------------------ 95 | 96 | There is a custom, presumably non-Thrift binary protocol for sending messages. 97 | 98 | (TODO) 99 | -------------------------------------------------------------------------------- /line-protocol.md: -------------------------------------------------------------------------------- 1 | LINE instant messenger protocol 2 | =============================== 3 | 4 | Matti Virkkunen 5 | 6 | Document is accurate as of 2015-04-20. 7 | 8 | This unofficial document describes the LINE (by LINE Corporation/Naver) instant messenger protocol. 9 | The information is based mostly on reverse engineering and therefore accuracy is not guaranteed. 10 | 11 | Also, this document is unfinished. I'm expanding it as I go. 12 | 13 | Overview 14 | -------- 15 | 16 | LINE as a whole consists of a number of web services because of their multitude of apps and 17 | subsystems, but the only service that's needed for replicating their desktop IM client's 18 | functionality is the TalkService. 19 | 20 | The protocol is based on a request-response architecture over HTTP(S), with a long poll return 21 | channel. Apache Thrift is used for serialization of message data. 22 | 23 | Wire protocol 24 | ------------- 25 | 26 | File: line.thrift (a presumably complete Thrift interface file obtained via reverse engineering) 27 | 28 | The protocol is Apache Thrift TCompactProtocol via HTTPS to gd2.line.naver.jp:443. The HTTP request 29 | path is /S4 for most requests. Some specific requests use a different path, specified where 30 | relevant. 31 | 32 | Unencrypted HTTP also seems to work for the moment, but using it is a really bad idea security-wise. 33 | Naver itself seems to be currently transitioning to 100% HTTPS. 34 | 35 | If using a keep-alive connection, headers from the first request can be persisted. Headers in 36 | following requests can temporarily override the persisted value. An HTTP header called X-LS is also 37 | involved. If you want to persist headers, you must remember the X-LS header value the server gives 38 | you and send it back in the next request. The values seem to be integers. The name could be short 39 | for "Line Server", and it's probably used so that load-balancers can direct the following responses 40 | back to the same server that knows the headers. 41 | 42 | By using persistent headers it's possible to send each request with just two headers - X-LS and 43 | Content-Length. 44 | 45 | The official protocol seems to be to first make one request to get an authentication key, and then 46 | open a new connection so that the authentication key can be persisted along with the rest of the 47 | headers for the following requests. 48 | 49 | Types and concepts 50 | ------------------ 51 | 52 | Friends, chats and groups are identified by 32-digit hex GUIDs prefixed with one character for the 53 | type. 54 | 55 | Internally any user is referred to as a Contact. Contacts are identified by a "mid" and the prefix 56 | is "u" (presumably for "user") 57 | 58 | Chats are called Rooms and are identified by a "mid" which is prefixed by "r" (for "room"). Rooms 59 | are the lightweight multi-user chats that are created when you invite an extra user to a plain IM 60 | conversation with a contact. Groups are called Groups internally as well and are identified by an 61 | "id" which is prefixed with a "c" (presumably for "chat"). Groups are more permanent than chats and 62 | have extra data associated with them such as a name and an icon. 63 | 64 | Any message is represented by a Message object. Message IDs are numeric but they are stored as 65 | strings. 66 | 67 | Timestamps are millisecond precision UNIX time represented as 64-bit integers (TODO: check the 68 | timezone just in case) 69 | 70 | Message authentication 71 | ---------------------- 72 | 73 | The following HTTP headers are required for a successful request: 74 | 75 | X-Line-Application: DESKTOPWIN\t3.2.1.83\tWINDOWS\t5.1.2600-XP-x64 76 | X-Line-Access: authToken 77 | 78 | The \t escape sequence represents a tab character. Other X-Line-Application names exist, but this is 79 | one that works currently. An invalid application name results in an error. The authToken is 80 | obtained via the login procedure. 81 | 82 | Object storage server 83 | --------------------- 84 | 85 | Media files are stored on a separate server at http://os.line.naver.jp/ which is internally referred 86 | to as the "object storage server". Some files (such as message attachments) seem to require 87 | authentication with the same protocol as above, but some files (such as buddy icons) don't seem to 88 | require authentication. 89 | 90 | It serves files over both HTTP and HTTPS with the same authentication protocol as above. 91 | 92 | Login procedure 93 | --------------- 94 | 95 | This Thrift method issues a new authToken for an e-mail address and password combination. The 96 | request should be sent to the path /api/v4/TalkService.do to avoid having to specify an auth token 97 | when none exists yet (/S4 always requires an auth token). 98 | 99 | loginWithIdentityCredentialForCertificate( 100 | IdentityProvider.LINE, // identityProvider 101 | "test@example.com", // identifier (e-mail address) 102 | "password", // password (in plain text) 103 | true, // keepLoggedIn 104 | "127.0.0.1", // accesslocation (presumably local IP?) 105 | "hostname", // systemName (will show up in "Devices") 106 | "") // certificate (empty on first login - see login verification procedure below) 107 | 108 | The result structure is as follows: 109 | 110 | struct LoginResult { 111 | 1: string authToken; 112 | 2: string certificate; 113 | 3: string verifier; 114 | 4: string pinCode; 115 | 5: LoginResultType type; 116 | } 117 | 118 | After a successful login, the type is equal to SUCCESS (1) and the authToken field contains the 119 | X-Line-Access value to use in subsequent requests. 120 | 121 | The official desktop client sends an encrypted e-mail/password involving RSA and no X-Line-Access 122 | header, but it works just as fine in plain text. (TODO: Include description of RSA login procedure) 123 | 124 | Login verification procedure 125 | ---------------------------- 126 | 127 | In current versions, LINE now requires you to verify your identity using a PIN code when logging in 128 | to a desktop client for the first time. It seems this is partially based on geo-IP, as clients that 129 | had logged in before the verification procedure was added do not need to verify themselves. New 130 | logins will all likely need to be verified. 131 | 132 | When PIN verification is required, the login method returns a type of REQUIRE_DEVICE_CONFIRM (3) 133 | instead of SUCCESS (1). The pinCode field contains a PIN code to display to the user and the 134 | verifier field is set to a random token that is used to identify this verification session. The 135 | token stays the same for the whole process. 136 | 137 | The client then issues an empty request to the HTTP path /Q with the X-Line-Access header set to the 138 | verifier token. This request blocks until the user enters the correct PIN code on their mobile 139 | device. 140 | 141 | There doesn't seem to be a limit for incorrect PIN entries on the mobile device, but there is 142 | currently a three minute time limit. After this the token expires. The client keeps track of the 143 | time limit locally and aborts the request when it's over. 144 | 145 | A success response from /Q is JSON containing the following: 146 | 147 | { 148 | "timestamp": "946684800000", 149 | "result": { 150 | "verifier": "the_verifier_token", 151 | "authPhase": "QRCODE_VERIFIED" 152 | } 153 | } 154 | 155 | After this response is received the client issues a loginWithVerifierForCertificate() call with the 156 | verifier token as the parameter. The server then returns a normal LoginReply message with the usual 157 | authToken. The LoginReply message also contains a certificate value (random hex string) which should 158 | be stored and used in future calls to loginWithIdentityCredentialForCertificate() to skip the 159 | validation step. If the certificate is not used, every login will prompt for PIN verification. 160 | 161 | If the token has already expired the response from /Q looks like the following: 162 | 163 | { 164 | "timestamp": "946684800000", 165 | "errorCode": "404", 166 | "errorMessage": "key+is+not+found%3A+the_verifier_token+NOT_FOUND" 167 | } 168 | 169 | Initial sync 170 | ------------ 171 | 172 | After logging in the client sends out a sequence of requests to synchronize with the server. It 173 | seems some messages are not always sent - the client could be storing data locally somewhere and 174 | comparing with the revision ID from getLastOpRevision(). The client runs multiple sync sequences in 175 | parallel in order to make it faster. 176 | 177 | There is no requirement to implement all or any of these sync operations in a third-party client. 178 | 179 | ### Sequence 1 180 | 181 | This seems to be the main sync sequence. 182 | 183 | getLastOpRevision() 184 | 185 | Gets the revision ID to use for the long poll return channel later. It's fetched first to ensure 186 | nothing is missed even if something happens during the sync procedure. 187 | 188 | getDownloads() 189 | 190 | Mystery. Probably not related to software updates as that is a separate call. Could be related to 191 | sticker downloads. 192 | 193 | getProfile() 194 | 195 | Gets the currently logged in user's profile, which includes their display name and status message 196 | and so forth. 197 | 198 | getSettingsAttributes(8458272) 199 | 200 | Gets some of the stored settings (the bits are NOTIFICATION_INCOMING_CALL, IDENTITY_IDENTIFIER, 201 | NOTIFICATION_DISABLED_WITH_SUB and PRIVACY_PROFILE_IMAGE_POST_TO_MYHOME) 202 | 203 | getAllContactIds() 204 | 205 | Gets all contact IDs added as friends. 206 | 207 | getBlockedContactIds() 208 | 209 | List of blocked user IDs. 210 | 211 | fetchNotificationItems() 212 | 213 | Mystery. 214 | 215 | getContacts(contactIds) - with IDs from the previous methods that fetched contact IDs 216 | 217 | Gets details for the users. 218 | 219 | getGroupIdsJoined() 220 | 221 | Gets all groups current user is a member of. 222 | 223 | getGroupIdsInvited() 224 | 225 | Gets all groups for which the user has a pending invitation. 226 | 227 | getGroups(groupIds) - with IDs from the previous methods 228 | 229 | Gets details for the groups. This included member lists. 230 | 231 | getMessageBoxCompactWrapUpList(1, 50) 232 | 233 | Returns a complicated structure with "current active chats". This returns a list of of rooms and 234 | groups with partial information as well as the latest message(s) for them. This call seems to be the 235 | only way to get a list of rooms the current user is a member of as there is no separate getRooms 236 | method. 237 | 238 | ### Sequence 2 239 | 240 | getActivePurchaseVersions(0, 1000, "en", "US") 241 | 242 | Mystery. Probably related to sticker versions. 243 | 244 | getConfigurations(...) - parameters involve country codes 245 | 246 | Returns a map of configuration settings with string keys. I do not have exact metadata for this 247 | function. Example: 248 | 249 | { 250 | "function.linecall.mobile_network_expire_period": "604800", 251 | "function.linecall.store": "N", 252 | "contact_ui.show_addressbook": "N", 253 | "function.music": "N", 254 | "group.max_size": "200", 255 | "function.linecall.validate_caller_id": "N", 256 | "function.linecall.spot": "N", 257 | "main_tab.show_timeline": "N", 258 | "function.linecall": "N", 259 | "room.max_size": "100" 260 | } 261 | 262 | Many of the settings seem to be related to features being enabled or disabled and maximum limits for 263 | them. 264 | 265 | getRecommendationIds() 266 | 267 | List of suggested friend IDs. 268 | 269 | getBlockedRecommendationIds() 270 | 271 | List of suggested friend IDs that have been dismissed (why can't the previous method just not return 272 | these...?) 273 | 274 | getContacts(contactIds) - with IDs from the previous methods 275 | 276 | Managing the contact list 277 | ------------------------- 278 | 279 | Contacts have multiple statuses. 280 | 281 | FRIEND = appears on friend list, unless hidden. 282 | 283 | RECOMMEND = appears on "recommended contacts" list. 284 | 285 | DELETE = used in notifications only AFAIK, to notify that a friend has been completely deleted. 286 | 287 | Each state also has a _BLOCKED version where the current user will not receive messages from the 288 | user. Friends also have a "hidden" status, that is set via the CONTACT_SETTING_CONTACT_HIDE setting 289 | flag. Blocking is done via blockContact/unblockContact. 290 | 291 | There is no separate function to delete a contact for some reason, instead it's done by setting the 292 | CONTACT_SETTING_DELETE setting. Even though it's a setting, this is equivalent to really deleting 293 | the friend - they won't appear on getallContactIds() anymore. (FIXME: actually test this...) 294 | 295 | Sending messages 296 | ---------------- 297 | 298 | Messages are sent using the sendMessage() function. 299 | 300 | sendMessage(seq, msg) 301 | 302 | The seq parameter doesn't seem to be matter, and can be sent as zero. The msg parameter is the 303 | Message object to send. 304 | 305 | The only required fields for a text message are "to", which can be the ID for any valid message 306 | recipient (user, chat or group), and the "text" field which is the text content to send. Other 307 | message types involve the contentMetadata fields and possibly uploading files to a separate server. 308 | 309 | The return value from sendMessage is a partial Message object that only contains the fields "id", 310 | "createdTime" and "from". The ID is a numeric string that can be used to refer to that message 311 | later. 312 | 313 | Message types 314 | ------------- 315 | 316 | LINE supports various types of messages from simple text messages to pictures and video. Each 317 | message has a contentType field that specifies the type of content, and some messages include 318 | attached files from various locations. 319 | 320 | Messages can contain extra attributes in the contentMetadata map. One globally used attribute is 321 | "BOT_CHECK" which is included with a value of "1" for automatic messages I've received from 322 | "official accounts" - this could be an auto-reply indicator. 323 | 324 | ### NONE (0) 325 | 326 | The first contentType is called NONE internally but is actually text. It's the simplest content 327 | type. The text field contains the message content encoded in UTF-8. 328 | 329 | The only thing to watch out for is emoji which are sent as Unicode private use area codepoints. 330 | 331 | Example: 332 | 333 | client.sendMessage(0, line.Message( 334 | to="u0123456789abcdef0123456789abcdef", 335 | contentType=line.ContentType.NONE, 336 | text="Hello, world!")) 337 | 338 | TODO: make a list of emoji 339 | 340 | ### IMAGE (1) 341 | 342 | #### Receiving 343 | 344 | Image message content can be delivered in one of two ways. 345 | 346 | For normal image messages, a preview image is included as a plain JPEG in the contentPreview field. 347 | However, for some reason the official desktop client seems to ignore it and rather downloads 348 | everything from the object storage server. 349 | 350 | The preview image URLs are http://os.line.naver.jp/os/m/MSGID/preview and the full-size image URL 351 | are http://os.line.naver.jp/os/m/MSGID where MSGID is the message's id field. 352 | 353 | "Official accounts" broadcast messages to many clients at once, so their image message data is 354 | stored on publicly accessible servers (currently seems to be Akamai CDN). For those messages no 355 | embedded preview is included and the image URLs are stored in the contentMetadata map with the 356 | following keys: 357 | 358 | * PREVIEW_URL = absolute URL for preview image 359 | * DOWNLOAD_URL = absolute URL for full-size image 360 | * PUBLIC = "TRUE" (haven't seen other values) 361 | 362 | As an example of a publicly available image message, have a Pikachu: 363 | 364 | http://dl-obs.official.line.naver.jp/r/talk/o/u3ae3691f73c7a396fb6e5243a8718915-1379585871 365 | 366 | #### Sending 367 | 368 | Sending an image message is done in two steps. First a Thrift sendMessage call is used to obtain a 369 | message ID, and then the image data is uploaded to the Object Storage Server with a separate HTTP 370 | upload request. 371 | 372 | The message will not be delivered to the recipient until the HTTP upload is complete. The official 373 | client displays messages in the order of the sendMessage calls, even if the image data is uploaded 374 | much later. It might be possible to have fun by "reserving" a spot for an image message in a 375 | conversation and then filling it in later. It's unknown if there's an internal timeout for uploading 376 | the image data. 377 | 378 | In order to send an image message, first send a message normally with contentType=1 (IMAGE) and make 379 | note of the returned message ID. The official client also puts "1000000000" in the text field. The 380 | meaning of this is unknown and it's not required. 381 | 382 | The upload HTTP request is a multipart/form-data ("file upload") POST request to the URL: 383 | 384 | https://os.line.naver.jp/talk/m/upload.nhn 385 | 386 | The request uses the usual X-Line-Application and the X-Line-Access headers for authentication. 387 | There are two fields in the multipart request. The first field is called "params" and the content is 388 | a JSON object containing among other things the message ID. There is on Content-Type header. 389 | 390 | {"name":"1.jpg","oid":"1234567890123","size":28878,"type":"image","ver":"1.0"} 391 | 392 | The name field does not seem to be used for anything. oid should be set to the message ID obtained 393 | earlier. size should be set to the size of the image file to upload. 394 | 395 | The second field is called "file" with a filename argument, has a Content-Type header, and contains 396 | the image data itself. The filename and Content-Type headers seem to be ignored and the image format 397 | is automatically detected. At least JPEG and PNG data is supported for uploading, but everything is 398 | converted to JPEG by the server. 399 | 400 | Example sendMessage call: 401 | 402 | # First send the message by using sendMessage 403 | result = client.sendMessage(0, line.Message( 404 | to="u0123456789abcdef0123456789abcdef", 405 | contentType=line.ContentType.IMAGE)) 406 | 407 | # Store the ID 408 | oid = result.id 409 | 410 | Example HTTP upload: 411 | 412 | POST /talk/m/upload.nhn HTTP/1.1 413 | Content-Length: 29223 414 | Content-Type: multipart/form-data; boundary=separator-CU3U3JIM7B17R0C4SIWX1NS7I1G0LV6BF76GPTNN 415 | Host: obs-de.line-apps.com:443 416 | X-Line-Access: D82j....= 417 | X-Line-Application: DESKTOPWIN\t3.6.0.32\tWINDOWS 5.0.2195-XP-x64 418 | 419 | --separator-CU3U3JIM7B17R0C4SIWX1NS7I1G0LV6BF76GPTNN 420 | Content-Disposition: form-data; name="params" 421 | 422 | {"name":"1.jpg","oid":"1234567890123","size":28878,"type":"image","ver":"1.0"} 423 | --separator-CU3U3JIM7B17R0C4SIWX1NS7I1G0LV6BF76GPTNN 424 | Content-Disposition: form-data; name="file"; filename="1.jpg" 425 | Content-Type: image/jpeg 426 | 427 | ...image data... 428 | --separator-CU3U3JIM7B17R0C4SIWX1NS7I1G0LV6BF76GPTNN-- 429 | 430 | ### STICKER (7) 431 | 432 | Sticker messages are simply a reference to a separately hosted image file. The information required 433 | to reference a sticker is contained in the contentMetadata map. 434 | 435 | A sticker reference consists of three numbers, the STKVER (sticker version), STKPKGID (sticker 436 | package ID) and STKID (sticker ID within package). To send a sticker, a message with contentType=7 437 | and these three values specified are enough. When receiving a sticker some stickers also return a 438 | meaningful textual name for the sticker in the STKTXT metadata field - this is added automatically 439 | and does not need to be specified when sending. 440 | 441 | Sticker image files are hosted on yet another CDN server at dl.stickershop.line.naver.jp. The CDN 442 | server does not require authentication and can be viewed with a plain browser for testing. The base 443 | URL for a sticker package is formed from the STKVER and STKPKGID values. First, the version is split 444 | into three numbers as follows: 445 | 446 | VER = floor(STKVER / 1000000) + "/" + floor(STKVER / 1000) + "/" + (STKVER % 1000) 447 | 448 | Using this the package base URL can be determined: 449 | 450 | http://dl.stickershop.line.naver.jp/products/{VER}/{STKPKGID}/{PLATFORM}/ 451 | 452 | PLATFORM is a platform identifier which is presumably used to deliver different image sizes etc to 453 | different platforms. The "WindowsPhone" platform seems to have most interesting files. Other known 454 | platforms are "PC". Not all platforms contain all file types. 455 | 456 | Sticker package version 100, package 1 ("Moon & James") is used as an example in the following URLs. 457 | Substitute another package base URL to see other packages. 458 | 459 | The sticker package contains a metadata file for a listing its contents: 460 | 461 | http://dl.stickershop.line.naver.jp/products/0/0/100/1/WindowsPhone/productInfo.meta 462 | 463 | This is a JSON file with metadata about the stickers in this package including names in multiple 464 | languages, the price in multiple currencies and a list of stickers. 465 | 466 | Each package also has an icon: 467 | 468 | http://dl.stickershop.line.naver.jp/products/0/0/100/1/WindowsPhone/tab_on.png - active 469 | 470 | http://dl.stickershop.line.naver.jp/products/0/0/100/1/WindowsPhone/tab_off.png - dimmed 471 | 472 | Each referenced sticker image is available in the subdirectory "stickers" as a PNG image. The 473 | filename is {STKID}.png for the full image and {STKID}_key.png for a thumbnail. 474 | 475 | http://dl.stickershop.line.naver.jp/products/0/0/100/1/WindowsPhone/stickers/13.png - full size 476 | 477 | http://dl.stickershop.line.naver.jp/products/0/0/100/1/WindowsPhone/stickers/13_key.png - thumbnail 478 | 479 | All sticker images as well as the icons can be downloaded as a single package from: 480 | 481 | http://dl.stickershop.line.naver.jp/products/0/0/100/1/WindowsPhone/stickers.zip 482 | 483 | The ShopService is used with the path /SHOP4 to get a list of sticker packages the current user has. 484 | TODO: specify more 485 | 486 | Interestingly the official client sends some emoji as a sticker message instead of a plain text 487 | message if the message content consists only of the single emoji. Emoji as stickers are in package 488 | number 5: (TODO: figure out how they're mapped) 489 | 490 | http://dl.stickershop.line.naver.jp/products/0/0/100/5/WindowsPhone/productInfo.meta 491 | 492 | The official clients also contain references to "old" stickers that have no STKVER or STKPKGID and 493 | use a URL of the format: 494 | 495 | http://line.naver.jp/stickers/android/{STKID}.png 496 | 497 | http://line.naver.jp/stickers/android/13.png 498 | 499 | These seem to just be redirects to new URLs now. 500 | 501 | Return channel 502 | -------------- 503 | 504 | fetchOperations(localRev, count) 505 | 506 | For incoming events, fetchOperations() calls to the HTTP path /P4 is used. Using the /P4 path 507 | enables long polling, where the responses block until something happens or a timeout expires. An 508 | HTTP 410 Gone response signals a timed out poll, in which case a new request should be issued. 509 | 510 | When new data arrives, a list of Operation objects is returned. Each Operation (except the end 511 | marker) comes with a version number, and the next localRev should be the highest revision number 512 | received. 513 | 514 | The official client uses a count parameter of 50. 515 | 516 | Operation data is contained either as a Message object in the message field, or in the string fields 517 | param1-param3. 518 | 519 | In general NOTIFIED_* messages notify the current user about other users' actions, while their 520 | non-NOTIFIED counterparts notify the current user about their own actions, in order to sync them 521 | across devices. 522 | 523 | For many operations the official client doesn't seem to care about the fact that the param1-param3 524 | fields contain the details of the operation and will rather re-fetch data with a get method instead. 525 | For instance, many group member list changes will cause the client to do a getGroup(). This may be 526 | either just lazy coding or a sign of the param parameters being phased out. 527 | 528 | The following is a list of operation types. 529 | 530 | ### END_OF_OPERATION (0) 531 | 532 | Signifies the end of the list. This presumably means all operations were returned and none were left 533 | out due to the count param. This message contains no data, not even a revision number, so don't 534 | accidentally set your localRev to zero. 535 | 536 | ### UPDATE_PROFILE (1) 537 | 538 | The current user updated their profile. Refresh using getProfile(). 539 | 540 | * param1 = UpdateProfileAttributeAttr, which property was changed (possibly bitfield) 541 | 542 | ### NOTIFIED_UPDATE_PROFILE (2) 543 | 544 | Another user updated their profile. Refresh using getContact[s](). 545 | 546 | * param1 = the user ID 547 | * param2 = UpdateProfileAttributeAttr, which property was changed (possibly bitfield) 548 | 549 | ### REGISTER_USERID (3) 550 | 551 | (Mystery) 552 | 553 | ### ADD_CONTACT (4) 554 | 555 | The current user has added a contact as a friend. 556 | 557 | * param1 = ID of the user that was added 558 | * param2 = (mystery - seen "0") 559 | 560 | ### NOTIFIED_ADD_CONTACT (5) 561 | 562 | Another user has added the current user as a friend. 563 | 564 | * param1 = ID of the user that added the current user 565 | 566 | ### BLOCK_CONTACT (6) 567 | 568 | The current user has blocked a contact. 569 | 570 | * param1 = ID of the user that was blocked 571 | * param2 = (mystery, seen "NORMAL") 572 | 573 | ### UNBLOCK_CONTACT (7) 574 | 575 | The current user has unblocked a contact. 576 | 577 | * param1 = ID of the user that was unblocked 578 | * param2 = (mystery, seen "NORMAL") 579 | 580 | ### CREATE_GROUP (9) 581 | 582 | The current user has created a group. The official client immediately fetches group details with 583 | getGroup(). 584 | 585 | * param1 = ID of the group. 586 | 587 | ### UPDATE_GROUP (10) 588 | 589 | The current user has updated a group. 590 | 591 | * param1 = ID of the group 592 | * param2 = (Maybe a bitfield of properties? 1 = name, 2 = picture) 593 | 594 | ### NOTIFIED_UPDATE_GROUP (11) 595 | 596 | Another user has updated group the current user is a member of. 597 | 598 | * param1 = ID of the group 599 | * param2 = ID of the user who updated the group 600 | * param3 = (Maybe a bitfield of properties?) 601 | 602 | ### INVITE_INTO_GROUP (12) 603 | 604 | The current user has invited somebody to join a group. 605 | 606 | * param1 = ID of the group 607 | * param2 = ID of the user that has been invited 608 | 609 | ### NOTIFIED_INVITE_INTO_GROUP (13) 610 | 611 | The current user has been invited to join a group. 612 | 613 | * param1 = ID of the group 614 | * param2 = ID of the user who invited the current user 615 | * param3 = ID of the current user 616 | 617 | ### LEAVE_GROUP (14) 618 | 619 | The current user has left a group. 620 | 621 | * param1 = ID of the group 622 | 623 | ### NOTIFIED_LEAVE_GROUP (15) 624 | 625 | Another user has left a group the current user is a member of. 626 | 627 | * param1 = ID of the group 628 | * param2 = ID of the user that left the group 629 | 630 | ### ACCEPT_GROUP_INVITATION (16) 631 | 632 | The current user has accepted a group invitation. 633 | 634 | * param1 = ID of the group 635 | 636 | ### NOTIFIED_ACCEPT_GROUP_INVITATION (17) 637 | 638 | Another user has joined a group the current user is a member of. 639 | 640 | * param1 = ID of the group 641 | * param2 = ID of the user that joined the group 642 | 643 | ### KICKOUT_FROM_GROUP (18) 644 | 645 | The current user has removed somebody from a group. 646 | 647 | * param1 = ID of the group 648 | * param2 = ID of the user that was removed 649 | 650 | ### NOTIFIED_KICKOUT_FROM_GROUP (19) 651 | 652 | Another user has removed a user from a group. The removed user can also be the current user. 653 | 654 | * param1 = ID of the group 655 | * param2 = ID of the user that removed the current user 656 | * param3 = ID of the user that was removed 657 | 658 | ### CREATE_ROOM (20) 659 | 660 | The current user has created a room. 661 | 662 | * param1 = ID of the room 663 | 664 | ### INVITE_INTO_ROOM (21) 665 | 666 | The current user has invited users into a room. 667 | 668 | * param1 = ID of the room 669 | * param2 = IDs of the users, multiple IDs are separated by U+001E INFORMATION SEPARATOR TWO 670 | 671 | ### NOTIFIED_INVITE_INTO_ROOM (22) 672 | 673 | The current user has been invited into a room. Invitations to rooms to others are not actually sent 674 | until a message is sent to the room. 675 | 676 | * param1 = ID of the room 677 | * param2 = ID of the user that invited the current user 678 | * param3 = IDs of the users in the room, multiple IDs are separated by U+001E INFORMATION SEPARATOR 679 | TWO. The user ID in param2 is not included in this list. 680 | 681 | ### LEAVE_ROOM (23) 682 | 683 | The current user has left a room. Seems to be immediately followed by SEND_CHAT_REMOVED (41). 684 | 685 | * param1 = ID of the room 686 | 687 | ### NOTIFIED_LEAVE_ROOM (24) 688 | 689 | Another user has left a room. 690 | 691 | * param1 = ID of the room 692 | * param2 = ID of the user that left 693 | 694 | ### SEND_MESSAGE (25) 695 | 696 | Informs about a message that the current user sent. This is returned to all connected devices, 697 | including the one that sent the message. 698 | 699 | * message = sent message 700 | 701 | ### RECEIVE_MESSAGE (26) 702 | 703 | Informs about a received message that another user sent either to the current user or to a chat. The 704 | message field contains the message. 705 | 706 | The desktop client doesn't seem to care about the included message data, but instead immediately 707 | re-requests it using getNextMessages(). 708 | 709 | * message = received message 710 | 711 | ### RECEIVE_MESSAGE_RECEIPT (28) 712 | 713 | Informs that another user has read (seen) messages sent by the current user. 714 | 715 | * param1 = ID of the user that read the message 716 | * param2 = IDs of the messages, multiple IDs are separated by U+001E INFORMATION SEPARATOR TWO 717 | 718 | ### CANCEL_INVITATION_GROUP (31) 719 | 720 | The current user has canceled a group invitation. 721 | 722 | * param1 = ID of the group 723 | * param2 = ID of the user whose invitation was canceled 724 | 725 | ### NOTIFIED_CANCEL_INVITATION_GROUP (32) 726 | 727 | Another user has canceled a group invitation. The canceled invitation can also be that of the 728 | current user. 729 | 730 | * param1 = ID of the group 731 | * param2 = ID of the user that canceled the request (or invited them in the first place?) 732 | * param3 = ID of the user whose invitation was canceled 733 | 734 | ### REJECT_GROUP_INVITATION (34) 735 | 736 | The current user has rejected a group infication. 737 | 738 | * param1 = ID of the group 739 | 740 | ### NOTIFIED_REJECT_GROUP_INVITATION (35) 741 | 742 | Presumably means another user has rejected a group invitation. However this message doesn't seem to 743 | get sent. 744 | 745 | ### UPDATE_SETTINGS (36) 746 | 747 | User settings have changed. Refresh with getSettingsAttributes() or getSettings() 748 | 749 | * param1 = probably bitfield of changed properties 750 | * param2 = probably new value of property (seem things like "bF"/"bT" for a boolean attribute) 751 | 752 | ### SEND_CHAT_CHECKED (40) 753 | 754 | ### SEND_CHAT_REMOVED (41) 755 | 756 | The current user has cleared the history of a chat. 757 | 758 | * param1 = user ID or group ID or room ID 759 | * param2 = seen "990915482402" - maybe an ID, it's similar to IDs 760 | 761 | ### UPDATE_CONTACT (49) 762 | 763 | The current user's settings (e.g. hidden status) for a contact has changed. Refresh with 764 | getContact[s](). 765 | 766 | * param1 = ID of the user that changed 767 | * param2 = probably bitfield of changed properties 768 | 769 | ### (Mystery) 60 770 | 771 | Meaning unknown. Has appeared after NOTIFIED_ACCEPT_GROUP_INVITATION and NOTIFIED_INVITE_INTO_ROOM. 772 | 773 | Seen the following parameters: 774 | 775 | * param1 = a group ID 776 | * param2 = another user's ID 777 | 778 | ### (Mystery) 61 779 | 780 | Meaning unknown. Has appeared after NOTIFIED_LEAVE_GROUP, KICKOUT_FROM_GROUP and 781 | NOTIFIED_KICKOUT_FROM_GROUP and NOTIFIED_LEAVE_ROOM. 782 | 783 | Seen the following parameters: 784 | 785 | * param1 = a group ID 786 | * param2 = another user's ID 787 | * param3 = "0" 788 | -------------------------------------------------------------------------------- /line.thrift: -------------------------------------------------------------------------------- 1 | enum ApplicationType { 2 | IOS = 16; 3 | IOS_RC = 17; 4 | IOS_BETA = 18; 5 | IOS_ALPHA = 19; 6 | ANDROID = 32; 7 | ANDROID_RC = 33; 8 | ANDROID_BETA = 34; 9 | ANDROID_ALPHA = 35; 10 | WAP = 48; 11 | WAP_RC = 49; 12 | WAP_BETA = 50; 13 | WAP_ALPHA = 51; 14 | BOT = 64; 15 | BOT_RC = 65; 16 | BOT_BETA = 66; 17 | BOT_ALPHA = 67; 18 | WEB = 80; 19 | WEB_RC = 81; 20 | WEB_BETA = 82; 21 | WEB_ALPHA = 83; 22 | DESKTOPWIN = 96; 23 | DESKTOPWIN_RC = 97; 24 | DESKTOPWIN_BETA = 98; 25 | DESKTOPWIN_ALPHA = 99; 26 | DESKTOPMAC = 112; 27 | DESKTOPMAC_RC = 113; 28 | DESKTOPMAC_BETA = 114; 29 | DESKTOPMAC_ALPHA = 115; 30 | CHANNELGW = 128; 31 | CHANNELGW_RC = 129; 32 | CHANNELGW_BETA = 130; 33 | CHANNELGW_ALPHA = 131; 34 | CHANNELCP = 144; 35 | CHANNELCP_RC = 145; 36 | CHANNELCP_BETA = 146; 37 | CHANNELCP_ALPHA = 147; 38 | WINPHONE = 160; 39 | WINPHONE_RC = 161; 40 | WINPHONE_BETA = 162; 41 | WINPHONE_ALPHA = 163; 42 | BLACKBERRY = 176; 43 | BLACKBERRY_RC = 177; 44 | BLACKBERRY_BETA = 178; 45 | BLACKBERRY_ALPHA = 179; 46 | WINMETRO = 192; 47 | WINMETRO_RC = 193; 48 | WINMETRO_BETA = 194; 49 | WINMETRO_ALPHA = 195; 50 | S40 = 208; 51 | S40_RC = 209; 52 | S40_BETA = 210; 53 | S40_ALPHA = 211; 54 | CHRONO = 224; 55 | CHRONO_RC = 225; 56 | CHRONO_BETA = 226; 57 | CHRONO_ALPHA = 227; 58 | TIZEN = 256; 59 | TIZEN_RC = 257; 60 | TIZEN_BETA = 258; 61 | TIZEN_ALPHA = 259; 62 | VIRTUAL = 272; 63 | } 64 | 65 | enum BuddyBannerLinkType { 66 | BUDDY_BANNER_LINK_HIDDEN = 0; 67 | BUDDY_BANNER_LINK_MID = 1; 68 | BUDDY_BANNER_LINK_URL = 2; 69 | } 70 | 71 | enum BuddyOnAirType { 72 | NORMAL = 0; 73 | LIVE = 1; 74 | VOIP = 2; 75 | } 76 | 77 | enum BuddyResultState { 78 | ACCEPTED = 1; 79 | SUCCEEDED = 2; 80 | FAILED = 3; 81 | CANCELLED = 4; 82 | NOTIFY_FAILED = 5; 83 | STORING = 11; 84 | UPLOADING = 21; 85 | NOTIFYING = 31; 86 | } 87 | 88 | enum BuddySearchRequestSource { 89 | NA = 0; 90 | FRIEND_VIEW = 1; 91 | OFFICIAL_ACCOUNT_VIEW = 2; 92 | } 93 | 94 | enum CarrierCode { 95 | NOT_SPECIFIED = 0; 96 | JP_DOCOMO = 1; 97 | JP_AU = 2; 98 | JP_SOFTBANK = 3; 99 | KR_SKT = 17; 100 | KR_KT = 18; 101 | KR_LGT = 19; 102 | } 103 | 104 | enum ChannelConfiguration { 105 | MESSAGE = 0; 106 | MESSAGE_NOTIFICATION = 1; 107 | NOTIFICATION_CENTER = 2; 108 | } 109 | 110 | enum ChannelErrorCode { 111 | ILLEGAL_ARGUMENT = 0; 112 | INTERNAL_ERROR = 1; 113 | CONNECTION_ERROR = 2; 114 | AUTHENTICATIONI_FAILED = 3; 115 | NEED_PERMISSION_APPROVAL = 4; 116 | COIN_NOT_USABLE = 5; 117 | } 118 | 119 | enum ChannelSyncType { 120 | SYNC = 0; 121 | REMOVE = 1; 122 | } 123 | 124 | enum ContactAttribute { 125 | CONTACT_ATTRIBUTE_CAPABLE_VOICE_CALL = 1; 126 | CONTACT_ATTRIBUTE_CAPABLE_VIDEO_CALL = 2; 127 | CONTACT_ATTRIBUTE_CAPABLE_MY_HOME = 16; 128 | CONTACT_ATTRIBUTE_CAPABLE_BUDDY = 32; 129 | } 130 | 131 | enum ContactCategory { 132 | NORMAL = 0; 133 | RECOMMEND = 1; 134 | } 135 | 136 | enum ContactRelation { 137 | ONEWAY = 0; 138 | BOTH = 1; 139 | NOT_REGISTERED = 2; 140 | } 141 | 142 | enum ContactSetting { 143 | CONTACT_SETTING_NOTIFICATION_DISABLE = 1; 144 | CONTACT_SETTING_DISPLAY_NAME_OVERRIDE = 2; 145 | CONTACT_SETTING_CONTACT_HIDE = 4; 146 | CONTACT_SETTING_FAVORITE = 8; 147 | CONTACT_SETTING_DELETE = 16; 148 | } 149 | 150 | enum ContactStatus { 151 | UNSPECIFIED = 0; 152 | FRIEND = 1; 153 | FRIEND_BLOCKED = 2; 154 | RECOMMEND = 3; 155 | RECOMMEND_BLOCKED = 4; 156 | DELETED = 5; 157 | DELETED_BLOCKED = 6; 158 | } 159 | 160 | enum ContactType { 161 | MID = 0; 162 | PHONE = 1; 163 | EMAIL = 2; 164 | USERID = 3; 165 | PROXIMITY = 4; 166 | GROUP = 5; 167 | USER = 6; 168 | QRCODE = 7; 169 | PROMOTION_BOT = 8; 170 | REPAIR = 128; 171 | FACEBOOK = 2305; 172 | SINA = 2306; 173 | RENREN = 2307; 174 | FEIXIN = 2308; 175 | } 176 | 177 | enum ContentType { 178 | NONE = 0; 179 | IMAGE = 1; 180 | VIDEO = 2; 181 | AUDIO = 3; 182 | HTML = 4; 183 | PDF = 5; 184 | CALL = 6; 185 | STICKER = 7; 186 | PRESENCE = 8; 187 | GIFT = 9; 188 | GROUPBOARD = 10; 189 | APPLINK = 11; 190 | LINK = 12; 191 | CONTACT = 13; 192 | FILE = 14; 193 | LOCATION = 15; 194 | POSTNOTIFICATION = 16; 195 | RICH = 17; 196 | CHATEVENT = 18; 197 | } 198 | 199 | enum CustomMode { 200 | PROMOTION_FRIENDS_INVITE = 1; 201 | CAPABILITY_SERVER_SIDE_SMS = 2; 202 | LINE_CLIENT_ANALYTICS_CONFIGURATION = 3; 203 | } 204 | 205 | enum EmailConfirmationStatus { 206 | NOT_SPECIFIED = 0; 207 | NOT_YET = 1; 208 | DONE = 3; 209 | } 210 | 211 | enum EmailConfirmationType { 212 | SERVER_SIDE_EMAIL = 0; 213 | CLIENT_SIDE_EMAIL = 1; 214 | } 215 | 216 | enum ErrorCode { 217 | ILLEGAL_ARGUMENT = 0; 218 | AUTHENTICATION_FAILED = 1; 219 | DB_FAILED = 2; 220 | INVALID_STATE = 3; 221 | EXCESSIVE_ACCESS = 4; 222 | NOT_FOUND = 5; 223 | INVALID_LENGTH = 6; 224 | NOT_AVAILABLE_USER = 7; 225 | NOT_AUTHORIZED_DEVICE = 8; 226 | INVALID_MID = 9; 227 | NOT_A_MEMBER = 10; 228 | INCOMPATIBLE_APP_VERSION = 11; 229 | NOT_READY = 12; 230 | NOT_AVAILABLE_SESSION = 13; 231 | NOT_AUTHORIZED_SESSION = 14; 232 | SYSTEM_ERROR = 15; 233 | NO_AVAILABLE_VERIFICATION_METHOD = 16; 234 | NOT_AUTHENTICATED = 17; 235 | INVALID_IDENTITY_CREDENTIAL = 18; 236 | NOT_AVAILABLE_IDENTITY_IDENTIFIER = 19; 237 | INTERNAL_ERROR = 20; 238 | NO_SUCH_IDENTITY_IDENFIER = 21; 239 | DEACTIVATED_ACCOUNT_BOUND_TO_THIS_IDENTITY = 22; 240 | ILLEGAL_IDENTITY_CREDENTIAL = 23; 241 | UNKNOWN_CHANNEL = 24; 242 | NO_SUCH_MESSAGE_BOX = 25; 243 | NOT_AVAILABLE_MESSAGE_BOX = 26; 244 | CHANNEL_DOES_NOT_MATCH = 27; 245 | NOT_YOUR_MESSAGE = 28; 246 | MESSAGE_DEFINED_ERROR = 29; 247 | USER_CANNOT_ACCEPT_PRESENTS = 30; 248 | USER_NOT_STICKER_OWNER = 32; 249 | MAINTENANCE_ERROR = 33; 250 | ACCOUNT_NOT_MATCHED = 34; 251 | ABUSE_BLOCK = 35; 252 | NOT_FRIEND = 36; 253 | NOT_ALLOWED_CALL = 37; 254 | BLOCK_FRIEND = 38; 255 | INCOMPATIBLE_VOIP_VERSION = 39; 256 | INVALID_SNS_ACCESS_TOKEN = 40; 257 | EXTERNAL_SERVICE_NOT_AVAILABLE = 41; 258 | NOT_ALLOWED_ADD_CONTACT = 42; 259 | NOT_CERTIFICATED = 43; 260 | NOT_ALLOWED_SECONDARY_DEVICE = 44; 261 | INVALID_PIN_CODE = 45; 262 | NOT_FOUND_IDENTITY_CREDENTIAL = 46; 263 | EXCEED_FILE_MAX_SIZE = 47; 264 | EXCEED_DAILY_QUOTA = 48; 265 | NOT_SUPPORT_SEND_FILE = 49; 266 | MUST_UPGRADE = 50; 267 | NOT_AVAILABLE_PIN_CODE_SESSION = 51; 268 | } 269 | 270 | enum FeatureType { 271 | OBJECT_STORAGE = 1; 272 | } 273 | 274 | enum GroupAttribute { 275 | NAME = 1; 276 | PICTURE_STATUS = 2; 277 | ALL = 255; 278 | } 279 | 280 | enum IdentityProvider { 281 | UNKNOWN = 0; 282 | LINE = 1; 283 | NAVER_KR = 2; 284 | } 285 | 286 | enum LoginResultType { 287 | SUCCESS = 1; 288 | REQUIRE_QRCODE = 2; 289 | REQUIRE_DEVICE_CONFIRM = 3; 290 | } 291 | 292 | enum MessageOperationType { 293 | SEND_MESSAGE = 1; 294 | RECEIVE_MESSAGE = 2; 295 | READ_MESSAGE = 3; 296 | NOTIFIED_READ_MESSAGE = 4; 297 | NOTIFIED_JOIN_CHAT = 5; 298 | FAILED_SEND_MESSAGE = 6; 299 | SEND_CONTENT = 7; 300 | SEND_CONTENT_RECEIPT = 8; 301 | SEND_CHAT_REMOVED = 9; 302 | REMOVE_ALL_MESSAGES = 10; 303 | } 304 | 305 | enum MIDType { 306 | USER = 0; 307 | ROOM = 1; 308 | GROUP = 2; 309 | } 310 | 311 | enum ModificationType { 312 | ADD = 0; 313 | REMOVE = 1; 314 | MODIFY = 2; 315 | } 316 | 317 | enum NotificationItemFetchMode { 318 | ALL = 0; 319 | APPEND = 1; 320 | } 321 | 322 | enum NotificationQueueType { 323 | GLOBAL = 1; 324 | MESSAGE = 2; 325 | PRIMARY = 3; 326 | } 327 | 328 | enum NotificationStatus { 329 | NOTIFICATION_ITEM_EXIST = 1; 330 | TIMELINE_ITEM_EXIST = 2; 331 | NOTE_GROUP_NEW_ITEM_EXIST = 4; 332 | TIMELINE_BUDDYGROUP_CHANGED = 8; 333 | NOTE_ONE_TO_ONE_NEW_ITEM_EXIST = 16; 334 | ALBUM_ITEM_EXIST = 32; 335 | TIMELINE_ITEM_DELETED = 64; 336 | } 337 | 338 | enum NotificationType { 339 | APPLE_APNS = 1; 340 | GOOGLE_C2DM = 2; 341 | NHN_NNI = 3; 342 | SKT_AOM = 4; 343 | MS_MPNS = 5; 344 | RIM_BIS = 6; 345 | GOOGLE_GCM = 7; 346 | NOKIA_NNAPI = 8; 347 | TIZEN = 9; 348 | LINE_BOT = 17; 349 | LINE_WAP = 18; 350 | } 351 | 352 | enum OpStatus { 353 | NORMAL = 0; 354 | ALERT_DISABLED = 1; 355 | } 356 | 357 | enum OpType { 358 | END_OF_OPERATION = 0; 359 | UPDATE_PROFILE = 1; 360 | NOTIFIED_UPDATE_PROFILE = 2; 361 | REGISTER_USERID = 3; 362 | ADD_CONTACT = 4; 363 | NOTIFIED_ADD_CONTACT = 5; 364 | BLOCK_CONTACT = 6; 365 | UNBLOCK_CONTACT = 7; 366 | NOTIFIED_RECOMMEND_CONTACT = 8; 367 | CREATE_GROUP = 9; 368 | UPDATE_GROUP = 10; 369 | NOTIFIED_UPDATE_GROUP = 11; 370 | INVITE_INTO_GROUP = 12; 371 | NOTIFIED_INVITE_INTO_GROUP = 13; 372 | LEAVE_GROUP = 14; 373 | NOTIFIED_LEAVE_GROUP = 15; 374 | ACCEPT_GROUP_INVITATION = 16; 375 | NOTIFIED_ACCEPT_GROUP_INVITATION = 17; 376 | KICKOUT_FROM_GROUP = 18; 377 | NOTIFIED_KICKOUT_FROM_GROUP = 19; 378 | CREATE_ROOM = 20; 379 | INVITE_INTO_ROOM = 21; 380 | NOTIFIED_INVITE_INTO_ROOM = 22; 381 | LEAVE_ROOM = 23; 382 | NOTIFIED_LEAVE_ROOM = 24; 383 | SEND_MESSAGE = 25; 384 | RECEIVE_MESSAGE = 26; 385 | SEND_MESSAGE_RECEIPT = 27; 386 | RECEIVE_MESSAGE_RECEIPT = 28; 387 | SEND_CONTENT_RECEIPT = 29; 388 | RECEIVE_ANNOUNCEMENT = 30; 389 | CANCEL_INVITATION_GROUP = 31; 390 | NOTIFIED_CANCEL_INVITATION_GROUP = 32; 391 | NOTIFIED_UNREGISTER_USER = 33; 392 | REJECT_GROUP_INVITATION = 34; 393 | NOTIFIED_REJECT_GROUP_INVITATION = 35; 394 | UPDATE_SETTINGS = 36; 395 | NOTIFIED_REGISTER_USER = 37; 396 | INVITE_VIA_EMAIL = 38; 397 | NOTIFIED_REQUEST_RECOVERY = 39; 398 | SEND_CHAT_CHECKED = 40; 399 | SEND_CHAT_REMOVED = 41; 400 | NOTIFIED_FORCE_SYNC = 42; 401 | SEND_CONTENT = 43; 402 | SEND_MESSAGE_MYHOME = 44; 403 | NOTIFIED_UPDATE_CONTENT_PREVIEW = 45; 404 | REMOVE_ALL_MESSAGES = 46; 405 | NOTIFIED_UPDATE_PURCHASES = 47; 406 | DUMMY = 48; 407 | UPDATE_CONTACT = 49; 408 | NOTIFIED_RECEIVED_CALL = 50; 409 | CANCEL_CALL = 51; 410 | NOTIFIED_REDIRECT = 52; 411 | NOTIFIED_CHANNEL_SYNC = 53; 412 | FAILED_SEND_MESSAGE = 54; 413 | NOTIFIED_READ_MESSAGE = 55; 414 | FAILED_EMAIL_CONFIRMATION = 56; 415 | NOTIFIED_CHAT_CONTENT = 58; 416 | NOTIFIED_PUSH_NOTICENTER_ITEM = 59; 417 | } 418 | 419 | enum PayloadType { 420 | PAYLOAD_BUY = 101; 421 | PAYLOAD_CS = 111; 422 | PAYLOAD_BONUS = 121; 423 | PAYLOAD_EVENT = 131; 424 | } 425 | 426 | enum PaymentPgType { 427 | PAYMENT_PG_NONE = 0; 428 | PAYMENT_PG_AU = 1; 429 | PAYMENT_PG_AL = 2; 430 | } 431 | 432 | enum PaymentType { 433 | PAYMENT_APPLE = 1; 434 | PAYMENT_GOOGLE = 2; 435 | } 436 | 437 | enum ProductBannerLinkType { 438 | BANNER_LINK_NONE = 0; 439 | BANNER_LINK_ITEM = 1; 440 | BANNER_LINK_URL = 2; 441 | BANNER_LINK_CATEGORY = 3; 442 | } 443 | 444 | enum ProductEventType { 445 | NO_EVENT = 0; 446 | CARRIER_ANY = 65537; 447 | BUDDY_ANY = 131073; 448 | INSTALL_IOS = 196609; 449 | INSTALL_ANDROID = 196610; 450 | MISSION_ANY = 262145; 451 | MUSTBUY_ANY = 327681; 452 | } 453 | 454 | enum ProfileAttribute { 455 | EMAIL = 1; 456 | DISPLAY_NAME = 2; 457 | PHONETIC_NAME = 4; 458 | PICTURE = 8; 459 | STATUS_MESSAGE = 16; 460 | ALLOW_SEARCH_BY_USERID = 32; 461 | ALLOW_SEARCH_BY_EMAIL = 64; 462 | BUDDY_STATUS = 128; 463 | ALL = 255; 464 | } 465 | 466 | enum PublicType { 467 | HIDDEN = 0; 468 | PUBLIC = 1000; 469 | } 470 | 471 | enum RedirectType { 472 | NONE = 0; 473 | EXPIRE_SECOND = 1; 474 | } 475 | 476 | enum RegistrationType { 477 | PHONE = 0; 478 | EMAIL_WAP = 1; 479 | FACEBOOK = 2305; 480 | SINA = 2306; 481 | RENREN = 2307; 482 | FEIXIN = 2308; 483 | } 484 | 485 | enum SettingsAttribute { 486 | NOTIFICATION_ENABLE = 1; 487 | NOTIFICATION_MUTE_EXPIRATION = 2; 488 | NOTIFICATION_NEW_MESSAGE = 4; 489 | NOTIFICATION_GROUP_INVITATION = 8; 490 | NOTIFICATION_SHOW_MESSAGE = 16; 491 | NOTIFICATION_INCOMING_CALL = 32; 492 | PRIVACY_SYNC_CONTACTS = 64; 493 | PRIVACY_SEARCH_BY_PHONE_NUMBER = 128; 494 | NOTIFICATION_SOUND_MESSAGE = 256; 495 | NOTIFICATION_SOUND_GROUP = 512; 496 | CONTACT_MY_TICKET = 1024; 497 | IDENTITY_PROVIDER = 2048; 498 | IDENTITY_IDENTIFIER = 4096; 499 | PRIVACY_SEARCH_BY_USERID = 8192; 500 | PRIVACY_SEARCH_BY_EMAIL = 16384; 501 | PREFERENCE_LOCALE = 32768; 502 | NOTIFICATION_DISABLED_WITH_SUB = 65536; 503 | SNS_ACCOUNT = 524288; 504 | PHONE_REGISTRATION = 1048576; 505 | PRIVACY_ALLOW_SECONDARY_DEVICE_LOGIN = 2097152; 506 | CUSTOM_MODE = 4194304; 507 | PRIVACY_PROFILE_IMAGE_POST_TO_MYHOME = 8388608; 508 | EMAIL_CONFIRMATION_STATUS = 16777216; 509 | PRIVACY_RECV_MESSAGES_FROM_NOT_FRIEND = 33554432; 510 | ALL = 2147483647; 511 | } 512 | 513 | enum SnsIdType { 514 | FACEBOOK = 1; 515 | SINA = 2; 516 | RENREN = 3; 517 | FEIXIN = 4; 518 | } 519 | 520 | enum SpammerReason { 521 | OTHER = 0; 522 | ADVERTISING = 1; 523 | GENDER_HARASSMENT = 2; 524 | HARASSMENT = 3; 525 | } 526 | 527 | enum SyncActionType { 528 | SYNC = 0; 529 | REPORT = 1; 530 | } 531 | 532 | enum SyncCategory { 533 | PROFILE = 0; 534 | SETTINGS = 1; 535 | OPS = 2; 536 | CONTACT = 3; 537 | RECOMMEND = 4; 538 | BLOCK = 5; 539 | GROUP = 6; 540 | ROOM = 7; 541 | NOTIFICATION = 8; 542 | } 543 | 544 | enum TMessageBoxStatus { 545 | ACTIVATED = 1; 546 | UNREAD = 2; 547 | } 548 | 549 | enum UniversalNotificationServiceErrorCode { 550 | INTERNAL_ERROR = 0; 551 | INVALID_KEY = 1; 552 | ILLEGAL_ARGUMENT = 2; 553 | TOO_MANY_REQUEST = 3; 554 | AUTHENTICATION_FAILED = 4; 555 | NO_WRITE_PERMISSION = 5; 556 | } 557 | 558 | enum UnregistrationReason { 559 | UNREGISTRATION_REASON_UNREGISTER_USER = 1; 560 | UNREGISTRATION_REASON_UNBIND_DEVICE = 2; 561 | } 562 | 563 | enum UserAgeType { 564 | OVER = 1; 565 | UNDER = 2; 566 | UNDEFINED = 3; 567 | } 568 | 569 | enum VerificationMethod { 570 | NO_AVAILABLE = 0; 571 | PIN_VIA_SMS = 1; 572 | CALLERID_INDIGO = 2; 573 | PIN_VIA_TTS = 4; 574 | SKIP = 10; 575 | } 576 | 577 | enum VerificationResult { 578 | FAILED = 0; 579 | OK_NOT_REGISTERED_YET = 1; 580 | OK_REGISTERED_WITH_SAME_DEVICE = 2; 581 | OK_REGISTERED_WITH_ANOTHER_DEVICE = 3; 582 | } 583 | 584 | enum WapInvitationType { 585 | REGISTRATION = 1; 586 | CHAT = 2; 587 | } 588 | 589 | struct AgeCheckDocomoResult { 590 | 1: string authUrl; 591 | 2: UserAgeType userAgeType; 592 | } 593 | 594 | struct AgeCheckRequestResult { 595 | 1: string authUrl; 596 | 2: string sessionId; 597 | } 598 | 599 | struct Announcement { 600 | 1: i32 index; 601 | 10: bool forceUpdate; 602 | 11: string title; 603 | 12: string text; 604 | 13: i64 createdTime; 605 | 14: string pictureUrl; 606 | 15: string thumbnailUrl; 607 | } 608 | 609 | struct ChannelProvider { 610 | 1: string name; 611 | } 612 | 613 | struct ChannelInfo { 614 | 1: string channelId; 615 | 3: string name; 616 | 4: string entryPageUrl; 617 | 5: string descriptionText; 618 | 6: ChannelProvider provider; 619 | 7: PublicType publicType; 620 | 8: string iconImage; 621 | 9: list permissions; 622 | 11: string iconThumbnailImage; 623 | 12: list channelConfigurations; 624 | } 625 | 626 | struct ApprovedChannelInfo { 627 | 1: ChannelInfo channelInfo; 628 | 2: i64 approvedAt; 629 | } 630 | 631 | struct ApprovedChannelInfos { 632 | 1: list approvedChannelInfos; 633 | 2: i64 revision; 634 | } 635 | 636 | struct AuthQrcode { 637 | 1: string qrcode; 638 | 2: string verifier; 639 | } 640 | 641 | struct BuddyBanner { 642 | 1: BuddyBannerLinkType buddyBannerLinkType; 643 | 2: string buddyBannerLink; 644 | 3: string buddyBannerImageUrl; 645 | } 646 | 647 | struct BuddyDetail { 648 | 1: string mid; 649 | 2: i64 memberCount; 650 | 3: bool onAir; 651 | 4: bool businessAccount; 652 | 5: bool addable; 653 | 6: set acceptableContentTypes; 654 | 7: bool capableMyhome; 655 | } 656 | 657 | struct Contact { 658 | 1: string mid; 659 | 2: i64 createdTime; 660 | 10: ContactType type; 661 | 11: ContactStatus status; 662 | 21: ContactRelation relation; 663 | 22: string displayName; 664 | 23: string phoneticName; 665 | 24: string pictureStatus; 666 | 25: string thumbnailUrl; 667 | 26: string statusMessage; 668 | 27: string displayNameOverridden; 669 | 28: i64 favoriteTime; 670 | 31: bool capableVoiceCall; 671 | 32: bool capableVideoCall; 672 | 33: bool capableMyhome; 673 | 34: bool capableBuddy; 674 | 35: i32 attributes; 675 | 36: i64 settings; 676 | 37: string picturePath; 677 | } 678 | 679 | struct BuddyList { 680 | 1: string classification; 681 | 2: string displayName; 682 | 3: i32 totalBuddyCount; 683 | 4: list popularContacts; 684 | } 685 | 686 | struct Location { 687 | 1: string title; 688 | 2: string address; 689 | 3: double latitude; 690 | 4: double longitude; 691 | 5: string phone; 692 | } 693 | 694 | struct BuddyMessageRequest { 695 | 1: ContentType contentType; 696 | 2: string text; 697 | 3: Location location; 698 | 4: binary content; 699 | 5: map contentMetadata; 700 | } 701 | 702 | struct BuddyOnAirUrls { 703 | 1: map hls; 704 | 2: map smoothStreaming; 705 | } 706 | 707 | struct BuddyOnAir { 708 | 1: string mid; 709 | 3: i64 freshnessLifetime; 710 | 4: string onAirId; 711 | 5: bool onAir; 712 | 11: string text; 713 | 12: i64 viewerCount; 714 | 13: i64 targetCount; 715 | 31: BuddyOnAirType onAirType; 716 | 32: BuddyOnAirUrls onAirUrls; 717 | } 718 | 719 | struct BuddyProfile { 720 | 1: string buddyId; 721 | 2: string mid; 722 | 3: string searchId; 723 | 4: string displayName; 724 | 5: string statusMessage; 725 | 11: i64 contactCount; 726 | } 727 | 728 | struct BuddySearchResult { 729 | 1: string mid; 730 | 2: string displayName; 731 | 3: string pictureStatus; 732 | 4: string picturePath; 733 | 5: string statusMessage; 734 | 6: bool businessAccount; 735 | } 736 | 737 | struct ChannelDomain { 738 | 1: string host; 739 | 2: bool removed; 740 | } 741 | 742 | struct ChannelDomains { 743 | 1: list channelDomains; 744 | 2: i64 revision; 745 | } 746 | 747 | exception ChannelException { 748 | 1: ChannelErrorCode code; 749 | 2: string reason; 750 | 3: map parameterMap; 751 | } 752 | 753 | struct ChannelInfos { 754 | 1: list channelInfos; 755 | 2: i64 revision; 756 | } 757 | 758 | struct ChannelNotificationSetting { 759 | 1: string channelId; 760 | 2: string name; 761 | 3: bool notificationReceivable; 762 | 4: bool messageReceivable; 763 | 5: bool showDefault; 764 | } 765 | 766 | struct ChannelSyncDatas { 767 | 1: list channelInfos; 768 | 2: list channelDomains; 769 | 3: i64 revision; 770 | 4: i64 expires; 771 | } 772 | 773 | struct ChannelToken { 774 | 1: string token; 775 | 2: string obsToken; 776 | 3: i64 expiration; 777 | 4: string refreshToken; 778 | 5: string channelAccessToken; 779 | } 780 | 781 | struct Coin { 782 | 1: i32 freeCoinBalance; 783 | 2: i32 payedCoinBalance; 784 | 3: i32 totalCoinBalance; 785 | 4: i32 rewardCoinBalance; 786 | } 787 | 788 | struct CoinPayLoad { 789 | 1: i32 payCoin; 790 | 2: i32 freeCoin; 791 | 3: PayloadType type; 792 | 4: i32 rewardCoin; 793 | } 794 | 795 | struct CoinHistory { 796 | 1: i64 payDate; 797 | 2: i32 coinBalance; 798 | 3: i32 coin; 799 | 4: string price; 800 | 5: string title; 801 | 6: bool refund; 802 | 7: string paySeq; 803 | 8: string currency; 804 | 9: string currencySign; 805 | 10: string displayPrice; 806 | 11: CoinPayLoad payload; 807 | 12: string channelId; 808 | } 809 | 810 | struct CoinHistoryCondition { 811 | 1: i64 start; 812 | 2: i32 size; 813 | 3: string language; 814 | 4: string eddt; 815 | 5: PaymentType appStoreCode; 816 | } 817 | 818 | struct CoinHistoryResult { 819 | 1: list historys; 820 | 2: Coin balance; 821 | 3: bool hasNext; 822 | } 823 | 824 | struct CoinProductItem { 825 | 1: string itemId; 826 | 2: i32 coin; 827 | 3: i32 freeCoin; 828 | 5: string currency; 829 | 6: string price; 830 | 7: string displayPrice; 831 | 8: string name; 832 | 9: string desc; 833 | } 834 | 835 | struct CoinPurchaseConfirm { 836 | 1: string orderId; 837 | 2: PaymentType appStoreCode; 838 | 3: string receipt; 839 | 4: string signature; 840 | 5: string seller; 841 | 6: string requestType; 842 | 7: bool ignoreReceipt; 843 | } 844 | 845 | struct CoinPurchaseReservation { 846 | 1: string productId; 847 | 2: string country; 848 | 3: string currency; 849 | 4: string price; 850 | 5: PaymentType appStoreCode; 851 | 6: string language; 852 | 7: PaymentPgType pgCode; 853 | 8: string redirectUrl; 854 | } 855 | 856 | struct CoinUseReservationItem { 857 | 1: string itemId; 858 | 2: string itemName; 859 | 3: i32 amount; 860 | } 861 | 862 | struct CoinUseReservation { 863 | 1: string channelId; 864 | 2: string shopOrderId; 865 | 3: PaymentType appStoreCode; 866 | 4: list items; 867 | 5: string country; 868 | } 869 | 870 | struct CompactContact { 871 | 1: string mid; 872 | 2: i64 createdTime; 873 | 3: i64 modifiedTime; 874 | 4: ContactStatus status; 875 | 5: i64 settings; 876 | 6: string displayNameOverridden; 877 | } 878 | 879 | struct ContactModification { 880 | 1: ModificationType type; 881 | 2: string luid; 882 | 11: list phones; 883 | 12: list emails; 884 | 13: list userids; 885 | } 886 | 887 | struct ContactRegistration { 888 | 1: Contact contact; 889 | 10: string luid; 890 | 11: ContactType contactType; 891 | 12: string contactKey; 892 | } 893 | 894 | struct ContactReport { 895 | 1: string mid; 896 | 2: bool exists; 897 | 3: Contact contact; 898 | } 899 | 900 | struct ContactReportResult { 901 | 1: string mid; 902 | 2: bool exists; 903 | } 904 | 905 | struct DeviceInfo { 906 | 1: string deviceName; 907 | 2: string systemName; 908 | 3: string systemVersion; 909 | 4: string model; 910 | 10: CarrierCode carrierCode; 911 | 11: string carrierName; 912 | 20: ApplicationType applicationType; 913 | } 914 | 915 | struct EmailConfirmation { 916 | 1: bool usePasswordSet; 917 | 2: string email; 918 | 3: string password; 919 | 4: bool ignoreDuplication; 920 | } 921 | 922 | struct EmailConfirmationSession { 923 | 1: EmailConfirmationType emailConfirmationType; 924 | 2: string verifier; 925 | 3: string targetEmail; 926 | } 927 | 928 | struct FriendChannelMatrix { 929 | 1: string channelId; 930 | 2: string representMid; 931 | 3: i32 count; 932 | } 933 | 934 | struct FriendChannelMatricesResponse { 935 | 1: i64 expires; 936 | 2: list matrices; 937 | } 938 | 939 | struct Geolocation { 940 | 1: double longitude; 941 | 2: double latitude; 942 | } 943 | 944 | struct NotificationTarget { 945 | 1: string applicationType; 946 | 2: string applicationVersion; 947 | 3: string region; 948 | } 949 | 950 | struct GlobalEvent { 951 | 1: string key; 952 | 2: list targets; 953 | 3: i64 createdTime; 954 | 4: i64 data; 955 | 5: i32 maxDelay; 956 | } 957 | 958 | struct Group { 959 | 1: string id; 960 | 2: i64 createdTime; 961 | 10: string name; 962 | 11: string pictureStatus; 963 | 20: list members; 964 | 21: Contact creator; 965 | 22: list invitee; 966 | 31: bool notificationDisabled; 967 | } 968 | 969 | struct IdentityCredential { 970 | 1: IdentityProvider provider; 971 | 2: string identifier; 972 | 3: string password; 973 | } 974 | 975 | struct LastReadMessageId { 976 | 1: string mid; 977 | 2: string lastReadMessageId; 978 | } 979 | 980 | struct LastReadMessageIds { 981 | 1: string chatId; 982 | 2: list lastReadMessageIds; 983 | } 984 | 985 | struct LoginResult { 986 | 1: string authToken; 987 | 2: string certificate; 988 | 3: string verifier; 989 | 4: string pinCode; 990 | 5: LoginResultType type; 991 | } 992 | 993 | struct LoginSession { 994 | 1: string tokenKey; 995 | 3: i64 expirationTime; 996 | 11: ApplicationType applicationType; 997 | 12: string systemName; 998 | 22: string accessLocation; 999 | } 1000 | 1001 | struct Message { 1002 | 1: string from; 1003 | 2: string to; 1004 | 3: MIDType toType; 1005 | 4: string id; 1006 | 5: i64 createdTime; 1007 | 6: i64 deliveredTime; 1008 | 10: string text; 1009 | 11: Location location; 1010 | 14: bool hasContent; 1011 | 15: ContentType contentType; 1012 | 17: binary contentPreview; 1013 | 18: map contentMetadata; 1014 | } 1015 | 1016 | struct MessageOperation { 1017 | 1: i64 revision; 1018 | 2: i64 createdTime; 1019 | 3: MessageOperationType type; 1020 | 4: i32 reqSeq; 1021 | 5: OpStatus status; 1022 | 10: string param1; 1023 | 11: string param2; 1024 | 12: string param3; 1025 | 20: Message message; 1026 | } 1027 | 1028 | struct MessageOperations { 1029 | 1: list operations; 1030 | 2: bool endFlag; 1031 | } 1032 | 1033 | struct MetaProfile { 1034 | 1: i64 createTime; 1035 | 2: string regionCode; 1036 | 3: map identities; 1037 | } 1038 | 1039 | struct NotificationItem { 1040 | 1: string id; 1041 | 2: string from; 1042 | 3: string to; 1043 | 4: string fromChannel; 1044 | 5: string toChannel; 1045 | 7: i64 revision; 1046 | 8: i64 createdTime; 1047 | 9: map content; 1048 | } 1049 | 1050 | struct NotificationFetchResult { 1051 | 1: NotificationItemFetchMode fetchMode; 1052 | 2: list itemList; 1053 | } 1054 | 1055 | struct Operation { 1056 | 1: i64 revision; 1057 | 2: i64 createdTime; 1058 | 3: OpType type; 1059 | 4: i32 reqSeq; 1060 | 5: string checksum; 1061 | 7: OpStatus status; 1062 | 10: string param1; 1063 | 11: string param2; 1064 | 12: string param3; 1065 | 20: Message message; 1066 | } 1067 | 1068 | struct PaymentReservation { 1069 | 1: string receiverMid; 1070 | 2: string productId; 1071 | 3: string language; 1072 | 4: string location; 1073 | 5: string currency; 1074 | 6: string price; 1075 | 7: PaymentType appStoreCode; 1076 | 8: string messageText; 1077 | 9: i32 messageTemplate; 1078 | 10: i64 packageId; 1079 | } 1080 | 1081 | struct PaymentReservationResult { 1082 | 1: string orderId; 1083 | 2: string confirmUrl; 1084 | 3: map extras; 1085 | } 1086 | 1087 | struct Product { 1088 | 1: string productId; 1089 | 2: i64 packageId; 1090 | 3: i32 version; 1091 | 4: string authorName; 1092 | 5: bool onSale; 1093 | 6: i32 validDays; 1094 | 7: i32 saleType; 1095 | 8: string copyright; 1096 | 9: string title; 1097 | 10: string descriptionText; 1098 | 11: i64 shopOrderId; 1099 | 12: string fromMid; 1100 | 13: string toMid; 1101 | 14: i64 validUntil; 1102 | 15: i32 priceTier; 1103 | 16: string price; 1104 | 17: string currency; 1105 | 18: string currencySymbol; 1106 | 19: PaymentType paymentType; 1107 | 20: i64 createDate; 1108 | 21: bool ownFlag; 1109 | 22: ProductEventType eventType; 1110 | 23: string urlSchema; 1111 | 24: string downloadUrl; 1112 | 25: string buddyMid; 1113 | 26: i64 publishSince; 1114 | 27: bool newFlag; 1115 | 28: bool missionFlag; 1116 | } 1117 | 1118 | struct ProductList { 1119 | 1: bool hasNext; 1120 | 4: i64 bannerSequence; 1121 | 5: ProductBannerLinkType bannerTargetType; 1122 | 6: string bannerTargetPath; 1123 | 7: list productList; 1124 | 8: string bannerLang; 1125 | } 1126 | 1127 | struct ProductSimple { 1128 | 1: string productId; 1129 | 2: i64 packageId; 1130 | 3: i32 version; 1131 | 4: bool onSale; 1132 | 5: i64 validUntil; 1133 | } 1134 | 1135 | struct ProductSimpleList { 1136 | 1: bool hasNext; 1137 | 2: i32 reinvokeHour; 1138 | 3: i64 lastVersionSeq; 1139 | 4: list productList; 1140 | 5: i64 recentNewReleaseDate; 1141 | 6: i64 recentEventReleaseDate; 1142 | } 1143 | 1144 | struct Profile { 1145 | 1: string mid; 1146 | 3: string userid; 1147 | 10: string phone; 1148 | 11: string email; 1149 | 12: string regionCode; 1150 | 20: string displayName; 1151 | 21: string phoneticName; 1152 | 22: string pictureStatus; 1153 | 23: string thumbnailUrl; 1154 | 24: string statusMessage; 1155 | 31: bool allowSearchByUserid; 1156 | 32: bool allowSearchByEmail; 1157 | 33: string picturePath; 1158 | } 1159 | 1160 | struct ProximityMatchCandidateResult { 1161 | 1: list users; 1162 | 2: list buddies; 1163 | } 1164 | 1165 | struct RegisterWithSnsIdResult { 1166 | 1: string authToken; 1167 | 2: bool userCreated; 1168 | } 1169 | 1170 | struct RequestTokenResponse { 1171 | 1: string requestToken; 1172 | 2: string returnUrl; 1173 | } 1174 | 1175 | struct Room { 1176 | 1: string mid; 1177 | 2: i64 createdTime; 1178 | 10: list contacts; 1179 | 31: bool notificationDisabled; 1180 | } 1181 | 1182 | struct RSAKey { 1183 | 1: string keynm; 1184 | 2: string nvalue; 1185 | 3: string evalue; 1186 | 4: string sessionKey; 1187 | } 1188 | 1189 | struct SendBuddyMessageResult { 1190 | 1: string requestId; 1191 | 2: BuddyResultState state; 1192 | 3: string messageId; 1193 | 4: i32 eventNo; 1194 | 11: i64 receiverCount; 1195 | 12: i64 successCount; 1196 | 13: i64 failCount; 1197 | 14: i64 cancelCount; 1198 | 15: i64 blockCount; 1199 | 16: i64 unregisterCount; 1200 | 21: i64 timestamp; 1201 | 22: string message; 1202 | } 1203 | 1204 | struct SetBuddyOnAirResult { 1205 | 1: string requestId; 1206 | 2: BuddyResultState state; 1207 | 3: i32 eventNo; 1208 | 11: i64 receiverCount; 1209 | 12: i64 successCount; 1210 | 13: i64 failCount; 1211 | 14: i64 cancelCount; 1212 | 15: i64 unregisterCount; 1213 | 21: i64 timestamp; 1214 | 22: string message; 1215 | } 1216 | 1217 | struct Settings { 1218 | 10: bool notificationEnable; 1219 | 11: i64 notificationMuteExpiration; 1220 | 12: bool notificationNewMessage; 1221 | 13: bool notificationGroupInvitation; 1222 | 14: bool notificationShowMessage; 1223 | 15: bool notificationIncomingCall; 1224 | 16: string notificationSoundMessage; 1225 | 17: string notificationSoundGroup; 1226 | 18: bool notificationDisabledWithSub; 1227 | 20: bool privacySyncContacts; 1228 | 21: bool privacySearchByPhoneNumber; 1229 | 22: bool privacySearchByUserid; 1230 | 23: bool privacySearchByEmail; 1231 | 24: bool privacyAllowSecondaryDeviceLogin; 1232 | 25: bool privacyProfileImagePostToMyhome; 1233 | 26: bool privacyReceiveMessagesFromNotFriend; 1234 | 30: string contactMyTicket; 1235 | 40: IdentityProvider identityProvider; 1236 | 41: string identityIdentifier; 1237 | 42: map snsAccounts; 1238 | 43: bool phoneRegistration; 1239 | 44: EmailConfirmationStatus emailConfirmationStatus; 1240 | 50: string preferenceLocale; 1241 | 60: map customModes; 1242 | } 1243 | 1244 | struct SimpleChannelClient { 1245 | 1: string applicationType; 1246 | 2: string applicationVersion; 1247 | 3: string locale; 1248 | } 1249 | 1250 | struct SimpleChannelContact { 1251 | 1: string mid; 1252 | 2: string displayName; 1253 | 3: string pictureStatus; 1254 | 4: string picturePath; 1255 | 5: string statusMessage; 1256 | } 1257 | 1258 | struct SnsFriend { 1259 | 1: string snsUserId; 1260 | 2: string snsUserName; 1261 | 3: SnsIdType snsIdType; 1262 | } 1263 | 1264 | struct SnsFriendContactRegistration { 1265 | 1: Contact contact; 1266 | 2: SnsIdType snsIdType; 1267 | 3: string snsUserId; 1268 | } 1269 | 1270 | struct SnsFriendModification { 1271 | 1: ModificationType type; 1272 | 2: SnsFriend snsFriend; 1273 | } 1274 | 1275 | struct SnsFriends { 1276 | 1: list snsFriends; 1277 | 2: bool hasMore; 1278 | } 1279 | 1280 | struct SnsIdUserStatus { 1281 | 1: bool userExisting; 1282 | 2: bool phoneNumberRegistered; 1283 | 3: bool sameDevice; 1284 | } 1285 | 1286 | struct SnsProfile { 1287 | 1: string snsUserId; 1288 | 2: string snsUserName; 1289 | 3: string email; 1290 | 4: string thumbnailUrl; 1291 | } 1292 | 1293 | struct SystemConfiguration { 1294 | 1: string endpoint; 1295 | 2: string endpointSsl; 1296 | 3: string updateUrl; 1297 | 11: string c2dmAccount; 1298 | 12: string nniServer; 1299 | } 1300 | 1301 | exception TalkException { 1302 | 1: ErrorCode code; 1303 | 2: string reason; 1304 | 3: map parameterMap; 1305 | } 1306 | 1307 | struct Ticket { 1308 | 1: string id; 1309 | 10: i64 expirationTime; 1310 | 21: i32 maxUseCount; 1311 | } 1312 | 1313 | struct TMessageBox { 1314 | 1: string id; 1315 | 2: string channelId; 1316 | 5: i64 lastSeq; 1317 | 6: i64 unreadCount; 1318 | 7: i64 lastModifiedTime; 1319 | 8: i32 status; 1320 | 9: MIDType midType; 1321 | 10: list lastMessages; 1322 | } 1323 | 1324 | struct TMessageBoxWrapUp { 1325 | 1: TMessageBox messageBox; 1326 | 2: string name; 1327 | 3: list contacts; 1328 | 4: string pictureRevision; 1329 | } 1330 | 1331 | struct TMessageBoxWrapUpResponse { 1332 | 1: list messageBoxWrapUpList; 1333 | 2: i32 totalSize; 1334 | } 1335 | 1336 | exception UniversalNotificationServiceException { 1337 | 1: UniversalNotificationServiceErrorCode code; 1338 | 2: string reason; 1339 | 3: map parameterMap; 1340 | } 1341 | 1342 | struct UpdateBuddyProfileResult { 1343 | 1: string requestId; 1344 | 2: BuddyResultState state; 1345 | 3: i32 eventNo; 1346 | 11: i64 receiverCount; 1347 | 12: i64 successCount; 1348 | 13: i64 failCount; 1349 | 14: i64 cancelCount; 1350 | 15: i64 unregisterCount; 1351 | 21: i64 timestamp; 1352 | 22: string message; 1353 | } 1354 | 1355 | struct UserAuthStatus { 1356 | 1: bool phoneNumberRegistered; 1357 | 2: list registeredSnsIdTypes; 1358 | } 1359 | 1360 | struct VerificationSessionData { 1361 | 1: string sessionId; 1362 | 2: VerificationMethod method; 1363 | 3: string callback; 1364 | 4: string normalizedPhone; 1365 | 5: string countryCode; 1366 | 6: string nationalSignificantNumber; 1367 | 7: list availableVerificationMethods; 1368 | } 1369 | 1370 | struct WapInvitation { 1371 | 1: WapInvitationType type; 1372 | 10: string inviteeEmail; 1373 | 11: string inviterMid; 1374 | 12: string roomMid; 1375 | } 1376 | 1377 | service AccountSupervisorService { 1378 | RSAKey getRSAKey() throws(1: TalkException e); 1379 | 1380 | void notifyEmailConfirmationResult( 1381 | 2: map parameterMap) throws(1: TalkException e); 1382 | 1383 | string registerVirtualAccount( 1384 | 2: string locale, 1385 | 3: string encryptedVirtualUserId, 1386 | 4: string encryptedPassword) throws(1: TalkException e); 1387 | 1388 | void requestVirtualAccountPasswordChange( 1389 | 2: string virtualMid, 1390 | 3: string encryptedVirtualUserId, 1391 | 4: string encryptedOldPassword, 1392 | 5: string encryptedNewPassword) throws(1: TalkException e); 1393 | 1394 | void requestVirtualAccountPasswordSet( 1395 | 2: string virtualMid, 1396 | 3: string encryptedVirtualUserId, 1397 | 4: string encryptedNewPassword) throws(1: TalkException e); 1398 | 1399 | void unregisterVirtualAccount( 1400 | 2: string virtualMid) throws(1: TalkException e); 1401 | } 1402 | 1403 | service AgeCheckService { 1404 | UserAgeType checkUserAge( 1405 | 2: CarrierCode carrier, 1406 | 3: string sessionId, 1407 | 4: string verifier, 1408 | 5: i32 standardAge) throws(1: TalkException e); 1409 | 1410 | AgeCheckDocomoResult checkUserAgeWithDocomo( 1411 | 2: string openIdRedirectUrl, 1412 | 3: i32 standardAge, 1413 | 4: string verifier) throws(1: TalkException e); 1414 | 1415 | string retrieveOpenIdAuthUrlWithDocomo() throws(1: TalkException e); 1416 | 1417 | AgeCheckRequestResult retrieveRequestToken( 1418 | 2: CarrierCode carrier) throws(1: TalkException e); 1419 | } 1420 | 1421 | service BuddyManagementService { 1422 | void addBuddyMember( 1423 | 1: string requestId, 1424 | 2: string userMid) throws(1: TalkException e); 1425 | 1426 | void addBuddyMembers( 1427 | 1: string requestId, 1428 | 2: list userMids) throws(1: TalkException e); 1429 | 1430 | void blockBuddyMember( 1431 | 1: string requestId, 1432 | 2: string mid) throws(1: TalkException e); 1433 | 1434 | list commitSendMessagesToAll( 1435 | 1: list requestIdList) throws(1: TalkException e); 1436 | 1437 | list commitSendMessagesToMids( 1438 | 1: list requestIdList, 1439 | 2: list mids) throws(1: TalkException e); 1440 | 1441 | bool containsBuddyMember( 1442 | 1: string requestId, 1443 | 2: string userMid) throws(1: TalkException e); 1444 | 1445 | binary downloadMessageContent( 1446 | 1: string requestId, 1447 | 2: string messageId) throws(1: TalkException e); 1448 | 1449 | binary downloadMessageContentPreview( 1450 | 1: string requestId, 1451 | 2: string messageId) throws(1: TalkException e); 1452 | 1453 | binary downloadProfileImage( 1454 | 1: string requestId) throws(1: TalkException e); 1455 | 1456 | binary downloadProfileImagePreview( 1457 | 1: string requestId) throws(1: TalkException e); 1458 | 1459 | i64 getActiveMemberCountByBuddyMid( 1460 | 2: string buddyMid) throws(1: TalkException e); 1461 | 1462 | list getActiveMemberMidsByBuddyMid( 1463 | 2: string buddyMid) throws(1: TalkException e); 1464 | 1465 | list getAllBuddyMembers() throws(1: TalkException e); 1466 | 1467 | list getBlockedBuddyMembers() throws(1: TalkException e); 1468 | 1469 | i64 getBlockerCountByBuddyMid( 1470 | 2: string buddyMid) throws(1: TalkException e); 1471 | 1472 | BuddyDetail getBuddyDetailByMid( 1473 | 2: string buddyMid) throws(1: TalkException e); 1474 | 1475 | BuddyProfile getBuddyProfile() throws(1: TalkException e); 1476 | 1477 | Ticket getContactTicket() throws(1: TalkException e); 1478 | 1479 | i64 getMemberCountByBuddyMid( 1480 | 2: string buddyMid) throws(1: TalkException e); 1481 | 1482 | SendBuddyMessageResult getSendBuddyMessageResult( 1483 | 1: string sendBuddyMessageRequestId) throws(1: TalkException e); 1484 | 1485 | SetBuddyOnAirResult getSetBuddyOnAirResult( 1486 | 1: string setBuddyOnAirRequestId) throws(1: TalkException e); 1487 | 1488 | UpdateBuddyProfileResult getUpdateBuddyProfileResult( 1489 | 1: string updateBuddyProfileRequestId) throws(1: TalkException e); 1490 | 1491 | bool isBuddyOnAirByMid( 1492 | 2: string buddyMid) throws(1: TalkException e); 1493 | 1494 | string linkAndSendBuddyContentMessageToAllAsync( 1495 | 1: string requestId, 1496 | 2: Message msg, 1497 | 3: string sourceContentId) throws(1: TalkException e); 1498 | 1499 | SendBuddyMessageResult linkAndSendBuddyContentMessageToMids( 1500 | 1: string requestId, 1501 | 2: Message msg, 1502 | 3: string sourceContentId, 1503 | 4: list mids) throws(1: TalkException e); 1504 | 1505 | void notifyBuddyBlocked( 1506 | 1: string buddyMid, 1507 | 2: string blockerMid) throws(1: TalkException e); 1508 | 1509 | void notifyBuddyUnblocked( 1510 | 1: string buddyMid, 1511 | 2: string blockerMid) throws(1: TalkException e); 1512 | 1513 | string registerBuddy( 1514 | 2: string buddyId, 1515 | 3: string searchId, 1516 | 4: string displayName, 1517 | 5: string statusMeessage, 1518 | 6: binary picture, 1519 | 7: map settings) throws(1: TalkException e); 1520 | 1521 | string registerBuddyAdmin( 1522 | 2: string buddyId, 1523 | 3: string searchId, 1524 | 4: string displayName, 1525 | 5: string statusMessage, 1526 | 6: binary picture) throws(1: TalkException e); 1527 | 1528 | string reissueContactTicket( 1529 | 3: i64 expirationTime, 1530 | 4: i32 maxUseCount) throws(1: TalkException e); 1531 | 1532 | void removeBuddyMember( 1533 | 1: string requestId, 1534 | 2: string userMid) throws(1: TalkException e); 1535 | 1536 | void removeBuddyMembers( 1537 | 1: string requestId, 1538 | 2: list userMids) throws(1: TalkException e); 1539 | 1540 | SendBuddyMessageResult sendBuddyContentMessageToAll( 1541 | 1: string requestId, 1542 | 2: Message msg, 1543 | 3: binary content) throws(1: TalkException e); 1544 | 1545 | string sendBuddyContentMessageToAllAsync( 1546 | 1: string requestId, 1547 | 2: Message msg, 1548 | 3: binary content) throws(1: TalkException e); 1549 | 1550 | SendBuddyMessageResult sendBuddyContentMessageToMids( 1551 | 1: string requestId, 1552 | 2: Message msg, 1553 | 3: binary content, 1554 | 4: list mids) throws(1: TalkException e); 1555 | 1556 | string sendBuddyContentMessageToMidsAsync( 1557 | 1: string requestId, 1558 | 2: Message msg, 1559 | 3: binary content, 1560 | 4: list mids) throws(1: TalkException e); 1561 | 1562 | SendBuddyMessageResult sendBuddyMessageToAll( 1563 | 1: string requestId, 1564 | 2: Message msg) throws(1: TalkException e); 1565 | 1566 | string sendBuddyMessageToAllAsync( 1567 | 1: string requestId, 1568 | 2: Message msg) throws(1: TalkException e); 1569 | 1570 | SendBuddyMessageResult sendBuddyMessageToMids( 1571 | 1: string requestId, 1572 | 2: Message msg, 1573 | 3: list mids) throws(1: TalkException e); 1574 | 1575 | string sendBuddyMessageToMidsAsync( 1576 | 1: string requestId, 1577 | 2: Message msg, 1578 | 3: list mids) throws(1: TalkException e); 1579 | 1580 | void sendIndividualEventToAllAsync( 1581 | 1: string requestId, 1582 | 2: string buddyMid, 1583 | 3: NotificationStatus notificationStatus) throws(1: TalkException e); 1584 | 1585 | SetBuddyOnAirResult setBuddyOnAir( 1586 | 1: string requestId, 1587 | 2: bool onAir) throws(1: TalkException e); 1588 | 1589 | string setBuddyOnAirAsync( 1590 | 1: string requestId, 1591 | 2: bool onAir) throws(1: TalkException e); 1592 | 1593 | SendBuddyMessageResult storeMessage( 1594 | 1: string requestId, 1595 | 2: BuddyMessageRequest messageRequest) throws(1: TalkException e); 1596 | 1597 | void unblockBuddyMember( 1598 | 1: string requestId, 1599 | 2: string mid) throws(1: TalkException e); 1600 | 1601 | void unregisterBuddy( 1602 | 1: string requestId) throws(1: TalkException e); 1603 | 1604 | void unregisterBuddyAdmin( 1605 | 1: string requestId) throws(1: TalkException e); 1606 | 1607 | void updateBuddyAdminProfileAttribute( 1608 | 1: string requestId, 1609 | 2: map attributes) throws(1: TalkException e); 1610 | 1611 | void updateBuddyAdminProfileImage( 1612 | 1: string requestId, 1613 | 2: binary picture) throws(1: TalkException e); 1614 | 1615 | UpdateBuddyProfileResult updateBuddyProfileAttributes( 1616 | 1: string requestId, 1617 | 2: map attributes) throws(1: TalkException e); 1618 | 1619 | string updateBuddyProfileAttributesAsync( 1620 | 1: string requestId, 1621 | 2: map attributes) throws(1: TalkException e); 1622 | 1623 | UpdateBuddyProfileResult updateBuddyProfileImage( 1624 | 1: string requestId, 1625 | 2: binary image) throws(1: TalkException e); 1626 | 1627 | string updateBuddyProfileImageAsync( 1628 | 1: string requestId, 1629 | 2: binary image) throws(1: TalkException e); 1630 | 1631 | void updateBuddySearchId( 1632 | 1: string requestId, 1633 | 2: string searchId) throws(1: TalkException e); 1634 | 1635 | void updateBuddySettings( 1636 | 2: map settings) throws(1: TalkException e); 1637 | 1638 | string uploadBuddyContent( 1639 | 2: ContentType contentType, 1640 | 3: binary content) throws(1: TalkException e); 1641 | } 1642 | 1643 | service BuddyService { 1644 | list findBuddyContactsByQuery( 1645 | 2: string language, 1646 | 3: string country, 1647 | 4: string query, 1648 | 5: i32 fromIndex, 1649 | 6: i32 count, 1650 | 7: BuddySearchRequestSource requestSource) throws(1: TalkException e); 1651 | 1652 | list getBuddyContacts( 1653 | 2: string language, 1654 | 3: string country, 1655 | 4: string classification, 1656 | 5: i32 fromIndex, 1657 | 6: i32 count) throws(1: TalkException e); 1658 | 1659 | BuddyDetail getBuddyDetail( 1660 | 4: string buddyMid) throws(1: TalkException e); 1661 | 1662 | BuddyOnAir getBuddyOnAir( 1663 | 4: string buddyMid) throws(1: TalkException e); 1664 | 1665 | list getCountriesHavingBuddy() throws(1: TalkException e); 1666 | 1667 | map getNewlyReleasedBuddyIds( 1668 | 3: string country) throws(1: TalkException e); 1669 | 1670 | BuddyBanner getPopularBuddyBanner( 1671 | 2: string language, 1672 | 3: string country, 1673 | 4: ApplicationType applicationType, 1674 | 5: string resourceSpecification) throws(1: TalkException e); 1675 | 1676 | list getPopularBuddyLists( 1677 | 2: string language, 1678 | 3: string country) throws(1: TalkException e); 1679 | 1680 | list getPromotedBuddyContacts( 1681 | 2: string language, 1682 | 3: string country) throws(1: TalkException e); 1683 | } 1684 | 1685 | service ChannelApplicationProvidedService { 1686 | i64 activeBuddySubscriberCount() throws(1: TalkException e); 1687 | 1688 | void addOperationForChannel( 1689 | 1: OpType opType, 1690 | 2: string param1, 1691 | 3: string param2, 1692 | 4: string param3) throws(1: TalkException e); 1693 | 1694 | i64 displayBuddySubscriberCount() throws(1: TalkException e); 1695 | 1696 | Contact findContactByUseridWithoutAbuseBlockForChannel( 1697 | 2: string userid) throws(1: TalkException e); 1698 | 1699 | list getAllContactIdsForChannel() throws(1: TalkException e); 1700 | 1701 | list getCompactContacts( 1702 | 2: i64 lastModifiedTimestamp) throws(1: TalkException e); 1703 | 1704 | list getContactsForChannel( 1705 | 2: list ids) throws(1: TalkException e); 1706 | 1707 | string getDisplayName( 1708 | 2: string mid) throws(1: TalkException e); 1709 | 1710 | list getFavoriteMidsForChannel() throws(1: TalkException e); 1711 | 1712 | list getFriendMids() throws(1: TalkException e); 1713 | 1714 | list getGroupMemberMids( 1715 | 1: string groupId) throws(1: TalkException e); 1716 | 1717 | list getGroupsForChannel( 1718 | 1: list groupIds) throws(1: TalkException e); 1719 | 1720 | IdentityCredential getIdentityCredential() throws(1: TalkException e); 1721 | 1722 | list getJoinedGroupIdsForChannel() throws(1: TalkException e); 1723 | 1724 | MetaProfile getMetaProfile() throws(1: TalkException e); 1725 | 1726 | string getMid() throws(1: TalkException e); 1727 | 1728 | SimpleChannelClient getPrimaryClientForChannel() throws(1: TalkException e); 1729 | 1730 | Profile getProfileForChannel() throws(1: TalkException e); 1731 | 1732 | list getSimpleChannelContacts( 1733 | 1: list ids) throws(1: TalkException e); 1734 | 1735 | string getUserCountryForBilling( 1736 | 2: string country, 1737 | 3: string remoteIp) throws(1: TalkException e); 1738 | 1739 | i64 getUserCreateTime() throws(1: TalkException e); 1740 | 1741 | map getUserIdentities() throws(1: TalkException e); 1742 | 1743 | string getUserLanguage() throws(1: TalkException e); 1744 | 1745 | list getUserMidsWhoAddedMe() throws(1: TalkException e); 1746 | 1747 | bool isGroupMember( 1748 | 1: string groupId) throws(1: TalkException e); 1749 | 1750 | bool isInContact( 1751 | 2: string mid) throws(1: TalkException e); 1752 | 1753 | string registerChannelCP( 1754 | 2: string cpId, 1755 | 3: string registerPassword) throws(1: TalkException e); 1756 | 1757 | void removeNotificationStatus( 1758 | 2: NotificationStatus notificationStatus) throws(1: TalkException e); 1759 | 1760 | Message sendMessageForChannel( 1761 | 2: Message message) throws(1: TalkException e); 1762 | 1763 | void sendPinCodeOperation( 1764 | 1: string verifier) throws(1: TalkException e); 1765 | 1766 | void updateProfileAttributeForChannel( 1767 | 2: ProfileAttribute profileAttribute, 1768 | 3: string value) throws(1: TalkException e); 1769 | } 1770 | 1771 | service ChannelService { 1772 | ChannelToken approveChannelAndIssueChannelToken( 1773 | 1: string channelId) throws(1: ChannelException e); 1774 | 1775 | string approveChannelAndIssueRequestToken( 1776 | 1: string channelId, 1777 | 2: string otpId) throws(1: ChannelException e); 1778 | 1779 | NotificationFetchResult fetchNotificationItems( 1780 | 2: i64 localRev) throws(1: ChannelException e); 1781 | 1782 | ApprovedChannelInfos getApprovedChannels( 1783 | 2: i64 lastSynced, 1784 | 3: string locale) throws(1: ChannelException e); 1785 | 1786 | ChannelInfo getChannelInfo( 1787 | 2: string channelId, 1788 | 3: string locale) throws(1: ChannelException e); 1789 | 1790 | ChannelNotificationSetting getChannelNotificationSetting( 1791 | 1: string channelId, 1792 | 2: string locale) throws(1: ChannelException e); 1793 | 1794 | list getChannelNotificationSettings( 1795 | 1: string locale) throws(1: ChannelException e); 1796 | 1797 | ChannelInfos getChannels( 1798 | 2: i64 lastSynced, 1799 | 3: string locale) throws(1: ChannelException e); 1800 | 1801 | ChannelDomains getDomains( 1802 | 2: i64 lastSynced) throws(1: ChannelException e); 1803 | 1804 | FriendChannelMatricesResponse getFriendChannelMatrices( 1805 | 1: list channelIds) throws(1: ChannelException e); 1806 | 1807 | i32 getNotificationBadgeCount( 1808 | 2: i64 localRev) throws(1: ChannelException e); 1809 | 1810 | ChannelToken issueChannelToken( 1811 | 1: string channelId) throws(1: ChannelException e); 1812 | 1813 | string issueRequestToken( 1814 | 1: string channelId, 1815 | 2: string otpId) throws(1: ChannelException e); 1816 | 1817 | RequestTokenResponse issueRequestTokenWithAuthScheme( 1818 | 1: string channelId, 1819 | 2: string otpId, 1820 | 3: list authScheme, 1821 | 4: string returnUrl) throws(1: ChannelException e); 1822 | 1823 | string reserveCoinUse( 1824 | 2: CoinUseReservation request, 1825 | 3: string locale) throws(1: ChannelException e); 1826 | 1827 | void revokeChannel( 1828 | 1: string channelId) throws(1: ChannelException e); 1829 | 1830 | ChannelSyncDatas syncChannelData( 1831 | 2: i64 lastSynced, 1832 | 3: string locale) throws(1: ChannelException e); 1833 | 1834 | void updateChannelNotificationSetting( 1835 | 1: list setting) throws(1: ChannelException e); 1836 | } 1837 | 1838 | service MessageService { 1839 | MessageOperations fetchMessageOperations( 1840 | 2: i64 localRevision, 1841 | 3: i64 lastOpTimestamp, 1842 | 4: i32 count) throws(1: TalkException e); 1843 | 1844 | LastReadMessageIds getLastReadMessageIds( 1845 | 2: string chatId) throws(1: TalkException e); 1846 | 1847 | list multiGetLastReadMessageIds( 1848 | 2: list chatIds) throws(1: TalkException e); 1849 | } 1850 | 1851 | service ShopService { 1852 | void buyCoinProduct( 1853 | 2: PaymentReservation paymentReservation) throws(1: TalkException e); 1854 | 1855 | void buyFreeProduct( 1856 | 2: string receiverMid, 1857 | 3: string productId, 1858 | 4: i32 messageTemplate, 1859 | 5: string language, 1860 | 6: string country, 1861 | 7: i64 packageId) throws(1: TalkException e); 1862 | 1863 | void buyMustbuyProduct( 1864 | 2: string receiverMid, 1865 | 3: string productId, 1866 | 4: i32 messageTemplate, 1867 | 5: string language, 1868 | 6: string country, 1869 | 7: i64 packageId, 1870 | 8: string serialNumber) throws(1: TalkException e); 1871 | 1872 | void checkCanReceivePresent( 1873 | 2: string recipientMid, 1874 | 3: i64 packageId, 1875 | 4: string language, 1876 | 5: string country) throws(1: TalkException e); 1877 | 1878 | ProductList getActivePurchases( 1879 | 2: i64 start, 1880 | 3: i32 size, 1881 | 4: string language, 1882 | 5: string country) throws(1: TalkException e); 1883 | 1884 | ProductSimpleList getActivePurchaseVersions( 1885 | 2: i64 start, 1886 | 3: i32 size, 1887 | 4: string language, 1888 | 5: string country) throws(1: TalkException e); 1889 | 1890 | list getCoinProducts( 1891 | 2: PaymentType appStoreCode, 1892 | 3: string country, 1893 | 4: string language) throws(1: TalkException e); 1894 | 1895 | list getCoinProductsByPgCode( 1896 | 2: PaymentType appStoreCode, 1897 | 3: PaymentPgType pgCode, 1898 | 4: string country, 1899 | 5: string language) throws(1: TalkException e); 1900 | 1901 | CoinHistoryResult getCoinPurchaseHistory( 1902 | 2: CoinHistoryCondition request) throws(1: TalkException e); 1903 | 1904 | CoinHistoryResult getCoinUseAndRefundHistory( 1905 | 2: CoinHistoryCondition request) throws(1: TalkException e); 1906 | 1907 | ProductList getDownloads( 1908 | 2: i64 start, 1909 | 3: i32 size, 1910 | 4: string language, 1911 | 5: string country) throws(1: TalkException e); 1912 | 1913 | ProductList getEventPackages( 1914 | 2: i64 start, 1915 | 3: i32 size, 1916 | 4: string language, 1917 | 5: string country) throws(1: TalkException e); 1918 | 1919 | ProductList getNewlyReleasedPackages( 1920 | 2: i64 start, 1921 | 3: i32 size, 1922 | 4: string language, 1923 | 5: string country) throws(1: TalkException e); 1924 | 1925 | ProductList getPopularPackages( 1926 | 2: i64 start, 1927 | 3: i32 size, 1928 | 4: string language, 1929 | 5: string country) throws(1: TalkException e); 1930 | 1931 | ProductList getPresentsReceived( 1932 | 2: i64 start, 1933 | 3: i32 size, 1934 | 4: string language, 1935 | 5: string country) throws(1: TalkException e); 1936 | 1937 | ProductList getPresentsSent( 1938 | 2: i64 start, 1939 | 3: i32 size, 1940 | 4: string language, 1941 | 5: string country) throws(1: TalkException e); 1942 | 1943 | Product getProduct( 1944 | 2: i64 packageID, 1945 | 3: string language, 1946 | 4: string country) throws(1: TalkException e); 1947 | 1948 | ProductList getProductList( 1949 | 2: list productIdList, 1950 | 3: string language, 1951 | 4: string country) throws(1: TalkException e); 1952 | 1953 | ProductList getProductListWithCarrier( 1954 | 2: list productIdList, 1955 | 3: string language, 1956 | 4: string country, 1957 | 5: string carrierCode) throws(1: TalkException e); 1958 | 1959 | Product getProductWithCarrier( 1960 | 2: i64 packageID, 1961 | 3: string language, 1962 | 4: string country, 1963 | 5: string carrierCode) throws(1: TalkException e); 1964 | 1965 | ProductList getPurchaseHistory( 1966 | 2: i64 start, 1967 | 3: i32 size, 1968 | 4: string language, 1969 | 5: string country) throws(1: TalkException e); 1970 | 1971 | Coin getTotalBalance( 1972 | 2: PaymentType appStoreCode) throws(1: TalkException e); 1973 | 1974 | i64 notifyDownloaded( 1975 | 2: i64 packageId, 1976 | 3: string language) throws(1: TalkException e); 1977 | 1978 | PaymentReservationResult reserveCoinPurchase( 1979 | 2: CoinPurchaseReservation request) throws(1: TalkException e); 1980 | 1981 | PaymentReservationResult reservePayment( 1982 | 2: PaymentReservation paymentReservation) throws(1: TalkException e); 1983 | } 1984 | 1985 | service SnsAdaptorService { 1986 | SnsFriends getSnsFriends( 1987 | 2: SnsIdType snsIdType, 1988 | 3: string snsAccessToken, 1989 | 4: i32 startIdx, 1990 | 5: i32 limit) throws(1: TalkException e); 1991 | 1992 | SnsProfile getSnsMyProfile( 1993 | 2: SnsIdType snsIdType, 1994 | 3: string snsAccessToken) throws(1: TalkException e); 1995 | 1996 | void postSnsInvitationMessage( 1997 | 2: SnsIdType snsIdType, 1998 | 3: string snsAccessToken, 1999 | 4: string toSnsUserId) throws(1: TalkException e); 2000 | } 2001 | 2002 | service TalkService { 2003 | void acceptGroupInvitation( 2004 | 1: i32 reqSeq, 2005 | 2: string groupId) throws(1: TalkException e); 2006 | 2007 | void acceptProximityMatches( 2008 | 2: string sessionId, 2009 | 3: set ids) throws(1: TalkException e); 2010 | 2011 | list acquireCallRoute( 2012 | 2: string to) throws(1: TalkException e); 2013 | 2014 | string acquireCallTicket( 2015 | 2: string to) throws(1: TalkException e); 2016 | 2017 | string acquireEncryptedAccessToken( 2018 | 2: FeatureType featureType) throws(1: TalkException e); 2019 | 2020 | string addSnsId( 2021 | 2: SnsIdType snsIdType, 2022 | 3: string snsAccessToken) throws(1: TalkException e); 2023 | 2024 | void blockContact( 2025 | 1: i32 reqSeq, 2026 | 2: string id) throws(1: TalkException e); 2027 | 2028 | void blockRecommendation( 2029 | 1: i32 reqSeq, 2030 | 2: string id) throws(1: TalkException e); 2031 | 2032 | void cancelGroupInvitation( 2033 | 1: i32 reqSeq, 2034 | 2: string groupId, 2035 | 3: list contactIds) throws(1: TalkException e); 2036 | 2037 | VerificationSessionData changeVerificationMethod( 2038 | 2: string sessionId, 2039 | 3: VerificationMethod method) throws(1: TalkException e); 2040 | 2041 | void clearIdentityCredential() throws(1: TalkException e); 2042 | 2043 | void clearMessageBox( 2044 | 2: string channelId, 2045 | 3: string messageBoxId) throws(1: TalkException e); 2046 | 2047 | void closeProximityMatch( 2048 | 2: string sessionId) throws(1: TalkException e); 2049 | 2050 | map commitSendMessage( 2051 | 1: i32 seq, 2052 | 2: string messageId, 2053 | 3: list receiverMids) throws(1: TalkException e); 2054 | 2055 | map commitSendMessages( 2056 | 1: i32 seq, 2057 | 2: list messageIds, 2058 | 3: list receiverMids) throws(1: TalkException e); 2059 | 2060 | map commitUpdateProfile( 2061 | 1: i32 seq, 2062 | 2: list attrs, 2063 | 3: list receiverMids) throws(1: TalkException e); 2064 | 2065 | void confirmEmail( 2066 | 2: string verifier, 2067 | 3: string pinCode) throws(1: TalkException e); 2068 | 2069 | Group createGroup( 2070 | 1: i32 seq, 2071 | 2: string name, 2072 | 3: list contactIds) throws(1: TalkException e); 2073 | 2074 | string createQrcodeBase64Image( 2075 | 2: string url, 2076 | 3: string characterSet, 2077 | 4: i32 imageSize, 2078 | 5: i32 x, 2079 | 6: i32 y, 2080 | 7: i32 width, 2081 | 8: i32 height) throws(1: TalkException e); 2082 | 2083 | Room createRoom( 2084 | 1: i32 reqSeq, 2085 | 2: list contactIds) throws(1: TalkException e); 2086 | 2087 | string createSession() throws(1: TalkException e); 2088 | 2089 | list fetchAnnouncements( 2090 | 2: i32 lastFetchedIndex) throws(1: TalkException e); 2091 | 2092 | list fetchMessages( 2093 | 2: i64 localTs, 2094 | 3: i32 count) throws(1: TalkException e); 2095 | 2096 | list fetchOperations( 2097 | 2: i64 localRev, 2098 | 3: i32 count) throws(1: TalkException e); 2099 | 2100 | list fetchOps( 2101 | 2: i64 localRev, 2102 | 3: i32 count, 2103 | 4: i64 globalRev, 2104 | 5: i64 individualRev) throws(1: TalkException e); 2105 | 2106 | map findAndAddContactsByEmail( 2107 | 1: i32 reqSeq, 2108 | 2: set emails) throws(1: TalkException e); 2109 | 2110 | map findAndAddContactsByMid( 2111 | 1: i32 reqSeq, 2112 | 2: string mid) throws(1: TalkException e); 2113 | 2114 | map findAndAddContactsByPhone( 2115 | 1: i32 reqSeq, 2116 | 2: set phones) throws(1: TalkException e); 2117 | 2118 | map findAndAddContactsByUserid( 2119 | 1: i32 reqSeq, 2120 | 2: string userid) throws(1: TalkException e); 2121 | 2122 | Contact findContactByUserid( 2123 | 2: string userid) throws(1: TalkException e); 2124 | 2125 | Contact findContactByUserTicket( 2126 | 2: string ticketId) throws(1: TalkException e); 2127 | 2128 | map findContactsByEmail( 2129 | 2: set emails) throws(1: TalkException e); 2130 | 2131 | map findContactsByPhone( 2132 | 2: set phones) throws(1: TalkException e); 2133 | 2134 | SnsIdUserStatus findSnsIdUserStatus( 2135 | 2: SnsIdType snsIdType, 2136 | 3: string snsAccessToken, 2137 | 4: string udidHash) throws(1: TalkException e); 2138 | 2139 | void finishUpdateVerification( 2140 | 2: string sessionId) throws(1: TalkException e); 2141 | 2142 | Ticket generateUserTicket( 2143 | 3: i64 expirationTime, 2144 | 4: i32 maxUseCount) throws(1: TalkException e); 2145 | 2146 | set getAcceptedProximityMatches( 2147 | 2: string sessionId) throws(1: TalkException e); 2148 | 2149 | list getActiveBuddySubscriberIds() throws(1: TalkException e); 2150 | 2151 | list getAllContactIds() throws(1: TalkException e); 2152 | 2153 | AuthQrcode getAuthQrcode( 2154 | 2: bool keepLoggedIn, 2155 | 3: string systemName) throws(1: TalkException e); 2156 | 2157 | list getBlockedContactIds() throws(1: TalkException e); 2158 | 2159 | list getBlockedContactIdsByRange( 2160 | 2: i32 start, 2161 | 3: i32 count) throws(1: TalkException e); 2162 | 2163 | list getBlockedRecommendationIds() throws(1: TalkException e); 2164 | 2165 | list getBuddyBlockerIds() throws(1: TalkException e); 2166 | 2167 | Geolocation getBuddyLocation( 2168 | 2: string mid, 2169 | 3: i32 index) throws(1: TalkException e); 2170 | 2171 | list getCompactContactsModifiedSince( 2172 | 2: i64 timestamp) throws(1: TalkException e); 2173 | 2174 | Group getCompactGroup( 2175 | 2: string groupId) throws(1: TalkException e); 2176 | 2177 | Room getCompactRoom( 2178 | 2: string roomId) throws(1: TalkException e); 2179 | 2180 | Contact getContact( 2181 | 2: string id) throws(1: TalkException e); 2182 | 2183 | list getContacts( 2184 | 2: list ids) throws(1: TalkException e); 2185 | 2186 | string getCountryWithRequestIp() throws(1: TalkException e); 2187 | 2188 | list getFavoriteMids() throws(1: TalkException e); 2189 | 2190 | Group getGroup( 2191 | 2: string groupId) throws(1: TalkException e); 2192 | 2193 | list getGroupIdsInvited() throws(1: TalkException e); 2194 | 2195 | list getGroupIdsJoined() throws(1: TalkException e); 2196 | 2197 | list getGroups( 2198 | 2: list groupIds) throws(1: TalkException e); 2199 | 2200 | list getHiddenContactMids() throws(1: TalkException e); 2201 | 2202 | string getIdentityIdentifier() throws(1: TalkException e); 2203 | 2204 | i32 getLastAnnouncementIndex() throws(1: TalkException e); 2205 | 2206 | i64 getLastOpRevision() throws(1: TalkException e); 2207 | 2208 | TMessageBox getMessageBox( 2209 | 2: string channelId, 2210 | 3: string messageBoxId, 2211 | 4: i32 lastMessagesCount) throws(1: TalkException e); 2212 | 2213 | TMessageBoxWrapUp getMessageBoxCompactWrapUp( 2214 | 2: string mid) throws(1: TalkException e); 2215 | 2216 | TMessageBoxWrapUpResponse getMessageBoxCompactWrapUpList( 2217 | 2: i32 start, 2218 | 3: i32 messageBoxCount) throws(1: TalkException e); 2219 | 2220 | list getMessageBoxList( 2221 | 2: string channelId, 2222 | 3: i32 lastMessagesCount) throws(1: TalkException e); 2223 | 2224 | list getMessageBoxListByStatus( 2225 | 2: string channelId, 2226 | 3: i32 lastMessagesCount, 2227 | 4: i32 status) throws(1: TalkException e); 2228 | 2229 | TMessageBoxWrapUp getMessageBoxWrapUp( 2230 | 2: string mid) throws(1: TalkException e); 2231 | 2232 | TMessageBoxWrapUpResponse getMessageBoxWrapUpList( 2233 | 2: i32 start, 2234 | 3: i32 messageBoxCount) throws(1: TalkException e); 2235 | 2236 | list getMessagesBySequenceNumber( 2237 | 2: string channelId, 2238 | 3: string messageBoxId, 2239 | 4: i64 startSeq, 2240 | 5: i64 endSeq) throws(1: TalkException e); 2241 | 2242 | list getNextMessages( 2243 | 2: string messageBoxId, 2244 | 3: i64 startSeq, 2245 | 4: i32 messagesCount) throws(1: TalkException e); 2246 | 2247 | list getNotificationPolicy( 2248 | 2: CarrierCode carrier) throws(1: TalkException e); 2249 | 2250 | list getPreviousMessages( 2251 | 2: string messageBoxId, 2252 | 3: i64 endSeq, 2253 | 4: i32 messagesCount) throws(1: TalkException e); 2254 | 2255 | Profile getProfile() throws(1: TalkException e); 2256 | 2257 | ProximityMatchCandidateResult getProximityMatchCandidateList( 2258 | 2: string sessionId) throws(1: TalkException e); 2259 | 2260 | set getProximityMatchCandidates( 2261 | 2: string sessionId) throws(1: TalkException e); 2262 | 2263 | list getRecentMessages( 2264 | 2: string messageBoxId, 2265 | 3: i32 messagesCount) throws(1: TalkException e); 2266 | 2267 | list getRecommendationIds() throws(1: TalkException e); 2268 | 2269 | Room getRoom( 2270 | 2: string roomId) throws(1: TalkException e); 2271 | 2272 | RSAKey getRSAKeyInfo( 2273 | 2: IdentityProvider provider) throws(1: TalkException e); 2274 | 2275 | i64 getServerTime() throws(1: TalkException e); 2276 | 2277 | list getSessions() throws(1: TalkException e); 2278 | 2279 | Settings getSettings() throws(1: TalkException e); 2280 | 2281 | Settings getSettingsAttributes( 2282 | 2: i32 attrBitset) throws(1: TalkException e); 2283 | 2284 | SystemConfiguration getSystemConfiguration() throws(1: TalkException e); 2285 | 2286 | Ticket getUserTicket() throws(1: TalkException e); 2287 | 2288 | WapInvitation getWapInvitation( 2289 | 2: string invitationHash) throws(1: TalkException e); 2290 | 2291 | void invalidateUserTicket() throws(1: TalkException e); 2292 | 2293 | void inviteFriendsBySms( 2294 | 2: list phoneNumberList) throws(1: TalkException e); 2295 | 2296 | void inviteIntoGroup( 2297 | 1: i32 reqSeq, 2298 | 2: string groupId, 2299 | 3: list contactIds) throws(1: TalkException e); 2300 | 2301 | void inviteIntoRoom( 2302 | 1: i32 reqSeq, 2303 | 2: string roomId, 2304 | 3: list contactIds) throws(1: TalkException e); 2305 | 2306 | void inviteViaEmail( 2307 | 1: i32 reqSeq, 2308 | 2: string email, 2309 | 3: string name) throws(1: TalkException e); 2310 | 2311 | bool isIdentityIdentifierAvailable( 2312 | 3: IdentityProvider provider, 2313 | 2: string identifier) throws(1: TalkException e); 2314 | 2315 | bool isUseridAvailable( 2316 | 2: string userid) throws(1: TalkException e); 2317 | 2318 | void kickoutFromGroup( 2319 | 1: i32 reqSeq, 2320 | 2: string groupId, 2321 | 3: list contactIds) throws(1: TalkException e); 2322 | 2323 | void leaveGroup( 2324 | 1: i32 reqSeq, 2325 | 2: string groupId) throws(1: TalkException e); 2326 | 2327 | void leaveRoom( 2328 | 1: i32 reqSeq, 2329 | 2: string roomId) throws(1: TalkException e); 2330 | 2331 | string loginWithIdentityCredential( 2332 | 8: IdentityProvider identityProvider, 2333 | 3: string identifier, 2334 | 4: string password, 2335 | 5: bool keepLoggedIn, 2336 | 6: string accessLocation, 2337 | 7: string systemName, 2338 | 9: string certificate) throws(1: TalkException e); 2339 | 2340 | LoginResult loginWithIdentityCredentialForCertificate( 2341 | 8: IdentityProvider identityProvider, 2342 | 3: string identifier, 2343 | 4: string password, 2344 | 5: bool keepLoggedIn, 2345 | 6: string accessLocation, 2346 | 7: string systemName, 2347 | 9: string certificate) throws(1: TalkException e); 2348 | 2349 | string loginWithVerifier( 2350 | 3: string verifier) throws(1: TalkException e); 2351 | 2352 | LoginResult loginWithVerifierForCerificate( 2353 | 3: string verifier) throws(1: TalkException e); 2354 | 2355 | LoginResult loginWithVerifierForCertificate( 2356 | 3: string verifier) throws(1: TalkException e); 2357 | 2358 | void logout() throws(1: TalkException e); 2359 | 2360 | void logoutSession( 2361 | 2: string tokenKey) throws(1: TalkException e); 2362 | 2363 | void noop() throws(1: TalkException e); 2364 | 2365 | void notifiedRedirect( 2366 | 2: map paramMap) throws(1: TalkException e); 2367 | 2368 | map notifyBuddyOnAir( 2369 | 1: i32 seq, 2370 | 2: list receiverMids) throws(1: TalkException e); 2371 | 2372 | void notifyIndividualEvent( 2373 | 2: NotificationStatus notificationStatus, 2374 | 3: list receiverMids) throws(1: TalkException e); 2375 | 2376 | void notifyInstalled( 2377 | 2: string udidHash, 2378 | 3: string applicationTypeWithExtensions); 2379 | 2380 | void notifyRegistrationComplete( 2381 | 2: string udidHash, 2382 | 3: string applicationTypeWithExtensions); 2383 | 2384 | void notifySleep( 2385 | 2: i64 lastRev, 2386 | 3: i32 badge) throws(1: TalkException e); 2387 | 2388 | void notifyUpdated( 2389 | 2: i64 lastRev, 2390 | 3: DeviceInfo deviceInfo) throws(1: TalkException e); 2391 | 2392 | string openProximityMatch( 2393 | 2: Location location) throws(1: TalkException e); 2394 | 2395 | string registerBuddyUser( 2396 | 2: string buddyId, 2397 | 3: string registrarPassword) throws(1: TalkException e); 2398 | 2399 | void registerBuddyUserid( 2400 | 2: i32 seq, 2401 | 3: string userid) throws(1: TalkException e); 2402 | 2403 | string registerDevice( 2404 | 2: string sessionId) throws(1: TalkException e); 2405 | 2406 | string registerDeviceWithIdentityCredential( 2407 | 2: string sessionId, 2408 | 5: IdentityProvider provider, 2409 | 3: string identifier, 2410 | 4: string verifier) throws(1: TalkException e); 2411 | 2412 | string registerDeviceWithoutPhoneNumber( 2413 | 2: string region, 2414 | 3: string udidHash, 2415 | 4: DeviceInfo deviceInfo) throws(1: TalkException e); 2416 | 2417 | string registerDeviceWithoutPhoneNumberWithIdentityCredential( 2418 | 2: string region, 2419 | 3: string udidHash, 2420 | 4: DeviceInfo deviceInfo, 2421 | 5: IdentityProvider provider, 2422 | 6: string identifier, 2423 | 7: string verifier, 2424 | 8: string mid) throws(1: TalkException e); 2425 | 2426 | bool registerUserid( 2427 | 1: i32 reqSeq, 2428 | 2: string userid) throws(1: TalkException e); 2429 | 2430 | string registerWapDevice( 2431 | 2: string invitationHash, 2432 | 3: string guidHash, 2433 | 4: string email, 2434 | 5: DeviceInfo deviceInfo) throws(1: TalkException e); 2435 | 2436 | string registerWithExistingSnsIdAndIdentityCredential( 2437 | 2: IdentityCredential identityCredential, 2438 | 3: string region, 2439 | 4: string udidHash, 2440 | 5: DeviceInfo deviceInfo) throws(1: TalkException e); 2441 | 2442 | RegisterWithSnsIdResult registerWithSnsId( 2443 | 2: SnsIdType snsIdType, 2444 | 3: string snsAccessToken, 2445 | 4: string region, 2446 | 5: string udidHash, 2447 | 6: DeviceInfo deviceInfo, 2448 | 7: string mid) throws(1: TalkException e); 2449 | 2450 | string registerWithSnsIdAndIdentityCredential( 2451 | 2: SnsIdType snsIdType, 2452 | 3: string snsAccessToken, 2453 | 4: IdentityCredential identityCredential, 2454 | 5: string region, 2455 | 6: string udidHash, 2456 | 7: DeviceInfo deviceInfo) throws(1: TalkException e); 2457 | 2458 | string reissueDeviceCredential() throws(1: TalkException e); 2459 | 2460 | string reissueUserTicket( 2461 | 3: i64 expirationTime, 2462 | 4: i32 maxUseCount) throws(1: TalkException e); 2463 | 2464 | void rejectGroupInvitation( 2465 | 1: i32 reqSeq, 2466 | 2: string groupId) throws(1: TalkException e); 2467 | 2468 | void releaseSession() throws(1: TalkException e); 2469 | 2470 | void removeAllMessages( 2471 | 1: i32 seq, 2472 | 2: string lastMessageId) throws(1: TalkException e); 2473 | 2474 | void removeBuddyLocation( 2475 | 2: string mid, 2476 | 3: i32 index) throws(1: TalkException e); 2477 | 2478 | bool removeMessage( 2479 | 2: string messageId) throws(1: TalkException e); 2480 | 2481 | bool removeMessageFromMyHome( 2482 | 2: string messageId) throws(1: TalkException e); 2483 | 2484 | string removeSnsId( 2485 | 2: SnsIdType snsIdType) throws(1: TalkException e); 2486 | 2487 | void report( 2488 | 2: i64 syncOpRevision, 2489 | 3: SyncCategory category, 2490 | 4: string report) throws(1: TalkException e); 2491 | 2492 | list reportContacts( 2493 | 2: i64 syncOpRevision, 2494 | 3: SyncCategory category, 2495 | 4: list contactReports, 2496 | 5: SyncActionType actionType) throws(1: TalkException e); 2497 | 2498 | void reportGroups( 2499 | 2: i64 syncOpRevision, 2500 | 3: list groups) throws(1: TalkException e); 2501 | 2502 | void reportProfile( 2503 | 2: i64 syncOpRevision, 2504 | 3: Profile profile) throws(1: TalkException e); 2505 | 2506 | void reportRooms( 2507 | 2: i64 syncOpRevision, 2508 | 3: list rooms) throws(1: TalkException e); 2509 | 2510 | void reportSettings( 2511 | 2: i64 syncOpRevision, 2512 | 3: Settings settings) throws(1: TalkException e); 2513 | 2514 | void reportSpammer( 2515 | 2: string spammerMid, 2516 | 3: list spammerReasons, 2517 | 4: list spamMessageIds) throws(1: TalkException e); 2518 | 2519 | void requestAccountPasswordReset( 2520 | 4: IdentityProvider provider, 2521 | 2: string identifier, 2522 | 5: string locale) throws(1: TalkException e); 2523 | 2524 | EmailConfirmationSession requestEmailConfirmation( 2525 | 2: EmailConfirmation emailConfirmation) throws(1: TalkException e); 2526 | 2527 | void requestIdentityUnbind( 2528 | 4: IdentityProvider provider, 2529 | 2: string identifier) throws(1: TalkException e); 2530 | 2531 | EmailConfirmationSession resendEmailConfirmation( 2532 | 2: string verifier) throws(1: TalkException e); 2533 | 2534 | void resendPinCode( 2535 | 2: string sessionId) throws(1: TalkException e); 2536 | 2537 | void resendPinCodeBySMS( 2538 | 2: string sessionId) throws(1: TalkException e); 2539 | 2540 | void sendChatChecked( 2541 | 1: i32 seq, 2542 | 2: string consumer, 2543 | 3: string lastMessageId) throws(1: TalkException e); 2544 | 2545 | void sendChatRemoved( 2546 | 1: i32 seq, 2547 | 2: string consumer, 2548 | 3: string lastMessageId) throws(1: TalkException e); 2549 | 2550 | map sendContentPreviewUpdated( 2551 | 1: i32 esq, 2552 | 2: string messageId, 2553 | 3: list receiverMids) throws(1: TalkException e); 2554 | 2555 | void sendContentReceipt( 2556 | 1: i32 seq, 2557 | 2: string consumer, 2558 | 3: string messageId) throws(1: TalkException e); 2559 | 2560 | void sendDummyPush() throws(1: TalkException e); 2561 | 2562 | Message sendEvent( 2563 | 1: i32 seq, 2564 | 2: Message message) throws(1: TalkException e); 2565 | 2566 | Message sendMessage( 2567 | 1: i32 seq, 2568 | 2: Message message) throws(1: TalkException e); 2569 | 2570 | void sendMessageIgnored( 2571 | 1: i32 seq, 2572 | 2: string consumer, 2573 | 3: list messageIds) throws(1: TalkException e); 2574 | 2575 | void sendMessageReceipt( 2576 | 1: i32 seq, 2577 | 2: string consumer, 2578 | 3: list messageIds) throws(1: TalkException e); 2579 | 2580 | Message sendMessageToMyHome( 2581 | 1: i32 seq, 2582 | 2: Message message) throws(1: TalkException e); 2583 | 2584 | void setBuddyLocation( 2585 | 2: string mid, 2586 | 3: i32 index, 2587 | 4: Geolocation location) throws(1: TalkException e); 2588 | 2589 | void setIdentityCredential( 2590 | 4: IdentityProvider provider, 2591 | 2: string identifier, 2592 | 3: string verifier) throws(1: TalkException e); 2593 | 2594 | void setNotificationsEnabled( 2595 | 1: i32 reqSeq, 2596 | 2: MIDType type, 2597 | 3: string target, 2598 | 4: bool enablement) throws(1: TalkException e); 2599 | 2600 | VerificationSessionData startUpdateVerification( 2601 | 2: string region, 2602 | 3: CarrierCode carrier, 2603 | 4: string phone, 2604 | 5: string udidHash, 2605 | 6: DeviceInfo deviceInfo, 2606 | 7: string networkCode, 2607 | 8: string locale) throws(1: TalkException e); 2608 | 2609 | VerificationSessionData startVerification( 2610 | 2: string region, 2611 | 3: CarrierCode carrier, 2612 | 4: string phone, 2613 | 5: string udidHash, 2614 | 6: DeviceInfo deviceInfo, 2615 | 7: string networkCode, 2616 | 8: string mid, 2617 | 9: string locale) throws(1: TalkException e); 2618 | 2619 | void storeUpdateProfileAttribute( 2620 | 1: i32 seq, 2621 | 2: ProfileAttribute profileAttribute, 2622 | 3: string value) throws(1: TalkException e); 2623 | 2624 | list syncContactBySnsIds( 2625 | 1: i32 reqSeq, 2626 | 2: list modifications) throws(1: TalkException e); 2627 | 2628 | map syncContacts( 2629 | 1: i32 reqSeq, 2630 | 2: list localContacts) throws(1: TalkException e); 2631 | 2632 | Message trySendMessage( 2633 | 1: i32 seq, 2634 | 2: Message message) throws(1: TalkException e); 2635 | 2636 | void unblockContact( 2637 | 1: i32 reqSeq, 2638 | 2: string id) throws(1: TalkException e); 2639 | 2640 | void unblockRecommendation( 2641 | 1: i32 reqSeq, 2642 | 2: string id) throws(1: TalkException e); 2643 | 2644 | string unregisterUserAndDevice() throws(1: TalkException e); 2645 | 2646 | void updateApnsDeviceToken( 2647 | 2: binary apnsDeviceToken) throws(1: TalkException e); 2648 | 2649 | void updateBuddySetting( 2650 | 2: string key, 2651 | 3: string value) throws(1: TalkException e); 2652 | 2653 | void updateC2DMRegistrationId( 2654 | 2: string registrationId) throws(1: TalkException e); 2655 | 2656 | void updateContactSetting( 2657 | 1: i32 reqSeq, 2658 | 2: string mid, 2659 | 3: ContactSetting flag, 2660 | 4: string value) throws(1: TalkException e); 2661 | 2662 | void updateCustomModeSettings( 2663 | 2: CustomMode customMode, 2664 | 3: map paramMap) throws(1: TalkException e); 2665 | 2666 | void updateDeviceInfo( 2667 | 2: string deviceUid, 2668 | 3: DeviceInfo deviceInfo) throws(1: TalkException e); 2669 | 2670 | void updateGroup( 2671 | 1: i32 reqSeq, 2672 | 2: Group group) throws(1: TalkException e); 2673 | 2674 | void updateNotificationToken( 2675 | 3: NotificationType type, 2676 | 2: string token) throws(1: TalkException e); 2677 | 2678 | void updateNotificationTokenWithBytes( 2679 | 3: NotificationType type, 2680 | 2: binary token) throws(1: TalkException e); 2681 | 2682 | void updateProfile( 2683 | 1: i32 reqSeq, 2684 | 2: Profile profile) throws(1: TalkException e); 2685 | 2686 | void updateProfileAttribute( 2687 | 1: i32 reqSeq, 2688 | 2: ProfileAttribute attr, 2689 | 3: string value) throws(1: TalkException e); 2690 | 2691 | void updateRegion( 2692 | 2: string region) throws(1: TalkException e); 2693 | 2694 | void updateSettings( 2695 | 1: i32 reqSeq, 2696 | 2: Settings settings) throws(1: TalkException e); 2697 | 2698 | i32 updateSettings2( 2699 | 1: i32 reqSeq, 2700 | 2: Settings settings) throws(1: TalkException e); 2701 | 2702 | void updateSettingsAttribute( 2703 | 1: i32 reqSeq, 2704 | 2: SettingsAttribute attr, 2705 | 3: string value) throws(1: TalkException e); 2706 | 2707 | i32 updateSettingsAttributes( 2708 | 1: i32 reqSeq, 2709 | 2: i32 attrBitset, 2710 | 3: Settings settings) throws(1: TalkException e); 2711 | 2712 | void verifyIdentityCredential( 2713 | 8: IdentityProvider identityProvider, 2714 | 3: string identifier, 2715 | 4: string password) throws(1: TalkException e); 2716 | 2717 | UserAuthStatus verifyIdentityCredentialWithResult( 2718 | 2: IdentityCredential identityCredential) throws(1: TalkException e); 2719 | 2720 | VerificationResult verifyPhone( 2721 | 2: string sessionId, 2722 | 3: string pinCode, 2723 | 4: string udidHash) throws(1: TalkException e); 2724 | 2725 | string verifyQrcode( 2726 | 2: string verifier, 2727 | 3: string pinCode) throws(1: TalkException e); 2728 | } 2729 | 2730 | service UniversalNotificationService { 2731 | void notify( 2732 | 2: GlobalEvent event) throws(1: UniversalNotificationServiceException e); 2733 | } 2734 | --------------------------------------------------------------------------------