Skip to content

Contoh: kirim templat

Kirim templat pembaruan pesanan dengan variabel isi.

Updated View as Markdown

Pakai alur ini ketika kamu perlu memberi tahu pelanggan di luar jendela balasan 24 jam.

1. Konfirmasi keberadaan templat

Tampilkan daftar templat yang disetujui:

curl -sS "https://api.wazapin.com/v1/templates?limit=20" \
  -H "X-Api-Key: YOUR_API_KEY"
import { WazapinClient } from "@wazapin/sdk";

const wazapin = new WazapinClient({ apiKey: process.env.WAZAPIN_API_KEY! });

const { data } = await wazapin.templates.list({ limit: 20 });
console.log(data);
import requests

response = requests.get(
    "https://api.wazapin.com/v1/templates",
    headers={"X-Api-Key": "YOUR_API_KEY"},
    params={"limit": 20},
    timeout=30,
)
response.raise_for_status()
print(response.json())

Pilih name dan language dari respons. Templat harus berstatus approved (disetujui) pada saluran kamu.

2. Kirim dengan komponen

Templat order_shipped dengan isi Hi {{1}}, pesanan {{2}} telah dikirim.

curl -X POST "https://api.wazapin.com/v1/messages" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channel_id": "wzp_abc123",
    "to": "6281234567890",
    "type": "template",
    "content": {
      "template": {
        "name": "order_shipped",
        "language": { "code": "en_US" },
        "components": [
          {
            "type": "body",
            "parameters": [
              { "type": "text", "text": "John" },
              { "type": "text", "text": "ORD-42" }
            ]
          }
        ]
      }
    }
  }'
import { WazapinClient, templateMessage } from "@wazapin/sdk";

const wazapin = new WazapinClient({ apiKey: process.env.WAZAPIN_API_KEY! });

await wazapin.messages.send(
  templateMessage({
    channel_id: "wzp_abc123",
    to: "6281234567890",
    name: "order_shipped",
    language: "en_US",
    components: [
      {
        type: "body",
        parameters: [
          { type: "text", text: "John" },
          { type: "text", text: "ORD-42" },
        ],
      },
    ],
  }),
);
import requests

response = requests.post(
    "https://api.wazapin.com/v1/messages",
    headers={"X-Api-Key": "YOUR_API_KEY", "Content-Type": "application/json"},
    json={
        "channel_id": "wzp_abc123",
        "to": "6281234567890",
        "type": "template",
        "content": {
            "template": {
                "name": "order_shipped",
                "language": {"code": "en_US"},
                "components": [
                    {
                        "type": "body",
                        "parameters": [
                            {"type": "text", "text": "John"},
                            {"type": "text", "text": "ORD-42"},
                        ],
                    }
                ],
            }
        },
    },
    timeout=30,
)
response.raise_for_status()
print(response.json())
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	body := []byte(`{
  "channel_id": "wzp_abc123",
  "to": "6281234567890",
  "type": "template",
  "content": {
    "template": {
      "name": "order_shipped",
      "language": {
        "code": "en_US"
      },
      "components": [
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "John"
            },
            {
              "type": "text",
              "text": "ORD-42"
            }
          ]
        }
      ]
    }
  }
}`)

	req, err := http.NewRequest(http.MethodPost, "https://api.wazapin.com/v1/messages", bytes.NewReader(body))
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-Api-Key", os.Getenv("WAZAPIN_API_KEY"))
	req.Header.Set("Content-Type", "application/json")

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
	out, _ := io.ReadAll(resp.Body)
	fmt.Println(resp.StatusCode, string(out))
}
<?php

$payload = '{
  "channel_id": "wzp_abc123",
  "to": "6281234567890",
  "type": "template",
  "content": {
    "template": {
      "name": "order_shipped",
      "language": {
        "code": "en_US"
      },
      "components": [
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "John"
            },
            {
              "type": "text",
              "text": "ORD-42"
            }
          ]
        }
      ]
    }
  }
}';

$ch = curl_init("https://api.wazapin.com/v1/messages");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "X-Api-Key: " . getenv("WAZAPIN_API_KEY"),
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
echo $httpCode . "\n" . $response . "\n";
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class SendMessage {
    public static void main(String[] args) throws Exception {
        String body = """
                {"channel_id": "wzp_abc123", "to": "6281234567890", "type": "template", "content": {"template": {"name": "order_shipped", "language": {"code": "en_US"}, "components": [{"type": "body", "parameters": [{"type": "text", "text": "John"}, {"type": "text", "text": "ORD-42"}]}]}}}
                """;

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.wazapin.com/v1/messages"))
                .header("X-Api-Key", System.getenv("WAZAPIN_API_KEY"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(body))
                .build();

        HttpResponse<String> response = HttpClient.newHttpClient()
                .send(request, HttpResponse.BodyHandlers.ofString());

        // 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
        System.out.println(response.statusCode());
        System.out.println(response.body());
    }
}
require "net/http"
require "uri"

uri = URI("https://api.wazapin.com/v1/messages")
request = Net::HTTP::Post.new(uri)
request["Content-Type"] = "application/json"
request["X-Api-Key"] = ENV["WAZAPIN_API_KEY"]
request.body = '{"channel_id": "wzp_abc123", "to": "6281234567890", "type": "template", "content": {"template": {"name": "order_shipped", "language": {"code": "en_US"}, "components": [{"type": "body", "parameters": [{"type": "text", "text": "John"}, {"type": "text", "text": "ORD-42"}]}]}}}'

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end

# 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
puts response.code
puts response.body
using System.Net.Http;
using System.Text;

var body = "{\"channel_id\": \"wzp_abc123\", \"to\": \"6281234567890\", \"type\": \"template\", \"content\": {\"template\": {\"name\": \"order_shipped\", \"language\": {\"code\": \"en_US\"}, \"components\": [{\"type\": \"body\", \"parameters\": [{\"type\": \"text\", \"text\": \"John\"}, {\"type\": \"text\", \"text\": \"ORD-42\"}]}]}}}";

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-Api-Key", Environment.GetEnvironmentVariable("WAZAPIN_API_KEY"));

var response = await client.PostAsync(
    "https://api.wazapin.com/v1/messages",
    new StringContent(body, Encoding.UTF8, "application/json"));

// 201 = message accepted; delivery status via webhooks / GET /v1/messages/{id}
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());

Jika templat kamu memiliki gambar header atau tombol URL, tambahkan komponen header / button yang sesuai — lihat Kirim templat.

3. Periksa pengiriman

curl -sS "https://api.wazapin.com/v1/messages/{messageID}" \
  -H "X-Api-Key: YOUR_API_KEY"
import { WazapinClient } from "@wazapin/sdk";

const wazapin = new WazapinClient({ apiKey: process.env.WAZAPIN_API_KEY! });

const { data: message } = await wazapin.messages.get("{messageID}");
console.log(message.status);
import requests

response = requests.get(
    "https://api.wazapin.com/v1/messages/{messageID}",
    headers={"X-Api-Key": "YOUR_API_KEY"},
    timeout=30,
)
response.raise_for_status()
print(response.json())

Atau konfigurasikan webhook untuk event message.status_update.

Saluran tidak resmi

Pada saluran tidak resmi (gateway), pengiriman templat mungkin dirender sebagai teks cadangan (fallback text). Cek Dukungan saluran.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close