Call +1 (SMB)-AI-AGENT to book a meeting with the SeaVoice AI agent.
Available 24/7
Back to Blog
ديسكورد (3/3): ديسكورد و تويليو فلكس: آوردن مركز تماس فلكس به قلمرو ناشناخته

ديسكورد (3/3): ديسكورد و تويليو فلكس: آوردن مركز تماس فلكس به قلمرو ناشناخته

در اين وبلاگ، ما نحوه ادغام يك مركز تماس كامل توسط Seasalt.ai در يك سرور ديسكورد را نشان خواهيم داد.

SeaX Discord

اين آخرين پست ما در يك سري سه قسمتي در مورد تعامل با مشتري در ديسكورد است. اولين وبلاگ ما، “مرز جديدي براي تعامل با مشتري”، به افزايش محبوبيت ديسكورد و فرصت جديدي كه براي برندها براي ايجاد و مشاركت در جوامع آنلاين خود ارائه مي دهد، پرداخت. در قسمت دوم، “چگونه يك انجمن ديسكورد و ربات براي برند خود ايجاد كنيم”، ما نحوه ايجاد يك سرور ديسكورد براي برند شما و نحوه ادغام يك ربات براي مديريت تعديل سرور، اطلاعيه ها، بازخورد كاربران و غيره را بررسي كرديم. سرانجام، در اين وبلاگ ما نمايشي از نحوه ادغام يك مركز تماس كامل توسط ما در Seasalt.ai در يك سرور ديسكورد ارائه خواهيم داد كه به برندها امكان مي دهد تمام جنبه هاي مراقبت از مشتري را در اين پلتفرم مديريت كنند.

فهرست مطالب

نمايش خدمات مشتري ديسكورد

اگر مشتاق هستيد كه به اصل مطلب برويد و محصول نهايي را ببينيد، ابتدا ويديوي نمايشي نهايي را ارائه مي دهيم:

هدف ما اين است كه نشان دهيم چگونه مي توان ديسكورد را در نرم افزار خدمات مشتري موجود (در اين مورد، تويليو فلكس) ادغام كرد تا ارزش بيشتري به سرور رسمي يك برند اضافه شود. براي مشاهده دقيق تر پياده سازي ما به خواندن ادامه دهيد.

تويليو فلكس

تويليو يك شركت ارتباطي معتبر است كه API هايي براي مديريت پيام هاي متني، تماس هاي تلفني، ايميل ها، پيام هاي چت و موارد ديگر ارائه مي دهد. فلكس يكي از محصولات شاخص تويليو است: يك مركز تماس مبتني بر ابر مقياس پذير كه پيام ها و تماس ها را از هر منبعي به نمايندگان مجازي و زنده هدايت مي كند. ما فلكس را به عنوان پايه اي براي ادغام مركز تماس خود انتخاب كرديم زيرا از قبل پشتيباني عالي براي طيف گسترده اي از كانال ها مانند فيسبوك، پيامك و واتس اپ دارد.

SeaX

SeaX يك مركز تماس ابري است كه به طور عميق با ويژگي هاي پيشرفته هوش مصنوعي ادغام شده است كه به افزايش بهره وري و رضايت مشتري كمك مي كند. SeaX يكي از محصولات شاخص Seasalt.ai است و قبلاً براي مشتريان در بيش از 150 كشور عرضه شده است. پلتفرم مركز تماس SeaX بر روي تويليو فلكس ساخته شده است و شامل انواع ويژگي هاي اضافي است كه به نمايندگان زنده امكان مي دهد تا به مشتريان بهتر كمك كنند. برخي از مفيدترين ويژگي ها عبارتند از تبديل متن به گفتار و گفتار به متن داخلي، پايگاه دانش مبتني بر هوش مصنوعي و سيستم مديريت پرونده يكپارچه. براي اطلاعات بيشتر در مورد تمام قابليت هاي پلتفرم SeaX، لطفاً از صفحه اصلي SeaX بازديد كنيد.

سرور نمايشي

