Ako naplánovať SMS v Kotline

Najjednoduchší spôsob odosielania SMS z Kotlinu je použiť vstavanú HTTP/Rest SMS API Ozeki SMS Gateway. Keď použijete toto API, budete odosielať SMS správy vydaním HTTP POST požiadavky na SMS bránu. HTTP POST požiadavka bude obsahovať správu formátovanú v json formáte. SMS brána odošle túto SMS príjemcovi a vráti HTTP 200 OK odpoveď na vašu požiadavku. (Obrázok 1)

ako naplánovať sms v kotline
Obrázok 1 - Ako naplánovať SMS v Kotline

Kotlin kód na odoslanie naplánovanej SMS na mobil

Ukážka kódu Kotlin na odoslanie SMS nižšie demonštruje, ako môžete odoslať naplánovanú SMS pomocou http rest SMS API Ozeki SMS Gateway s použitím knižnice Kotlin Ozeki.Libs.Rest. Táto knižnica je poskytovaná bezplatne a môžete ju použiť a upraviť v akomkoľvek z vašich projektov.

Video 1 - Ako stiahnuť SendScheduledSms.kt.zip príklad (Video návod)

MainActivity.kt
package send.scheduledsms

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import Ozeki.Libs.Rest.Configuration
import Ozeki.Libs.Rest.MessageApi
import Ozeki.Libs.Rest.Message
import android.text.method.ScrollingMovementMethod
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val inputToAddress:android.widget.EditText = findViewById(R.id.inputToAddress)
        val inputMessage:android.widget.EditText = findViewById(R.id.inputMessage)
        val date:android.widget.EditText = findViewById(R.id.inputTimeToSendDate)
        val time:android.widget.EditText = findViewById(R.id.inputTimeToSendTime)
        val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest)
        val logBox:android.widget.TextView = findViewById(R.id.logBox)
        logBox.movementMethod = ScrollingMovementMethod()


        val configuration = Configuration(
            username = "http_user",
            password = "qwe123",
            apiurl = "http://10.0.2.2:9509/api"
        )

        val api = MessageApi(configuration)

        btnSendRequest.setOnClickListener {
            if (inputToAddress.text.toString() != "" && inputMessage.text.toString() != ""
                && date.text.toString() != "" && time.text.toString() != "") {
                val datetime = String.format("%s %s", date.text.toString(), time.text.toString())
                val msg = Message()
                msg.ToAddress = inputToAddress.text.toString()
                msg.Text = inputMessage.text.toString()
                msg.TimeToSend = datetime
                GlobalScope.launch(Dispatchers.IO) {
                    val response = api.Send(msg)
                    logBox.text = String.format("%s\n%s", logBox.text, response.toString())
                }
                inputToAddress.text.clear()
                inputMessage.text.clear()
                date.text.clear()
                time.text.clear()
            }
        }

    }
}
	
main_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnSendRequest"
        android:layout_width="320dp"
        android:layout_height="50dp"
        android:layout_marginTop="36dp"
        android:text="Odoslať"
        android:backgroundTint="#FF3F3F"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/logBox" />

    <TextView
        android:id="@+id/textToAddress"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="36dp"
        android:text="Na adresu:"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textMessage"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Správa:"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputToAddress" />

    <TextView
        android:id="@+id/textWhen"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Čas odoslania:"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputMessage" />

    <EditText
        android:id="@+id/inputToAddress"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:ems="10"
        android:hint="+36201111111"
        android:inputType="textPersonName"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textToAddress" />

    <EditText
        android:id="@+id/inputMessage"
        android:layout_width="320dp"
        android:layout_height="100dp"
        android:layout_marginTop="20dp"
        android:ems="10"
        android:gravity="start|top"
        android:hint="Ahoj svet!"
        android:inputType="textMultiLine"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textMessage" />

    <EditText
        android:id="@+id/inputTimeToSendTime"
        android:layout_width="120dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="44dp"
        android:ems="10"
        android:hint="15:30:00"
        android:inputType="time"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textWhen" />

    <TextView
        android:id="@+id/logBox"
        android:layout_width="320dp"
        android:layout_height="80dp"
        android:layout_marginTop="20dp"
        android:scrollbars="vertical"
        android:text="Logy:"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputTimeToSendTime" />

    <EditText
        android:id="@+id/inputTimeToSendDate"
        android:layout_width="180dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="24dp"
        android:ems="10"
        android:hint="2021-06-16"
        android:inputType="date"
        app:layout_constraintEnd_toStartOf="@+id/inputTimeToSendTime"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textWhen" />
