ย้อนกลับไปที่ "ข่าวสำหรับผู้พัฒนา"

วิธีแสดงภาพเกณฑ์ชี้วัดบัญชี WhatsApp ในแอพของคุณ

API การจัดการธุรกิจของ WhatsApp ช่วยให้คุณเข้าถึงเกณฑ์ชี้วัดและการวิเคราะห์เกี่ยวกับบัญชี WhatsApp Business (WABA) ของคุณได้ โดยคุณจะรับข้อมูลเกี่ยวกับบัญชีของคุณได้ 2 ประเภท ดังนี้

  • การวิเคราะห์สำหรับข้อความ: จำนวนข้อความที่ส่งและส่งถึงผู้รับจากหมายเลขโทรศัพท์ที่เชื่อมโยงกับ WABA บัญชีใดบัญชีหนึ่งภายในระยะเวลาที่กำหนด
  • การวิเคราะห์สำหรับการสนทนา: ข้อมูลการสนทนาและค่าใช้จ่ายสำหรับข้อความที่ส่งภายในระยะเวลาที่กำหนด

เมื่อสืบค้นตำแหน่งข้อมูล API คุณจำเป็นต้องระบุว่าคุณต้องการการวิเคราะห์สำหรับข้อความหรือการสนทนาโดยเพิ่ม analytics หรือ conversation_analytics เป็นพารามิเตอร์สำหรับ URL

ตัวอย่างต่อไปนี้คือตัวอย่างคำขอในกรณีที่คุณต้องการเรียกดูการวิเคราะห์ข้อความเกี่ยวกับบัญชีของคุณ

https://graph.facebook.com/v14.0/{whatsapp-business-account-ID}
      ?fields=analytics
      .{filtering-parameters}
      &{access-token}

ในตัวอย่างนี้ เราระบุว่าเราต้องการเรียกดูการวิเคราะห์ข้อความสำหรับหมายเลขโทรศัพท์ที่เชื่อมโยงกับ WABA ที่มี ID ของ WABA ที่ไม่ซ้ำกัน คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับการเรียกดู ID ของ WABA และโทเค็นการเข้าถึงในส่วน "ข้อกำหนด" ที่จะกล่าวถึงต่อไป

นอกจากนี้ เมื่อส่งคำขอ คุณสามารถใช้พารามิเตอร์การกรองเพื่อปรับแต่งผลลัพธ์ได้ ตำแหน่งข้อมูล API การจัดการธุรกิจรองรับ พารามิเตอร์การกรองรวมทั้งหมด 6 รายการ โดยคุณจะต้องระบุพารามิเตอร์ต่อไปนี้

  • start: หากคุณระบุวันที่เริ่มต้น การตอบกลับจะไม่รวมข้อความที่ส่งก่อนวันที่ระบุไว้

  • end: หากคุณระบุวันที่สิ้นสุด การตอบกลับจะไม่รวมข้อความที่ส่งหลังวันที่ระบุไว้

  • granularity: ระบุว่าคุณต้องการให้การวิเคราะห์ที่เรียกดูละเอียดเท่าใด โดยค่าที่ใช้ได้ ได้แก่ HALF_HOUR, DAY และ MONTH

ในส่วนของ conversation_analytics คุณจะมีพารามิเตอร์การกรอง 9 รายการ โดยในนี้มีอยู่ 3 รายการ ได้แก่ start, end และ granularity เป็นพารามิเตอร์ที่ต้องระบุ

ข้อกำหนด

สำหรับบทแนะนำการใช้งานนี้ คุณจะต้องดำเนินการดังนี้

  • ติดตั้ง Python และ Pip ลงบนเครื่องสำหรับผู้พัฒนาในระบบของคุณ*

  • สมัครใช้งานบัญชีผู้พัฒนาใน Meta for Developers, สร้างแอพประเภทธุรกิจ และเพิ่มบัญชี WhatsApp Business ลงในแอพ

  • ตั้งค่า โดยคลิกปุ่ม ตั้งค่า ในตัวเลือก WhatsApp บนหน้า "เพิ่มผลิตภัณฑ์ลงในแอพของคุณ"