حالا ما نحوه راه اندازي سرور ديسكورد خود را بررسي خواهيم كرد. براي اهداف نمايشي، ما سناريويي را تصور كرديم كه در آن سرور ما به عنوان يك انجمن براي بازي مانند Pokémon Go! استفاده مي شد. جدول زير برخي از ويژگي هاي نشان داده شده در سرور ديسكورد ما را بررسي مي كند.

نماي كلي ويژگي هاي سرور ديسكورد خدمات مشتري نمايشي.

نماي كلي ويژگي هاي سرور ديسكورد نمايشي.

راهنماي 1 به چند: كانال هاي رسمي

چندين كانال در سرور براي ارائه يك جريان مستقيم بين مديران/توسعه دهندگان رسمي و بازيكنان راه اندازي شده است. فقط مديران و مديران مي توانند در كانال اطلاعيه ها پست بگذارند و مي تواند شامل پست هاي (دستي يا خودكار) از حساب توييتر، وب سايت يا ساير منابع رسمي باشد.

كانال اطلاعيه ها در سرور ديسكورد، با پستي از يك حساب رسمي توييتر.

كانال #announcements در سرور ديسكورد نمايشي.

كانال گزارش اشكال به بازيكنان امكان مي دهد تا در مورد اشكالات و مشكلات بازي بحث كنند. مديران مي توانند اين كانال را زير نظر داشته باشند تا هرگونه مشكلي را در بازي كه بايد هدف قرار گيرد، شناسايي كنند. علاوه بر اين، كاربران مي توانند با استفاده از دستور اسلش /bug از داخل كانال، گزارش اشكال رسمي ارسال كنند.

كانال گزارش اشكال در سرور ديسكورد، با گزارش اشكال ارسال شده.

كانال #bug-report در سرور ديسكورد نمايشي، با گزارش اشكال ارسال شده.

كانال درخواست ويژگي به بازيكنان امكان مي دهد تا در مورد تغييرات گيم پلي، بهبود كيفيت زندگي، افزودن محتوا و غيره كه دوست دارند به بازي اضافه شود، بحث كنند. مشابه كانال درخواست اشكال، ورودي آنها توسط مديران ديسكورد قابل مشاهده است و آنها مي توانند از دستور اسلش /new_feature براي ارسال درخواست رسمي استفاده كنند.

كانال درخواست ويژگي در سرور ديسكورد، با كاربري كه در حال انجام دستور اسلش است.

كانال #feature-request در سرور ديسكورد نمايشي، با كاربري كه در حال انجام دستور اسلش است.

راهنماي 1 به 1: نماينده خدمات مشتري

بازيكنان مي توانند از دستور اسلش /helpme براي راه اندازي يك پيام مستقيم با يك نماينده استفاده كنند. نماينده خدمات مشتري مي تواند خودكار (نماينده مجازي) يا توسط يك نماينده زنده اداره شود.

براي نمايش خود، ما يك ربات پرسش و پاسخ ساده راه اندازي كرديم كه از پايگاه دانش شركت براي ارائه پيشنهادات مقاله مرتبط به كاربر استفاده مي كند. كاربر همچنين مي تواند درخواست يك نماينده زنده را داشته باشد و در همان چت به يك نماينده زنده در SeaX منتقل مي شود.

كانال خدمات مشتري در سرور ديسكورد، با كاربري كه در حال راه اندازي يك پيام مستقيم است.

كانال #feature-request در سرور ديسكورد نمايشي، با كاربري كه در حال راه اندازي يك پيام مستقيم است.

پايگاه دانش

هنگامي كه كاربر يك پرس و جو را به نماينده خدمات مجازي ارسال مي كند، نماينده مي تواند كاربر را به مقالات مرتبط در پايگاه دانش ارجاع دهد.

انتقال نماينده زنده

هنگامي كه يك كاربر در يك پيام مستقيم با ربات قرار دارد، مي تواند درخواست يك نماينده زنده را داشته باشد. آنها بلافاصله مطلع مي شوند كه يك پرونده براي آنها ايجاد شده است و در حال انتقال به يك نماينده زنده هستند. هنگامي كه نماينده زنده به چت مي پيوندد، آنها نيز يك اعلان دريافت مي كنند.

