{"id":4061,"date":"2026-01-10T19:38:57","date_gmt":"2026-01-10T19:38:57","guid":{"rendered":"https:\/\/www.dgtaware.com\/dgtinstantchat\/?page_id=4061"},"modified":"2026-01-24T11:07:47","modified_gmt":"2026-01-24T11:07:47","slug":"friends","status":"publish","type":"page","link":"https:\/\/www.dgtaware.com\/dgtinstantchat\/friends\/","title":{"rendered":"Friends"},"content":{"rendered":"<div data-spectra-id=\"b7540f6c\"\tstyle=\"overflow: visible; --spectra-background-gradient: linear-gradient(140deg, #00000000 0%, var(--ast-global-color-4) 100%);\" class=\"spectra-background-overlay has-container-overlay spectra-is-root-container alignfull spectra-overlay-color spectra-overflow spectra-background-gradient wp-block-spectra-container\" data-orientation=\"vertical\"\t>\n\t\n<div data-spectra-id=\"spectra-mh0imqpd-qaowlf\" style=\"overflow: visible\" class=\"spectra-overlay-color spectra-overflow wp-block-spectra-container\" data-orientation=\"vertical\">\n\t\n\t<h1 data-spectra-id=\"spectra-a8b25d73-heading\" style=\"--spectra-text-color: var(--ast-global-color-2)\" class=\"has-text-color spectra-text-color wp-block-spectra-content has-text-color has-var-ast-global-color-2-color\">\n\t\tFriends\t<\/h1>\n\n\n\t<p data-spectra-id=\"spectra-a8b25d73-desc\" class=\"wp-block-spectra-content\">\n\t\tHere, you can chat with your friends or accept and decline \u201cHey\u201d requests from other users.\t<\/p>\n\n<\/div>\n\n<\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n        <div id=\"friends_pending_container\" class=\"dgt-friends-container\">\n\n            <h2>Your Friends<\/h2>\n\n            <div class=\"dgt-header-row\">\n                <div>Nickname<\/div>\n                <div>Gender<\/div>\n                <div>Bio<\/div>\n                <div>Action<\/div>\n            <\/div>\n\n            <div id=\"friends_list\" class=\"dgt-list\"><p>Loading data...<\/p><\/div>\n\n            <h2 style=\"margin-top:40px\">Pending Hey Requests<\/h2>\n\n            <div class=\"dgt-header-row\">\n               <div>Nickname<\/div>\n                <div>Gender<\/div>\n                <div>Bio<\/div>\n                <div>Action<\/div>\n            <\/div>\n\n            <div id=\"pending_list\" class=\"dgt-list\"><p>Loading data...<\/p><\/div>\n        <\/div>\n\n        <style>\n            .dgt-friends-container {\n                max-width: 800px;\n                margin: 0 auto;\n                padding: 10px;\n            }\n\n            .dgt-header-row {\n                display: grid;\n                grid-template-columns: 1fr 100px 1fr 150px;\n                gap: 10px;\n                padding: 10px;\n                background: #fff5f1;\/*#CC1939;*\/ \/*#f0f0f0;*\/\n                font-weight: bold;\n                border-bottom: 2px solid #ddd;\n\t\t\t\t\/*color: #ffffff;*\/\n            }\n\n            .dgt-row {\n                display: grid;\n                grid-template-columns: 1fr 100px 1fr 150px;\n                gap: 10px;\n                padding: 10px;\n                border-bottom: 1px solid #eee;\n                align-items: center;\n            }\n\n            .dgt-row button {\n                padding: 6px 12px;\n                border-radius: 6px;\n                border: none;\n                cursor: pointer;\n            }\n\n            .btn-chat { background: #6e60f8; color: white; }\n            .btn-accept { background: #28a745; color: white; }\n            .btn-decline { background: #dc3545; color: white; }\n        <\/style>\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t\n\t\t<script type=\"module\">\n\t\t\t\/\/CONNECT WEBSOCKET CLIENT TO LISTEN TO NOTIFICATIONS\n\t\t\t\/\/does not reconect when you:  ws.close();\n\t\t\t\/\/import WSClient from \"..\/js\/wsclient.js\"; \/\/ if you put it in a separate file\n\t\t\timport WSClient from \"\/dgtinstantchat\/wp-content\/themes\/astra-child\/js\/wsclient.js\";\n\n\n\n\t\t\tconst ws = new WSClient(\"wss:\/\/dgtaware.com:3000\", {autoReconnect: true,reconnectInterval: 3000});\n\n\t\t\t\/\/Not mandatory to rewrite these\n\t\t\t\/\/ws.on(\"open\", () => console.log(\"Connected\"));\n\t\t\t\/\/ws.on(\"message\", msg => console.log(\"Received:\", msg));\n\t\t\t\/\/ws.on(\"close\", () => console.log(\"Disconnected\"));\n\t\t\t\/\/ws.on(\"error\", err => console.error(\"Error:\", err));\n\n\t\t\t\/\/ Send something\n\t\t\t\/\/setTimeout(() => ws.send(\"Hello server\"), 1000);\n\t\t<\/script>\n\t\t\n\t\n\t\t\n\t\t\n\n        <script>\n\t\t\n\t\t\n\t\t\tconst jsLang = \"en\";\n\t\t\n\t\t\n\t\t\tasync function getUnreadList() \n\t\t\t{\n\t\t\t\tconst loggedInUserID = localStorage.getItem(\"userID\") || 0;\n\t\t\t\tconst LoggedInUserSecret  = localStorage.getItem(\"secret\") || \"\";\t\n\t\t\t\t\n\t\t\t\ttry \n\t\t\t\t{\n\t\t\t\t\tconst response = await fetch(\n\t\t\t\t\t\t`\/dgtinstantchat\/wp-json\/dgt\/v1\/unread\/list?logged_in_user=${loggedInUserID}`,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\t\t\theaders: { \"Authorization\": \"Bearer \" + LoggedInUserSecret },\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\treturn await response.json();\n\n\t\t\t\t} \n\t\t\t\tcatch (error) \n\t\t\t\t{\n\t\t\t\t\tconsole.warn(\"Failed to fetch unread list\", error);\n\t\t\t\t\treturn {};\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tvar friends = null;\n\n\t\t\tasync function loadFriendsAndPending() \n\t\t\t{\n\t\t\t\tconsole.log(\"loadFriendsAndPending Called.........................................................\");\n                const userId = localStorage.getItem(\"userID\");\n                if (!userId) \n\t\t\t\t{\n                    console.error(\"No userID in localStorage\");\n                    return;\n                }\n\t\t\t\tconst LoggedInUserSecret  = localStorage.getItem(\"secret\") || \"\";\t\n\t\t\t\t\n                const friendsRes = await fetch(`\/dgtinstantchat\/wp-json\/dgt\/v1\/friends?user_id=${userId}`,{headers: { \"Authorization\": \"Bearer \" + LoggedInUserSecret },});\n\t\t\t\t\n                friends = await friendsRes.json();\n\t\t\t\t\n                const pendingRes = await fetch(`\/dgtinstantchat\/wp-json\/dgt\/v1\/pending-heys?user_id=${userId}`,{headers: { \"Authorization\": \"Bearer \" + LoggedInUserSecret },});\n\t\t\t\t\n                const pending = await pendingRes.json();\n\t\t\t\t\n                renderFriends();\n\t\t\t\t\n                renderPending(pending);\n\t\t\t\t\n\t\t\t\tconst start = performance.now();\n\t\t\t\tconst unreadMap = await getUnreadList(window.userId);\n\t\t\t\tconst end = performance.now(); console.log(\"\u23f1 Total time:\", (end - start).toFixed(2), \"ms\");\n\t\t\t\t\/\/await blokingSleep(4000);\n\t\t\t\t\n\t\t\t\trenderCountingBadges(unreadMap);\n\t\t\tconsole.log(\"[FIM]\");\n            }\n\t\t\t\n\t\t\tfunction renderCountingBadges(unreadMap)\n\t\t\t{\n\t\t\t\tconsole.log(\"renderCountingBadges called...........\");\n\t\t\t\t\/\/unreadMap:{\"20\":1}\n\t\t\t\tfor (const friendId in unreadMap) \n\t\t\t\t{ \n\t\t\t\t\tconst count = unreadMap[friendId]; \n\t\t\t\t\tupdateFriendBadgeUI(friendId, count);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tfunction updateFriendBadgeUI(friendId, count) \n\t\t\t{\n\t\t\t\tconsole.log(\"updateFriendBadgeUI done ######################\");\n\t\t\t\tconst badge = document.getElementById(`badge-${friendId}`);\n\t\t\t\tif (!badge) \n\t\t\t\t{\n\t\t\t\t\tconsole.log(\"BaD BADGE!\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (count > 0) \n\t\t\t\t{\n\t\t\t\t\tbadge.textContent = count;\n\t\t\t\t\tbadge.style.display = \"inline-block\";\n\t\t\t\t\tbadge.style.background = \"red\";\n\t\t\t\t\tbadge.style.color = \"white\";\n\t\t\t\t\tbadge.style.padding = \"2px 6px\";\n\t\t\t\t\tbadge.style.borderRadius = \"12px\";\n\t\t\t\t\tbadge.style.fontSize = \"12px\";\n\t\t\t\t\tbadge.style.minWidth = \"20px\";\n\t\t\t\t\tbadge.style.textAlign = \"center\";\n\t\t\t\t} else {\n\t\t\t\t\tbadge.style.display = \"none\";\n\t\t\t\t}\n\t\t\t}\n\n            async function renderFriends() \n\t\t\t{\n                const container = document.getElementById(\"friends_list\");\n                container.innerHTML = \"\";\n\n                if (!friends || friends.length === 0) {\n                    container.innerHTML = \"<p>No friends yet<\/p>\";\n                    return;\n                }\n\n                friends.forEach(user => {\n\t\t\t\t\n\t\t\t\t\tcontainer.innerHTML += \"<div class=\\\"dgt-row\\\"><div>\"+user.nickname+\"<\/div><div>\"+user.gender+\"<\/div><div>\"+user.bio+\"<\/div>         <div><button class=\\\"btn-chat\\\" onclick=\\\"startChat('\"+user.nickname+\"',\"+user.id+\")\\\">Chat<\/button>   <span class=\\\"badge-unread\\\" id=\\\"badge-\"+user.id+\"\\\" style=\\\"display:none;\\\"><\/span>      <\/div><\/div>\";\n\t\t\t\t\t\n                });\n\t\t\t\t\n\t\t\t\tUpdateFetchedFriendsStatus();\n            }\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\tasync function UpdateFetchedFriendsStatus() \n\t\t\t{\n\t\t\t\t\tconsole.log(\"UpdateFetchedFriendsStatus called..............................................................\");\n\n\t\t\t\t\tif (!friends || friends.length === 0) \n\t\t\t\t\t{\n\t\t\t\t\t\tconsole.log(\"No friends loaded yet.\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t\/\/ Extract nicknames\n\t\t\t\t\tconst nicknames = friends.map(u => u.nickname);\n\n\t\t\t\t\tconsole.log(\"Requesting status for:\", nicknames);\n\n\t\t\t\t\t\/\/ Fetch statuses from your new batch endpoint\n\t\t\t\t\tconst response = await fetch(\"https:\/\/dgtaware.com:9100\/status\/nicks\", \n\t\t\t\t\t{\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\theaders: { \"Content-Type\": \"application\/json\" },\n\t\t\t\t\t\tbody: JSON.stringify({ nicknames })\n\t\t\t\t\t});\n\t\t\t\t\t\n\n\n\t\t\t\t\tconst statusMap = await response.json();\n\t\t\t\t\tconsole.log(\"Status map obtido:\", JSON.stringify(statusMap));\n\t\t\t\t\t\/\/Status map obtido: [{\"nickname\":\"ex\",\"online\":true}]\n\t\t\t\t\t\n\t\t\t\t\tconst statusLookup = {}; \n\t\t\t\t\tfor (const entry of statusMap) \n\t\t\t\t\t{ \n\t\t\t\t\t\tstatusLookup[entry.nickname] = entry; \n\t\t\t\t\t}\n\t\t\t\t\t\n\n\t\t\t\t\t\/\/ Update each user record with online\/offline info\n\t\t\t\t\tfriends = friends.map(user => {\n\t\t\t\t\t\tconst status = statusLookup[user.nickname];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...user,\n\t\t\t\t\t\t\tonline: status ? status.online : false,\n\t\t\t\t\t\t\tchannel: status ? status.channel : null\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tconst unreadMap = await getUnreadList(window.userId);\n\t\t\t\t\n\n\n\t\t\t\t\t\/\/ Update GUI\n\t\t\t\t\tRefreshFriendsListUI();\n\t\t\t\t\tconsole.log(\"UpdateFetchedFriendsStatus called....................FIM..........................................\");\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\/\/const unreadMap = await getUnreadList(window.userId);\n\t\t\t\t\n\t\t\t\trenderCountingBadges(unreadMap);\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\/\/Blocking sleep\n\t\t\t\tfunction blokingSleep(ms) \n\t\t\t\t{\n\t\t\t\t\treturn new Promise(resolve => setTimeout(resolve, ms));\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\tfunction RefreshFriendsListUI() \n\t\t\t\t{\n\t\t\t\t\tconsole.log(\"RefreshFriendsListUI executing\");\n\t\t\t\t\tconst container = document.getElementById(\"friends_list\");\n\t\t\t\t\tif (!container) \n\t\t\t\t\t{\n\t\t\t\t\t\tconsole.log(\"returning permaturely\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tcontainer.innerHTML = \"\";\n\n\t\t\t\t\tfriends.forEach(record => \n\t\t\t\t\t{\n\t\t\t\t\t\tvar cor = record.online ? \"green\" : \"grey\"; \/\/ Online\/offline circle \n\t\t\t\t\t\t\n\t\t\t\t\t\tvar circle = \"<span style=\\\"display:inline-block;width:10px;height:10px;border-radius:50%;background:\"+cor+\";margin-right:6px;\\\"><\/span>\"; \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\tcontainer.innerHTML += \"<div class=\\\"dgt-row\\\"><div>\"+circle+record.nickname+\"<\/div><div>\"+record.gender+\"<\/div><div>\"+record.bio+\"<\/div>         <div><button class=\\\"btn-chat\\\" onclick=\\\"startChat('\"+record.nickname+\"',\"+record.id+\")\\\">Chat<\/button>   <span class=\\\"badge-unread\\\" id=\\\"badge-\"+record.id+\"\\\" style=\\\"display:none;\\\"><\/span>      <\/div><\/div>\";\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t});\n\t\t\t\t}\n\n\n\n\n            function renderPending(list) \n\t\t\t{\n                const container = document.getElementById(\"pending_list\");\n                container.innerHTML = \"\";\n\n                if (!list || list.length === 0) \n\t\t\t\t{\n                    container.innerHTML = \"<p>No pending requests<\/p>\";    \n                    return;\n                }\n\n                list.forEach(user => \n\t\t\t\t{\n                    container.innerHTML += `\n                        <div class=\"dgt-row\">\n                            <div>${user.nickname}<\/div>\n                            <div>${user.gender || \"\"}<\/div>\n                            <div>${user.bio || \"\"}<\/div>\n                            <div>\n                                <button class=\"btn-accept\" onclick=\"acceptHey(${user.id})\">Accept<\/button>\n                                <button class=\"btn-decline\" onclick=\"declineHey(${user.id})\">Decline<\/button>\n                            <\/div>\n                        <\/div>\n                    `;\n                });\n            }\n\t\t\t\n            async function acceptHey(senderId) \n\t\t\t{\n\t\t\t\tconst receiverId = localStorage.getItem(\"userID\");\n\t\t\t\tconst LoggedInUserSecret  = localStorage.getItem(\"secret\") || \"\";\t\n\n\t\t\t\tif (!confirm(\"Are you sure you want to ACCEPT this Hey request?\")) \n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait fetch(\"\/dgtinstantchat\/wp-json\/dgt\/v1\/hey\/accept\", \n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: { \"Content-Type\": \"application\/json\",\"Authorization\": \"Bearer \" + LoggedInUserSecret },\n\t\t\t\t\tbody: JSON.stringify({ sender_id: senderId, receiver_id: receiverId })\n\t\t\t\t});\n\n\t\t\t\tloadFriendsAndPending();\n\t\t\t}\n\n\t\t\tasync function declineHey(senderId) \n\t\t\t{\n\t\t\t\tconst receiverId = localStorage.getItem(\"userID\");\n\n\t\t\t\tif (!confirm(\"Are you sure you want to DECLINE this Hey request?\"))      \n\t\t\t\t{\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait fetch(\"\/dgtinstantchat\/wp-json\/dgt\/v1\/hey\/decline\", \n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: { \"Content-Type\": \"application\/json\" ,\"Authorization\": \"Bearer \" + LoggedInUserSecret},\n\t\t\t\t\tbody: JSON.stringify({ sender_id: senderId, receiver_id: receiverId })\n\t\t\t\t});\n\n\t\t\t\tloadFriendsAndPending();\n\t\t\t}\n\n\n            function startChat(target_user_nickname,target_user_id) \n\t\t\t{\n\t\t\t\tvar url = \"\/dgtinstantchat\/chat-window\/?target_user_id=\"+target_user_id+\"&target_user_nickname=\"+target_user_nickname;\n\t\t\t\tif(jsLang==\"pt\")\n\t\t\t\t{\n\t\t\t\t\turl = \"\/dgtinstantchat\/chat-window-pt\/?target_user_id=\"+target_user_id+\"&target_user_nickname=\"+target_user_nickname;\n\t\t\t\t}\n\t\t\t\telse if(jsLang==\"fr\")\n\t\t\t\t{\n\t\t\t\t\turl = \"\/dgtinstantchat\/chat-window-fr\/?target_user_id=\"+target_user_id+\"&target_user_nickname=\"+target_user_nickname;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\/\/alert(target_user_nickname+\"-\"+target_user_id);\n\t\t\t\t\/\/const url = \"\/dgtinstantchat\/chat-window\/?target_user_id=\"+target_user_id+\"&target_user_nickname=\"+target_user_nickname;\n\n\t\t\t\t\/\/ Redirect to chat window\n\t\t\t\twindow.location.href = url;\n\t\t\t}\n\n           \n\t\t\t\n\t\t\t\/\/ Run something every 10 seconds \n\t\t\tconsole.log(\"Launching timer...\");\n\t\t\tsetInterval( async () => \n\t\t\t{ \n\t\t\t\tconsole.log(\"Fetching unseen messages\"); \n\t\t\t\t\n\t\t\t\tUpdateFetchedFriendsStatus();\n\t\t\t\t\n\t\t\t\t\/\/const unreadMap = await getUnreadList(window.userId);\n\t\t\t\t\/\/renderCountingBadges(unreadMap); \n\n\t\t\t\t\n\t\t\t}, 10000);\n\t\t\t\n\t\t\t\/\/Run this\n\t\t\tdocument.addEventListener(\"DOMContentLoaded\", loadFriendsAndPending);\n\t\t\t\n        <\/script>\n    \n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"unboxed","site-sidebar-style":"unboxed","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"enabled","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-4061","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"root","author_link":"https:\/\/www.dgtaware.com\/dgtinstantchat\/author\/root\/"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/pages\/4061","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/comments?post=4061"}],"version-history":[{"count":6,"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/pages\/4061\/revisions"}],"predecessor-version":[{"id":4250,"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/pages\/4061\/revisions\/4250"}],"wp:attachment":[{"href":"https:\/\/www.dgtaware.com\/dgtinstantchat\/wp-json\/wp\/v2\/media?parent=4061"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}