Websocket احداث

"قم بالاستفادة من أحداث WebSocket لتحديثات فورية في بيفاتيل، حيث يتم إقامة اتصال دائم لاستقبال معلومات قائمة على الأحداث."

استخدم أحداث WebSocket للحصول على تحديثات فورية

يقوم WebSockets بإنشاء اتصال دائم بين العميل والخادم، مما يسمح بالتواصل ثنائي الاتجاه. يدعم نظام بيفاتيل اتصال WebSocket للحصول على تحديثات فورية حول الأحداث الحاصلة على المنصة. يمكن لأي عميل الاتصال بعنوان URL لـ WebSocket في بيفاتيل والتفويض من خلال تقديم الرمز وبدء استقبال التحديثات. سيساعدك هذا الدليل في إعداد اتصال WebSocket مع بيفاتيل ودمج الأحداث المتاحة.

ملحوظة: هذه ميزة تجريبية. يمكن تغيير الوثائق في كل إصدار، ولا يوجد ضمان للتوافق مع الإصدارات السابقة. يرجى التأكد من استخدام الإصدار المحدث للتنفيذ.

لماذا يجب علي استخدام اتصال WebSocket؟

على سبيل المثال، إذا كنت تقوم ببناء عميل لـبيفاتيل، مثل SDK لعميل Android أو iOS، حيث ستحتاج إلى الاستماع إلى آخر الرسائل لتحديث واجهة المستخدم دون إعادة تحميل، أو إذا كنت تقوم بتطوير إضافة لوحة التحكم لتحسين إنتاجية العملاء، قد تحتاج إلى البيانات في الوقت الفعلي.

إعداد اتصال WebSocket مع بيفاتيل

لإعداد اتصال WebSocket مع بيفاتي، تحتاج إلى بدء اتصال باستخدام الرمز النشر المصادقة الذي يتم توفيره من قبل بيفاتيل. عنوان URL للاتصال هو wss://<your-installation-url>/cable. E.g.: wss://app.bevatel.com/cable.

هناك نوعان من رموز pub-sub المتوفرة في بيفاتيل.

  1. رمز PubSub للمستخدم: هذا الرمز لديه امتيازات وصلاحيات الوكيل/المشرف، وسيتلقى جميع الأحداث الموثقة أدناه. يمكنك الحصول على الرمز النشري عن طريق استدعاء واجهة برمجة التطبيقات الخاصة بالملف الشخصي.

  2. رمز pub-sub الاتصال

    لكل جهة اتصال، ستقوم بيفاتيل بإنشاء رمز نشر لكل جلسة يتم إنشاؤها. يمكنك الاتصال بـ WebSocket باستخدام هذا الرمز للحصول على تحديثات الجلسة الحالية. عند إنشاء جهة اتصال باستخدام واجهات البرمجة العامة، ستتلقى رمز النشر.pubsub_token the payload. هذا الرمز يحمل صلاحية الوصول إلى الأحداث المتعلقة بالجلسة الحالية فقط، حيث ستتلقى فقط الأحداث conversation.created، conversation.status_changed، message.created، message.updated، conversation_typing_on، conversation_typing_off، و presence.update.

يرجى الرجوع إلى واجهات برمجة تطبيقات العميل لإنشاء عمليات تكامل تواجه العملاء في الوقت الفعلي باستخدام بيفاتيل.

ملحوظة: قد يتم تدوير هذا الرمز بانتظام بناءً على نوع التثبيت الخاص بك، تأكد من استخدام أحدث رمز.

الاتصال بـ Websocket الخاص ببيفاتيل

يجب عليك إرسال أمر "اشتراك" للاتصال بـبيفاتيل. يتوقع رمز pubSub ورقم الحساب ومعرف المستخدم (في حال استخدام رمز المستخدم). فيما يلي مثال على كيفية الاتصال بـبيفاتيل.

// Add a helper method to convert JSON to a string
const stringify = (payload = {}) => JSON.stringify(payload);

