はじめに
2026 年 10 月 31 日に開催された SORACOM UG Explorer 2026 に参加しました。
今回のイベントでは、次の 4 つのハンズオンシナリオが用意されていました。
- みんなでお散歩して位置を地図にプロット(GPS マルチユニット)
- スマホで撮影した画像を生成 AI で解析&SNS 通知(SORACOM Harvest Files + SORACOM Flux)
- ボタンを押してご当地情報を投稿(SORACOM LTE-M Button for Enterprise、通称「白ボタン」)
- SORACOM のこと、AI に聞いてみよう(SORACOM Knowledge MCP)
普段 ServiceNow を扱っていることもあり、「せっかくなら ServiceNow(PDI)につなげたい」と考えました。そこで ③ の白ボタンのハンズオンをアレンジして、白ボタンを押すと ServiceNow にインシデントが起票される 仕組みを作りました。
完成イメージ
実際に白ボタンを押してから、インシデントが起票されるまでの様子です(待ち時間は早送りしています)。
白ボタンを押すと、ServiceNow にこんなインシデントが起票されます。クリック種別と、白ボタンの簡易位置測位で得た緯度・経度、Google マップへのリンクが「説明」に入ります。
構成
SORACOM Flux Studio では、こんな見た目になります。
| 項目 | 使ったもの |
|---|---|
| デバイス | SORACOM LTE-M Button for Enterprise(会場で貸し出し) |
| SORACOM | SORACOM Flux(IoT デバイスイベントソース + Webhook アクション)、SORACOM Harvest Data(疎通確認) |
| ServiceNow | Personal Developer Instance(PDI)の Table API |
ServiceNow 側は 標準の Table API にそのまま POST するだけ で、スクリプトやフローは作っていません。
手順
1. 白ボタンを Flux で受けられるようにする
会場で借りた白ボタンの SIM は、イベントの貸し出し用アカウントに登録されています。別のアカウントに登録済みの SIM は、自分のアカウントに登録できません。そこで、貸し出し用アカウントの SAM ユーザーで作業しました。
ボタンを 1 回押して、SORACOM Harvest Data に次のようなデータが届けば通信できています。
{
"clickType": 1,
"clickTypeName": "SINGLE",
"batteryLevel": 1,
"binaryParserEnabled": true
}
クリック種別は 3 つあります(送信されるデータフォーマット)。
| clickType | clickTypeName | 操作 |
|---|---|---|
| 1 | SINGLE | シングルクリック |
| 2 | DOUBLE | ダブルクリック |
| 3 | LONG | 長押し |
2. ServiceNow に連携用ユーザーを作る
PDI の「ユーザー管理」→「ユーザー」→「新規」で、次のユーザーを作りました。
| 項目 | 設定 |
|---|---|
| ユーザー ID | soracom_button |
| 名 / 姓 | SORACOM / Button |
| アクティブ | オン |
| ID タイプ | マシン |
| Web サービス専用 | オン(API 専用にして、画面にはログインさせない) |
| ロール |
itil(デモ用。インシデントを作成するため) |
3. Flux アプリを作って Webhook アクションを設定する
続けて、SORACOM Flux のアプリ Explorer2026-ServiceNow-Button7 を作りました。
- イベントソース:IoT デバイス(白ボタンが所属するグループ)
-
チャネル:
Button7-Input -
アクション:Webhook(
Create-ServiceNow-Incident)
Webhook アクションの設定は次のとおりです(Webhook アクション)。
| 項目 | 設定 |
|---|---|
| HTTP メソッド | POST |
| URL | https://<instance>.service-now.com/api/now/table/incident?sysparm_fields=number,sys_id,short_description |
| HTTP ヘッダー |
content-type: application/json、Authorization: Basic …(後述) |
| HTTP ボディ |
application/json(下記) |
sysparm_fields を付けておくと、レスポンスに入る項目を INC 番号などに絞れます。
アクションの実行条件
event.context.resource.imsi == "<自分の白ボタンの IMSI>"
ハンズオン用のグループには他の参加者の白ボタンも入っています。そのため、自分のボタンの IMSI に絞りました。IoT デバイスイベントソースには「1 つのグループを、複数の Flux アプリの IoT デバイスイベントソースに設定することはできない」という制約があります(IoT デバイスイベントソース)。グループを共有する場合は、このように条件で振り分けることになります。
HTTP ボディ
{
"short_description": "[SORACOM UG Explorer 2026] 白ボタンから現場確認依頼",
"description": "Enterprise Button 7 からの通知です。クリック種別: ${event.payload.clickTypeName}\n\n位置情報(簡易測位・おおよその位置)\n緯度: ${event.context.resource.location.lat}\n経度: ${event.context.resource.location.lon}\n\nGoogle Mapsリンク: https://www.google.com/maps/search/?api=1&query=${event.context.resource.location.lat},${event.context.resource.location.lon}",
"impact": "3",
"urgency": "3"
}
${...} の部分には、Flux がイベントの値を埋め込みます(アクション、コンディションの記法)。
4. 認証でつまずいたので、テスト用にヘッダーへ直書きした
当初は、SORACOM の 認証情報ストア に soracom_button のユーザー名・パスワードを登録し、Webhook アクションの「Basic 認証」で使う予定でした。
ところが、貸し出し用アカウントの SAM ユーザーには認証情報ストアの権限がなく、次のエラーで止まりました。
Credential:listCredentials が許可されていません
今回はテストなので、Authorization ヘッダーに Basic <base64(ユーザーID:パスワード)> を直接書く方法に切り替えました。
認証ヘッダーの直書きは、イベント中の検証用の応急手段です。実際の運用では、認証情報ストアを使う方法がベターです。
5. ボタンを押すとインシデントができる
貼り付けが終わったら、作成は完了です。白ボタンを押すと、冒頭の完成イメージのインシデントが作成されました。
おわりに
物理ボタンを押すとチケットができる体験は、思った以上にわかりやすく、簡単に作成できるデモになりました。SORACOM Flux の Webhook アクションと ServiceNow の Table API の組み合わせなら、コードをほとんど書かずに IoT と ServiceNow をつなげられました。この内容はイベントの1時間30分のハンズオン時間内ですべて実装できました。
最後になりましたが、楽しいイベントをありがとうございました!