يك پيام مستقيم با خدمات مشتري، شامل پيشنهادات مقاله پايگاه دانش، انتقال نماينده زنده و مديريت پرونده.

يك پيام مستقيم با خدمات مشتري، شامل پيشنهادات مقاله پايگاه دانش، انتقال نماينده زنده و مديريت پرونده.

در قسمت پشتيباني، نمايندگان زنده مي توانند تماس هاي ورودي و پيام هاي چت را از همه كانال ها (پيامك، فيسبوك، ديسكورد، تماس صوتي و غيره) از طريق يك پلتفرم واحد مديريت كنند. در اين مورد، پلتفرم پشتيباني SeaX است.

رابط SeaX كه نماي نماينده زنده از يك مكالمه با يك كاربر در ديسكورد را نشان مي دهد.

رابط SeaX كه نماي نماينده زنده از يك مكالمه با يك كاربر در ديسكورد را نشان مي دهد.

مديريت پرونده

يكي از ويژگي هايي كه مي خواستيم در اين نمايش بر آن تأكيد كنيم، مديريت پرونده است. راه حل ديسكورد Seasalt.ai با سيستم مديريت پرونده SeaX ادغام مي شود تا پرونده هاي مختلف كاربران را به درستي رديابي كند. هنگامي كه يك كاربر با ربات ديسكورد تعامل مي كند (مانند درخواست يك نماينده زنده يا گزارش يك اشكال)، ما مي توانيم به طور خودكار يك پرونده جديد باز كنيم و تمام اطلاعات مهم در مورد كاربر و مشكلي را كه با آن روبرو هستند ثبت كنيم. اين به نماينده زنده امكان مي دهد تا به راحتي به تمام مشكلات گزارش شده دسترسي داشته باشد و اطمينان حاصل كند كه تا زمان حل شدن پرونده با كاربران پيگيري مي كنند.

ايجاد يك پرونده جديد در سيستم مديريت پرونده SeaX.

ايجاد يك پرونده جديد در سيستم مديريت پرونده SeaX.

مشاهده يك پرونده موجود در سيستم مديريت پرونده SeaX.

مشاهده يك پرونده موجود در سيستم مديريت پرونده SeaX.

بررسي فني عميق

حالا ما محصول نهايي و تمام ويژگي هاي موجود براي اعضاي سرور و نمايندگان زنده اي كه به آنها كمك مي كنند را ديده ايم. اما كل اين موضوع چگونه پياده سازي شد؟ در آخرين پست وبلاگ ما، “چگونه يك انجمن ديسكورد و ربات براي برند خود ايجاد كنيم""، ما نحوه ايجاد سرور ديسكورد براي برند شما و نحوه ادغام يك ربات ديسكورد براي مديريت آن را بررسي كرديم. براي پشتيباني از اين نمايش پيشرفته تر، ما همچنين از SeaChat، موتور هوش مصنوعي محاوره اي Seasalt.ai براي ساخت يك ربات چت ساده استفاده كرديم كه به ربات ديسكورد ما امكان مي دهد تا پرس و جوهاي زبان طبيعي را براي كاربران مديريت كند.

در سمت SeaX، تيم ما با تويليو همكاري نزديكي داشت تا يك راه حل مركز تماس پر از ويژگي را بر روي تويليو فلكس بسازد. براي اطلاعات بيشتر در مورد تويليو فلكس و نحوه عملكرد فرآيند راه اندازي، مي توانيد راهنماي شروع سريع تويليو فلكس را بخوانيد.

پس از آماده كردن سرور ديسكورد، ربات ديسكورد و ربات چت و اطمينان از اينكه يك نمونه كار از SeaX در حال اجرا داريم، بزرگترين چالش اين است كه پيام ها را به درستي از و به كاربر، ربات و نمايندگان زنده در SeaX هدايت كنيم. تويليو در مديريت مسيريابي پيام فوق العاده است، بنابراين هدف ما اين است كه تمام دستورات اسلش را از داخل سرور ربات ديسكورد خود مديريت كنيم و سپس تمام پيام هاي ديگر (مانند پيام هاي مستقيم به ربات چت يا نماينده زنده) را به تويليو ارسال كنيم.

