Soracom

Users

ドキュメント

USSD で Beam / Funnel / Funk / Harvest にデータを送信する

USSD (Unstructured Supplementary Service Data) は、少量のテキストデータ (*1) をそれほど高くない頻度で送信する、という用途に向いた送信方法です。

送信元受信先
SORACOM IoT SIM を利用するデバイス (*2)SORACOM Beam / Funnel / Funk / Harvest Data の各サービス
  • (*1) USSD で一度に送信できるデータは、最大 160 バイト (GSM 7 ビット標準アルファベットでは最大 182 文字) です。バイト数には、送信データの前後に付加する *{サービスコード}* # などの記号も含みます。
  • (*2) plan01s は USSD をサポートしていますが、planP1、planX1、planX2 は USSD をサポートしていません。したがって、これらの追加サブスクリプションを利用する国や地域にデバイスが存在するときは、USSD を利用できません。一方、これらの追加サブスクリプションを契約していても、plan01s を利用する国や地域にデバイスが存在するときは、USSD を利用できます。

サブスクリプションによって USSD の利用可否が異なります。詳しくは、サブスクリプションの種類 を参照してください。

ダウンリンク通信はできません

SORACOM プラットフォームから USSD を利用してデータを送信するダウンリンク通信はできません。なお、デバイスから送信した USSD に対するレスポンスを返すことはできます。

データを送信する

以下のいずれかの方法で、*{サービスコード}*{テキストデータ}# という形式の MMI 文字列を送信します。

  • USSD に対応したデバイスから AT コマンドを使用して送信する。
  • USSD に対応したスマートフォンの電話アプリなどで、特殊な番号にダイヤルして送信する。
項目
{サービスコード}

利用するサービスによって、サービスコードが異なります。

{テキストデータ}GSM 7 ビット標準アルファベットの範囲内の文字を指定できます。
対応フォーマット

テキストフォーマット (Data Coding Scheme = 15。GSM 7 ビット標準アルファベット) での送信にのみ対応しています。

USSD 対応デバイスについて

USSD でデータ送信を行うには、USSD に対応したデバイスが必要です。ソラコムでは、以下のデバイスでテキストフォーマット (Data Coding Scheme = 15。GSM 7 ビット標準アルファベット) での送信に対応していることを確認しています。

その他のデバイスに関しては、メーカーにお問い合わせください。

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 の場合

  1. PC の USB ポートに MS2131i-8 または MS2372h-607 を接続し、ターミナルエミュレーターソフトウェアを使用してシリアル通信ポートに接続します。

    • Windows の場合は PuttyTera Term といったソフトウェアを使用して、MS2131i-8 または MS2372h-607 の COM ポートに接続します。
    • macOS / Linux の場合は screen コマンドなどで /dev/tty.xxx/dev/cu.xxx といった名称のデバイスファイルを開きます。
  2. モデムの初期設定を行います。

    これらの AT コマンドは、モデムの電源を ON にしたあとに一度だけ実行します。

    AT^USSDMODE=0
    AT+CSCS="GSM"
    
    • 1 行目は、Huawei の機種に固有のコマンドです。3GPP の規格に従って、USSD を送信するモードに設定しています。
    • 2 行目は、使用する文字セットを GSM 7 ビット標準アルファベットに設定しています。
  3. テキストデータを送信します。

    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"
    }
    
    項目説明
    imsiIoT SIM の IMSI です。
    ussdDataCodingScheme常に 15 (GSM 7 ビット標準アルファベット) です。
    ussdStringAT コマンドで指定した文字列です。
    valueussdString から取り出したテキストメッセージです。

    モデムの電源を 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 から AWS Kinesis Firehose にデータを送信する方法を説明します。

  1. AWS Kinesis Firehose および Funnel を設定します。

    詳しくは、Amazon Kinesis Data Firehose アダプターを使用する (ユーザーコンソール版) を参照してください。

  2. デバイスから USSD でデータを送信します。

    詳しくは、デバイスから USSD でデータを送信する を参照してください。ただし、送信時に利用するサービスコードを 901011 (Beam) から 901021 (Funnel) に変更してください。

SORACOM Funk を経由して FaaS の Function へデータを送信する

ここでは、USSD 対応デバイスから USSD で SORACOM Funk (以下、Funk) にデータを送信し、Funk から AWS Lambda の Function にデータを送信する方法を説明します。

  1. AWS Lambda および Funk を設定します。

    詳しくは、AWS Lambda を呼び出し Slack へ通知する を参照してください。

  2. デバイスから USSD でデータを送信します。

    詳しくは、デバイスから USSD でデータを送信する を参照してください。ただし、送信時に利用するサービスコードを 901011 (Beam) から 901041 (Funk) に変更してください。

SORACOM Harvest Data にデータを蓄積して可視化する

ここでは、USSD 対応デバイスから USSD で SORACOM Harvest Data (以下、Harvest Data) にデータを送信する方法を説明します。

Harvest Data を有効化してください

あらかじめグループの Harvest Data を有効化し、そのグループに IoT SIM を所属させてください。詳しくは、Harvest Data を有効化する を参照してください。

  1. デバイスから USSD でデータを送信します。

    詳しくは、デバイスから USSD でデータを送信する を参照してください。ただし、送信時に利用するサービスコードを 901011 (Beam) から 901031 (Harvest Data) に変更してください。

  2. Harvest Data に送信されたデータを確認します。

    詳しくは、Harvest Data で可視化する を参照してください。

    テキストデータに、整数値とみなせるテキストデータを指定した場合は、その値を元にグラフが表示されます。