USSD (Unstructured Supplementary Service Data) は、少量のテキストデータ (*1) をそれほど高くない頻度で送信する、という用途に向いた送信方法です。なお、USSD を利用する際はデータ通信のセッションを確立する必要がなく、簡単に早くデータを送信できます。
送信元 | → | 受信先 |
---|---|---|
SORACOM IoT SIM を利用するデバイス (*2) | → | SORACOM Beam / Funnel / Funk / Harvest Data の各サービス |
- (*1) USSD で一度に送信できるデータは、最大 160 バイト (GSM 7 ビット標準アルファベットでは最大 182 文字) です。バイト数には、送信データの前後に付加する
*{サービスコード}*
#
などの記号も含みます。 - (*2) plan01s は USSD をサポートしていますが、planP1、planX1、planX2、plan-US-max は USSD をサポートしていません。したがって、これらの追加サブスクリプションを利用する国や地域にデバイスが存在するときは、USSD を利用できません。一方、これらの追加サブスクリプションを契約していても、plan01s を利用する国や地域にデバイスが存在するときは、USSD を利用できます。
サブスクリプションによって USSD の利用可否が異なります。詳しくは、サブスクリプションの種類 を参照してください。
ダウンリンク通信はできません
USSD を利用して SORACOM から IoT SIM にデータを送信するダウンリンク通信はできません。なお、デバイスから送信した USSD に対するレスポンスを、デバイスに返すことはできます。
データを送信する
以下のいずれかの方法で、*{サービスコード}*{テキストデータ}#
という形式の MMI 文字列を送信します。
- USSD に対応したデバイスから AT コマンドを使用して送信する。
- USSD に対応したスマートフォンの電話アプリなどで、特殊な番号にダイヤルして送信する。
項目 | 値 |
---|---|
{サービスコード} | 利用するサービスによって、サービスコードが異なります。
|
{テキストデータ} | GSM 7 ビット標準アルファベットの範囲内の文字を指定できます。 |
対応フォーマット
テキストフォーマット (Data Coding Scheme = 15。GSM 7 ビット標準アルファベット) での送信にのみ対応しています。
USSD 対応デバイスについて
USSD でデータ送信を行うには、USSD に対応したデバイスが必要です。ソラコムでは、以下のデバイスでテキストフォーマット (Data Coding Scheme = 15。GSM 7 ビット標準アルファベット) での送信に対応していることを確認しています。
- MS2131i-8
- MS2372h-607 (2021-06-14 販売終了)
- Wio 3G SORACOM Edition
- UC20 (+ EVBKIT)
- UG96 (+ EVBKIT)
- 一般的なスマートフォンの電話アプリ
その他のデバイスに関しては、メーカーにお問い合わせください。
SORACOM Beam を経由して任意のサーバーにデータを送信する
ここでは、USSD 対応デバイスから USSD で SORACOM Beam (以下、Beam) にデータを送信し、Beam から任意のサーバーにデータを転送する方法を説明します。
Beam の転送先となるサーバーアプリケーションを構築する
HTTP もしくは HTTPS で Content-Type: application/json
のデータを受信可能なサーバーアプリケーションを構築してください。これ以降、Beam の転送先のサーバーとして https://beamtest.soracom.io
を構築したものとして説明します。
デバイスでレスポンスを受け取る条件について
転送先のサーバーから、以下の条件を満たすレスポンスを返却すると、デバイスでレスポンスを受け取ることができます。
Content-Type: text/plain
を設定する- GSM 7 ビット標準アルファベットの範囲の文字のみを使用する (最大 182 文字)
Beam の USSD → HTTP/HTTPS エントリポイントを設定する
Beam のエントリポイントを設定する操作については、テストサーバーを利用して Beam の設定方法と動作を確認する を参照してください。
また、USSD → HTTP/HTTPS エントリポイントについては、USSD → HTTP/HTTPS エントリポイント を参照してください。なお、 は、Beam の転送先となるサーバーアプリケーションを構築する で作成した https://beamtest.soracom.io
に転送するために、以下のように設定します。
項目 | 説明 |
---|---|
「HTTPS」を選択します。 | |
beamtest.soracom.io を指定します。 |
デバイスから USSD でデータを送信する
代表的なデバイスから USSD でデータを送信する方法を説明します。
MS2131i-8 もしくは MS2372h-607 の場合
PC の USB ポートに MS2131i-8 または MS2372h-607 を接続し、ターミナルエミュレーターソフトウェアを使用してシリアル通信ポートに接続します。
モデムの初期設定を行います。
これらの AT コマンドは、モデムの電源を ON にしたあとに一度だけ実行します。
AT^USSDMODE=0 AT+CSCS="GSM"
- 1 行目は、Huawei の機種に固有のコマンドです。3GPP の規格に従って、USSD を送信するモードに設定しています。
- 2 行目は、使用する文字セットを GSM 7 ビット標準アルファベットに設定しています。
テキストデータを送信します。
AT+CUSD=1,"*901011*123#",15
*901011*123#
で、SORACOM Beam (901011
) に123
を送信しています。https://beamtest.soracom.io
に、以下のような JSON 文字列が送信されます。{ "imsi": "29505xxxxxxxxxx", "ussdDataCodingScheme": 15, "ussdString": "*901011*123#", "value": "123" }
項目 説明 imsi
IoT SIM の IMSI です。 ussdDataCodingScheme
常に 15
(GSM 7 ビット標準アルファベット) です。ussdString
AT コマンドで指定した文字列です。 value
ussdString
から取り出したテキストメッセージです。モデムの電源を OFF にするまでは、手順 3 を繰り返して、複数回テキストデータを送信できます。
Wio 3G SORACOM Edition の場合
Arduino IDE を起動し、以下のようなスケッチを実行します。Wio 3G のライブラリのバージョンを最新に更新してから実行してください。
#include <Wio3GforArduino.h>
Wio3G Wio;
void setup() {
delay(200);
SerialUSB.begin(115200);
SerialUSB.println("");
SerialUSB.println("--- START ---------------------------------------------------");
SerialUSB.println("### I/O Initialize.");
Wio.Init();
SerialUSB.println("### Power supply ON.");
Wio.PowerSupplyCellular(true);
delay(500);
SerialUSB.println("### Turn on or reset.");
if (!Wio.TurnOnOrReset()) {
SerialUSB.println("### ERROR! ###");
return;
}
SerialUSB.println("### Registering location.");
if (!Wio.WaitForCSRegistration()) {
SerialUSB.println("### ERROR! ###");
return;
}
SerialUSB.println("### Sending USSD.");
//const char* message = "*901001*123#"; // Unified Endpoint
const char* message = "*901011*123#"; // Beam
//const char* message = "*901021*123# "; // Funnel
//const char* message = "*901031*123#"; // Harvest
//const char* message = "*901041*123#"; // Funk
char response[256];
size_t respLen = sizeof(response);
if (!Wio.SendUSSD(message, response, &respLen)) {
SerialUSB.println("### ERROR! ###");
return;
}
SerialUSB.print("### Received response: ");
SerialUSB.println(response);
}
void loop() {
}
https://beamtest.soracom.io
のレスポンスが、Beam の転送先となるサーバーアプリケーションを構築する で説明したレスポンスを受け取る条件を満たしている場合は、そのレスポンスが表示されます。
UC20 + Mini PCIe EVBKIT の場合
QCOM tool を使い、以下の AT コマンドを実行します。
AT+CUSD=1,"*901011*123#",15
スマートフォンの電話アプリを使う場合
電話アプリを起動し、以下の番号に電話をかける操作を行います。
*901011*123#
SORACOM Funnel を経由して特定のクラウドサービスにデータを送信する
ここでは、USSD 対応デバイスから USSD で SORACOM Funnel (以下、Funnel) にデータを送信し、Funnel から Amazon Data Firehose にデータを送信する方法を説明します。
Amazon Data Firehose および Funnel を設定します。
詳しくは、Amazon Data Firehose アダプターを使用する (ユーザーコンソール版) を参照してください。
デバイスから USSD でデータを送信します。
詳しくは、デバイスから USSD でデータを送信する を参照してください。ただし、送信時に利用するサービスコードを
901011
(Beam) から901021
(Funnel) に変更してください。
SORACOM Funk を経由して FaaS の Function へデータを送信する
ここでは、USSD 対応デバイスから USSD で SORACOM Funk (以下、Funk) にデータを送信し、Funk から AWS Lambda の Function にデータを送信する方法を説明します。
AWS Lambda および Funk を設定します。
詳しくは、AWS Lambda を呼び出し Slack へ通知する を参照してください。
デバイスから USSD でデータを送信します。
詳しくは、デバイスから USSD でデータを送信する を参照してください。ただし、送信時に利用するサービスコードを
901011
(Beam) から901041
(Funk) に変更してください。
SORACOM Harvest Data にデータを蓄積して可視化する
ここでは、USSD 対応デバイスから USSD で SORACOM Harvest Data (以下、Harvest Data) にデータを送信する方法を説明します。
Harvest Data を有効化してください
あらかじめグループの Harvest Data を有効化し、そのグループに IoT SIM を所属させてください。詳しくは、Harvest Data を有効化する を参照してください。
デバイスから USSD でデータを送信します。
詳しくは、デバイスから USSD でデータを送信する を参照してください。ただし、送信時に利用するサービスコードを
901011
(Beam) から901031
(Harvest Data) に変更してください。Harvest Data に送信されたデータを確認します。
詳しくは、Harvest Data に保存したデータを確認する を参照してください。
テキストデータに、整数値とみなせるテキストデータを指定した場合は、その値を元にグラフが表示されます。