{"id":1552,"date":"2025-02-20T13:37:24","date_gmt":"2025-02-20T13:37:24","guid":{"rendered":"https:\/\/job.leximco.jp\/?page_id=1552"},"modified":"2025-04-28T20:43:09","modified_gmt":"2025-04-28T13:43:09","slug":"chat-page","status":"publish","type":"page","link":"https:\/\/job.leximco.jp\/en\/chat-page\/","title":{"rendered":"Chat box"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"1552\" class=\"elementor elementor-1552\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3af90f5 e-con-full e-flex e-con e-parent\" data-id=\"3af90f5\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-bc4480d e-con-full e-flex e-con e-child\" data-id=\"bc4480d\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-e047e21 e-con-full e-flex e-con e-child\" data-id=\"e047e21\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-aa81864 elementor-widget elementor-widget-heading\" data-id=\"aa81864\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Online Job consultation<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc65d7a elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"fc65d7a\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4235c61 e-con-full e-flex e-con e-child\" data-id=\"4235c61\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-baf60f5 elementor-widget__width-initial elementor-widget elementor-widget-heading\" data-id=\"baf60f5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u23f0\u30c1\u30e3\u30c3\u30c8\u76f8\u8ac7\u5bfe\u5fdc\u6642\u9593\uff1a9:00\u301c18:00\uff08\u5e73\u65e5\uff1a\u6708\u301c\u91d1\uff09\n\u55b6\u696d\u6642\u9593\u5916\u306e\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u3088\u308a\u3054\u9023\u7d61\u304f\u3060\u3055\u3044\u3002\n\ud83d\udce8\u5fdc\u52df\u30d5\u30a9\u30fc\u30e0\uff5c\ud83d\udce7\u30e1\u30fc\u30eb\uff5c\ud83d\udcf1\u30d5\u30a1\u30f3\u30da\u30fc\u30b8\n\u3067\u304d\u308b\u3060\u3051\u65e9\u304f\u3054\u8fd4\u4fe1\u3044\u305f\u3057\u307e\u3059\u3002\n\u3054\u5229\u7528\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\uff01<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bed35ec elementor-align-right elementor-widget elementor-widget-button\" data-id=\"bed35ec\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6IjUzMSIsInRvZ2dsZSI6ZmFsc2V9\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"48\" height=\"37\" viewbox=\"0 0 48 37\" fill=\"none\"><path id=\"Union\" d=\"M41.9062 11.8953C42.1563 13.1642 42.2812 14.4013 42.2812 15.6067C42.2812 20.4917 40.4688 24.7898 36.8438 28.5012C33.2187 32.2125 28.6875 34.5123 23.25 35.4005C25.6875 36.3521 28.2187 36.8279 30.8438 36.8279C33.3438 36.8279 35.75 36.3838 38.0625 35.4956C40.375 36.3204 43.125 36.7328 46.3125 36.7328C45.1875 35.337 44.25 33.8462 43.5 32.2601C46.5 29.5321 48 26.3283 48 22.6487C48 18.2712 45.9688 14.6868 41.9062 11.8953ZM32.25 26.6455C35.9375 23.6003 37.7812 19.9207 37.7812 15.6067C37.7812 11.2926 35.9375 7.61302 32.25 4.5678C28.5625 1.52259 24.1094 0 18.8906 0C13.6718 0 9.21877 1.52259 5.53125 4.5678C1.84373 7.61302 0 11.2926 0 15.6067C0 20.0476 1.99998 23.8223 6 26.931C5.0625 29.3418 3.78126 31.5622 2.15625 33.5924C7.34378 33.5924 11.4687 32.6408 14.5312 30.7375C16.0313 30.9913 17.5 31.1182 18.9375 31.1182C24.125 31.1182 28.5625 29.6273 32.25 26.6455Z\" fill=\"#B7B7B7\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Reselect Consultant<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-070d163 elementor-widget elementor-widget-shortcode\" data-id=\"070d163\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <div id=\"current-admin-chat\" class=\"current-admin-chat\">\n        <p>No active chat selected.<\/p>\n    <\/div>\n\n\n    <script>\n        document.addEventListener(\"DOMContentLoaded\", function () {\n            let adminData = localStorage.getItem('lastAdminChat');\n            console.log(adminData);\n            if (adminData) {\n                let admin = JSON.parse(adminData);\n                let chatContainer = document.getElementById('current-admin-chat');\n\n                chatContainer.innerHTML = `\n                    <div class=\"admin-info\">\n                        <img decoding=\"async\" src=\"${admin.avatar}\" class=\"admin-avatar\">\n                        <div class=\"admin-details\">\n                            <span class=\"admin-name\">${admin.name}<\/span>\n                            <span class=\"admin-title\">\u30b3\u30f3\u30b5\u30eb\u30bf\u30f3\u30c8<\/span>\n                        <\/div>\n                    <\/div>\n                `;\n            }\n        });\n    <\/script>\n        <style>\n        \/* Th\u00eam CSS cho preview *\/\n        .file-preview-item {\n            margin: 5px;\n            max-width: 100px;\n            position: relative;\n        }\n\n        .preview-image {\n            max-height: 80px;\n            border-radius: 4px;\n        }\n\n        .remove-file {\n            position: absolute;\n            top: -5px;\n            right: -5px;\n            background: red;\n            color: white;\n            border-radius: 50%;\n            width: 18px;\n            height: 18px;\n            line-height: 18px;\n            text-align: center;\n            cursor: pointer;\n        }\n    <\/style>\n\n    <div class=\"chat-container-admin\">\n        <div class=\"chat-box\">\n            <div id=\"chat-messages\" style=\"height: 480px;\"><\/div>\n            <div class=\"chat-input-container\">\n                <input type=\"hidden\" id=\"receiver-id\" value=\"\">\n                <input type=\"hidden\" id=\"guest-id\" value=\"\">\n                <input type=\"text\" id=\"chat-input\" placeholder=\"Type a message...\">\n                <!-- Th\u00eam n\u00fat ch\u1ecdn file v\u00e0 preview -->\n                <!-- Th\u00eam n\u00fat ch\u1ecdn file -->\n                <label for=\"file-upload\" class=\"file-upload-button\">\n                    \ud83d\udcce Attach Files\n                <\/label>\n                <input type=\"file\" id=\"file-upload\" multiple hidden>\n\n\n                <!-- Th\u00eam container preview file -->\n                <div id=\"file-previews\" class=\"file-previews-container\"><\/div>\n\n                <button id=\"send-chat\">\n                    <img decoding=\"async\" src=\"https:\/\/job.leximco.jp\/wp-content\/uploads\/2025\/02\/Vector.svg\" alt=\"Send\">\n                <\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n    <script>\n\n        \/\/ Global variables\n        let selectedFiles = [];\n        let currentReceiverId = null;\n        let currentGuestId = null;\n                    let guestId = JSON.parse(localStorage.getItem(\"guest_id\"))\n                document.addEventListener(\"DOMContentLoaded\", function () {\n                        let chatA = JSON.parse(localStorage.getItem(\"lastAdminChat\"));\n            let id_A = null;\n            if (chatA) {\n                id_A = chatA.id;\n            }\n            if (!id_A) {\n                localStorage.setItem(\"guest_id\", 0);\n                localStorage.setItem(\"guest_name\", '');\n            }\n            \/\/ Get last chat info safely\n            chatA = JSON.parse(localStorage.getItem(\"lastAdminChat\"))\n            id_A = null;\n            id_B = null;\n            if (chatA) {\n                id_A = chatA.id;\n            }\n            chatB = JSON.parse(localStorage.getItem(\"lastUserChat\"))\n            if (chatB) {\n                id_B = chatB.id;\n            };\n            let receiverId = id_A || id_B;\n                            let guestId = JSON.parse(localStorage.getItem(\"guest_id\"))\n                        let receiverInput = document.getElementById('receiver-id');\n            if (receiverInput) {\n                receiverInput.value = receiverId;\n            }\n\n            let guestInput = document.getElementById('guest-id');\n            if (guestInput) {\n                guestInput.value = guestId;\n            }\n\n            fetchChatMessages(receiverId, guestId)\n            \/\/ \ud83d\udd52 Auto-refresh chat messages every 3 seconds\n            setInterval(() => {\n                if (receiverId && guestId) {\n                    fetchChatMessages(receiverId, guestId);\n                }\n            }, 3000);\n\n\n            \/\/ File upload handling\n            const fileInput = document.getElementById('file-upload');\n            if (fileInput) {\n                fileInput.addEventListener('change', handleFileSelect);\n            }\n\n            document.getElementById('send-chat').addEventListener('click', function () {\n                let message = document.getElementById('chat-input').value.trim();\n                let receiverId = receiverInput.value;\n                let guestId = document.getElementById('guest-id').value;\n                console.log(message, receiverId, guestId);\n                if (!receiverId) {\n                    alert('Please select a user to chat with.');\n                    return;\n                }\n                if (!message && selectedFiles.length === 0) {\n                    alert('Please enter a message or attach files.');\n                    return;\n                }\n                let formData = new FormData();\n                formData.append('action', 'send_chat_message');\n                formData.append('message', message);\n                formData.append('receiver_id', receiverId);\n                formData.append('guest_id', guestId);\n                \/\/ \u2705 Append files\n                selectedFiles.forEach((file, index) => {\n                    formData.append(`chat_files[${index}]`, file);\n                });\n\n                fetch('\/wp-admin\/admin-ajax.php', { \/\/ Replace with the correct AJAX URL\n                    method: 'POST',\n                    body: formData\n                })\n                    .then(response => response.json())\n                    .then(data => {\n                        if (data.success) {\n                            document.getElementById('chat-messages').innerHTML += `\n                    <div class=\"chat-message align-right my-message\">\n                        <span class=\"message-text\">${message}<\/span>\n                    <\/div>\n                `;\n                            document.getElementById('chat-input').value = '';\n                            \/\/ \u2705 Clear files\n                            selectedFiles = [];\n                            document.getElementById('file-previews').innerHTML = '';\n                            document.getElementById('file-upload').value = '';\n\n                            scrollToBottom();\n                        } else {\n                            alert('Message failed: ' + data.message);\n                        }\n                    });\n            });\n\n            \/\/ Enter key handler\n            const chatInput = document.getElementById('chat-input');\n            if (chatInput) {\n                chatInput.addEventListener('keydown', function (e) {\n                    if (e.key === 'Enter' && !e.shiftKey) {\n                        e.preventDefault();\n                        sendMessage();\n                    }\n                });\n            }\n        });\n\n        function handleFileSelect(e) {\n            selectedFiles = Array.from(e.target.files).filter(file => validateFile(file));\n            updateFilePreviews();\n        }\n\n        function validateFile(file) {\n            const validTypes = ['image\/jpeg', 'image\/png', 'application\/pdf', 'text\/plain'];\n            const maxSize = 5 * 1024 * 1024; \/\/ 5MB\n\n            if (!validTypes.includes(file.type)) {\n                alert('Only JPG, PNG, PDF, and TXT files are allowed');\n                return false;\n            }\n\n            if (file.size > maxSize) {\n                alert('File size exceeds 5MB limit');\n                return false;\n            }\n\n            return true;\n        }\n\n        function updateFilePreviews() {\n            const previewContainer = document.getElementById('file-previews');\n            previewContainer.innerHTML = '';\n\n            selectedFiles.forEach((file, index) => {\n                const previewItem = document.createElement('div');\n                previewItem.className = 'file-preview-item';\n\n                if (file.type.startsWith('image\/')) {\n                    previewItem.innerHTML = `\n                        <img decoding=\"async\" src=\"${URL.createObjectURL(file)}\" class=\"preview-image\">\n                        <span class=\"remove-file\" data-index=\"${index}\">&times;<\/span>\n                    `;\n                } else {\n                    previewItem.innerHTML = `\n                        <div class=\"file-info\">\n                            <span>${file.name}<\/span>\n                            <span class=\"remove-file\" data-index=\"${index}\">&times;<\/span>\n                        <\/div>\n                    `;\n                }\n\n                previewItem.querySelector('.remove-file').addEventListener('click', (e) => {\n                    const index = parseInt(e.target.dataset.index);\n                    selectedFiles.splice(index, 1);\n                    updateFilePreviews();\n                });\n\n                previewContainer.appendChild(previewItem);\n            });\n        }\n\n        async function sendMessage() {\n            const message = document.getElementById('chat-input').value.trim();\n            const receiverId = document.getElementById('receiver-id').value;\n            const guestId = document.getElementById('guest-id').value;\n\n            if (!receiverId) {\n                alert('Please select a user to chat with');\n                return;\n            }\n\n            if (!message && selectedFiles.length === 0) {\n                alert('Please enter a message or attach files');\n                return;\n            }\n\n            const formData = new FormData();\n\n            formData.append('action', 'send_chat_message');\n            formData.append('message', message);\n            formData.append('receiver_id', receiverId);\n            formData.append('guest_id', guestId);\n\n            \/\/ Add files to FormData\n            selectedFiles.forEach((file, index) => {\n                formData.append(`chat_files[${index}]`, file);\n            });\n\n            try {\n                const response = await fetch('\/wp-admin\/admin-ajax.php', {\n                    method: 'POST',\n                    body: formData\n                });\n\n                const data = await response.json();\n\n                if (data.success) {\n                    \/\/ Clear inputs\n                    document.getElementById('chat-input').value = '';\n                    selectedFiles = [];\n                    document.getElementById('file-previews').innerHTML = '';\n                    document.getElementById('file-upload').value = '';\n\n                    \/\/ Refresh messages\n                    fetchChatMessages(receiverId, guestId);\n                } else {\n                    alert('Failed to send message: ' + (data.message || 'Unknown error'));\n                }\n            } catch (error) {\n                console.error('Error sending message:', error);\n                alert('An error occurred while sending the message');\n            }\n        }\n\n        async function fetchChatMessages(receiverId, guestId) {\n            if (!receiverId || !guestId) return;\n\n            fetch(`\/wp-admin\/admin-ajax.php?action=fetch_chat_messages&receiver_id=${receiverId}&guest_id=${guestId}`)\n                .then(response => response.json())\n                .then(data => {\n                    if (data.success) {\n                        renderMessages(data.data);\n                        \/\/console.log(data.data);\n                    }\n                })\n                .catch(error => console.error('Error fetching messages:', error));\n        }\n\n        function renderMessages(messages) {\n            const chatBox = document.getElementById('chat-messages');\n            if (!chatBox) return;\n\n            chatBox.innerHTML = '';\n\n            messages.forEach(msg => {\n                console.log(guestId);\n                const isMe = (msg.sender_id == guestId);\n                const messageDiv = document.createElement('div');\n                messageDiv.className = `chat-message ${isMe ? 'align-right my-message' : 'align-left their-message'}`;\n\n                \/\/ Message content\n                let contentHTML = '';\n                if (msg.message) {\n                    contentHTML += `<div class=\"message-text\">${msg.message}<\/div>`;\n                }\n\n                \/\/ Files\n                \/\/ Files\n                if (msg.file_url) {\n                    \/\/ X\u1eed l\u00fd file_url nh\u01b0 m\u1ed9t \u0111\u1ed1i t\u01b0\u1ee3ng duy nh\u1ea5t thay v\u00ec m\u1ea3ng\n                    const file = {\n                        file_url: msg.file_url,\n                        file_name: msg.file_name,\n                        file_type: msg.file_type\n                    };\n                    if (file.file_type.startsWith('image\/')) {\n                        contentHTML += `\n            <div class=\"message-file\">\n                <a href=\"${file.file_url}\" target=\"_blank\">\n                    <img decoding=\"async\" src=\"${file.file_url}\" class=\"message-image\">\n                <\/a>\n            <\/div>\n                        `;\n                    } else {\n                        contentHTML += `\n            <div class=\"message-file\">\n                <a href=\"${file.file_url}\" download=\"${file.file_name}\">\n                    \ud83d\udcce ${file.file_name}\n                <\/a>\n            <\/div>\n                        `;\n                    }\n                }\n\n                \/\/ Timestamp\n                const messageTime = new Date(msg.created_at + ' UTC').toLocaleString([], {\n                    year: 'numeric',\n                    month: 'short',\n                    day: '2-digit',\n                    hour: '2-digit',\n                    minute: '2-digit',\n                    hour12: false\n                });\n                contentHTML += `<div class=\"message-time\">${messageTime}<\/div>`;\n\n                messageDiv.innerHTML = contentHTML;\n                chatBox.appendChild(messageDiv);\n            });\n\n            scrollToBottom();\n        }\n\n        function scrollToBottom() {\n            const chatBox = document.getElementById('chat-messages');\n            if (chatBox) {\n                chatBox.scrollTop = chatBox.scrollHeight;\n            }\n        }\n        function initChatWithReceiver(receiverId, receiverName, receiverAvatar) {\n            const chatContainer = document.getElementById('current-user-chat');\n            if (chatContainer) {\n                chatContainer.innerHTML = `\n            <div class=\"user-info\">\n                <img decoding=\"async\" src=\"${receiverAvatar}\" class=\"admin-avatar\">\n                <div class=\"admin-details\">\n                    <span class=\"user-name\">${receiverName}<\/span>\n                <\/div>\n            <\/div>\n        `;\n            }\n\n            currentReceiverId = receiverId;\n            document.getElementById('receiver-id').value = receiverId;\n\n            const guestId = document.getElementById('guest-id').value;\n            fetchChatMessages(receiverId, guestId);\n        }\n\n\n    <\/script>\n\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ffe7151 e-flex e-con-boxed e-con e-parent\" data-id=\"ffe7151\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>\u7121\u6599\u30aa\u30b7\u30b4\u30c8\u76f8\u8ac7\u7a93\u53e3 \u23f0\u30c1\u30e3\u30c3\u30c8\u76f8\u8ac7\u5bfe\u5fdc\u6642\u9593\uff1a9:00\u301c18:00\uff08\u5e73\u65e5\uff1a\u6708\u301c\u91d1\uff09 \u55b6\u696d\u6642\u9593\u5916\u306e\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u3088 [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1552","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.8 (Yoast SEO v24.8.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Chat box - Leximco<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/job.leximco.jp\/en\/chat-page\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chat box\" \/>\n<meta property=\"og:description\" content=\"\u7121\u6599\u30aa\u30b7\u30b4\u30c8\u76f8\u8ac7\u7a93\u53e3 \u23f0\u30c1\u30e3\u30c3\u30c8\u76f8\u8ac7\u5bfe\u5fdc\u6642\u9593\uff1a9:00\u301c18:00\uff08\u5e73\u65e5\uff1a\u6708\u301c\u91d1\uff09 \u55b6\u696d\u6642\u9593\u5916\u306e\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u3088 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/job.leximco.jp\/en\/chat-page\/\" \/>\n<meta property=\"og:site_name\" content=\"Leximco\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-28T13:43:09+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/job.leximco.jp\/chat-page\/\",\"url\":\"https:\/\/job.leximco.jp\/chat-page\/\",\"name\":\"Chat box - Leximco\",\"isPartOf\":{\"@id\":\"https:\/\/job.leximco.jp\/#website\"},\"datePublished\":\"2025-02-20T13:37:24+00:00\",\"dateModified\":\"2025-04-28T13:43:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/job.leximco.jp\/chat-page\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/job.leximco.jp\/chat-page\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/job.leximco.jp\/chat-page\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/job.leximco.jp\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chat box\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/job.leximco.jp\/#website\",\"url\":\"https:\/\/job.leximco.jp\/\",\"name\":\"Leximco\",\"description\":\"\u7121\u6599\u8ee2\u8077\u30b5\u30dd\u30fc\u30c8\",\"publisher\":{\"@id\":\"https:\/\/job.leximco.jp\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/job.leximco.jp\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/job.leximco.jp\/#organization\",\"name\":\"Leximco\",\"url\":\"https:\/\/job.leximco.jp\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/job.leximco.jp\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/job.leximco.jp\/wp-content\/uploads\/2025\/04\/cropped-z6451993174049_bd5eb7045102a0a8c2f06ec3b4dabb6f.jpg\",\"contentUrl\":\"https:\/\/job.leximco.jp\/wp-content\/uploads\/2025\/04\/cropped-z6451993174049_bd5eb7045102a0a8c2f06ec3b4dabb6f.jpg\",\"width\":512,\"height\":512,\"caption\":\"Leximco\"},\"image\":{\"@id\":\"https:\/\/job.leximco.jp\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Chat box - Leximco","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/job.leximco.jp\/en\/chat-page\/","og_locale":"en_US","og_type":"article","og_title":"Chat box","og_description":"\u7121\u6599\u30aa\u30b7\u30b4\u30c8\u76f8\u8ac7\u7a93\u53e3 \u23f0\u30c1\u30e3\u30c3\u30c8\u76f8\u8ac7\u5bfe\u5fdc\u6642\u9593\uff1a9:00\u301c18:00\uff08\u5e73\u65e5\uff1a\u6708\u301c\u91d1\uff09 \u55b6\u696d\u6642\u9593\u5916\u306e\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u3088 [&hellip;]","og_url":"https:\/\/job.leximco.jp\/en\/chat-page\/","og_site_name":"Leximco","article_modified_time":"2025-04-28T13:43:09+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/job.leximco.jp\/chat-page\/","url":"https:\/\/job.leximco.jp\/chat-page\/","name":"Chat box - Leximco","isPartOf":{"@id":"https:\/\/job.leximco.jp\/#website"},"datePublished":"2025-02-20T13:37:24+00:00","dateModified":"2025-04-28T13:43:09+00:00","breadcrumb":{"@id":"https:\/\/job.leximco.jp\/chat-page\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/job.leximco.jp\/chat-page\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/job.leximco.jp\/chat-page\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/job.leximco.jp\/"},{"@type":"ListItem","position":2,"name":"Chat box"}]},{"@type":"WebSite","@id":"https:\/\/job.leximco.jp\/#website","url":"https:\/\/job.leximco.jp\/","name":"Leximco","description":"\u7121\u6599\u8ee2\u8077\u30b5\u30dd\u30fc\u30c8","publisher":{"@id":"https:\/\/job.leximco.jp\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/job.leximco.jp\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/job.leximco.jp\/#organization","name":"Leximco","url":"https:\/\/job.leximco.jp\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/job.leximco.jp\/#\/schema\/logo\/image\/","url":"https:\/\/job.leximco.jp\/wp-content\/uploads\/2025\/04\/cropped-z6451993174049_bd5eb7045102a0a8c2f06ec3b4dabb6f.jpg","contentUrl":"https:\/\/job.leximco.jp\/wp-content\/uploads\/2025\/04\/cropped-z6451993174049_bd5eb7045102a0a8c2f06ec3b4dabb6f.jpg","width":512,"height":512,"caption":"Leximco"},"image":{"@id":"https:\/\/job.leximco.jp\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/job.leximco.jp\/en\/wp-json\/wp\/v2\/pages\/1552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/job.leximco.jp\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/job.leximco.jp\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/job.leximco.jp\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/job.leximco.jp\/en\/wp-json\/wp\/v2\/comments?post=1552"}],"version-history":[{"count":957,"href":"https:\/\/job.leximco.jp\/en\/wp-json\/wp\/v2\/pages\/1552\/revisions"}],"predecessor-version":[{"id":9010,"href":"https:\/\/job.leximco.jp\/en\/wp-json\/wp\/v2\/pages\/1552\/revisions\/9010"}],"wp:attachment":[{"href":"https:\/\/job.leximco.jp\/en\/wp-json\/wp\/v2\/media?parent=1552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}