หลังจากสร้างแอพประเภทธุรกิจสำหรับ WhatsApp แล้ว คุณจะได้รับ ID ของ WABA และโทเค็นการเข้าถึงชั่วคราว ให้เก็บคีย์ 2 รายการนี้เอาไว้ เพราะคุณจะต้องใช้ตลอดบทแนะนำการใช้งานที่เหลือนี้

คุณสามารถเพิ่มหมายเลข WhatsApp ส่วนตัวของคุณเป็นผู้ส่งหรือใช้หมายเลขโทรศัพท์ทดสอบที่ WhatsApp ให้มาก็ได้

สร้างแอพ Python เพื่อแสดงภาพข้อมูล

ตั้งค่าสภาพแวดล้อมการพัฒนา Python และติดตั้งแพ็คเกจที่จำเป็น

สร้างโฟลเดอร์ ตั้งชื่อ แล้วไปที่โฟลเดอร์ดังกล่าวโดยใช้เครื่องมือบรรทัดคำสั่ง สำหรับบล็อกนี้ เราจะใช้ไลบรารีคำขอสำหรับสร้างคำขอ HTTP และไลบรารี Matplotlib ยอดนิยมสำหรับสร้างการแสดงภาพนิ่ง ภาพเคลื่อนไหว และภาพแบบอินเทอร์แอคทีฟ ให้รันคำสั่งต่อไปนี้เพื่อทำการติดตั้ง

pip install requests matplotlib

ตอนนี้ คุณจะสามารถใช้คำขอ Python เพื่อสืบค้น API สำหรับข้อมูลการวิเคราะห์จาก WhatsApp จากนั้นใช้ Matplotlib เพื่อแสดงภาพเกณฑ์ชี้วัดโดยการพล็อตกราฟด้วยจุดข้อมูลที่ได้รับจาก API

การแสดงภาพจำนวนข้อความที่ส่งต่อวัน

เริ่มต้นด้วยการส่งคำขอข้อมูลการวิเคราะห์ โดยมีวิธีคือ ให้สร้างไฟล์ชื่อ sent.py ในโฟลเดอร์แอพพลิเคชั่นของคุณและนำเข้าทรัพยากรที่ใช้ต่อกัน (Dependency) ที่จำเป็นสำหรับงานนี้ ดังนี้

import datetime
import requests
import matplotlib.pyplot as plt

จากนั้น สร้างคำขอ GET API เพื่อเรียกดูการวิเคราะห์โดยใช้ ID ของ WABA และโทเค็นการเข้าถึงของคุณ คุณสามารถดูค่าเหล่านี้ได้ในแดชบอร์ดของบัญชีผู้พัฒนาของคุณบน Meta for Developer โดยโค้ดสำหรับคำขอ GET เป็นดังนี้

key = 'put-your-access-token-here'
waba_id = 'put-your-waba-id-here'

res = requests.get(f'https://graph.facebook.com/v14.0/{waba_id}?fields=analytics.start(1662174000).end(1662548446).granularity(DAY)&access_token={key}')

dict = res.json() 
print(dict)

ในคำขอด้านบน เราแสดงวันที่เริ่มต้นในรูปแบบ UNIX ตามที่ API กำหนด คุณสามารถใช้ตัวแปลงฟรีนี้เพื่อแปลงไปมาระหว่างประทับเวลาที่มนุษย์สามารถอ่านได้กับรูปแบบ UNIX โดยโค้ดจะแปลงการตอบกลับเป็นรูปแบบ JSON ในบรรทัดสุดท้ายและทำการพิมพ์

เรียกใช้คำสั่งต่อไปนี้เพื่อรันโค้ด

python app.py

หากมีการใช้หมายเลขโทรศัพท์ที่เชื่อมโยงกับ WABA เพื่อส่งข้อความในช่วงเวลาที่ระบุ เราจะได้รับอ็อบเจ็กต์พจนานุกรมการตอบกลับซึ่งมีลักษณะดังนี้

{
  "analytics": {
    "phone_numbers": [
      "16505550111",
      "16505550112",
      "16505550113"
    ],
    "country_codes": [
      "US",

    ],
    "granularity": "DAY",
    "data_points": [
      {
        "start": 1662174000,
        "end": 1662260400,
        "sent": 199251,
        "delivered": 183001
      },
      {
        "start": 1662260400,
        "end": 1662346800,
        "sent": 162489,
        "delivered": 141234
      },
      {
        "start": 1662346800,
        "end": 1662433200,
        "sent": 67902,
        "delivered": 53902
      },
      {
        "start": 1662433200,
        "end": 1662519600,
        "sent": 129521,
        "delivered": 117832
      }
    ]
  },
  "id": "952305634918047"
}

