การติดตามคำสั่งซื้อ
นี่คือชุดสคริปต์ Python ที่มีไว้เพื่อปรับปรุงและทำให้กระบวนการกระทบยอดคำสั่งซื้อกับกลุ่มผู้ซื้อเป็นแบบอัตโนมัติ ในแง่พื้นฐาน ระบบจะดึงข้อมูลการติดตาม อัปโหลดไปยังไซต์ของกลุ่มการซื้อ และกระทบยอดคำสั่งซื้อหลังจากการชำระเงินคืนโดยอัตโนมัติ วัตถุประสงค์หลักของสคริปต์เหล่านี้คือเพื่อให้สามารถดู Google ชีตแผ่นเดียวและทราบได้ทันทีว่าคำสั่งซื้อใดได้รับการติดตามและคืนเงินอย่างเหมาะสมโดยกลุ่มผู้ซื้อ และเพื่อให้ผู้ใช้มีเครื่องมือในการแก้ไขปัญหาใดๆ ที่อาจเกิดขึ้น
สิ่งนี้ทำอะไร
มีสองงานหลัก พวกเขาคือ:
get_order_tracking.py:
สคริปต์นี้ทำสิ่งต่อไปนี้:
- แยกวิเคราะห์อีเมลแจ้งเตือนการจัดส่งที่ยังไม่ได้อ่านในช่วง 45 วันที่ผ่านมาจาก Amazon หรือ Best Buy
- แยกวิเคราะห์ชุดข้อมูลจากอีเมลเหล่านั้นและอีเมลที่เกี่ยวข้อง รวมถึงหมายเลขติดตาม หมายเลขคำสั่งซื้อ ต้นทุนการสั่งซื้อ ที่อยู่อีเมล URL คำสั่งซื้อ และวันที่จัดส่ง และบันทึกข้อมูลนั้นลงในดิสก์และในไดรฟ์
- อัปโหลดหมายเลขติดตามเหล่านั้นไปยังระบบติดตามคำสั่งซื้อของกลุ่มเช่น Pointsmaker, MYS หรือ USA
- จัดกลุ่มคำสั่งซื้อหรือหมายเลขติดตามที่ Amazon หรือ Best Buy รวบรวมเข้าด้วยกันเพื่อการกระทบยอดในภายหลัง (เช่น คำสั่งซื้อสองรายการจะถูกจัดกลุ่มไว้ด้วยกันหากจัดส่งในการจัดส่งเดียวกัน)
- ส่งอีเมลรายการหมายเลขติดตาม/คำสั่งซื้อที่พบให้คุณ (ผู้ใช้) เพื่อตรวจสอบสุขภาพ
หากไม่สามารถแยกวิเคราะห์อีเมลได้ด้วยเหตุผลบางประการ ระบบจะทำเครื่องหมายอีเมลว่ายังไม่ได้อ่าน เพื่อให้คุณสามารถดูได้ด้วยตนเองในภายหลัง บางครั้งสิ่งนี้จะเกิดขึ้นหาก Amazon ทำงานช้า ในกรณีเหล่านี้ การเรียกใช้สคริปต์อีกครั้งก็ไม่เสียหาย
reconcile.py
นี่คือสคริปต์สำหรับการกระทบยอด มันทำดังต่อไปนี้:
- โหลดในกลุ่มหมายเลขติดตาม/คำสั่งซื้อจาก
get_tracking_numbers.py
- กรอกค่าใช้จ่ายที่ขอคืนเมื่อสามารถทำได้ (สำหรับกลุ่มเช่น Pointsmaker, MYS หรือ USA) ซึ่งเกี่ยวข้องกับการเข้าไปที่เว็บไซต์ของกลุ่มและแยกวิเคราะห์การแมปตั้งแต่หมายเลขติดตามไปจนถึงค่าใช้จ่ายที่ชำระคืน
- จัดกลุ่มคำสั่งซื้อเข้าด้วยกันตามใบสั่งซื้อ (ถ้ามี เฉพาะสหรัฐอเมริกาเท่านั้น)
- ใช้การปรับด้วยตนเอง (ดู "ผลงานของชีต" ด้านล่าง)
- อัปโหลดเอาต์พุตการกระทบยอดไปยัง Google ชีตในรูปแบบที่มนุษย์อ่านได้ ดู "เอาต์พุตชีต" ด้านล่างสำหรับข้อมูลเพิ่มเติม
ข้อจำกัด
- วิธีนี้จะใช้ได้กับบัญชีอีเมลครั้งละหนึ่งบัญชีเท่านั้น
- สิ่งนี้จะใช้ได้กับ GMail เท่านั้น
- การอัปโหลดอัตโนมัติใช้งานได้เฉพาะในสหรัฐอเมริกาและไซต์ที่มีเว็บไซต์อยู่ในรูปแบบเดียวกับ Pointsmaker หรือ MYS
- ที่อยู่ทั้งหมดจะต้องมีรหัสที่ระบุโดยไม่ซ้ำว่าที่อยู่ของกลุ่มการซื้อใด ค่าเริ่มต้นเป็นส่วนหนึ่งของที่อยู่ของกลุ่ม
ข้อกำหนดเบื้องต้น
- Python3 และ pip3 (สิ่งเหล่านี้ควรมารวมกัน)
คำแนะนำ
หากคุณใช้ Windows ให้ใช้คู่มือนี้แทนคำแนะนำเหล่านี้ เนื่องจาก Windows ค่อนข้างยากและคำแนะนำนี้มีความชัดเจน
หากคุณใช้ Mac (OSX):
เปิดเทอร์มินัลแล้วรันคำสั่งต่อไปนี้ สิ่งเหล่านี้จะติดตั้ง Homebrew (ตัวจัดการแพ็คเกจ) จากนั้นใช้ Homebrew เพื่อติดตั้ง Git+Python ดาวน์โหลดโปรเจ็กต์ จากนั้นตั้งค่าสภาพแวดล้อม Python
cd ~
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install pyenv
brew install git
git clone https://github.com/gbrodman/order-tracking.git
cd order-tracking
pyenv install 3.7.4
pyenv global 3.7.4
echo -e 'if command -v pyenv 1>/dev/null 2>&1; thenn eval "$(pyenv init -)"nfi' >> ~/.bash_profile
source ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
pip install -r requirements.txt
ในระบบปฏิบัติการทั้งหมด:
- ตัดการเชื่อมต่อจาก VPN ใด ๆ ที่อาจรบกวน (อาจทำให้คุณมีปัญหาการเชื่อมต่อเครือข่ายหรือไม่ก็ได้)
- เปิดใช้งาน IMAP ใน GMail--ไปที่หน้าการตั้งค่า จากนั้นไปที่แท็บ "การส่งต่อและ POP/IMAP" จากนั้นตรวจสอบให้แน่ใจว่าได้เปิดใช้งาน IMAP แล้ว
- คัดลอก config.yml.template ไปยัง config.yml
- ตั้งค่าการกำหนดค่า (ดูส่วน "การกำหนดค่า" ด้านล่างสำหรับข้อมูลเพิ่มเติม)
- เรียกใช้
python get_tracking_numbers.py
ตามด้วย python reconcile.py
การกำหนดค่า
ต่อไปนี้เป็นรายละเอียดของฟิลด์ใน config.yml:
- อีเมลและรหัสผ่านควรเป็นบัญชี GMail โดยเฉพาะรหัสผ่านควรเป็นรหัสผ่านเฉพาะแอป คุณสามารถคงการกำหนดค่า IMAP และ SMTP ไว้เหมือนเดิมได้ (เว้นแต่คุณจะรู้แน่นอนว่าไม่ควรทำ)
- ตั้งแต่เดือนมีนาคม 2020 Google จะไม่รองรับรหัสผ่านสำหรับแอปอีกต่อไป จำเป็นต้องใช้ OAuth เพื่อเข้าสู่ระบบ Gmail ดูรายละเอียดด้านล่างเกี่ยวกับวิธีการตั้งค่า
- สำหรับแต่ละกลุ่มใน 'กลุ่ม' ให้ใส่ชื่อเต็มของกลุ่ม (สำหรับไซต์เช่น MYS ควรเป็น URL ลบบิต ".com") รวมคีย์ที่ไม่ซ้ำกันต่อกลุ่ม (ค่าเริ่มต้นจะขึ้นอยู่กับที่อยู่) ซึ่งจะปรากฏในการแจ้งเตือนการจัดส่งไปยังกลุ่มนั้นเท่านั้น ชื่อผู้ใช้และรหัสผ่านควรอยู่ในพอร์ทัลออนไลน์ของกลุ่ม เพื่อให้เราสามารถอัปโหลดหมายเลขติดตามและดึงข้อมูลการกระทบยอดได้
- lookbackDays คือระยะย้อนกลับไปในบัญชีอีเมลของคุณที่เราจะค้นหาอีเมลจัดส่งของ Amazon ที่ยังไม่ได้อ่าน หมายเหตุ: ลิงก์การจัดส่งจะหมดอายุหลังจาก 45 วัน ดังนั้นเราจึงไม่ควรดำเนินการเกินนั้น
- baseSpreadsheetId การกระทบยอดควรเป็นรหัสของ Google ชีตที่มีอยู่ ดูส่วนด้านล่างเกี่ยวกับวิธีการให้สิทธิ์ที่ถูกต้องกับแผ่นงานนั้น สามารถดึงข้อมูล ID ได้จาก URL ซึ่งอยู่ในรูปแบบ "https://docs.google.com/spreadsheets/d/SHEET_ID"
- ช่อง "driveFolderId" ควรเป็นรหัสของโฟลเดอร์ Google Drive ที่เราจะเก็บข้อมูลถาวรไว้ สามารถดึงมาจาก URL ของโฟลเดอร์ซึ่งอยู่ในรูปแบบ "https://drive.google.com/drive/folders/FOLDER_ID"
ชีต / ไดรฟ์การกำหนดค่าและการอนุญาต
เราจำเป็นต้องสร้างและใช้บัญชี Google Cloud อัตโนมัติเพื่อเขียนลงในไดรฟ์และชีต นี่คือวิธีที่เราทำ:
- ขั้นแรก สร้างโปรเจ็กต์ Google Cloud ที่ https://console.cloud.google.com
- จากนั้น ให้สร้างบัญชีบริการใน Google Cloud และรับข้อมูลประจำตัว โดยทำตามขั้นตอนที่ 1-5 ในหน้านี้ อย่าลืมจดที่อยู่อีเมลของบัญชีบริการไว้ด้วย ซึ่งควรยาวมากและควรมี ".gserviceaccount.com" ต่อท้ายด้วย
- เมื่อคุณดาวน์โหลดไฟล์ JSON ข้อมูลรับรอง ให้เปลี่ยนชื่อเป็น "creds.json" และวางไว้ในไดเรกทอรีเดียวกันกับสคริปต์เหล่านี้
- ในเว็บไซต์คอนโซล Google Cloud ให้ใช้บานหน้าต่างนำทางด้านซ้ายเพื่อไปที่ "API และบริการ"
- จากนั้นคลิก "เปิดใช้งาน API และบริการ" สิ่งนี้จะนำคุณไปยังไลบรารี API คุณต้องค้นหาและเปิดใช้งาน "Google Drive API" และ "Google Sheets API" ค้นหาแต่ละรายการ คลิกคำ และเปิดใช้งาน
- ขั้นต่อไป สำหรับ Google ชีตกระทบยอดและโฟลเดอร์ Google Drive ที่เราตั้งค่าไว้ อย่าลืมแชร์ชีต/โฟลเดอร์กับบัญชีบริการที่เราสร้างไว้ก่อนหน้านี้ เพียงแชร์ทั้งสองรายการด้วยที่อยู่อีเมลที่ลงท้ายด้วย ".gserviceaccount.com" (ตรวจสอบให้แน่ใจว่าที่อยู่นั้นมีสิทธิ์ในการแก้ไขในชีตและโฟลเดอร์)
- สำหรับ OAuth ให้สร้างคีย์บน https://support.google.com/cloud/answer/6158849?hl=en และจัดเก็บเป็น client_secret.json ในไดเรกทอรีเดียวกันกับสคริปต์เหล่านี้
ควรจะเป็นเช่นนั้น ไฟล์ "creds.json" จะทำให้สคริปต์สามารถทำงานได้เป็นบัญชีบริการ และเราได้ให้สิทธิ์แก่บัญชีบริการในการดำเนินการต่างๆ ที่สคริปต์จำเป็นต้องเขียนลงไป
ข้อโต้แย้ง
-
--headless
เพื่อทำงานในเบราว์เซอร์ที่ไม่มีหัว สิ่งนี้มีประโยชน์หากคุณไม่สนใจว่าระบบอัตโนมัติกำลังทำอะไรอยู่ -
--firefox
ให้ทำงานโดยใช้ Firefox/Geckodriver แทนที่จะเป็น Chrome -
--groups AB
จะรันการกระทบยอดกับกลุ่ม A และ B เท่านั้น หากละเว้น จะรันกับทุกกลุ่ม
ชีตเอาท์พุต
งานกระทบยอดมีเอาต์พุตที่ประกอบด้วยสองแท็บใน Google ชีตที่เรากำหนดค่าไว้ก่อนหน้านี้ แท็บคือ:
การกระทบยอด
นี่คือสเปรดชีตหลัก เนื่องจากหมายเลขติดตามเดียวสามารถประกอบด้วยคำสั่งซื้อหลายรายการ และคำสั่งซื้อเดียวสามารถมีหมายเลขติดตามได้หลายหมายเลข เราจึงจัดกลุ่มให้เป็นคำสั่งซื้อตามวิธีแบ่งการจัดส่ง คอลัมน์ได้แก่:
- คำสั่งซื้อ: รหัสคำสั่งซื้อที่อยู่ในกลุ่มนี้
- การติดตาม: หมายเลขการติดตามที่มีอยู่ในกลุ่มนี้
- จำนวนเงินที่เรียกเก็บ: จำนวนเงินทั้งหมดที่คุณถูกเรียกเก็บเงินสำหรับกลุ่มนี้
- จำนวนเงินที่ชำระคืน: จำนวนเงินทั้งหมดที่ไซต์ของกลุ่มการซื้อแสดงสำหรับกลุ่มนี้
- วันที่จัดส่งล่าสุด: นี่คือวันที่ของการจัดส่งครั้งล่าสุด หากผ่านไปนานแล้วและคำสั่งซื้อได้รับการคืนเงินไม่เพียงพอ คุณอาจประสบปัญหา
- PO: รายการคำสั่งซื้อ (ขณะนี้สำหรับสหรัฐอเมริกาเท่านั้น)
- Group : กลุ่มผู้ซื้อ
- ไปยังอีเมล: อีเมลที่ใช้ส่งอีเมลการจัดส่ง/คำสั่งซื้อไป
- การปรับต้นทุนด้วยตนเอง: นี่คือวิธีการปรับต้นทุนการชำระคืนที่คาดหวังสำหรับคำสั่งซื้อ หากคุณทราบว่าสินค้าได้รับการคืนเงินไม่เพียงพอด้วยเหตุผลที่ดี คุณสามารถเพิ่มจำนวนเงินดังกล่าวได้ที่นี่ เราคาดว่าจำนวนเงินที่เรียกเก็บจะเท่ากับจำนวนเงินที่ชำระคืนบวกกับการปรับต้นทุนด้วยตนเอง ข้อมูลนี้จะถูกบันทึกไว้หากคุณเปลี่ยนแปลง
- การแทนที่ด้วยตนเอง: ช่องอื่นที่ต้องกรอกเอง ตรวจสอบสิ่งนี้หากคุณแน่ใจว่ากลุ่มดูถูกต้อง -- กลุ่มจะเพิกเฉยต่อสิ่งอื่นใดและทำเครื่องหมายว่าแก้ไขแล้ว
- ส่วนต่างทั้งหมด: นี่คือผลต่างทั้งหมดระหว่างจำนวนเงินที่เรียกเก็บและเงินคืน (บวกการปรับปรุงด้วยตนเอง) สีเขียวหมายความว่าจำนวนเงินเท่ากันหรือมีการตรวจสอบการแทนที่แล้ว สีเหลืองหมายความว่าคุณได้รับเงินคืนมากเกินไป และสีแดงหมายความว่าคุณได้รับเงินคืนน้อยเกินไป
- หมายเหตุ: หมายเหตุสำหรับการใช้งานส่วนตัวของคุณเอง
การติดตาม
แต่ละแถวในชีตนี้สอดคล้องกับหมายเลขติดตาม ประกอบด้วยคำสั่งซื้อสำหรับการติดตามนั้นและข้อมูลอื่น ๆ เกี่ยวกับการสั่งซื้อ รวมถึงจำนวนเงินที่คืนเงินหากเราพบ แท็บนี้มีประโยชน์มากที่สุดในการระบุอย่างชัดเจนว่าปัญหาเกิดขึ้นที่ใด หากกลุ่มสแกนบางรายการผิด
การนำเข้ารายงานของ Amazon
ขั้นแรก ส่งออกรายงานการจัดส่งธุรกิจของ Amazon เป็น CSV (ผ่านส่วนการวิเคราะห์ธุรกิจของเว็บไซต์) จากนั้นอัปโหลดไฟล์ CSV นั้นไปยัง Google Drive และเปิดเป็นไฟล์ชีต สังเกต ID ของชีตซึ่งสามารถดึงมาจาก URL ของชีตได้ในลักษณะเดียวกับเมื่อก่อน เช่น "https://docs.google.com/spreadsheets/d/SHEET_ID" โปรดสังเกตชื่อแท็บด้วย
จากนั้นรัน python import_report.py
ระบบจะถามคุณเกี่ยวกับ ID แผ่นงานและชื่อแท็บดังกล่าว โดยจะพิมพ์ข้อมูลเกี่ยวกับการติดตามที่กำลังนำเข้า และจะพิมพ์แถวใดๆ ที่ไม่พบกลุ่มที่ถูกต้องด้วย (หมายเหตุ: ที่อยู่ไม่ได้รับการจัดรูปแบบเหมือน "เมือง รัฐ" ดังนั้นสำหรับส่วนนี้ ฉันขอแนะนำให้ใช้จุดเริ่มต้นของที่อยู่เป็นคีย์กลุ่มของคุณ เช่น '123 Fake St' (ไม่มีเครื่องหมายคำพูด) ในการกำหนดค่ากลุ่มของคุณ)
การนำเข้าคำสั่งซื้อด้วยตนเอง
บางครั้งอาจต้องการเพิ่มออบเจ็กต์การติดตามลงในพื้นที่เก็บข้อมูลด้วยตนเอง โดยเรียกใช้สคริปต์ manual_input.py
หากคุณเรียกใช้โดยไม่มีข้อโต้แย้ง ระบบจะขอชุดอินพุตจากคุณ (ยังช่วยให้คุณลบออบเจ็กต์การติดตามที่มีอยู่ได้ด้วย) อาร์กิวเมนต์ส่วนใหญ่เป็นทางเลือกและจะพยายามกรอกค่าเริ่มต้นที่เหมาะสม แต่ต้องระบุหมายเลขติดตาม หมายเลขคำสั่งซื้อ และช่องกลุ่ม
หากคุณต้องการเรียกใช้อินพุตทั้งหมดในขั้นตอนเดียวโดยเพิ่มออบเจ็กต์การติดตามใหม่ในรูปแบบที่ง่ายที่สุด เพียงเรียกใช้เป็นคำสั่งเดียว:
python manual_input.py -a -t TRACKING_NUMBER -g GROUP -o ORDER_NUMBER
เช่น
python manual_input.py -a -t TBA1234567890 -g mysbuyinggroup -o 123-1234567-1234567
การบริจาค
ซอฟต์แวร์นี้ฟรีโดยสมบูรณ์ภายใต้ลิขสิทธิ์ GNU Affero General Public License อย่างไรก็ตาม หากคุณรู้สึกว่าต้องการบริจาคเงินให้ฉัน คุณสามารถส่งเงินจำนวนเท่าใดก็ได้ผ่าน Paypal ไปที่ https://paypal.me/GustavBrodman