Back to blog Connectivity

A2P SMS Integration Acceptance Testing: Validate Before Production

A checklist for verifying connectivity, formats, responses, and callbacks—and for separating technical acceptance from delivery monitoring before enabling A2P SMS traffic.

Technical team reviewing an acceptance test checklist for an A2P SMS integration

What Acceptance Testing Validates—and What It Does Not

Acceptance testing checks that an integration exchanges requests and responses as agreed: it establishes a connection, authenticates, accepts or rejects submissions in an interpretable way, and processes the expected follow-up events. Its results apply only to the cases, destinations, senders, content, and environment that were tested.

It is not a guarantee of future delivery and does not demonstrate behavior across other operators, destinations, or conditions. In SMPP, the submit_sm response reports the result of the request; delivery may occur later. Record technical acceptance, the message’s subsequent status, and any available confirmation separately.

  • Define which components and behaviors acceptance covers: connectivity, authentication, format, responses, correlation, and callbacks.
  • Note what falls outside the scope, such as delivery to untested destinations or performance under loads different from those tested.
  • Agree on what “pass” means for each test case before testing begins.
What Acceptance Testing Validates—and What It Does Not

Define the Scope Before Sending Messages

Prepare a plan shared by engineering, operations, and the parties responsible for the connection. Specify the test environment, authorized destinations, senders, and approved content, as well as who runs each test case and who interprets the results. Use only numbers and messages whose use is authorized and complies with applicable rules.

Also document the expected technical conditions: protocol, supported parameters, address format, encoding, agreed limits, and the mechanism for receiving responses or events. Use international number formats consistently with the defined scope; do not assume that every string resembling a phone number will be valid for the route.

  • Set the environment, test window, permitted destinations, and senders.
  • Approve the content and confirm that the messages are legitimate and authorized.
  • Assign responsibility for sending, monitoring, error analysis, and the acceptance decision.
  • Record configuration versions and relevant parameters so the test can be reproduced.
Define the Scope Before Sending Messages

Check Connectivity, Authentication, Format, and Responses

For HTTP, check that the request reaches the intended endpoint and that the client interprets both the status code and the response body. HTTP status classes describe the result of the HTTP request: a 2xx response alone does not prove that the SMS reached the handset. Also verify the response format and how acceptance or rejection is represented under the technical contract.

For SMPP, validate session establishment and bind, PDU exchange, responses, and connection maintenance. enquire_link can be used to check communication at the application level. The submit_sm_resp response includes the result of the request and, where applicable, an SMSC message identifier; do not confuse it with a later delivery report.

Test the formats the integration will use: destination address, source address, encoding, and message length. The SMSC may reject or truncate content that exceeds network or implementation limits. Also check that rejections are logged and classified; in SMPP, command_status communicates the result of the request.

  • Test valid credentials and, in a controlled environment, how invalid authentication is handled.
  • Check valid and invalid address formats, encoding, and message lengths within the agreed scope.
  • Verify acceptance and rejection responses without interpreting them as proof of delivery.
  • For SMPP, validate the bind, associated responses, and session maintenance, including configured timers.

Verify Correlation and Callback Handling

Each submission and subsequent event must be unambiguously associated within the application. In SMPP, sequence_number links a response to its request and must be preserved in the response; responses may also arrive out of order. Do not rely on arrival order alone for correlation.

Define how duplicate, late, and out-of-order callbacks or receipts are handled. Deduplication is an implementation decision: do not assume the protocol guarantees that an event will be delivered only once. Record identifiers, the status received, any available timestamp, and the processing outcome, while preventing repeated events from causing unwanted side effects.

  • Test out-of-order responses and confirm that each is associated with the correct submission.
  • Send or simulate repeated events and check the agreed deduplication policy.
  • Validate how the system handles late or missing callbacks, or callbacks with identifiers that cannot be correlated.
  • Retain enough traces to reconstruct the sequence without exposing credentials.

Design Controlled Cases for Successes, Rejections, and Uncertain States

A useful plan goes beyond the happy path. Include an accepted request, a request rejected because of a controlled parameter, a late response or timeout, and the different delivery outcomes the connection allows you to observe. For each case, record the input, expected outcome, actual outcome, and evidence.

Treat an HTTP submission timeout as uncertain: the request may have been processed even if the client did not receive a response. Do not blindly retry a non-idempotent operation unless there is an agreed mechanism to determine whether it was applied or to prevent duplicates. A timeout does not by itself prove that the provider rejected the message.