</androidx.constraintlayout.widget.ConstraintLayout>
	

Ako použiť príklad Kotlin SMS:

Môžete použiť triedu Message na vytvorenie SMS a môžete použiť triedu MessageApi na odoslanie naplánovanej SMS do SMS brány. SMS brána prepošle vašu správu do mobilnej siete buď prostredníctvom bezdrôtového pripojenia alebo prostredníctvom internetu.

Stiahnuť SendScheduledSms.kt

Zdrojový kód vysvetlený v tomto článku je možné stiahnuť, používať a upravovať bezplatne.
Stiahnuť: SendScheduledSms.kt.zip (149Kb)

Čo obsahuje súbor SendScheduledSms.kt.zip?

Súbor SendScheduledSms.kt.zip obsahuje príklad projektu, ktorý má v sebe knižnicu Ozeki.Libs.Rest. S touto knižnicou môžete odosielať, mazať, označovať a prijímať SMS správy vytvorením MessageApi a použitím metód Send(), Delete(), Mark() a Receive(). (Obrázok 2)

príklad projektu na odoslanie naplánovanej SMS pomocou Kotlin
Obrázok 2 - Adresár SendScheduledSms.kt

Ako odoslať naplánovanú SMS z Kotlin (Rýchle kroky)

Na odoslanie naplánovanej SMS z Kotlin:

  1. Nainštalujte Ozeki SMS Gateway
  2. Pripojte Ozeki SMS Gateway k mobilnej sieti
  3. Odošlite testovaciu SMS z Ozeki GUI
  4. Vytvorte HTTP SMS API používateľa
  5. Android Studio
  6. Stiahnite si vyššie uvedený príklad projektu
  7. Vytvorte SMS vytvorením nového objektu Message
  8. Vytvorte API na odoslanie vašej naplánovanej správy
  9. Použite metódu Send na odoslanie vašej naplánovanej správy
  10. Prečítajte si odpoveď na konzole
  11. Skontrolujte záznamy v SMS gatewey

Nainštalujte Ozeki SMS Gateway a vytvorte HTTP API používateľa

Na odosielanie SMS z Kotlin je potrebné najprv nainštalovať Ozeki SMS Gateway. SMS gateway je možné nainštalovať na rovnakom počítači, kde vyvíjate svoj Kotlin kód v Android Studio. Po inštalácii je ďalším krokom pripojenie Ozeki SMS Gateway k mobilnej sieti. Môžete odoslať testovaciu SMS z Ozeki GUI na overenie, že vaše pripojenie k mobilnej sieti funguje. Posledným krokom na prípravu vášho prostredia je vytvorenie HTTP SMS API používateľa. Vytvorte používateľa s menom "http_user" a heslom "qwe123", aby príklad fungoval bez úprav.

Po nastavení prostredia môžete spustiť svoj Kotlin kód.

HTTP API URL na odosielanie SMS z Kotlin

Na odoslanie naplánovanej SMS z Kotlin musí váš Kotlin kód odoslať HTTP požiadavku na SMS gateway. API URL je uvedené nižšie. Upozorňujeme, že IP adresa (127.0.0.1) by mala byť nahradená IP adresou vášho SMS gateway. Ak je Ozeki SMS Gateway nainštalovaný na rovnakom počítači, kde beží JavaScriptová SMS aplikácia, môže to byť 127.0.0.1. Ak je nainštalovaný na inom počítači, mala by to byť IP adresa toho počítača.

http://127.0.0.1:9509/api?action=rest
	

HTTP autentifikácia na odoslanie naplánovanej SMS z Kotlin

Na autentifikáciu Kotlin SMS klienta je potrebné odoslať používateľské meno a heslo v base64 kódovanom reťazci na server v HTTP požiadavke. Používa sa formát: base64(používateľské meno+":"+heslo). V Kotlin môžete na toto kódovanie použiť nasledujúci kód:

var usernamePassword = "%s:%s".format(username, password)
return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
	

Napríklad, ak zakódujete používateľské meno 'http_user' a heslo 'qwe123', dostanete nasledujúci base64 kódovaný reťazec: aHR0cF91c2VyOnF3ZTEyMw==. Na odoslanie

Hlavička HTTP požiadavky na odoslanie SMS z Kotlin