const pubSubToken = "<contact/user-pub-sub-token>";
const accountId = "<your-account-id-in-integer>";
const userId = "<user-id-in-integer-if-using-user-token>";
const connection = new WebSocket(
  "wss://<your-bevatel-installation-host-url>/cable"
);

connection.send(
  stringify({
    command: "subscribe",
    identifier: stringify({
      channel: "RoomChannel",
      pubsub_token: pubSubToken,
      account_id: accountId,
      user_id: userId,
    }),
  })
);

// The expected string in connection.send is of the format:
// {"command":"subscribe","identifier":"{\"channel\":\"RoomChannel\",\"pubsub_token\":\"your-pubsub-token\",\"account_id\": account_id_integer,\"user_id\":user_id_integer }"}

نشر التواجد على خادم WebSocket

للحفاظ على مستخدميك متصلين على بيفاتيل ، يمكنك إرسال حدث تحديث الحالة إلى بيفاتيل كل 30 ثانية. هذا الإجراء سيحافظ على حالة الوكيل/الاتصال على الانترنت، ويضمن تواجدهم المستمر لخدمة أفضل وتجربة فعّالة.

قم بتحديث وجود استخدام الوكيل/المسؤول

الحمولة التي يجب إرسالها إلى الخادم لتحديث حالة الوكيل/المشرف هي كالتالي.

const userPayload = stringify({
  command: "message",
  identifier: stringify({
    channel: "RoomChannel",
    pubsub_token: "<user-pubsub-token>",
    account_id: accountId,
    user_id: userId,
  }),
  data: stringify({ action: "update_presence" }),
});

connection.send(userPayload);
// The expected string in connection.send is of the format:
// {"command":"message","identifier":"{\"channel\":\"RoomChannel\",\"pubsub_token\":\"your-pubsub-token\",\"account_id\": account_id_integer,\"user_id\":user_id_integer ","data":"{\"action\":\"update_presence\"}"}

تحديث حالة جهة الاتصال

الحمولة التي يجب إرسالها إلى الخادم لتحديث حالة جهة الاتصال هي كالتالي.

const agentPayload = stringify({
  command: "message",
  identifier: stringify({
    channel: "RoomChannel",
    pubsub_token: "<user-pubsub-token>",
  }),
  data: stringify({ action: "update_presence" }),
});

connection.send(agentPayload);
// The expected string in connection.send is of the format:
// {"command":"message","identifier":"{\"channel\":\"RoomChannel\",\"pubsub_token\":\"your-pubsub-token\","data":"{\"action\":\"update_presence\"}"}

حمولة Websocket

الكائنات

يمكن أن يحتوي الحدث على أي من الكائنات التالية كحمولة. الأنواع المختلفة من الكائنات المدعومة في بيفاتيل هي كالتالي.

المحادثة

سيتم إرجاع الحمولة التالية للمحادثة.

{
  "additional_attributes": {
    "browser": {
      "device_name": "string",
      "browser_name": "string",
      "platform_name": "string",
      "browser_version": "string",
      "platform_version": "string"
    },
    "referer": "string",
    "initiated_at": {
      "timestamp": "iso-datetime"
    }
  },
  "can_reply": "boolean",
  "channel": "string",
  "id": "integer",
  "inbox_id": "integer",
  "contact_inbox": {
    "id": "integer",
    "contact_id": "integer",
    "inbox_id": "integer",
    "source_id": "string",
    "created_at": "datetime",
    "updated_at": "datetime",
    "hmac_verified": "boolean"
  },
  "messages": ["Array of message objects"],
  "meta": {
    "sender": {
      // Contact Object
    },
    "assignee": {
      // User Object
    }
  },
  "status": "string",
  "unread_count": "integer",
  "agent_last_seen_at": "unix-timestamp",
  "contact_last_seen_at": "unix-timestamp",
  "timestamp": "unix-timestamp",
  "account_id": "integer"
}

جهات الاتصال

سيتم إرجاع الحمولة التالية لجهة اتصال.

