M-Pesa SMS抽出

あらゆるM-Pesa SMS形式からトランザクションコード、金額、取引相手を認識

M-Pesaは、送金、請求書支払い、商品購入、受取金、引き出しの5種類のSMSテンプレートで取引を確認します。列を一度定義すれば、AIがテンプレート不要で各形式からトランザクションコード、金額、取引相手、日時を読み取ります。

SMSスクリーンショット1枚あたり5~10秒 · 印字テキストで最大99%の精度

SMSスクリーンショット
5つのSMS形式
バッチ処理

M-Pesa SMSから抽出できる情報

M-Pesaの確認メッセージは、160文字のプレーンなSMSです。アプリのUIも視覚的なレイアウトもありません。カスタム列抽出を使えば、フィールド名を指定するだけで、AIが5種類すべての形式から、位置ではなく意味に基づいてデータを見つけ出します。

トランザクションコード

すべてのSMSの先頭にある10文字のコードです。最初の3文字で日付をエンコードしています(T = 2025年)。重複排除やKRA参照のための照合キーとして機能します。

金額 (Ksh)

Ksh1,500.00の形式で表示されます。AIは、同じメッセージ内にある他の2つのKshの値(取引手数料と新しい残高)から、それぞれのラベルを読み取って金額を分離します。

取引相手

取引の種類によって変わります。送金の場合は氏名、請求書支払いの場合は事業者名と口座番号、商品購入の場合は加盟店名、受取金の場合は送金者名です。意味的抽出により、キーワードではなく役割に基づいて識別されます。

日時

すべてのSMSには、東アフリカ時間のタイムスタンプ(on 23/6/25 at 3:41 PM)が含まれています。デバイス上に無期限に保存され、記録や照合のために永続的に利用可能です。

M-Pesaはアプリ画面ではなく、5つのSMSテンプレートを使用する

M-Pesaは、スマートフォンを持たないユーザーがいる市場向けに構築されました。受信確認はプレーンなSMSであり、視覚的なUIはありません。同じ4つのフィールドが5つのメッセージ形式で並び替えられます。テンプレートベースのツールや画面OCRは視覚的な構造を前提としているため機能しません。以下に、それらが見逃しているものを示します。

従来の抽出方法がM-Pesaで機能しない理由

01

フィールドを特定するアプリUIがない。 VenmoやPayPalにはレイアウトの手がかりとなる視覚的な画面があります。しかしM-Pesaのレシートは生のSMSであり、太字の見出しも色もありません。アプリのインターフェース向けに設計されたOCRツールは、視覚的に固定するものがないため失敗します。

02

1つのメッセージに3つのKsh金額があり、そのうち1つだけが取引金額。 送金金額、取引手数料、新しい残高はすべてKshという接頭辞を共有しています。「Kshの後の数字」を取得する正規表現ルールは、しばしば間違った数字を拾ってしまいます。正規表現でM-Pesa SMSを解析する開発者は、メッセージタイプごとに正しいKshの出現箇所を特定する必要があり、この脆弱性がフォーマット間で問題を引き起こします。

03

取引相手の形式が取引タイプごとに異なる。 「Sent to JOHN DOE 0722000000」は個人を指します。「Paid to Naivas Supermarket」は事業者を指します。「AC for account 1137238445」は請求書支払いです。文法構造が形式ごとに異なるため、1つの正規表現ルールですべてを処理することはできません。

セマンティック抽出がM-Pesa SMSを読み取る仕組み

01

トランザクションコードは常に最初の単語です。 すべてのM-Pesa SMSは10文字のコードで始まり、その後に"Confirmed"が続きます。AIはこの一貫した開始部分をアンカーとして利用します。メッセージをテキストとして読み取り、位置に基づいてコードを特定し、そこから残りの抽出を構築します。

02

ラベルが各Ksh金額の意味を決定します。 "Transaction cost, Ksh6.00"は手数料としてタグ付けされます。"New M-PESA balance is Ksh1,205.10"は残高としてタグ付けされます。"sent to"または"received"の後に続く値のみが金額列に入力されます。位置の仮定なしに、意味的に異なる3つの数値が解決されます。

03

取引相手は意味的な役割によって識別されます。 SMSが"sent to JOHN DOE"、"paid to Naivas Supermarket"、または"received from MICHAEL FEDERSEN"のいずれであっても、AIは取引の相手側のエンティティを取引相手列にマッピングします。特定のキーワードの位置ではなく、関係性を読み取ります。

「いくつかの企業(学校、賃貸、小規模な財務チーム)と話していると気づいたのですが、取引量が増えると、照合作業はあっという間に混乱してしまいます。」

r/nairobitechies でのM-Pesa + 銀行照合に関する議論

バラバラのM-Pesa SMS形式も、ひとつのきれいなスプレッドシートに

1

M-Pesa SMSのスクリーンショットをまとめてアップロード

先週分のM-Pesa確認メッセージがフォルダにあります。顧客からの送金明細、学校の授業料支払いの請求書支払いSMS、スーパーマーケットでの商品購入確認、仕入先からの受取金通知。4つの異なるSMS形式です。これらをすべて1つのバッチにアップロードします。SMSスレッドのスクリーンショット(JPG、PNG、WebP)をそのまま使えます。

2

列を一度定義するだけ — トランザクションコード、金額、取引相手、日時

必要な列を入力します。AIが各SMSスクリーンショットを個別に読み取り、先頭の単語から10桁のトランザクションコードを見つけ、送金されたKshの金額(手数料や残高は除く)を抽出し、動詞が「送金」「支払い」「受取」のいずれであっても、その役割に基づいて取引相手を特定し、日時を記録します。