Na odoslanie SMS správ je potrebné zahrnúť nasledujúce riadky ako hlavičky do HTTP požiadavky. Upozorňujeme, že obsahujeme hlavičku Content-Type a Authorization.

Content-Type: application/json
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
	

HTTP požiadavka na odoslanie SMS z Kotlin

Na odoslanie SMS vaša Kotlin aplikácia odošle HTTP požiadavku podobnú nižšie uvedenej. Upozorňujeme, že táto požiadavka obsahuje časť HTTP hlavičky a časť HTTP tela. HTTP telo je JSON kódovaný dátový reťazec. Obsahuje číslo príjemcu a text správy.

POST /api?action=sendmsg HTTP/1.1
Connection: Keep-Alive
Content-Length: 320
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip
Authorization: Basic aHR0cF91c2VyOnF3ZTEyMw==
Host: 10.0.2.2:9509
User-Agent: okhttp/4.2.2

{
	"messages":	[
		{
			"message_id":	"e68f8e11-dce2-48e2-a2c5-1d2efa98272a",
			"to_address":	"+36201111111",
			"text":	"Hello world!",
			"create_date":	"2021-06-17T15:04:03",
			"valid_until":	"2021-06-24T15:04:03",
			"time_to_send":	"2021-06-17 15:10:00",
			"submit_report_requested":	true,
			"delivery_report_requested":	true,
			"view_report_requested":	true
		}
	]
}
	

HTTP odpoveď prijatá príkladom Kotlin SMS

Keď SMS brána prijme túto požiadavku, vygeneruje HTTP odpoveď. HTTP odpoveď bude obsahovať stavový kód, ktorý indikuje, či bola odosielacia požiadavka SMS úspešná alebo nie. Taktiež vráti štruktúru zakódovanú v JSON, ktorá poskytne užitočné informácie o odoslaní správy.

HTTP/1.1 200 OK
User-Agent: OZEKI 10.3.120 (www.myozeki.com)
Content-Type: application/json; charset=utf8
Last-Modified: Thu, 17 Jun 2021 14:56:26 GMT
Server: 10/10.3.120
Transfer-Encoding: chunked

{
	"http_code": 200,
	"response_code": "SUCCESS",
	"response_msg": "Messages queued for delivery.",
	"data": {
	  "total_count": 1,
	  "success_count": 1,
	  "failed_count": 0,
	  "messages": [
	    {
	      "message_id": "e68f8e11-dce2-48e2-a2c5-1d2efa98272a",
	      "from_station": "%",
	      "to_address": "+36201111111",
	      "to_station": "%",
	      "text": "Hello world!",
	      "create_date": "2021-06-17 15:04:03",
	      "valid_until": "2021-06-24 15:04:03",
	      "time_to_send": "2021-06-17 15:10:00",
	      "submit_report_requested": true,
	      "delivery_report_requested": true,
	      "view_report_requested": false,
	      "tags": [
	        {
	          "name": "Type",
	          "value": "SMS:TEXT"
	        }
	      ],
	      "status": "SUCCESS"
	    }
	  ]
	}
}
	
Ako odoslať naplánovanú SMS z Kotlinu pomocou SMS API a vyššie uvedeného príkladu projektu (Video tutoriál)

Toto video vám ukáže, ako stiahnuť a použiť projekt SendScheduledSms.kt. Keď otvoríte príkladový projekt, môžete si všimnúť, že existuje balík s názvom Ozeki.Libs.Rest. Tento balík obsahuje MessageApi a všetko potrebné na odoslanie naplánovanej SMS pomocou Kotlinu.

Video 2 - Ako odoslať naplánovanú SMS pomocou Kotlin kódu vyššie (Video tutoriál)

Ako skontrolovať, že SMS bola prijatá HTTP používateľom

Po odoslaní SMS je dobré skontrolovať vašu SMS bránu, aby ste videli, čo prijala. Log môžete skontrolovať otvorením detailov HTTP používateľa v konzole na správu Ozeki SMS brány. Na konci vyššie uvedeného videa môžete vidieť, ako skontrolovať, či bola požiadavka prijatá http_user.

kotlin projekt na odoslanie naplánovaných sms správ
Obrázok 3 - Projekt SendScheduledSms.kt v Android Studiu

Ako vyzerá používanie aplikácie na telefóne (Video tutoriál)