{
  "additional_attributes": "object",
  "custom_attributes": "object",
  "email": "string",
  "id": "integer",
  "identifier": "string or null",
  "name": "string",
  "phone_number": "string or null",
  "thumbnail": "string"
}

المستخدم

سيتم إرجاع الحمولة التالية للوكيل/المسؤول.

{
  "id": "integer",
  "name": "string",
  "available_name": "string",
  "avatar_url": "string",
  "availability_status": "string",
  "thumbnail": "string"
}

الرسائل

{
  "id": "integer",
  "content": "string",
  "account_id": "integer",
  "inbox_id": "integer",
  "message_type": "integer",
  "created_at": "unix-timestamp",
  "updated_at": "datetime",
  "private": "boolean",
  "status": "string",
  "source_id": "string / null",
  "content_type": "string",
  "content_attributes": "object",
  "sender_type": "string",
  "sender_id": "integer",
  "external_source_ids": "object",
  "sender": {
    "type": "string - contact/user"
    // User or Contact Object
  }
}

الإشعارات

سيتم إرجاع الحمولة التالية للإخطار.

{
  "id": "integer",
  "notification_type": "string",
  "primary_actor_type": "string",
  "primary_actor_id": "integer",
  "primary_actor": {
    "can_reply": "boolean",
    "channel": "string",
    "id": "integer",
    "inbox_id": "integer",
    "meta": {
      "assignee": {
        "id": "integer",
        "name": "string",
        "available_name": "string",
        "avatar_url": "string",
        "type": "user",
        "availability_status": "string",
        "thumbnail": "string"
      },
      "hmac_verified": "boolean"
    },
    "agent_last_seen_at": "unix-timestamp",
    "contact_last_seen_at": "unix-timestamp",
    "timestamp": "unix-timestamp",
  },
  "read_at": "unix-timestamp",
  "secondary_actor": "object/null",
  "created_at":"unix-timestamp",
  "account_id": "integer",
  "push_message_title": "string"
}

المعرف

سيكون لكل حدث سمة معرف والتي ستكون بالتنسيق التالي.

{
  "identifier": "{\"channel\":\"RoomChannel\",\"pubsub_token\":\"token\",\"account_id\":id,\"user_id\":user_id}"
}

رسالة

سيكون لكل حدث سمة رسالة نعيد فيها اسم الحدث بالإضافة إلى البيانات المرتبطة به. للاطلاع على قائمة الأحداث، راجع الوثائق أدناه.

الأحداث

محادثة.تم إنشاؤها​

يتم إرسال هذا الحدث عند إنشاء محادثة جديدة. بالنسبة للاشتراك في رمز pub-sub المميز، فإنه يرسل فقط الأحداث المتعلقة بالجلسة التي يرتبط بها رمز pub-sub المميز.

متاحة ل: agent/admin, contact

{
  "message": {
    "event": "conversation.created",
    "data": {
      // Conversation object will be available here
    }
  }
}

محادثة.مقروئة

يتم إرسال هذا الحدث إلى الوكلاء/المسؤولين الذين يصلون إلى البريد الوارد عندما تتم قراءة الرسالة بواسطة جهة اتصال.

متاحة ل: agent/admin

{
  "message": {
    "event": "conversation.read",
    "data": {
      // Conversation object will be available here
    }
  }
}

رسالة. تم إنشاؤها

يتم إرسال هذا الحدث إلى الوكلاء والمسؤولين/جهات الاتصال عند إنشاء رسالة جديدة في محادثة يمكنهم الوصول إليها.

متاح ل: agent/admin, contact

{
  "message": {
    "event": "message.created",
    "data": {
      // Message object will be available here
    }
  }
}

رسالة.محدثة

يتم إرسال هذا الحدث إلى الوكلاء والمسؤولين/جهات الاتصال عندما يتم تحديث رسالة في محادثة يمكنهم الوصول إليها.

متاح لـ: agent/admin, contact