3

種類ごとに並べ替え不要の、統合された1つのテーブルを取得

処理時間はスクリーンショット1枚あたり5~10秒です。出力は1つのXLSXまたはCSVファイルで、4行4列(トランザクションコード、金額、取引相手、日時)、トランザクションの種類ごとに1行ずつ表示されます。送金、請求書支払い、商品購入、受取金の各形式から、すべて同じきれいな構造が生成されます。1件のSMSを開いて手動で値を入力する場合と比べて、約18倍の速さです (4フィールドの手動入力に約90秒かかるところ、こちらは約5秒)

5種類すべてのM-Pesa SMS形式で共通して取得できるデータ:

トランザクションコード金額 (Ksh)取引相手日付
ABCDE123451,500.00JOHN DOE23/06/25
DY28XV6794,000.00KCB Paybill09/09/25
GH78KT901500.00Naivas Supermarket15/01/26

最適なケースと注意すべきケース

SMSスクリーンショット抽出の適用範囲を理解することで、安定した結果を得られます。

最適なケース

SMSスレッドまたはSuper Appの端末直接スクリーンショット。 メッセージ受信箱やSuper Appの取引履歴のフル解像度スクリーンショットは、最大99%の精度を達成します。機械生成されたSMSテキストは高コントラストであり、モデルが適切に処理します。

1つのバッチに混在する取引タイプ。 送金、請求書支払い、商品購入、引き出しのスクリーンショットをまとめてアップロードできます。処理前にタイプごとに仕分ける必要はありません。

過去データの一括照合。 多数のM-Pesa確認メッセージから、QuickBooks KenyaやZoho Booksにインポート可能な単一のソート済みスプレッドシートを生成します。

注意が必要なケース

WhatsAppやMessenger経由で転送されたスクリーンショット。 メッセージングプラットフォームは画像を圧縮します。転送されたスクリーンショットは解像度が低く、特にトランザクションコードの文字レベル精度が低下する可能性があります。

アーキテクチャ上の境界:SMSデータフィードではなく、SMSのスクリーンショット。 このアプローチはスクリーンショット(転送されたレシートや他者から送られた画像)で機能しますが、電話のメッセージデータベースから直接SMSを解析することはできません。SMS読み取りツールを補完するものであり、置き換えるものではありません。

非常に古いM-Pesa SMS形式。 トランザクションコードは2025年にSプレフィックスからTプレフィックスに移行しました。AIは既知のバリエーションを処理しますが、より古い形式では部分的な結果しか得られない可能性があります。

よくある質問

AIはM-PesaのSMSから、取引金額、手数料、残高をどのように区別するのですか?

すべてのM-Pesa SMSには3つのKshの金額が含まれています。AIは各値の前にあるラベルを読み取ります。Ksh1,500.00 sent toは送金金額、Transaction cost, Ksh6.00は手数料、New M-PESA balance is Ksh1,205.10は残高です。「sent to」「paid to」「received」などのアクション動詞が前に付く、取引の主体となる値のみが金額列に入力されます。これにより、メッセージを手動で確認する際に生じる混乱を防ぎます。

トランザクションコードは本当に日付をエンコードしているのですか?そして、それがなぜ重要なのでしょうか?

はい、その通りです。M-Pesaのトランザクションコードの最初の文字は年(T=2025、S=2024、アルファベット順に循環)、2番目は月、3番目は日を表します。つまり、トランザクションコードフィールドだけで、SMSのタイムスタンプがスクリーンショットで切り取られていても、取引日を確認できるのです。また、これは普遍的な照合キーとしても機能します。同じコードを持つ2つのSMSメッセージは同一の取引であり、重複排除やKRA参照のための最も信頼性の高いフィールドとなります。

プレーンなSMSスクリーンショットとM-Pesa Super Appのスクリーンショットを同じバッチで処理できますか?

はい、可能です。M-Pesa Super Appは、トランザクションコード、金額、取引相手、日付といった同じデータを視覚的な確認画面に表示します。AIは両方の入力形式を1つのバッチで処理します。Super Appの画面はSMSよりも加盟店名が読みやすく表示される一方、SMSにはアプリ画面では省略されることのある取引手数料や新しい残高が含まれています。列を一度定義すれば、AIは各スクリーンショットのソースに応じて自動的に適応します。

抽出したデータをKRAの税務申告に使用できますか?

KRAは、特にモバイルマネーを主な決済手段とする小規模事業者に対して、M-Pesaの明細を税務申告の裏付け書類として認めています。各取引はトランザクションコードでインデックス化され、特定の支払いをKRAの記録に結び付けます。正式な申告には、*234#にダイヤルするかSuper Appから入手できる完全なM-Pesa PDF明細書が依然として必要ですが、抽出されたSMSデータは、公式明細書が届くまでの間の中間的な照合や経費追跡のための実用的なスプレッドシートを提供します。

100件のM-Pesa確認メッセージから一度にデータを抽出する必要がある場合はどうすればよいですか?

バッチ処理では、複数のスクリーンショットを一度にアップロードできます。すべてのSMSスクリーンショットをまとめてアップロードし、トランザクションコード金額取引相手日付の4つの列を定義するだけで、AIがすべてのスクリーンショットを同じ列定義で処理します。バッチに10件でも100件でも、さまざまな形式のM-Pesa確認メッセージが含まれていても、出力は1つのExcelファイルで、トランザクションごとに1行ずつ表示されます。会計ソフトへのインポートや元帳との照合にすぐに使用できます。

📮 contact email: [email protected]