
Kikantree のディレクター鈴木です。
この記事をご覧になっている方は、ECサイトの注文情報からほしい部分の情報だけを抽出して、スプレッドシートへ転記したいと考えているのではないでしょうか?
結論からいうと、Gmailとスプレッドシート、GoogleAppScriptを使えば実現が可能です。
私自身が以前、知人から相談を受けて調べながらやってみたところ、本内容を実現できましたので、その内容を共有したいと思います。
<1> 実現したいことの整理と準備
最初に、今回のケースでの実現したいことを整理します。
今回やりたいこととしては、「あるECサイトから注文が入った際に、注文内容だけを自動で抽出してスプレッドシートに記載したい」というものでした。
そのためには、ECサイトからの注文メールをGmailで閲覧できるようにする必要があります。
そこで、ECサイト用のGoogleアカウントを用意し、ECサイトの注文メールをGmailへ自動転送するように設定しました。
今回使うGoogleAppScriptは、
Googleのサービスであれば概ねプログラムにて操作をすることが可能なため、
メールも同様にGmail上で閲覧できるようにする必要があります
また、注文情報を記載するためのスプレッドシートも用意しましたので、よかったらご覧ください。
■スプレッドシートサンプル
https://docs.google.com/spreadsheets/d/1Yh6pF_G5g73rf9xju_Mdb5Ex2bPFFpIEvx3XHwYWmjI/edit#gid=0
※自由にコピーしてご利用ください。
<2> GoogleAppScriptを書く
今回はいくつかの項目が記載されたサンプルメールを用意し、その項目を抽出するスクリプトを紹介します。
お時間がない方は、以下のサンプルメールをご自身のGmailに送信していただき、スクリプトをコピー&ペーストして実行すれば動作するかと思います。
(※初回のみ、GAS実行の権限承認が必要です)
その後は、注文内容の箇所をご自身の抽出したい内容に置き換えていただければと思います。
(※私の環境や事例での内容に合わせているため、動作保証等はしておりませんので、ご承知おきください)
■サンプルメール
〜〜〜〜〜〜〜〜〜〜〜〜〜〜~~~~~~
・・・・
ご注文日時:2023/03/22 18:36:11
氏名:山田太郎
郵便番号:111-2222
住所:東京都文京区本郷0-0-0
電話番号:090-0000-0000
・・・・
~~~~~~~~~~~~~~~~~~~~
■スクリプト
function myFunction(){
/******* 検索範囲(過去24時間以内のメールを探す)*******/
//現在時刻を取得
var now = new Date();
//現在時刻をGMTに変換し、UNIXTIMEに変換
var formatNow = Utilities.formatDate(now, 'GMT', 'dd MMM yyyy HH:mm:ss z');
var unixTime = Date.parse(formatNow)/1000;
// console.log(unixTime) //現在時刻のUNIXTIME
//現在時刻から24時間前のUNIXTIMEを取得
var fromSearchTime = unixTime - 86400; //24時間前の時刻
// console.log(fromSearchTime)
//検索対象となるメール件名
var mailSubject = "【◯◯◯】ご注文ありがとうございます";
//Gmailから検索 ※labelを指定すればラベルでの絞り込み検索も可能
var query = "subject:" + mailSubject + " before:" + unixTime + " after:" + fromSearchTime;
// console.log(query)
//条件に当てはまる全スレッドを取得
var threads = GmailApp.search(query);
// console.log(threads)
//Gmailから情報を抽出する
var messages = GmailApp.getMessagesForThreads(threads);
// console.log("messages.length:" + messages.length)
var sheet = SpreadsheetApp.getActiveSheet();
//1メッセージずつ情報を取り出す
for(var i=0; i<messages.length; i++){
var threadsNum = messages[i].length;
// console.log("threadsNum:" + threadsNum)
for(var j=0; j<threadsNum; j++){
//本文を取得する
var plainBody = messages[i][j].getPlainBody();
// console.log(plainBody)
//本文に「Re:」が含まれていないメールのみを対象とする。注文メールにそのまま返信されてしまった時の考慮。
var unnecSubject = messages[i][j].getSubject();
if(unnecSubject.match("Re:")){
// console.log(unnecSubject)
continue;
}
//ご注文日時を取得し、項目名を消去
var orderDate = plainBody.match(/ご注文日時:.*/)[0].replace('ご注文日時:', '');
// console.log("ご注文日時:"+orderDate)
//氏名を取得し、項目名を消去
var orderName = plainBody.match(/氏名:.*/)[0].replace('氏名:', '');
// console.log("氏名:"+orderName)
//郵便番号を取得し、項目名を消去
var postalCode = plainBody.match(/郵便番号:.*/)[0].replace('郵便番号:', '');
// console.log("郵便番号:"+postalCode)
//住所を取得し、項目名を消去
var address = plainBody.match(/住所:.*/)[0].replace('住所:', '');
var address = address.replace(/-/g, '-') //全角ハイフンを半角ハイフンに置換
// console.log("住所:"+address)
//電話番号を取得し、項目名を消去
var phoneNum = plainBody.match(/電話番号:.*/)[0].replace('電話番号:', '');
// console.log("電話番号:"+phoneNum)
// スプレッドシートにの最終行へ追加していく
sheet.appendRow([orderDate, orderName, postalCode, address, phoneNum])
}
}
}
<3> まとめ
今回の内容を改めて整理すると、
・ECサイト用のGoogleアカウントを用意する
・ECサイトの注文をGmailへ転送する
・Gmailから注文情報を抽出し、スプレッドシートへ転記する
となります。
今回のケースの場合、他にも注文が入ると自動でSlackへ通知が届くようにもしており、少人数でのECサイト運営においては非常に便利とのことでした。
GASを使うと、このようなことも実現が可能になるため、トライしてみることをオススメします。
この記事が少しでもお役に立ちましたら幸いです。
※続きの記事も作成しましたので、よろしければぜひご覧ください!
毎日指定の時刻に、スプレッドシートの内容をCSV化して指定のメールアドレス宛に自動でメール送信する方法【tips-002】
https://kikantree.jp