Na obrázku 4 môžete vidieť používateľské rozhranie aplikácie na telefóne. Ako vidno na obrázkoch pred a po, odosielanie naplánovaných SMS je s touto aplikáciou veľmi jednoduché. Po odoslaní správy bude log procesu odosielania viditeľný pod textovým poľom 'Čas odoslania'. Tu môžete získať všetky informácie o odoslanej správe.

príkladová kotlin aplikácia na odoslanie naplánovaných sms

Obrázok 4 - Príkladová aplikácia SendScheduledSms pred a po odoslaní správ

Ako pridať Ozeki.Libs.Rest do vášho vlastného projektu

Knižnicu Ozeki.Libs.Rest môžete stiahnuť, používať a upravovať bezplatne.
Stiahnuť: Ozeki.Libs.Rest.kt.zip (7.66Kb)

Ak sa rozhodnete vytvoriť svoju aplikáciu sami len s knižnicou Ozeki.Libs.Rest, musíte vo svojej základnej aplikácii zmeniť niekoľko vecí. Ak chcete použiť knižnicu Ozeki.Libs.Rest, musíte ju umiestniť do priečinka java hlavného adresára
V nasledujúcom videu vám ukážem, ako stiahnuť a pridať knižnicu Ozeki.Libs.Rest do vášho vlastného projektu.

Video 3 - Ako pridať knižnicu Ozeki.Libs.Rest do vašej vlastnej aplikácie (Video tutoriál)

Závislosti

Je dôležité spomenúť, že knižnica Ozeki.Libs.Rest má niektoré závislosti. Aby ste ju mohli používať, musíte tieto závislosti pridať do Gradle Scripts.

implementation "com.squareup.okhttp3:okhttp:4.2.2"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
	

Kód 1 - Zoznam závislostí, ktoré musíte zahrnúť.

Pridanie závislostí do projektu (Video tutoriál)

V nasledujúcom videu sa naučíte, ako pridať vyššie spomenuté závislosti. Začne sa kopírovaním kódu a prevedie vás až k úspešne pripojeným závislostiam. Video je dlhé len 53 sekúnd, ale obsahuje všetky potrebné kroky na dokončenie procesu. Tento tutoriál môžete sledovať bez akéhokoľvek úsilia.

Video 4 - Ako pridať potrebné závislosti (Video tutoriál)

Prístup k internetu

Aby vaša aplikácia mohla odosielať HTTP požiadavky, musíte jej umožniť pripojenie k internetu.
V nasledujúcom videu vám ukážem, ako povoliť prístup k internetu pre vašu Kotlin aplikáciu.

<uses-permission android:name="android.permission.INTERNET" />
	

Kód 2 - Povolenie prístupu k internetu pre vašu Kotlin aplikáciu.

android:usesCleartextTraffic="true"
	

Kód 3 - Umožnenie odosielania HTTP požiadaviek

Povolenie internetového pripojenia pre váš projekt (Video tutoriál)

Musíte pridať oba tieto riadky do súboru AndroidManifest.xml.
V nasledujúcom videu vám ukážem, kam by ste mali vložiť vyššie uvedené kódy. Musíte pridať oba tieto riadky do súboru AndroidManifest.xml. V nasledujúcom videu vám ukážem, kam by ste mali vložiť vyššie uvedené kódy. Video začne kopírovaním a vložením kódu a prevedie vás k úspešne pridanému internetovému pripojeniu. Toto video je podrobné a ponúka jednoduché sledovanie.

Video 5 - Ako povoliť prístup k internetu pre vašu aplikáciu (Video tutoriál)

Zhrnutie

Tento sprievodca vám ukazuje kroky naplánovania SMS v Kotline pomocou HTTP používateľa Ozeki SMS Gateway. Naplánovanie SMS na doručenie správ v čase, keď majú vaši zákazníci čas ich prečítať, vám skutočne pomáha udržiavať dobrý vzťah s nimi. Starostlivosť o malé veci, ako je nájdenie perfektného načasovania na zdieľanie myšlienok a informácií, je nevyhnutná, ak chcete ukázať, ako profesionálny je váš podnik.

Pokračujte v čítaní tutoriálov ako je tento na webovej stránke Ozeki. Nájdete tam viac informácií o používaní Kotlinu na prácu so SMS správami, ďalej sa naučte Ako prijímať SMS v Kotline.

Stiahnite si Ozeki SMS Gateway teraz a použite to, čo ste sa naučili!

More information