全部产品
Search
文档中心

Short Message Service:webhook SMS

更新时间:Feb 05, 2026

Gunakan Simple Message Queue (formerly MNS) untuk menerima tanda terima pengiriman.

Prasyarat

  • Akun Alibaba Cloud dan pasangan AccessKey telah dibuat. Untuk informasi selengkapnya, lihat Buat pasangan Kunci Akses.

  • Antrian MNS memiliki akses ke nama domain berikut: dybaseapi.ap-southeast-1.aliyuncs.com dan 1493622401794734.mns.ap-southeast-1.aliyuncs.com.

Penting

Idempotensi tanda terima pengiriman tidak dapat dijamin. Kami menyarankan Anda mengambil langkah-langkah yang sesuai untuk memastikan kebenaran dan konsistensi data setelah menerima tanda terima pengiriman.

Parameter permintaan

Parameter

Type

Contoh

Deskripsi

To

String

8521234****

Nomor ponsel yang menerima tanda terima pengiriman.

Status

String

1

Status pesan. Nilai yang valid:

  • 1: Pesan berhasil dikirim.

  • 2: Pengiriman pesan gagal.

  • 6: Pesan kedaluwarsa.

MessageId

String

123456789****

ID tanda terima pengiriman.

SmsSize

String

1

Jumlah pesan.

Pesan panjang akan dipisah menjadi beberapa pesan.

SendDate

String

Thu, 25 Nov 2021 10:27:00 +0800

Waktu saat pesan dikirim ke penyedia layanan.

ReceiveDate

String

Thu, 25 Nov 2021 10:27:33 +0800

Waktu saat tanda terima pengiriman diterima dari penyedia layanan.

ErrorCode

String

success

Kode kesalahan.

ErrorDescription

String

success

Pesan kesalahan.

Contoh

{
    "To" : "8521234****",
    "SendDate" : "Thu, 25 Nov 2021 10:27:00 +0800",
    "ReceiveDate" : "Thu, 25 Nov 2021 10:27:33 +0800",
    "Status" : "1",
    "SmsSize":"1",
    "ErrorCode" : "success",
    "ErrorDescription" : "success",
    "MessageId" : "123456789****"
  }

Unduh demo

Lihat demo konsumen Simple Message Queue dan unduh demo serta SDK untuk bahasa pemrograman pilihan Anda. Langkah-langkah berikut menggunakan Java sebagai contoh.

Catatan
  • Setelah mengunduh demo, beberapa file JAR berada di direktori lib. Anda perlu menambahkannya sebagai library dengan mengklik kanan file tersebut dan memilih Add as Library, seperti yang ditunjukkan pada gambar di bawah.

  • Anda dapat menemukan dependensi Maven di file pom.xml untuk menginstal Alibaba Cloud SDK untuk Java.

lib

Konfigurasi parameter

Anda harus mengonfigurasi parameter berikut sebelum menggunakan kode contoh.

Konfigurasikan pasangan AccessKey

Catatan

Untuk menghindari risiko keamanan akibat hardcoding pasangan AccessKey dalam kode Anda, kami menyarankan penggunaan variabel lingkungan. Untuk petunjuknya, lihat Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.

Panduan ini menggunakan nama variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. Kode berikut menunjukkan cara mendapatkan pasangan AccessKey dari variabel lingkungan:

String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

Konfigurasikan jenis pesan

Ganti messageType dengan jenis pesan yang diperlukan, misalnya SmsReport untuk tanda terima pengiriman SMS. Untuk jenis pesan yang didukung, lihat Konfigurasikan tanda terima pengiriman.

String messageType="<MESSAGE_TYPE>";

Konfigurasikan nama antrian

Ganti queueName dengan nama antrian pesan Anda. Anda dapat menemukan nama tersebut di Konsol SMS dengan menavigasi keSystem Configurations > General Settings > API.

String queueName="<QUEUE_NAME>";

image

Kode contoh

Konten tanda terima pengiriman yang Anda terima diproses oleh metode dealMessage. Anda dapat menulis logika bisnis untuk menangani pesan-pesan ini di dalam metode tersebut.

