Idea Exchange Status and Comment Update via ReST API
We are looking for an option to programatically update Status of an Idea (In Idea Exchange page) and add a new comment to an idea by ReST API call. Is this possible? We have hundreds of Ideas that we collect and segregate them to different categories. We would want to do these updates at once instead of opening each page. Any lead on this would help a lot. Thank you.Solved283Views0likes5CommentsUsing Hard Bounce Info to unsubscribe people in their IDP and other connected email marketing tools?
I'm curious if anyone has implemented a way to use hard bounces to unsubscribe people from their community or even back to their database of record if they're using SSO? People join our site of which the community is a portion of what we offer them. I notice that some of the emails bounce back either because the person has disabled or deleted the account. Another portion of the people entered invalid email addresses. I am wondering if there was a way to use the hard bounce information from SendGrid or whatever platform is sending the community emails to inform our IDP that the email address is no longer working so we should unsubscribe them from receiving emails. Ideally by feeding this up to our IDP it would then also inform our email marketing tools to stop sending messages until the person has updated their account and provided a valid email address. Ideally I'd also like to make accounts that have failures switch to an "inactive state" if notifications are hard bouncing but not ban them incase they log back in and update their email address to a valid one. This will give me a sense of how many users go inactive. We do use SSO so I don't think we could set them to an unverified state if email bounces.152Views2likes2CommentsTopics data do not match with dashboard
Hello Developers, I tried to pull the topics count for Month of Nov2021 and I see it is not matching with the dashboard's Topics KPI Query I used to get topics count: SELECT COUNT (DISTINCT Topic_id) FROM khoros_messages WHERE khoros_messages.post_time LIKE ('%2021-11%') AND khoros_messages.conversation_style = 'forum' AND depth = "0" Query answer:1235 Dashboard value for Topics KPI:1,358 Any help will be helpful to understand why numbers are not matching Thank You - PruthviInPruthvi3 years agoContributor102Views0likes0CommentsSetting up Federated Search with Confluence
Hello, We wanted to set up federated search with Confluence within our community. Confluence does provide the REST APIs for the search endpoints to set up search and I was wondering if there was a documentation to help us enable the federated search. While going through Atlas I found an article pertaining to salesforce , a similar documentation would be super helpful? https://community.khoros.com/t5/Integrating-with-Salesforce/Add-federated-search-component-to-the-Salesforce-sidebar/ta-p/145754aamarnath123 years agoContributor432Views0likes1CommentLabels Field For Messages Collection
The labels field for the messages collection only returns the query to retrieve the labels on the message. Is there a field to return the actual labels or do you have to make a separate API call for each message?SolvedAkenefick3 years agoGenius140Views0likes2CommentsSDK - Gulp errors
Hello! I'm trying to install and setting up Community SDK plugin at my machine. After some issues related to the node version used by the plugin, I was able to export the Studio plugin. I can see all the folder structure and files, but when I run gulp, I have this error message: [14:04:07] 'plugin-build' errored after 314 ms [14:04:07] TypeError in plugin 'run-sequence(watch-text)' Message: Cannot read property 'map' of undefined Stack: TypeError: Cannot read property 'map' of undefined at Gulp.<anonymous> (/Users/xxx/community/community-project/node_modules/lithium-sdk/gulp/watch.js:111:55) Does anybody have a solution for this? Can be dependencies that are no longer compatible with the way that gulpfile have been written?648Views0likes10CommentsPlease help Khoros improve the Developer content on Atlas!
Hello Developer Community! You might have noticed a green day-glow banner on the pages in the Developers category (Dev Discussion forum and Dev Blog, etc). Please take a quick moment to fill out a short survey to rate your trust, interest, and experience working with the Developer content on Atlas. Thank you for your time! The Khoros Dev Doc Team SuzieHRyanPiJavidHSuzieH3 years agoKhoros Alumni (Retired)46Views2likes0CommentsCommunity Plugin SDK Experiences
We are considering automation around our development process and would be interested in any experiences, both good and bad, from anyone who uses the Community Plugin SDK on a regular basis to help us decide if this a tool that we should be using. Would anyone care to share some feedback?nunemack3 years agoGuide386Views1like11CommentsModren chat API
I am new to this platform.So, I have some questions regarding this platform modern chat. So, togive you background we want to build a solution to support multilingual chat support. 1) Dose Khoros modernchat supportmultilingual chat conversion? (Like if a customer speaks in Chinese and agent understand only English. So, both will do a conversionin their language and can read the messages in their native language). 2) I have read the Khoros care API documentation but not able to find any API related to modern chat. I have read regarding BOT API but is there any API that I can send a message as customer and agent thru API? (Reson behind this we can send a translated message again like if a customer has typed in Chinese and we can send another message in English so it's easy for an agent to read and the same scenariofor agent side) 3) I have also read about flow API documentation. So using Khoros flow API we can send a message to a customer or agent? 4) Is there any way to get the testing or sandbox environment to play with API and Khoros functionality? It will be great if the community answer my question. Thank youharshitshah19893 years agoContributor103Views1like1CommentCustom Page Context
If I create a custom page that I will link to from a component on the Idea Page for example, is there a way to pass the "context" of that idea page to the custom page so that components there will "know" the board ID of the originating idea board. For example, if I wanted to add the Labels component to the custom page and have it show the correct labels for the originating board. Will adding the parameter/board-id/${coreNode.id} to the URL work?Solved168Views0likes2CommentsSignposting CSS
Hello everyone, Hope you're all well I need some help, I'm trying to edit the size of the signposting in our community like the one we can see in the khoros community so that the size is fixed even when I zoom the page: However, whatever I add to the css it does not work? Could you help me? This is the css code currently: .PCU4-logo-link { background: white; border-radius: 5px; border: 1px solid #4cb6e0; bottom: 80px; box-shadow: 0px 0px 5px #4cb6e0; color: #4cb6e0; display: inline-block; font-size: 13px; font-weight: 300; left: 20px; line-height: 28px; padding: 13px; position: fixed; z-index: 1000; @include media(phone-and-down) { font-size: 20px; max-width:100%; } } Thank you ahead!Solvedadriana4u3 years agoMaven186Views0likes4CommentsSDK, GitHub and sdk.conf.json
I just pushed my project folder in the SDK into GitHub for the first time. After I made the push from my local repo to GitHub my sdk.conf.json was changed locally, even though it was included in my .gitignore: I am able to update the plugin and submit, but wondering where I can update my token when it expires. I also have (not sure if these were present before the GitHub push): server.conf.json template.server.conf.json In the server.conf.json: This appears to be editable, but I've not tried to save any changes. Is this where I can update the token? Are there any other issues in using GitHub that I'm not aware of at this time?SolvedJeanetteF3 years agoKhoros Alumni (Retired)141Views0likes1CommentWhich Page template is used for new ideas?
I am hoping to add a custom content block to the page where new ideas are submitted(the <body> class is PostPage). This would be fairlystraightforward for anIdeaExchange page: I would create a new custom page in studio with the prefix "IdeaExchangePage" and then select it in myadmin under 'custom pages'. But how would I do a similar thing for the Post Page? There's no field for that under Custom Pages in the admin, and post page us not listed under Ideas in the page menu (it's under Messages). Thanks in advance!Solvedid-chalmers3 years agoMentor249Views0likes5CommentsHow to make a knowledge base page as empty
Hi Team, Iam Creating the knowlege base page under forum and i need to hide all the values in knowledge base page. How can i do that. Can anyone help me with that. How to hide all the values in forum and knowledge basev-vemami3 years agoHelper105Views0likes2CommentsRetrieving message revisions via Lithium API v2
Is it possible to retrieve previous revisions of messages via the lithium API? If so, how? The documentation for the v2 API mentions a revisions object, but it also says that these objects are “not collections” and “cannot be queried as collections in the SELECT statement of a LiQL query”.Solveddmilne_uts3 years agoContributor238Views0likes4CommentsHow to add a 'quote' character to email notifications?
I find it difficult to follow threads via email where users 'quote' other users. In other mailing list type systems, there's typically a quote character to the left of the quoted content (in HTML typically a small bar to the left, in plain text it's typically a '>'). But I don't see that anywhere. I'm looking atemail_content.template.immediate_general.textand all I see is eithernotification.HTMLBody andnotification.plainTextBody but that doesn't appear to give enough content hints to style it appropriately. Has anyone tried to solve this problem?Solvedmdfw3 years agoGenius85Views0likes2CommentsInteractive Events Add to Calendar limitations
Hey there, I was checking our interactive events settings and noticed that 'Add to Calendar' has the only option as .ics file - Outlook calendar. Is it any plans to add a google calendar feature? Or am I missing something? I know that it can be done by importingICS and CSV files on a computer. "Open Google Calendar.Settings. In the menu on the left, click Import & Export." However, I don't think it's the best UX for our customers.130Views0likes2CommentsTinyMce/Editor on custom textarea
Hi, I try to use the Khoros TinyMce on a custom textarea element in DOM. I already tried this by using 'window.tinymce.init' or 'window.tinymce.EditorManager.execCommand('mceAddEditor', true, target_element)'. Both commands ends into a vanilla tinymce instance without the Khoros editor settings. Did anyone figure out how to get the Khoros settings of the TinyMce to initiate a TinyMce on a custom field? The target is to add the textarea by JavaScript and initiate the TinyMce after that. Greetings548Views2likes3CommentsIdea Page Sorting Parameters
On an idea page there are URL parameters for sorting and filtering. For example, for sorting there are /tab/most-kudoed,/tab/most-recent, and/tab/popular. There are also parameters you can add for label and status. Are there any other parameters available? For example a /tab/parameter that would sort oldest to newest or anything similar. Also, I was wondering if there was a list somewhere of all the community URLS and their corresponding parameters if any. That would be really useful. ThanksAkenefick3 years agoGenius85Views0likes1CommentException while set language value "users/self/profiles/name/language/set?value"
Anybody facing same exception, Please let me know Exception: REST Error: path="https://communitystage.help.ea.com/ea/restapi/vc/users/self/profiles/name/language/set?value=en_US&restapi.response_style=view" status="error" code="100" message=" profile.language: Language: This value must be one of the following possible values: de, en, es, fr, it, nl, pl, pt-br, ru" ---- FTL stack trace ("~" means nesting-related)88Views0likes1CommentHappy Holidays - Christmas hats for all users
So I made this thing to give all users a random christmas hat out of a set of 8 This is the code of the component (I placed the component in the header quilt) <#-- custom vfz-js-christmas-hats --> <@compress single_line=true> <@liaMarkupCache ttl="60000" variation="node" anonymousOnly="false" /> <#import "theme-lib.common-functions.ftl" as commonUtils /> <#assign query = "SELECT rank.name FROM users WHERE id = '${user.id}' LIMIT 1" /> <#assign result = commonUtils.executeLiQLQuery(query) /> </@compress> <#if result?has_content> </#if> <style> @media screen and (min-width: 767px) and (max-width: 991px) { .lia-quilt-row-header-hero-top .custom-community-hero-left .vfz-hat{ margin-top: -156px !important; } } </style> <script> window.addEventListener('DOMContentLoaded', (event) => { function getImageHashAndConvertTo4digits(str) { const match = str.match(new RegExp(('image-id') + "(.*)" + ('image-dimensions'))) || str.match(new RegExp(('avatar-name') + "(.*)" + ('avatar-theme'))) || str.match(new RegExp(('images') + "(.*)" + ('ziggo'))) || str.match(new RegExp(('avatars') + "(.*)" + ('.'))); var result = match[1].replace('a','0'); result = result.replace('b','1'); result = result.replace(/\D/g,''); result = result.substr(-4); result = parseInt(result); return result; } function setHatType(number) { // 5 6 1 2 7 8 3 4 var hatType = 0; hatType = (number % 2 == 0) ? (hatType + 1) : (hatType + 2); hatType = ((Math.floor(number / 10)) % 2 == 0) ? (hatType + 3) : (hatType - 1); hatType = ((Math.floor(number / 1000)) % 2 == 0) ? (hatType + 1) : (hatType + 3); var transform = ((Math.floor(number / 100)) % 2 == 0) ? "" : 'transform="scale(-1,1)"'; const hatUrl = '/html/assets/christmashat_type'+ hatType +'.svg'; return [hatUrl, transform]; } function getPosition(target) { const position = target.getBoundingClientRect(); return { left: position .left + window.scrollX, top: position .top + window.scrollY } }; function placeHatOnCLass(query_str, parent_str) { var targetElements = document.querySelectorAll(query_str); if (targetElements) { var targetElementsLength = targetElements.length; while(targetElementsLength--) { var targetImage = targetElements[targetElementsLength].getElementsByTagName("img")[0]; if (targetImage) { if (targetImage.className != 'vfz-hat' && targetImage.parentNode.parentNode != 'vfz-hat') { const imageHash = getImageHashAndConvertTo4digits(targetImage.src); const hatType = setHatType(imageHash); var overlay = document.createElement('img'); overlay.className = 'vfz-hat'; overlay.src=hatType[0]; overlay.style.position = 'absolute'; overlay.style.borderRadius = "initial"; overlay.style.objectFit = "initial"; overlay.style.boxShadow = "initial"; overlay.style.zIndex = "2"; targetImageSize = targetImage.offsetWidth; overlay.style.width = targetImageSize*1.8 + 'px'; overlay.style.maxWidth = targetImageSize*1.8 + 'px'; overlay.style.height = targetImageSize*0.9 + 'px'; overlay.style.maxHeight = targetImageSize*0.9 + 'px'; overlay.style.marginLeft = '-' + targetImageSize/2.4 + 'px'; if (targetImage.parentNode.parentNode.className == 'custom-community-hero-welcome custom-community-hero' && window.innerHeight > 767 && window.innerHeight < 990) { overlay.style.marginTop = '-' + 0 + 'px';; } else { overlay.style.marginTop = '-' + targetImageSize/2.4 + 'px'; } if (targetImage.parentNode.parentNode.parentNode.parentNode.className == 'lia-quilt-column-alley lia-quilt-column-alley-left' || targetImage.parentNode.parentNode.parentNode.parentNode.className == 'userColumn lia-data-cell-primary lia-data-cell-text') { targetImage.parentNode.parentNode.parentNode.insertBefore(overlay, targetImage.parentNode.parentNode); } else { targetImage.parentNode.insertBefore(overlay, targetImage); } } } } } } function initiateHats() { <#--<#if coreNode.id == 'phxsb37772'>placeHatOnCLass('.custom-community-hero-left');</#if>--> <#if page.name != 'GroupHubPage'>placeHatOnCLass('.lia-message-view-node-activity-message .lia-user-avatar');</#if> placeHatOnCLass('.lia-avatar-editable .lia-link-navigation'); placeHatOnCLass('.lia-quilt-row-main-top .lia-user-avatar'); placeHatOnCLass('.custom-featured-post-tile .lia-link-navigation'); placeHatOnCLass('.lia-user-info-group .lia-link-navigation'); placeHatOnCLass('.lia-message-view-idea-message-item .lia-user-avatar'); placeHatOnCLass('.lia-thread-reply .lia-user-avatar'); placeHatOnCLass('.lia-quilt-forum-message .lia-user-avatar'); placeHatOnCLass('.UserNavigation .lia-link-navigation'); placeHatOnCLass('.message-list .lia-link-navigation'); placeHatOnCLass('.custom-message-list .lia-link-navigation'); } function refreshHats() { placeHatOnCLass('.lia-message-view-node-activity-message .lia-user-avatar'); placeHatOnCLass('.lia-avatar-editable .lia-link-navigation'); placeHatOnCLass('.lia-quilt-row-main-top .lia-user-avatar'); placeHatOnCLass('.custom-featured-post-tile .lia-link-navigation'); placeHatOnCLass('.lia-user-info-group .lia-link-navigation'); placeHatOnCLass('.lia-message-view-idea-message-item .lia-user-avatar'); placeHatOnCLass('.lia-thread-reply .lia-user-avatar'); placeHatOnCLass('.lia-quilt-forum-message .lia-user-avatar'); placeHatOnCLass('.UserNavigation .lia-link-navigation'); placeHatOnCLass('.message-list .lia-link-navigation'); placeHatOnCLass('.custom-message-list .lia-link-navigation'); } initiateHats(); setTimeout(refreshHats, 1000); setTimeout(refreshHats, 1300); setTimeout(refreshHats, 1600); document.addEventListener('click', function(e) { if(e.target && e.target.id== 'custom-loader-button') { //console.log('custom-loader-button pressed'); //refreshHats(); } }); var observer = new MutationObserver(function (mutations) { <#if page.name != 'GroupHubPage'> if (mutations[0].addedNodes[0]) { if (typeof mutations[0].addedNodes[0].className != "undefined") { if (mutations[0].addedNodes[0].className != 'vfz-hat') refreshHats(); } } if (mutations[0].addedNodes[1]) { if (typeof mutations[0].addedNodes[1].className != "undefined") { if (mutations[0].addedNodes[1].classList.contains('custom-message-tile')) refreshHats(); //if (mutations[0].target == 'div.message-list') refreshHats(); } } </#if> <#if page.name == 'GroupHubPage'> if (mutations[0].addedNodes[0]) { if (typeof mutations[0].addedNodes[0].className != "undefined") { if (mutations[0].addedNodes[0].classList.contains('lia-panel-message')) refreshHats(); } } </#if> }); observer.observe(document.body, { childList: true, subtree: true }); //attributes: true, characterData: true }); </script> <#-- /custom vfz-js-christmas-hats --> These are the assets: https://community.ziggo.nl/html/assets/christmashat_type1.svg https://community.ziggo.nl/html/assets/christmashat_type2.svg https://community.ziggo.nl/html/assets/christmashat_type3.svg https://community.ziggo.nl/html/assets/christmashat_type4.svg https://community.ziggo.nl/html/assets/christmashat_type5.svg https://community.ziggo.nl/html/assets/christmashat_type6.svg https://community.ziggo.nl/html/assets/christmashat_type7.svg https://community.ziggo.nl/html/assets/christmashat_type6.svg Feel free to use and improve all of this. Please share improvementsas I had to implement a lot of dubious workarounds to get it to work. For instance on the GroupHubPage there is some DOM event listener from Khoros that removes all nodes inside the node of the avatar img. So the hats are removed. I had to make a timer to run the function again after the removal event. Does anyone know why Khoros does this??Hoekstra_VFZ3 years agoAdvisor181Views10likes3CommentsLithium Studio training is available
In case you're not aware, we've got a bunch of Flash-based tutorials that you can watch to learn both Studio Basic AND Studio Advanced. If you're interested or have comments about either of the series, just respond here or send a note to education@lithium.com. The videos live on https://community.khoros.com/t5/Khoros-Campus-Training/gh-p/campustraining, so I need to provide you a learning account to provide access, which I'm happy to do. Oh, and they're free Enjoy... Sherry More details here... 203 – Lithium Studio Overview Learn how easy it is to customize your Lithium community! The brief tutorial series (31 minutes in total) shows you the main features of the Lithium Studio add-in, a tool targeted to the Community manager and the community design team. You’ll learn how to customize page layouts and their contents (components or widgets). Then you’ll see how to upload assets like avatars, rank icons and other files that you want to reference in the community. You’ll also learn how to manage the versions that you create in Lithium Studio and request movement into your production site. 1) Lithium Studio Overview (4:11) 2) Lithium Environments (3:09) 3) Configuring Pages (3:20) 4) Creating Custom Content Components (3:18) 5) Creating a Skin (6:04) 6) Uploading Avatars (2:48) 7) Uploading Rank Icons (2:10) Uploading Assets (2:17) 9) Working with Versions (3:27) 213 – Studio Advanced Studio Advanced provides web developers and designers with tools to customize the UI. The course is appropriate for community managers who need to understand what’s possible and for web designers or web developers who are proficient in web design and development. The tutorial series (33 minutes in total) covers the main features in Studio Advanced. You’ll learn how Lithium pages are designed using a grid system and how to create your own page layout. You’ll learn what custom components offer and how to create them (you’ll see a few examples of components using Freemarker). Studio Advanced also offers a way to associate a wrapper and CSS override file to each skin; you’ll learn how to add both wrappers and CSS to a custom skin. We’ll also show you how to change text displayed to users in standard messages and components using the text editor. Finally, we include a glossary of the design elements and a mapping of how they relate to one another. We don’t teach how to write code like CSS, Javascript, XML or Freemarker; if you are a designer or developer, you should already be familiar with that. 1) Studio Advanced Overview (5:38) 2) Creating Layouts (8:55) 3) Creating Custom Components (7:19) 4) Working with Advanced Skins (7:23) 5) Working with the Text Editor (3:40) 6) Glossary and Visual MappingSherryQ3 years agoLithium Alumni (Retired)413Views6likes5CommentsIntroductory guide for new devs for a behind-the-scenes integration?
Hi devs! I’m working to get some agency developers started with a behind-the-scenes integration between our Khoros community and Salesforce (using Mulesoft as middleware). Is there a best practices doc / nice intro deck for this kind of behind-the-scenes integration? I know basically that we should use session key authentication with a service user, and that generally we should use the v2 api as much as possible and v1 when we can’t. But that doesn’t seem like enough guidance. would love additional best practices, links to docs/decks, or other words of wisdom! Thanks!57Views1like0CommentsTwo Community Virtual Developer Training Sessions are Open for Enrollment
The December 2021 and February 2022 Community Virtual Developer Training sessions are open for enrollment to all qualified developers. Thetraining event pageoffers more details on the training format, topics covered, prerequisites, and fees.SuzieH3 years agoKhoros Alumni (Retired)88Views3likes0CommentsTrying to use occasion_data.status
I have a simple liql query where I'm pulling in all upcoming and ongoing (in progress) events. According to this docthere should be an object for occasion_data.status in the results. It's working within my query "WHERE occasion_data.status IN ('upcoming','ongoing')" but I get a null value if I try to use it in my FreeMarker template (e.g., <#assign eventStatus = listItems.occasion_data.status/>) Anyone know why? Did they miss adding this? Am I reading the doc wrong? Is my code incorrect somewhere?677Views0likes13Commentstop messages with interaction Kudos + comments
Hello, I want to create a component to display the Top Message with most interractions Interraction is for me the sum of kudhos and the count of comments. Do you know if there is already something like that somewhere? I found this link to have the sum of kudos but not kudhos + comments: https://developer.khoros.com/khoroscommunitydevdocs/docs/messages#popularity thanks for your help97Views0likes1CommentImage attachment is a message_type = message with unique conversation_id
Hi, I came across how events are recorded and reported through Khoros API and was wondering if someone can help me answer couple of questions based on my exploratory work: 1) Why are images recorded as a separate event with their own stand alone unique conversation_id even when they are part of the same reply or initial post to start the thread (attached pics reflect it as an example) 2) How can we connect these image events back to original conversation_id or message_id they are actually linked with? Looking forward to your feedback! Any help understanding this will be highly appreciated. CC:tyw319Views0likes4CommentsThread-based Unread / Read flag via APIv2 messages query
Hi Lithium Developers, With APIv2 LiQL, say for example we have queried for 12 message results and all of them are thread starters (original posts). In each message result item there's a user_context.read flag which is either true or false. If the current authenticated user has already read the particular individual post, the user_context.read flag is true. We are looking for another piece of information in each LiQL message result: user_context.conversation.read which would tell us whether or not the authenticated user has already read all of the posts in the thread which theresult post started. We've found an alternate way to query this information, but it involves multiple additional API queries per result item. Since we query for 12+ results those extra queries slow down the page load. In some cases we moved the extra queries to an endpoint so that the data can be retrievedvia ajax. Definitely not fool proof. Timing issues, maybe issues with heavy-use communities and horizontal scaling. We'd prefer to get this data in the original set of LiQL results. We see out of the box Lithium components which show lists of threadsdisplay thread-based unread / read information with no palpable degradation in page load performance. Any way for us to do so via API? Thank you, Davesullysnack3 years agoKhoros Alumni (Retired)251Views10likes2CommentsAPI gateway middleware integration platform
I need a single-entry point gateway API which can consolidate Salesforce, ServiceNow, Azure, AWS, and one or two other REST API's into a single API which my team can expose to the rest of the enterprise for building reports, software delivery, alerting, and other business automation. Ideally, the gateway should feature auditing, data transformations, documentation, business logic, and some kind of scripting language (JS or Python are great; Java is not). Does anyone have ideas?jacky_mish3 years agoContributor52Views0likes0CommentsBounded API calls
I have been seeing something in industry where clients are bounding their api calls and then fetching the rest later if people want more info (one example is Instagram now only fetching and displaying the last 6 pictures a user has posted) What is the downside of sending an unbounded extremely long JSON blob and just rendering everything asynchronously vs bounding these API calls and making more calls to the api. I’m sure that caching and storage comes into play here too but would love to hear about any specific case study / latency improvements / numbers that someone could share about sending long json blobs vs bounding api calls and responses.jacky_mish3 years agoContributor82Views0likes1CommentKhoros extension for Visual Studio
Hi all, A customer recently pointed us to this Khoros extension for Visual Studio to help with FreeMarker customizations. Note that this isn't produced by Khoros. It looks pretty nice. I Hope Visual Studio users find it helpful. As a reminder, there are a couple of Chrome extensions you might like as well: Lithium Bulk Uploader Lithium Studio Editor Enhancement The code is a bit outdated, but so far, still works in Studio today.SuzieH3 years agoKhoros Alumni (Retired)678Views1like2CommentsOAuth in python
Hi! I am writing a small script in Python to retrieve data from the REST API. For instance, I need to do some v2 requests like "SELECT id,post_time,subject,author,status,body,kudos,labels FROM messages WHERE board.id = 'myBoard' AND depth = 0". So, I need to get access to some sections and I am trying to use the OAuth 2.0 Authorization but I get an error: oauthlib.oauth2.rfc6749.errors.MissingTokenError: (missing_token) Missing access token parameter. Here is my code: from oauthlib.oauth2 import BackendApplicationClient from requests.auth import HTTPBasicAuth client_id = 'myClientID' client_secret = 'myClientSecret' auth = HTTPBasicAuth(client_id, client_secret) client = BackendApplicationClient(client_id=client_id) oauth = OAuth2Session(client=client) token = oauth.fetch_token(token_url='https://myCommunity/auth/oauth2/authorize', auth=auth) print(token) Any idea? Thanks! FlorentSolvedfcaelen3 years agoMentor526Views1like10Commentsparent_category of boards in group hubs empty
Should a board that is part of a group hub contain a parent_category? I've been learning the v2 api and I've noticed that if I use this query SELECT href, id, conversation_style, title, parent_category, root_category, view_href FROM boards WHERE id IN ({}) ORDER by creation_date DESC LIMIT 500 many (maybe all, haven't tested them all - there's hundreds) will not return a parent_category. I'm not sure if we have a data problem or if my expectations are wrong. I do get something back in root_category so I'm not sure what's going on. Thanks.mdfw3 years agoGenius389Views1like1CommentIs there an option to use markdown syntax or any options for enhanced code syntax highlighting?
Is there an option to use markdown syntax or any options for enhanced code syntax highlighting? This is in addition to the basic option in the html editor to highlight code.SolvedSeanH3 years agoGuide868Views2likes11CommentsHow do I change the status of an idea?
Hi there, I'm trying to use the API to change the status of an idea, but I keep getting errors. /restapi/vc/messages/id/609/message_status/ shows me these results: <response status="success"> <message_status type="message_status" href="/message_statuses/id/9"> <name type="string">New Idea</name> <key type="string">newidea</key> <id type="int">9</id> </message_status> </response> When I try $.post("/restapi/vc/messages/id/609/message_status/set?key=duplicate&name=Duplicate&id=19"); I get error 511 A required query string argument is missing. When I try $.post("/restapi/vc/messages/id/609/message_status/key/set?value=duplicate"); I get error 501 Unknown path element at node 'message_status.key'. Has anyone successfully done this?Solved518Views0likes11CommentsREST API Limit
Hi there, I understand that the max results for LiQL query is 1000 (source). However, when making a call SELECT * FROM messages limit 1000I get hit with a 414. I'm struggling to find any resources on a workaround. Can anyone provide any suggestions? Thank you!hkremer3 years agoHelper276Views0likes9CommentsOOTB component for preview changes link or user menu item
There's a permission that allows you to grant the right to previewing changes on production community. But with this permission granted those users won't see a link to the "Publishing" admin section in their user menu. So two questions: Should users with the preview changes permission see the "Publishing" admin section link in their user menu What's an alternative component to use that would expose the preview link as I cannot easily use this link for preview: /t5/bizapps/page.publishpreviewlinks.link:enterpreviewmodetofrontpage?t:ac=tab/community%3Apublish since a authentication ticket is necessary125Views1like2CommentsMeasuring performance improvements
Hi all, We have some old, non-performant code that we plan to work on over the next few sprints. I know you can see code times in toolbox, but does anyone know if that data is downloadable as a spreadsheet or similar? I'd like to put some outcomes around the development work but I'm not finding a good way besides picking a point in time to point a mouse on toolbox (which is not that precise). Thanks, Markmdfw3 years agoGenius47Views0likes0CommentsFile Support tickets, and more from the Dev Doc Portal
Hi Dev Community! We've added Maia (the Khoros Atlas chatbot) to developer.khoros.com. This means you can now file Support tickets, request demos, search for Atlas content, and more all within the Dev Doc Portal. Learn more in this Dev Blog Post.SuzieH3 years agoKhoros Alumni (Retired)44Views0likes0CommentsUsing OR and AND with LiQL constraints.
I am trying to use ORs and ANDs with a LiQL query using parentheses to group my ORs like this: WHERE kudos.sum(weight) < 2 AND (status.key="new" OR status.key="needs_info") It is apparently only paying attention to the first constraint inside the parentheses. I have done this successfully before with body and subject keywords like this: WHERE labels.text = 'headphones' AND (body MATCHES "wireless" OR subject MATCHES "wireless") Is grouping like that allowed or is the body subject a special case? Can't figure out what I'm doing wrong. Thanks.72Views0likes1CommentSubscribers to label
by using restapi/vc/boards/id/<id>/labels/labels, I get the list of labels related to a board. fine. But how can I get the list of subscribers to these labels ? I mean I don"t have a list of users to go trough and say yes or no this user is a subscriber, I want to get the list from these labels list. I browsed the documentation from one end to the other, but did not manage to find a solution 😞340Views0likes9Comments[UPDATE] Community REST API v1 documentation status
Hello all, Customers are experiencing 413 errors when trying to access pages for the Community API v1 documentationlinked to from developer.khoros.com. We are looking into this issue and hope to resolve it soon. [UPDATE] If you are receiving a 413 error, please clear your cache and cookies and try again to access the v1 docs. That should resolved the error. Apologies for the interruption.SuzieH3 years agoKhoros Alumni (Retired)45Views0likes0CommentsKhoros Community API Permissions
Hello all, It appears I lack the permissions needed to retrieve messages from the Khoros Community API (v2) for thecommunity.khoros.comdomain. When I make the initial GET request, I can retrieve the results just fine: https://community.khoros.com/api/2.0/search?q=SELECT * FROM messages LIMIT 50 If I provide an OFFSET of 50, or add the CURSOR for the next page, however, I encounter the following error: { { "status": "error", "message": "Permission Denied", "data": { "type": "error_data", "code": 414, "developer_message": "", "more_info": "" }, "metadata": {} } Could someone provide more context around the meaning of this error? Thanks!123Views0likes2CommentsFeatured Topic Component Not Showing
My code is not pulling the featured topics that are listed in admin. I'm sure it might be referencing something incorrectly. Any help would be appreciated. <#if featuredTopicsSetting?length gt 0> <#assign featuredTopics = featuredTopicsSetting?split(",") /> <#assign topicList = "" /> <#list featuredTopics as featuredTopic> <#assign topicList = topicList + "'" + featuredTopic?trim + "'" /> <#if featuredTopic_has_next> <#assign topicList = topicList + "," /> </#if> </#list> <#assign qry = "SELECT subject, view_href FROM messages WHERE id IN (${topicList})" /> <#assign topicsAr = executeLiQLQuery(qry) /> <#if topicsAr?size gt 0> <@generateComponentContent className="custom-featured-topics" componentTitleKey="theme-lib.featured_topics.title"> <div class="featured-users-container"> <#list topicsAr as featuredTopic> <div class="custom-featured-topic"> <a href="${featuredTopic.view_href}">${featuredTopic.subject}</a> </div> </#list> </div> </@generateComponentContent> </#if> </#if>davidsand3 years agoGuide50Views0likes0Comments