{
  "message": {
    "event": "message.updated",
    "data": {
      // Message object will be available here
    }
  }
}

المحادثة.تغيرت_الحالة

يتم إرسال هذا الحدث إلى الوكلاء، المشرفين/الجهات الاتصال عند تحديث حالة المحادثة.

متاح لـ: agent/admin, contact

{
  "message": {
    "event": "conversation.status_changed",
    "data": {
      // Conversation object will be available here
    }
  }
}

الرد في المحادثة

يتم إرسال هذا الحدث إلى الوكلاء والمسؤولين/جهة الاتصال عندما تبدأ جهة اتصال أو وكيل في كتابة رد.

متاح لـ: agent/admin, contact

{
  "message": {
    "event": "conversation.typing_on",
    "data": {
      "conversation": {
        // Conversation object will be available here
      },
      "user": {
        // Contact / Agent,Admin User object will be available here.
      },
      "is_private": "boolean", // Shows whether the agent is typing a private note or not.
      "account_id": "integer"
    }
  }
}

انهاء المحادثة

يتم إرسال هذا الحدث إلى الوكلاء والمسؤولين/جهات الاتصال عندما ينتهي الأمر بجهة اتصال أو وكيل بكتابة رد.

متاح لـ: agent/admin, contact

{
  "message": {
    "event": "conversation.typing_off",
    "data": {
      "conversation": {
        // Conversation object will be available here
      },
      "user": {
        // Contact / User object will be available here.
      },
      "account_id": "integer"
    }
  }
}

تغيير التعيين

يتم إرسال هذا الحدث إلى الوكلاء/المسؤولين الذين لديهم حق الوصول إلى البريد الوارد عند تغيير التعيين.

متاح ل: agent/admin

{
  "message": {
    "event": "assignee.changed",
    "data": {
      // Conversation object will be available here
    }
  }
}

تغيير.الفريق

يتم إرسال هذا الحدث إلى الوكلاء/المسؤولين الذين لديهم حق الوصول إلى البريد الوارد عند تغيير مهمة الفريق.

متاح لـ: agent/admin

{
  "message": {
    "event": "team.changed",
    "data": {
      // Conversation object will be available here
    }
  }
}

تغيير.جهة_الاتصال_في_المحادثة

يتم إرسال هذا الحدث إلى الوكلاء/المسؤولين عند دمج جهة اتصال. سيكون لكائن المحادثة مرجع جهة الاتصال الجديد.

متاح لـ: agent/admin

{
  "message": {
    "event": "conversation.contact_changed",
    "data": {
      // Conversation object will be available here
    }
  }
}

تم .إنشاء جهة الاتصال

يتم إرسال هذا الحدث إلى الوكلاء/المسؤولين عند إنشاء جهة اتصال.

متاح لـ: agent/admin

{
  "message": {
    "event": "contact.created",
    "data": {
      // Contact object will be available here
    }
  }
}

تحديث.جهة الاتصال

يتم إرسال هذا الحدث إلى الوكلاء/المشرفين عند تحديث جهة الاتصال.

متاح لـ: agent/admin

{
  "message": {
    "event": "contact.updated",
    "data": {
      // Contact object will be available here
    }
  }
}

تحديث_الوجود

هذا الحدث متاح لكل من الوكيل وجهة الاتصال، حيث يُعيد حالة توفر المستخدمين في النظام. الحدث الخاص بالوجود الذي يتم تسليمه إلى جهات الاتصال لن يحتوي على معلومات حول جهات الاتصال الأخرى.

متاح لـ: agent/admin

{
  "message": {
    "event": "presence.update",
    "data": {
      "account_id": "integer",
      "users": {
        "user-id": "string"
      },
      "contacts": {
        "contact-id": "string"
      }
    }
  }
}

تم_إنشاء_الإشعار

متاح لـ: agent/admin

{
  "message": {
    "event": "string",
    "data": {
      "notification":{
        // Notification object will be available here
      },
      "unread_count": "integer",
      "count": "integer",
    }
  }
}

Last updated