פיתוח צ'אטבוט Viber: רישום, Webhook, מדיה עשירה ופריסה
צוותים רבים מתבלבלים בין חשבון ציבורי של Viber לבין Bot API כשהם מתחילים אוטומציה, ובוחרים בסוג חשבון שגוי. הם מבזבזים זמן על ביורוקרטיה או נתקלים במגבלות של Bot API למרות יכולות המדיה העשירה והמקלדת. בחירה נכונה מההתחלה חוסכת עד שבועיים של פיתוח.
בעיה נפוצה נוספת היא webhook ללא אימות חתימה. ללא בדיקת HMAC, תוקף יכול לשלוח הודעה מזויפת בשם משתמש. אנו תמיד מיישמים אימות X-Viber-Content-Signature כדי לחסל וקטור התקפה זה לחלוטין.
למה Viber Bot API עדיף לאוטומציה
Viber Bot API נרשם דרך developers.viber.com בחינם, ללא חוזה או מידרציה. אתה מקבל auth_token תוך דקות ויכול מיד להגדיר את ה-webhook. בניגוד לחשבון ציבורי, אין דרישות תוכן מחמירות — אתה מחליט אילו הודעות לשלוח.
הבדלים עיקריים:
| קריטריון | בוט Viber | חשבון ציבורי של Viber |
|---|---|---|
| רישום | שירות עצמי, בחינם | דרך שותפים, בתשלום |
| Webhook | כן | כן |
| מדיה עשירה | כן | כן |
| שליחת הודעות המונית | רק למנויים | מנויים + פלחים |
| מידרציה | לא | כן, מחמירה |
| זמן השקה | יום אחד | 2–4 שבועות |
איך להגדיר Webhook ולהבטיח אבטחה
יצירת בוט נעשית דרך לוח הניהול של Viber. לאחר היצירה, מונפק auth_token — המשמש בכל בקשה ל-API בכותרת X-Viber-Auth-Token. ה-webhook מוגדר באמצעות בקשת POST אחת:
import requests
def set_webhook(url: str, auth_token: str):
response = requests.post(
"https://chatapi.viber.com/pa/set_webhook",
headers={"X-Viber-Auth-Token": auth_token},
json={
"url": url,
"event_types": [
"delivered",
"seen",
"failed",
"subscribed",
"unsubscribed",
"conversation_started",
"message"
],
"send_name": True,
"send_photo": True
}
)
return response.json()
# {"status": 0, "status_message": "ok"}Viber מאשר את ה-webhook מיד בתגובה ל-set_webhook — ללא אתגר אימות נפרד כמו ב-WhatsApp/Meta. זה מפשט את האינטגרציה.
אבטחת Webhook
אבטחת webhook מושגת על ידי אימות החתימה של כל בקשה נכנסת. Viber שולח את הכותרת X-Viber-Content-Signature, המכילה HMAC-SHA256 של גוף הבקשה עם ה-auth_token כמפתח.
import hmac, hashlib
def verify_viber_signature(body: bytes, signature: str, auth_token: str) -> bool:
expected = hmac.new(
auth_token.encode(),
body,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)ללא בדיקה זו, ה-webhook שלך יכול לקבל הודעות מזויפות מצדדים שלישיים. אנו מיישמים אימות חתימה ברמת ה-middleware בכל הפרויקטים.
טעויות נפוצות בהגדרת Webhook
- שימוש ב-HTTP במקום HTTPS — Viber דוחה כתובות URL לא מאובטחות.
- התעלמות מ-X-Viber-Content-Signature — הבוט הופך לפגיע.
- auth_token שגוי — ודא שהטוקן מלוח הניהול, לא מחשבון ציבורי.
- חוסר טיפול ב-conversation_started — הבוט לא יכול לברך משתמשים חדשים.
- שליחת הודעות המונית ללא מנויים — Viber חוסם את החשבון.
אילו סוגי הודעות Viber תומך?
Viber תומך ב: טקסט, תמונה, וידאו, קובץ, מדבקה, איש קשר, כתובת URL, מיקום ו-rich_media. מדיה עשירה היא פורמט קרוסלה מותאם אישית עם כפתורים, תמונות וכותרים. מדיה עשירה היא ייחודית ל-Viber — אין אנלוג ישיר בטלגרם. אידיאלית לקטלוגי מוצרים, חדשות וכרטיסי שירות.
דוגמה לשליחת מדיה עשירה:
def send_rich_media(receiver: str, auth_token: str, items: list):
rich_media = {
"Type": "rich_media",
"ButtonsGroupColumns": 6,
"ButtonsGroupRows": 7,
"BgColor": "#FFFFFF",
"Buttons": []
}
for item in items:
rich_media["Buttons"].extend([
{
"Columns": 6,
"Rows": 3,
"ActionType": "open-url",
"ActionBody": item["url"],
"Image": item["image_url"]
},
{
"Columns": 6,
"Rows": 1,
"Text": f"<b>{item['title']}</b>",
"ActionType": "none"
},
{
"Columns": 3,
"Rows": 1,
"Text": "Подробнее",
"ActionType": "open-url",
"ActionBody": item["url"],
"BgColor": "#2db5f5"
}
])
requests.post(
"https://chatapi.viber.com/pa/send_message",
headers={"X-Viber-Auth-Token": auth_token},
json={"receiver": receiver, "type": "rich_media", "rich_media": rich_media}
)
מקלדת וכפתורים חד-פעמיים
מקלדת Viber היא מקלדת מותאמת אישית בתחתית המסך. import requests def set_webhook(url: str, auth_token: str): response = requests.post( "https://chatapi.viber.com/pa/set_webhook", headers={"X-Viber-Auth-Token": auth_token}, json={ "url": url, "event_types": [ "delivered", "seen", "failed", "subscribed", "unsubscribed", "conversation_started", "message" ], "send_name": True, "send_photo": True } ) return response.json() # {"status": 0, "status_message": "ok"} לכפתורים בסיסיים:
keyboard = {
"Type": "keyboard",
"DefaultHeight": True,
"BgColor": "#FFFFFF",
"Buttons": [
{
"Columns": 3,
"Rows": 1,
"Text": "Каталог",
"ActionType": "reply",
"ActionBody": "catalog",
"BgColor": "#f5f5f5"
},
{
"Columns": 3,
"Rows": 1,
"Text": "Поддержка",
"ActionType": "reply",
"ActionBody": "support",
"BgColor": "#f5f5f5"
}
]
}המקלדת נשלחת עם כל הודעה — היא לא "נדבקת" כמו בטלגרם. דפוס סטנדרטי: צרף מקלדת לכל תגובה של הבוט.
אירוע conversation_started
import hmac, hashlib def verify_viber_signature(body: bytes, signature: str, auth_token: str) -> bool: expected = hmac.new( auth_token.encode(), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature) — המשתמש פותח את הצ'אט עם הבוט בפעם הראשונה או דרך קישור עמוק. זה הרגע היחיד שבו ניתן לשלוח הודעת welcome למשתמש לא רשום. לאחר מכן, המשתמש חייב לכתוב (להירשם) לפני שהבוט יכול לשלוח הודעות.
מגבלה: Viber לא מאפשר שליחת הודעות המונית למשתמשים לא רשומים — רק לאלה שנרשמו (אירוע def send_rich_media(receiver: str, auth_token: str, items: list): rich_media = { "Type": "rich_media", "ButtonsGroupColumns": 6, "ButtonsGroupRows": 7, "BgColor": "#FFFFFF", "Buttons": [] } for item in items: rich_media["Buttons"].extend([ { "Columns": 6, "Rows": 3, "ActionType": "open-url", "ActionBody": item["url"], "Image": item["image_url"] }, { "Columns": 6, "Rows": 1, "Text": f"<b>{item['title']}</b>", "ActionType": "none" }, { "Columns": 3, "Rows": 1, "Text": "Подробнее", "ActionType": "open-url", "ActionBody": item["url"], "BgColor": "#2db5f5" } ]) requests.post( "https://chatapi.viber.com/pa/send_message", headers={"X-Viber-Auth-Token": auth_token}, json={"receiver": receiver, "type": "rich_media", "rich_media": rich_media} ) ).
טיפול בשגיאות וניסיונות חוזרים
בעת שליחת הודעות, Viber מחזיר סטטוס keyboard = { "Type": "keyboard", "DefaultHeight": True, "BgColor": "#FFFFFF", "Buttons": [ { "Columns": 3, "Rows": 1, "Text": "Каталог", "ActionType": "reply", "ActionBody": "catalog", "BgColor": "#f5f5f5" }, { "Columns": 3, "Rows": 1, "Text": "Поддержка", "ActionType": "reply", "ActionBody": "support", "BgColor": "#f5f5f5" } ] } ב-webhook. חשוב להגדיר לוגיקת ניסיון חוזר עם backoff אקספוננציאלי. אנו משתמשים ב-Redis לאחסון תור ההודעות ומנסים לשלוח שוב עד 3 פעמים עם השהיות של 5, 30 ו-120 שניות. זה משפר את יכולת המסירה ל-99.8%.
מה כלול בפיתוח בוט Viber
בהזמנת פיתוח בוט Viber מפתח, אתה מקבל:
- רישום והגדרת בוט בלוח הניהול של Viber
- התקנת webhook עם אימות חתימה
- טיפול בכל האירועים (message, conversation_started, subscribed, unsubscribed)
- יישום מדיה עשירה / מקלדת לפי העיצוב שלך
- תרחישי דיאלוג עם ניהול מצב (Redis FSM)
- אינטגרציה עם ה-CRM או מערכות הקצה שלך
- תיעוד Bot API ופרטי גישה
- תמיכה לאחר ההשקה (שבועיים בחינם)
אנו מפתחים פתרונות ניידים כבר למעלה מ-6 שנים — השלמנו יותר מ-30 פרויקטים ב-Viber, טלגרם ו-WhatsApp. המהנדסים שלנו מוסמכים ב-Swift ו-Kotlin, מה שמבטיח איכות קוד גבוהה. כל בוט עובר בדיקות עומס לפני השחרור. אנו מספקים אחריות ל-3 חודשים על פעולת הבוט לאחר ההשקה.
"ב-Viber, בנינו בוט קטלוג עם מדיה עשירה — ההמרה לרכישה עלתה ב-25% בשבוע הראשון" — משוב לקוח.
הערכות זמנים
| סוג בוט | זמן ביצוע |
|---|---|
| בוט מידע פשוט עם מקלדת וטקסט | 1–2 שבועות |
| בוט עם מדיה עשירה ו-FSM בסיסי | 2–4 שבועות |
| בוט מלא עם אינטגרציית CRM ואנליטיקה | 4–7 שבועות |
העלות מחושבת באופן אישי לפי מורכבות ואינטגרציות. צור קשר — נעריך את הפרויקט שלך תוך יום עסקים אחד. פנה אלינו לייעוץ על הפרויקט שלך.