// Parse isi pesan sesuai format spesifik dalam dokumentasi
String arg = (String) contentMap.get("arg");
// Tambahkan logika bisnis Anda di sini

arg merepresentasikan parameter dari isi pesan callback. Nilainya mencakup: To, Status, MessageId, SmsSize, SendDate, ReceiveDate, ErrorCode, ErrorDescription.

package com.alicom.mns.sample;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


import com.alicom.mns.tools.DefaultAlicomMessagePuller;
import com.alicom.mns.tools.MessageListener;
import com.aliyun.mns.model.Message;
import com.google.gson.Gson;

/**
 * Ini hanya untuk menerima pesan dari layanan Alibaba Cloud Communications dan tidak dapat digunakan untuk layanan lain
 */
public class ReceiveDemo {

    private static Log logger=LogFactory.getLog(ReceiveDemo.class);

    static class MyMessageListener implements MessageListener{
        private Gson gson=new Gson();

        @Override
        public boolean dealMessage(Message message) {

            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            // Nilai kunci dari pesan
            System.out.println("waktu penerima pesan dari mns:" + format.format(new Date()));
            System.out.println("handle pesan: " + message.getReceiptHandle());
            System.out.println("isi pesan: " + message.getMessageBodyAsString());
            System.out.println("ID pesan: " + message.getMessageId());
            System.out.println("jumlah dequeue pesan:" + message.getDequeueCount());
            System.out.println("Thread:" + Thread.currentThread().getName());
            try{
                Map<String,Object> contentMap=gson.fromJson(message.getMessageBodyAsString(), HashMap.class);

                // Parse isi pesan sesuai format spesifik dalam dokumentasi
                String arg = (String) contentMap.get("arg");

                // Tambahkan logika bisnis Anda di sini

            }catch(com.google.gson.JsonSyntaxException e){
                logger.error("error_json_format:"+message.getMessageBodyAsString(),e);
                // Secara teori, kesalahan format seharusnya tidak terjadi. Jika Anda menemukan pesan yang rusak, hapus agar tidak dikirim ulang dan menyebabkan kesalahan berulang.
                return true;
            } catch (Throwable e) {
                // Jika pengecualian disebabkan oleh kode Anda sendiri, Anda harus mengembalikan false. Hal ini mencegah pesan dihapus dan memungkinkannya dikirim ulang sesuai kebijakan retry.
                return false;
            }

            // Jika pesan diproses berhasil, kembalikan true. SDK kemudian akan memanggil metode delete MNS untuk menghapus pesan dari antrian.
            return true;
        }

    }

    public static void main(String[] args) throws Exception, ParseException {

        DefaultAlicomMessagePuller puller=new DefaultAlicomMessagePuller();

        // Atur ukuran kolam thread async, antrian tugas, dan waktu tidur thread saat tidak ada data.
        puller.setConsumeMinThreadSize(6);
        puller.setConsumeMaxThreadSize(16);
        puller.setThreadQueueSize(200);
        puller.setPullMsgThreadSize(1);
        // Aktifkan ini untuk debugging sisi server. Nonaktifkan selama operasi normal karena berdampak pada performa.
        puller.openDebugLog(false);

        // Dapatkan ID AccessKey dan Secret AccessKey dari variabel lingkungan lokal.
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

        /*
        *  Ganti messageType dan queueName dengan jenis pesan dan nama antrian yang sesuai.
        *  Jenis pesan callback yang didukung:
        *  1: SmsReport: tanda terima pengiriman SMS
        *  2: SmsUp: pesan Mobile Originated       
        *  3: GlobeSmsReport: tanda terima pengiriman SMS Internasional
        */
        String messageType="<MESSAGE_TYPE>"; // Ganti ini dengan jenis pesan. SmsReport didukung.
        String queueName="<QUEUE_NAME>"; // Setelah mengaktifkan fitur di konsol, Anda dapat menemukan queueName yang sesuai di halaman tersebut. Contoh: Alicom-Queue-******-SmsReport.
        puller.startReceiveMsg(accessKeyId,accessKeySecret,messageType,queueName,new MyMessageListener());
    }
}

Output setelah menjalankan demo:

image