ในกรณีนี้ รายการ data_points มีพจนานุกรม 4 ชุด โดยแต่ละชุดมีจำนวนข้อความที่หมายเลข WhatsApp ที่เชื่อมโยงอยู่ได้ส่งและส่งถึงผู้รับในช่วงวันที่ที่ระบุ

เมื่อคุณมีข้อมูลแล้ว คุณจะต้องเรียกดูข้อมูลที่จำเป็น เนื่องจากเราต้องการแสดงภาพจำนวนข้อความที่ส่งในแต่ละวัน เราจึงต้องเรียกดูค่า start และ sent จากพจนานุกรมแต่ละชุด

ในการดำเนินการดังกล่าว ให้เรียกใช้คำสั่งวนซ้ำ (Loop Through) กับจุดข้อมูลโดยใช้คำสั่งวนซ้ำ for...in ใน Python แปลงเวลาเริ่มต้นจากรูปแบบ UNIX เป็นเวอร์ชั่นที่มนุษย์สามารถอ่านได้ให้กับแต่ละอ็อบเจ็กต์ข้อมูล จากนั้น ให้เรียกดูเฉพาะวันที่เป็นตัวเลขของเดือนและเพิ่มลงในรายการวัน จัดเก็บจำนวนข้อความที่ส่งในอีกรายการหนึ่งที่ชื่อ no_of_msgs_sentดังนี้

days = []
no_of_msgs_sent = []

data_points = dict.get("analytics").get("data_points")

for point in data_points:
    
    # Get date in human readable format
    x = datetime.datetime.fromtimestamp(point.get('start'))
    
    # Get just the day in string format
    y = x.strftime("%d")
    
    days.append(y)
    
    # Add the number of sent messages to the list 
    no_of_msgs_sent.append(point.get('sent'))
    
print(days)
print(no_of_msgs_sent)

If you run the code, you get two lists:

['03', '04', '05', '06'] // days
[196093, 147649, 61988, 132465] // number of messages

Now that you have what you need, it's time to visualize it. Add the following code to app.py:

plt.plot(days, no_of_msgs_sent)

plt.title('Our Graph')
plt.xlabel('Days')
plt.ylabel('Number of messages sent')

plt.show()

ในขั้นตอนนี้ คุณจะพล็อตกราฟพื้นฐานโดยให้วันที่อยู่บนแกน X และจำนวนข้อความที่ส่งอยู่บนแกน Y

บันทึกไฟล์แล้วรันโค้ดของคุณ หากคุณใช้ Linux แล้วได้รับข้อความแสดงข้อผิดพลาดดังต่อไปนี้

UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

ให้ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง tkinter แล้ว หากยังไม่ติดตั้ง ให้รันคำสั่งต่อไปนี้เพื่อติดตั้ง

sudo apt-get install python3-tk

หากคุณรันโค้ด คุณจะได้รับกราฟที่มีลักษณะดังนี้

ขั้นตอนต่อไป คุณจะสร้างกราฟเพื่อแสดงภาพจำนวนข้อความที่ส่งถึงผู้รับ

การแสดงภาพข้อมูลสำหรับหมายเลข WhatsApp ที่ต้องการ

ในส่วนก่อนหน้านี้ เราไม่ได้ระบุหมายเลขโทรศัพท์ในคำขอ ด้วยเหตุนี้ API จึงส่งคืนข้อมูลสำหรับหมายเลขโทรศัพท์ทั้งหมดที่เชื่อมโยงกับ WABA ภายในวันที่เริ่มต้นและวันที่สิ้นสุดที่ได้ระบุไว้

อย่างไรก็ตาม หากคุณต้องการเรียกดูข้อมูลการวิเคราะห์สำหรับหมายเลขโทรศัพท์หนึ่งหรือหลายหมายเลขแต่ไม่ใช่ทั้งหมด คุณจะต้องใส่หมายเลขโทรศัพท์ในอาร์เรย์แล้วส่งต่อไปยังเมธอด .phone_numbers เมื่อสร้างคำขอดังนี้