In SMPP, distinguish a submission error returned in the response from a later delivery failure. Record these as different outcomes and check how the application represents them.

  • Accepted case: check the response, identifier, and submission record.
  • Rejected case: verify error classification and ensure there is no false confirmation of delivery.
  • Timeout case: mark the outcome as uncertain and follow the agreed procedure before retrying.
  • Missing, late, or duplicate callback case: check alerts, reconciliation, and operational handling.
  • Message still in transit: do not classify it prematurely as delivered or failed.

Separate Technical Acceptance from Delivery Monitoring

If you need to observe delivery outcomes in SMPP, check that an SMSC Delivery Receipt is requested where applicable and that the integration can receive the expected event, for example through deliver_sm or data_sm, depending on the implementation. The immediate submission response and the later receipt are separate stages.

Interpret each DLR based on who issues it and what it indicates. The 3GPP specification distinguishes Service Centre reports, which confirm receipt by that centre and not by the handset, from reports issued by the Mobile Station, which confirm receipt by the mobile station—not that a person saw or read the message. A status such as ENROUTE means the message is still in transit; it is neither final delivery confirmation nor, by itself, a failure.

Monitoring a few controlled messages describes only those cases in the environment and at the time tested. It does not guarantee future outcomes or support automatic extrapolation to other destinations, operators, or conditions.

  • Separate the HTTP or SMPP request result from the subsequent delivery status.
  • Document the source and scope of the DLRs received.
  • Do not present a DLR as proof that a person read or received the message.
  • Define how non-final statuses and receipts that do not arrive during the observation window are counted.

Set Acceptance Criteria and Preserve Evidence

Acceptance criteria should be observable and agreed before testing. Separate connectivity and request-processing requirements from delivery-monitoring requirements. For each, specify which response or event counts as a pass, which errors block activation, and which outcomes remain pending analysis.

Keep the plan, relevant configuration, requests and responses, identifiers, received events, and outcome of each test case. The evidence should make it possible to reconstruct what was and was not tested without turning a controlled sample into a general performance claim.

  • Technical acceptance: the session or endpoint is operational; authentication and formats conform; responses are interpreted and correlation is correct.
  • Operational acceptance: rejections, timeouts, duplicates, and late events are handled according to the agreed procedure.
  • Delivery monitoring: document the scope, statuses, DLR source, and waiting window separately.
  • Final decision: record passes, pending items, accepted exceptions, and the owners authorizing the next step.

Enable Production Gradually, with a Rollback Plan

After acceptance, enable traffic gradually, with limits and an observation window defined for the service. There is no universal volume threshold or standards-defined promotion sequence: agree on limits, alert signals, and owners based on risk and operations.

Before the first production traffic, decide who can stop or roll back the activation, what conditions trigger that decision, and how messages with uncertain outcomes will be handled. Monitor connectivity, responses, rejections, callbacks, and delivery statuses separately. Passing a controlled test authorizes the agreed scope; it does not guarantee behavior under every future condition.

  • Define initial limits and alert signals before enabling traffic.
  • Assign monitoring owners and the authority to stop or roll back.
  • Establish how to investigate timeouts and avoid retries that could duplicate messages.
  • Expand the scope only after reviewing the evidence and resolving the agreed blockers.
FAQ

Frequently asked questions

Does an HTTP 2xx response confirm that the SMS reached the phone?

No. The HTTP status code describes the outcome of the HTTP request, not SMS delivery to the handset. Delivery must be monitored through the mechanisms and statuses available for the connection.

Does a successful submit_sm_resp mean the message was delivered?

No. It reports the outcome of the SMPP request and may include an SMSC identifier. Delivery is a later stage that may be reported through a receipt if requested and supported by the implementation.

Does a DLR prove that someone received or read the message?

Not necessarily. Its meaning depends on the entity that issues the report. A receipt may indicate receipt by the Service Centre or the Mobile Station, but it does not prove that a person saw or read the message.

What should I do if an HTTP submission times out?

Treat the outcome as uncertain: the request may have been processed even though no response arrived. Before retrying, use the agreed query or duplicate-control mechanism; do not assume that a timeout means rejection.

How long should an acceptance test last?

There is no universal duration specified here. Define a window in advance that suits the scope, test cases, and expected events, and document missing or late callbacks as pending according to the agreed criteria.

Sources consulted

  1. SMPP Protocol Specification v3.4, Issue 1.2SMPP Developers Forum
  2. RFC 9110: HTTP SemanticsIETF
  3. 3GPP TS 23.040, version 17.3.0, Release 17ETSI / 3GPP
  4. ITU-T Recommendation E.164 (02/2026)International Telecommunication Union
  5. 3GPP specification 23.040 record3GPP