تعريف جريان فلكس

اولين قدم اين است كه اطمينان حاصل كنيم كه هر پيامي كه به تويليو ارسال مي كنيم به مكان صحيح هدايت مي شود. ما يك جريان ساده تويليو راه اندازي كرديم كه ابتدا بررسي مي كند كه آيا كاربر درخواست يك نماينده زنده را داشته است يا خير، و اگر چنين است، پيام هاي بعدي را به SeaX ارسال مي كند. اگر كاربر درخواست يك نماينده زنده را نداشته باشد، ما پيام را به ربات چت براي دريافت پاسخ ارسال مي كنيم. براي اطلاعات بيشتر در مورد نحوه راه اندازي جريان، به مستندات جريان استوديو تويليو مراجعه كنيد.

يك جريان ساده استوديو فلكس كه پيام هاي ورودي را به يك ربات چت يا به SeaX هدايت مي كند.

يك جريان ساده استوديو فلكس كه پيام هاي ورودي را به يك ربات چت يا به SeaX هدايت مي كند.

ايجاد يك كانال سفارشي

بنابراين اكنون ما ايده اي از نحوه مسيريابي پيام هاي ورودي داريم. با اين حال، ديسكورد يك كانال پشتيباني شده بومي توسط تويليو نيست. خوشبختانه، تويليو يك آموزش مفصل در مورد نحوه افزودن يك كانال چت سفارشي به تويليو فلكس دارد. پس از دنبال كردن راهنما براي راه اندازي كانال سفارشي جديد در تويليو، ما بايد در واقع پيام ها را از ديسكورد به تويليو ارسال كنيم.

ابتدا ما كلاينت تويليو را راه اندازي مي كنيم:

from twilio.rest import Client
twilio_client = Client(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)

حالا، هنگامي كه يك پيام ورودي از ديسكورد دريافت مي كنيم، مي توانيم آن پيام را از طريق كلاينت تويليو به تويليو ارسال كنيم. ابتدا، بايد بررسي كنيم كه آيا كاربر از قبل در سيستم تويليو وجود دارد يا خير، و آيا يك كانال چت باز از قبل دارد يا خير.

# فراخواني متد get_user براي بررسي وجود كاربر و ايجاد كاربر جديد در صورت عدم وجود
user = await get_user(user_id, twilio_client, TWILIO_SERVICE_SID)

# دريافت كانال هايي كه كاربر در آنها حضور دارد
user_channels = twilio_client.chat \
        .services(TWILIO_SERVICE_SID) \
        .users(user_id) \
        .user_channels \
        .list()

اگر كاربر يك كانال چت باز موجود داشته باشد، بايد از آن استفاده كنيم تا به تاريخچه چت دسترسي داشته باشيم. اگر كانال چت موجودي وجود نداشته باشد، ما يك كانال جديد براي كاربر ايجاد مي كنيم:

if user_channels:
    channel_sid = user_channels[-1].channel_sid
else:
    channel = twilio_client.flex_api \
            .channel \
            .create(
                flex_flow_sid=FLEX_FLOW_ID,
                chat_user_friendly_name=username,
                chat_friendly_name=chat_name,  # -> نام دوستانه كانال چت
                target=conversation_id,  # -> هويتي كه كاربر چت را به طور منحصر به فرد شناسايي مي كند
                identity=conversation_id,  # -> كاربر، به عنوان مثال/ شناسه پيام مستقيم ديسكورد
        )
    channel_sid = channel.sid

سرانجام هنگامي كه يك كانال چت باز بين كاربر ديسكورد و تويليو داريم، مي توانيم پيام ورودي را به جريان استوديو تويليو ارسال كنيم.

message = twilio_client.chat \
        .services(TWILIO_SERVICE_SID) \
        .channels(channel_sid) \
        .messages \
        .create(
            body=message_text,
            from_=user_id,
            x_twilio_webhook_enabled='true',
            attributes=json.dumps(message_json)  # ارسال هدرها به عنوان ويژگي تا بعداً قابل دسترسي باشد
        )