res = requests.get(f'https://graph.facebook.com/v14.0/{waba_id}?fields=analytics.start(1662174000).end(1662548446).phone_numbers([16505550111, // others]).granularity(DAY)&access_token={key}')

โค้ดที่เหลือใน sent.py จะยังคงเหมือนเดิม โดยคุณจะได้รับเฉพาะการวิเคราะห์สำหรับหมายเลขโทรศัพท์ที่ระบุเท่านั้นเมื่อคุณรันโค้ดดังกล่าว

การแสดงภาพจำนวนข้อความที่ส่งถึงผู้รับต่อวัน

ในเนื้อหา 2 ส่วนก่อนหน้านี้ เราได้พล็อตกราฟเพื่อแสดงภาพจำนวนข้อความที่ส่งในแต่ละวันจากหมายเลขโทรศัพท์ที่เชื่อมโยงผ่าน WhatsApp คราวนี้เราจะมาพล็อตกราฟที่แสดงภาพจำนวนข้อความที่ส่งถึงผู้รับในแต่ละวันบ้าง

สร้างไฟล์ใหม่แล้วตั้งชื่อว่า delivered.py จากนั้น ให้คัดลอกโค้ดจาก sent.py ไปยัง delivered.py

ขั้นตอนต่อไป ให้ทำการเปลี่ยนแปลงบางส่วนกับโค้ดใน delivered.py ก่อนอื่น ให้เปลี่ยนชื่อตัวแปรที่ด้านบนสุดจาก no_of_msgs_sent เป็น no_of_msgs_del เพื่อให้สัมพันธ์กับประเภทข้อมูลที่คุณจะจัดเก็บ

จากนั้น ในคำสั่งวนซ้ำ for...in ให้เปลี่ยนค่าในเมธอด point.get จาก sent เป็น delivered ด้านล่างนี้คือตัวอย่างที่แสดงให้เห็นว่าโค้ดของคุณควรมีลักษณะอย่างไรหลังจากทำการเปลี่ยนแปลง

# Variables go here

for point in data_points:
    
    # Code for getting human readable date goes here    
    
    # Now add the number of delivered messages to the list  
    no_of_msgs_del.append(point.get('delivered'))

print(day)
print(no_of_msgs_del)

Finally, specify no_of_msgs_del in the plt.plot method and update the label shown on the y-axis:

plt.plot(days, no_of_msgs_del)

plt.title('Our Graph')
plt.xlabel('Days')
plt.ylabel('Number of messages delivered')

plt.show()

เมื่อรันโค้ดบนเทอร์มินัลของคุณแล้ว (ด้วย delivered.py ใน python) คุณจะได้รับกราฟที่มีลักษณะดังตัวอย่างด้านล่าง

หลังจากที่คุณได้แสดงข้อมูลการวิเคราะห์ 2 ชุดสำหรับข้อความแล้ว ต่อไปคุณจะต้องแสดงค่าใช้จ่ายของข้อความโดยใช้ conversation_analytics

การแสดงภาพค่าใช้จ่ายของข้อความที่ส่งต่อวัน

สร้างไฟล์ใหม่อีกครั้งสำหรับส่วนนี้ แล้วตั้งชื่อไฟล์ว่า cost.py ให้คัดลอกโค้ดจาก sent.py ไปยัง cost.py จากนั้นเราจะทำการเปลี่ยนแปลงบางส่วนกัน

ก่อนอื่น ให้เปลี่ยนแปลงโค้ดคำขอ เนื่องจากคุณกำลังจะเรียกดูข้อมูลการสนทนา ให้ตั้งค่าพารามิเตอร์ fields เป็น conversation_analytics และตั้งค่า granularity เป็น daily

res = requests.get(f'https://graph.facebook.com/v14.0/{waba_id}?fields=conversation_analytics.start(1662174000).end(1662548446).granularity(DAILY).phone_numbers([])&access_token={key}')

โปรดทราบว่าช่อง conversation_anaytics รองรับพารามิเตอร์การกรองอื่นๆ หลายรายการสำหรับการเรียกดูข้อมูลประเภทอื่นๆ หากต้องการเรียนรู้เพิ่มเติม โปรดอ่านเอกสารประกอบฉบับเต็ม

