# SMS >**Note:** > >- The APIs of this module are supported since API version 6. > >- APIs marked with 7+ are supported since API version 7. ## Modules to Import ``` import sms from '@ohos.telephony.sms'; ``` ## sms.createMessage createMessage\(pdu: Array, specification: string, callback: AsyncCallback\): void Creates an SMS message instance based on the protocol data unit (PDU) and the specified SMS protocol. This function uses an asynchronous callback to return the result. - Parameters | Name| Type| Mandatory| Description| | ------------- | -------------------------------------------------- | ---- | ------------------------------------------------------------ | | pdu | Array<number> | Yes| Protocol data unit, which is obtained from the received SMS message.| | specification | string | Yes| SMS protocol type. The options are as follows:
- **3gpp**: GSM/UMTS/LTE SMS
- **3gpp2**: CDMA SMS| | callback | AsyncCallback<[ShortMessage](#ShortMessage)> | Yes| Callback used to return the result.| - Example ``` let specification = '3gpp'; let pdu = [0x08, 0x91, ...]; sms.createMessage(pdu, specification, (err, data) => { console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); }); ``` ## sms.createMessage createMessage\(pdu: Array, specification: string\): Promise Creates an SMS message instance based on the PDU and the specified SMS protocol. This function uses a promise to return the result. - Parameters | Name| Type| Mandatory| Description| | ------------- | ------------------- | ---- | ------------------------------------------------------------ | | pdu | Array<number> | Yes| Protocol data unit, which is obtained from the received SMS message.| | specification | string | Yes| SMS protocol type. The options are as follows:
- **3gpp**: GSM/UMTS/LTE SMS
- **3gpp2**: CDMA SMS| - Return values | Type| Description| | -------------------------------------------- | --------------------------------- | | Promise<[ShortMessage](#ShortMessage)> | Promise used to return the result.| - Example ``` let specification = '3gpp'; let pdu = [0x08, 0x91, ...]; let promise = sms.createMessage(pdu, specification); promise.then(data => { console.log(`createMessage success, promise: data->${JSON.stringify(data)}`); }).catch(err => { console.error(`createMessage fail, promise: err->${JSON.stringify(err)}`); }); ``` ## sms.sendMessage sendMessage(options: SendMessageOptions): void Sends an SMS message. Before using this API, you must declare the **ohos.permission.SEND_MESSAGES** permission. - Parameters | Name| Type| Mandatory| Description| | ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | options | [SendMessageOptions](#SendMessageOptions) | Yes| Options (including the callback) for sending an SMS message. For details, see [SendMessageOptions](#SendMessageOptions).| - Example ``` let sendCallback = function (err, data) { console.log(`sendCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); } let deliveryCallback = function (err, data) { console.log(`deliveryCallback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); } let slotId = 0; let content ='SMS message content'; let destinationHost = '+861xxxxxxxxxx'; let serviceCenter = '+861xxxxxxxxxx'; let destinationPort = 1000; let options = {slotId, content, destinationHost, serviceCenter, destinationPort, sendCallback, deliveryCallback}; sms.sendMessage(options); ``` ## sms.getDefaultSmsSlotId7+ getDefaultSmsSlotId\(callback: AsyncCallback\): void Obtains the default slot of the SIM card used to send SMS messages. This function uses an asynchronous callback to return the result. - Parameters | Name| Type| Mandatory| Description| | -------- | --------------------------- | ---- | ---------------------------------------- | | callback | AsyncCallback<number> | Yes| Callback used to return the result.
- **0**: slot 1
- **1**: slot 2| - Example ``` sms.getDefaultSmsSlotId((err, data) => { console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); }); ``` ## sms.getDefaultSmsSlotId7+ getDefaultSmsSlotId\(\): Promise Obtains the default slot of the SIM card used to send SMS messages. This function uses a promise to return the result. - Return values | Type| Description| | --------------- | ------------------------------------------------------------ | | Promise | Promise used to return the result.
- **0**: slot 1
- **1**: slot 2| - Example ``` let promise = call.getDefaultSmsSlotId(); promise.then(data => { console.log(`getDefaultSmsSlotId success, promise: data->${JSON.stringify(data)}`); }).catch(err => { console.error(`getDefaultSmsSlotId fail, promise: err->${JSON.stringify(err)}`); }); ``` ## sms.setSmscAddr7+ setSmscAddr\(slotId: number, smscAddr: string, callback: AsyncCallback\): void Sets the short message service center (SMSC) address. This function uses an asynchronous callback to return the result. Before using this API, you must declare the **ohos.permission.SET\_TELEPHONY\_STATE** permission. - Parameters | Name| Type| Mandatory| Description| | -------- | ------------------------- | ---- | ----------------------------------------- | | slotId | number | Yes| SIM card slot ID. The options are as follows:
- **0**: slot 1
- **1**: slot 2| | smscAddr | string | Yes| SMSC address. | | callback | AsyncCallback<void> | Yes| Callback used to return the result.| - Example ``` let slotId = 0; let smscAddr = '+861xxxxxxxxxx'; sms.setSmscAddr(slotId, smscAddr, (err,data) => { console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); }); ``` ## sms.setSmscAddr7+ setSmscAddr\(slotId: number, smscAddr: string\): Promise Sets the SMSC address. This function uses a promise to return the result. Before using this API, you must declare the **ohos.permission.SET\_TELEPHONY\_STATE** permission. - Parameters | Name| Type| Mandatory| Description| | -------- | ------ | ---- | ----------------------------------------- | | slotId | number | Yes| SIM card slot ID. The options are as follows:
- **0**: slot 1
- **1**: slot 2| | smscAddr | string | Yes| SMSC address.| - Return values | Type| Description| | ------------------- | ------------------------------- | | Promise<void> | Promise used to return the result.| - Example ``` let slotId = 0; let smscAddr = '+861xxxxxxxxxx'; let promise = sms.setSmscAddr(slotId, smscAddr); promise.then(data => { console.log(`setSmscAddr success, promise: data->${JSON.stringify(data)}`); }).catch(err => { console.error(`setSmscAddr fail, promise: err->${JSON.stringify(err)}`); }); ``` ## sms.getSmscAddr7+ getSmscAddr\(slotId: number, callback: AsyncCallback\): void Obtains the SMSC address. This function uses an asynchronous callback to return the result. Before using this API, you must declare the **ohos.permission.GET\_TELEPHONY\_STATE** permission. - Parameters | Name| Type| Mandatory| Description| | -------- | --------------------------- | ---- | ----------------------------------------- | | slotId | number | Yes| SIM card slot ID. The options are as follows:
- **0**: slot 1
- **1**: slot 2| | callback | AsyncCallback<string> | Yes| Callback used to return the result.| - Example ``` let slotId = 0; sms.getSmscAddr(slotId, (err, data) => { console.log(`callback: err->${JSON.stringify(err)}, data->${JSON.stringify(data)}`); }); ``` ## sms.getSmscAddr7+ getSmscAddr\(slotId: number\): Promise Obtains the SMSC address. This function uses a promise to return the result. Before using this API, you must declare the **ohos.permission.GET\_TELEPHONY\_STATE** permission. - Parameters | Name| Type| Mandatory| Description| | ------ | ------ | ---- | ----------------------------------------- | | slotId | number | Yes| SIM card slot ID. The options are as follows:
- **0**: slot 1
- **1**: slot 2| - Return values | Type| Description| | --------------------- | --------------------------------------------- | | Promise<string> | Promise used to return the result.| - Example ``` let slotId = 0; let promise = sms.getSmscAddr(slotId); promise.then(data => { console.log(`getSmscAddr success, promise: data->${JSON.stringify(data)}`); }).catch(err => { console.error(`getSmscAddr fail, promise: err->${JSON.stringify(err)}`); }); ``` ## ShortMessage Defines an SMS message instance. | Variable| Type| Description| | ------------------------ | --------------------------------------- | ------------------------------------------------------------ | | emailAddress | string | Email address.| | emailMessageBody | string | Email body.| | hasReplyPath | boolean | Whether the received SMS contains **TP-Reply-Path**. The default value is **false**.
**TP-Reply-Path**: the path in which the mobile phone can reply to the SMS message through the originating SMSC.| | isEmailMessage | boolean | Whether the received SMS message is an email.| | isReplaceMessage | boolean | Whether the received SMS message is a **replace short message**. The default value is **false**.
For details, see section 9.2.3.9 in **3GPP TS 23.040**.| | isSmsStatusReportMessage | boolean | Whether the received SMS message is an SMS delivery status report. The default value is **false**.
SMS delivery status report: a message sent from the SMSC to show the current status of the SMS message you delivered.| | messageClass | [ShortMessageClass](#ShortMessageClass) | SMS message type.| | pdu | Array<number> | PDU in the SMS message.| |protocolId|number|Protocol identifier used for delivering the SMS message.| |scAddress|string|SMSC address.| |scTimestamp|number|SMSC timestamp.| |status|number|SMS message status sent by the SMSC in the **SMS-STATUS-REPORT** message.| |userRawData|Array<number>|User data excluding the data header.| |visibleMessageBody|string|SMS message body.| |visibleRawAddress|string|Sender address to be displayed on the UI.| ## ShortMessageClass Enumerates SMS message types. | Variable| Value| Description| | ---------------- | ---- | ---------------------------------------- | | UNKNOWN | 0 | Unknown type.| | INSTANT_MESSAGE | 1 | Instant message, which is displayed immediately after being received.| | OPTIONAL_MESSAGE | 2 | Message stored in the device or SIM card.| | SIM_MESSAGE | 3 | Message containing SIM card information, which is to be stored in the SIM card.| | FORWARD_MESSAGE | 4 | Message to be forwarded to another device.| ## SendMessageOptions Provides the options (including callbacks) for sending an SMS message. For example, you can specify the SMS message type by the optional parameter **content**. | Name| Type| Mandatory| Description| | ---------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ | | slotId | number | Yes| Slot ID of the SIM card used for sending SMS messages:
- **0**: slot 1
- **1**: slot 2| | destinationHost | string | Yes| Destination address of the SMS message.| | content | string \| Array<number> | Yes| SMS message type. If the content is comprised of character strings, the SMS message is a text message. If the content is comprised of byte arrays, the SMS message is a data message.| | serviceCenter | string | No| SMSC address. By default, the SMSC address in the SIM card is used.| | destinationPort | number | No| Destination port of the SMS message. This parameter is mandatory only for a data message. | | sendCallback | AsyncCallback<[ISendShortMessageCallback](#ISendShortMessageCallback)> | No| Callback used to return the SMS message sending result. For details, see [ISendShortMessageCallback](#ISendShortMessageCallback).| | deliveryCallback | AsyncCallback<[IDeliveryShortMessageCallback](#IDeliveryShortMessageCallback)> | No| Callback used to return the SMS message delivery report. For details, see [IDeliveryShortMessageCallback](#IDeliveryShortMessageCallback).| ## ISendShortMessageCallback Provides the callback for the SMS message delivery report. It consists of three parts: SMS message sending result, URI for storing the sent SMS message, and whether the SMS message is the last part of a long SMS message. | Name| Type| Mandatory| Description| | ---------- | ------------------------------- | ---- | ------------------------------------------------------------ | | isLastPart | boolean | No| Whether this SMS message is the last part of a long SMS message. The value **true** indicates that this SMS message is the last part of a long SMS message, and value **false** indicates the opposite. The default value is **false**.| | result | [SendSmsResult](#SendSmsResult) | Yes| SMS message sending result.| | url | string | Yes| URI for storing sent SMS messages.| ## IDeliveryShortMessageCallback Provides the callback for the SMS message delivery report. | Name| Type| Mandatory| Description| | ------ | ------------------- | ---- | -------------- | | pdu | Array<number> | Yes| SMS message delivery report.| ## SendSmsResult Enumerates SMS message sending results. | Name| Value| Description| | ------------------------------------ | ---- | ------------------------------------------------------ | | SEND_SMS_SUCCESS | 0 | The SMS message is sent successfully.| | SEND_SMS_FAILURE_UNKNOWN | 1 | Failed to send the SMS message due to unknown reasons.| | SEND_SMS_FAILURE_RADIO_OFF | 2 | Failed to send the SMS message because the modem is shut down.| | SEND_SMS_FAILURE_SERVICE_UNAVAILABLE | 3 | Failed to send the SMS message because the network is unavailable or SMS message sending or receiving is not supported.|