حالا ما توانايي ارسال تمام پيام هاي ورودي خود از كاربران ديسكورد را مستقيماً به جريان تويليو فلكس خود داريم. در سمت ربات ديسكورد، اطمينان حاصل كنيد كه تمام پيام هاي مستقيم به تويليو ارسال مي شوند. حالا مي توانيد سعي كنيد يك پيام مستقيم به ربات ديسكورد ارسال كنيد و بايد آن را در گزارش هاي جريان استوديو تويليو ببينيد - اما هنوز كار ما تمام نشده است!

ايجاد يك سرور HTTP براي پشتيباني از مسيريابي پيچيده تر

وب هوك پيام هاي خروجي

بنابراين اكنون ما ايده اي از نحوه مسيريابي پيام هاي ورودي خود داريم. با اين حال، هنوز چند قطعه را از دست داده ايم. اول از همه، ما مي دانيم كه اكنون مي توانيم پيام ها را به تويليو برسانيم، اما چگونه به كاربران خود در ديسكورد پاسخ دهيم؟ ربات ديسكورد ما تنها چيزي است كه مجاز به ارسال پيام به سرور و كاربران ديسكورد ما است و تويليو به هر حال نمي داند چگونه پيام هاي ما را به سرور ديسكورد بازگرداند. راه حل اين است كه ما بايد يك وب هوك پيام هاي خروجي راه اندازي كنيم كه هر بار كه پيام جديدي در كانال چت تويليو وجود داشته باشد، فعال مي شود. در داخل آن وب هوك، ما مي توانيم از ربات ديسكورد خود براي ارسال مجدد پيام به سرور خود استفاده كنيم.

براي انجام اين كار، ما ربات ديسكورد خود را در يك سرور HTTP قوي تر ادغام مي كنيم. ما از FastAPI براي راه اندازي يك نقطه پاياني POST ساده استفاده كرديم كه به عنوان وب هوك پيام هاي خروجي ما عمل مي كند. هنگامي كه سرور را راه اندازي كرديم و ربات ديسكورد ما در كنار آن در حال اجرا است، مي توانيم نقطه پاياني POST را تعريف كنيم.

اين نقطه پاياني هر پيام منفردي را كه به كانال چت اضافه مي شود دريافت مي كند، بنابراين ابتدا مي خواهيم همه چيز را به جز پيام هاي خروجي از SeaX فيلتر كنيم. بعد، ما بايد شناسه كانال صحيح را از بدنه پيام بگيريم تا بدانيم پيام را به كجا ارسال كنيم. سرانجام، ما مي توانيم از كلاينت ديسكورد براي ارسال پيام به كانال ديسكورد استفاده كنيم.

@app.post("/forward-to-discord", status_code=200)
async def forward_discord_message(request: Request, response: Response) -> None:
    raw_body = await request.body()
    body = urllib.parse.parse_qs(raw_body.decode())

    # فقط به پيام هاي SDK توجه كنيد (Flex، همه موارد ديگر از API خواهند بود)
    if not body.get('Source') == ['SDK']:
        return

    # پيام هاي Flex حاوي شناسه مكالمه پيام اصلي نيستند
    # ما براي ارسال مجدد پيام به مكالمه در GBM به شناسه مكالمه نياز داريم
    # پيام قبلي را دريافت كرده و شناسه مكالمه را استخراج كنيد
    message = twilio_client.chat \
            .services(TWILIO_SERVICE_SID) \
            .channels(body.get("ChannelSid")[0]) \
            .messages.list(limit=1)[0]

    attributes = json.loads(message.attributes)

    channel = discord_client.get_channel(attributes.get("channel", {}).get("id"))
    if channel:
        await channel.send(body.get("Body", [""])[0].get("text"))
    else:
        logger.error(f"كانال ديسكورد با شناسه يافت نشد: {get_channel_id(req)}!")
        response.status_code = 400