หลังจากส่งคำขอข้างต้นแล้ว คุณควรได้รับอ็อบเจ็กต์การตอบกลับที่คล้ายกับตัวอย่างต่อไปนี้อย่างมาก

{
  "conversation_analytics": {
    'data': {
        "data_points": [
          {
            "start": 1662174000,
            "end": 1662260400,
            "conversation": 5250,
            "cost": 45.0532
          },
          {
            "start": 1662260400,
            "end": 1662346800,
            "conversation": 2250,
            "cost": 25.0290
          },
          {
            "start": 1662346800,
            "end": 1662433200,
            "conversation": 800,
            "cost": 0.0000
          },
          {
            "start": 1662433200,
            "end": 1662519600,
            "conversation": 3150,
            "cost": 33.2015
          }
        ]
    }
  },
}

อย่างที่ได้เห็นในตัวอย่างข้างต้น data_points จะอยู่ในพจนานุกรมข้อมูล โดยแต่ละจุดข้อมูลในพจนานุกรมจะมีจำนวนการสนทนาและค่าใช้จ่ายอยู่

จากนั้น ใน cost.py ให้เปลี่ยนตัวแปรที่ด้านบนสุดจาก no_of_msgs_del เป็น cost_of_convo ในคำสั่งวนซ้ำ for...in ให้เปลี่ยนค่าในเมธอด point.get จาก delivered เป็น cost ด้านล่างนี้คือตัวอย่างที่แสดงให้เห็นว่าโค้ดของคุณควรมีลักษณะอย่างไรหลังจากทำการเปลี่ยนแปลง

days = []
cost_of_convo = []

data_points = dict.get('conversation_analytics').get("data").get("data_points")

for point in data_points:
   
    x = datetime.datetime.fromtimestamp(point.get('start'))   
    y = x.strftime("%d")
    
    days.append(y)
    
    # Add the cost of messages in each data point
    cost_of_convo.append(point.get('cost'))

Now, to plot a graph visualizing it:

plt.plot(days, cost_of_convo)

plt.title('Our Graph')
plt.xlabel('Days')
plt.ylabel('Cost of messages sent')

plt.show()

หากคุณรันโค้ดโดยใช้เทอร์มินัล (ด้วย cost.py ใน python) คุณจะได้รับกราฟที่มีลักษณะดังนี้

เท่านี้ก็เรียบร้อย!

หากต้องการดำเนินการเพิ่มเติม คุณสามารถทำตามวิธีเดียวกันนี้เพื่อแสดงภาพเกณฑ์ชี้วัดอื่นๆ ที่ API การจัดการ WhatsApp Business มีให้ใช้งานได้

บทสรุป

ในบทแนะนำการใช้งานนี้ เราใช้ไลบรารีการแสดงภาพข้อมูล matplotlib เพื่อแสดงภาพข้อมูลที่แสดงจำนวนข้อความที่ส่งต่อวัน จำนวนข้อความที่ส่งถึงผู้รับต่อวัน และค่าใช้จ่ายของการสนทนาผ่านข้อความแต่ละครั้ง

API การจัดการ WhatsApp Business มีพารามิเตอร์การกรองเหล่านี้และอื่น ๆ อีกมากมายให้คุณใช้งาน ซึ่งคุณใช้เพื่อระบุเกณฑ์ชี้วัดที่คุณต้องการในแต่ละคำขอได้ หากต้องการเรียนรู้เพิ่มเติม โปรดอ่านเอกสารประกอบเกี่ยวกับ API ฉบับเต็ม

ในฐานะผู้พัฒนา API การจัดการ WhatsApp Business จะให้ข้อมูลและเกณฑ์ชี้วัดที่เกี่ยวข้องจากบัญชี WhatsApp ของผู้ใช้ของคุณ ตัวอย่างเช่น คุณสามารถแสดงให้ผู้ใช้ของคุณเห็นจำนวนข้อความบน WhatsApp ที่ส่งในวันที่ระบุอยู่บนแดชบอร์ดของผู้ใช้ดังกล่าวได้

ความเป็นไปได้ไม่มีที่สิ้นสุด!

*Meta จะไม่รับผิดชอบต่อแอพใดๆ ของบุคคลที่สาม