سرانجام، براي اينكه پيام ها به نقطه پاياني ما ارسال شوند، بايد به تويليو اطلاع دهيم كه وب هوك جديد ما چيست. هر كانال چت بايد وب هوك مخصوص به خود را پيكربندي كند. بنابراين، اگر به جايي كه در ابتدا كانال چت جديد را براي كاربر ايجاد كرديم برگرديم، مي توانيم كد اضافي براي پيكربندي وب هوك اضافه كنيم:

webhook = twilio_client.chat \
        .services(TWILIO_SERVICE_SID) \
        .channels(channel_sid) \
        .webhooks \
        .create(
            type='webhook',   
configuration_url=f"{SERVER_HOST}/forward-to-discord",
            configuration_method="POST",
            configuration_filters=["onMessageSent", "onMessageUpdated", "onMediaMessageSent"]
        )

ادغام ربات

بنابراين اكنون پيام هاي خروجي از SeaX بايد به درستي به سرور ديسكورد ما بازگردانده شوند. اما ما هنوز به پيام هايي كه به ربات چت مي روند، رسيدگي نكرده ايم. ما بايد يك نقطه پاياني نهايي راه اندازي كنيم كه از جريان استوديو تويليو فعال مي شود و پيام كاربر را دريافت مي كند، از ربات پرس و جو مي كند و پاسخ را به ديسكورد باز مي گرداند.

@app.post("/chatbot-to-discord", status_code=200)
async def receive_discord_message(request: Request, response: Response):
    """دريافت درخواست POST از تويليو، پرس و جو از ربات و بازگرداندن پاسخ به ديسكورد."""
    req = await request.body()
    # جدا كردن بدنه پيام اصلي از محتواي تويليو
    twilio_body, original_message_body = separate_original_message_body(req.decode())

    bot_response = await query_bot(original_message_body, bot_info)

    if bot_response:
        channel = discord_client.get_channel(original_message_body.get("channel_id"))
        if channel:
            for item in bot_response:
                await channel.send(item.get("text"))

اطمينان حاصل كنيد كه جريان استوديو تويليو وب هوك صحيح براي هدايت پيام ها به ربات را دارد. حالا ما مسيريابي پيام خود را به پايان رسانده ايم! ما مي توانيم يك نماي سطح بالا از تمام مسيريابي پيام را در اين نمودار ببينيم:

نمودار مسيريابي پيام.

نمودار مسيريابي پيام.

خلاصه

در پايان، در اين سري وبلاگ، ما به افزايش محبوبيت ديسكورد و فرصتي كه براي برندها به عنوان يك پلتفرم جديد براي تعامل با مشتريان ارائه مي دهد، پرداختيم. ما برخي از ويژگي هاي اساسي ديسكورد را بررسي كرديم تا نشان دهيم چگونه يك برند مي تواند انجمن آنلاين خود را راه اندازي كند، و همچنين ويژگي هاي پيشرفته تري كه به برندها امكان مي دهد تا تعديل و پشتيباني مشتري را در سرور خود با ربات هاي ديسكورد خودكار كنند. سرانجام، ما نمايش خود را از نحوه ادغام ديسكورد با پلتفرم خدمات مشتري خود، SeaX، براي ارائه ويژگي هاي پيشرفته به جامعه ديسكورد، مانند انتقال نماينده زنده، مديريت پرونده و جستجوي پايگاه دانش مبتني بر هوش مصنوعي، به اشتراک گذاشتيم. براي يك نمايش شخصي، يا براي ديدن اينكه چگونه Seasalt.ai مي تواند به رفع نيازهاي تجاري خاص شما كمك كند، لطفاً فرم “رزرو نمايش"" ما را پر كنيد. براي اطلاعات بيشتر در مورد ادغام فلكس/ديسكورد يا براي تماس با ما، لطفاً از ليست شركاي تويليو Seasalt.ai بازديد كنيد.

Related Articles

Ready to Transform Your Customer Communications?

See how Seasalt.ai can help your business automate support, capture leads, and deliver exceptional customer experiences.

Any questions? We follow up with every message.