Robin Sapiro
My feedback
192 results found
-
253 votes
An error occurred while saving the comment Robin Sapiro supported this idea ·
-
122 votes
An error occurred while saving the comment Robin Sapiro commented
I absolutely agree with all your comments 100%. In fact I think that you are being kind to them when you say that you wait 2-3 days for a response from support. My experience over the last while has been a minimum of 5 days and sometimes never. This also given that 1 of the reasons for the 20% price hike in June was to improve support (which was pretty good until they decimated it). Our reasons for using W originally in 2013 were pretty much the same as yours. Back then we purchased the 500 contact plan as at that time there were other limitations on the 250 plan that we exceeded. Since then however when all plans (other than the free plan) now have the same limitations we dropped to the 250 contact plan (but cannot manage to drop to the 100 contact plan). That aside our cost is now more per year than it was back then.
It is my opinion that the Personify acquisition of WA was just to acquire the subscription revenue with no intent to enhance the product anymore and over time to persuade the WA customers to move to their other platform (is it Member Clicks?) by continually bumping the price, providing less and less support and zero enhancements.
We actually switched from annual payments at last renewal to monthly payments. Yes - it is a bit more expensive - but it will allow us to jump ship a lot more easily when the time comes. I am actively researching options.
An error occurred while saving the comment Robin Sapiro commented
This request has been here since Jan 2016 - just a few months shy of 6 years and with 105 votes. This should not be any sort of coding change from the WA folks but just another entry in a table defining the contact count etc for a new plan.
Now we also all know how much they have hiked prices since then, so just do not hold your breath waiting for them to introduce this as much as it makes sense to all the users.
Now of your almost 500 contacts/members - how many of these are Members (that is people who would be signing on to see member restricted content) versus Contacts (that is people who are really just there so that you can send them emails).
If this is your situation and you are willing to spend about $9 per month on Integromat and either build a couple of scenarios there (or pay someone to do that for you) there are ways to get by with a much smaller WA plan but still keep all your data in WA.
You can find me in FaceBook in the WA Grove and DM me there or you can concatenate my first and last names to get my Gmail address if you want to discuss this idea/concept further.
Robin Sapiro supported this idea ·
An error occurred while saving the comment Robin Sapiro commented
Maybe a better idea would be to allow for the purchase of additional blocks of say 50 or 100 contacts on top of any given plan level such that at say 100 or 200 contacts below the next level it becomes cheaper to just upgrade to another level.
Of course the really ideal solution would be to structure the pricing similar to that of Club Express where rather than pricing on contacts they price on members.
The concept being that members are active users of the site (logging on and using various services etc) while contacts are really just people that you may send emails to from time to time. Club Express give you so many free contacts per member.
This sounds very much like the situation described in the previous post (2000 contacts and only 650 members) and I suspect a situation that is very common for most not for profits/charities. Certainly fits for our group where we have about 45 members but close on 250 contacts (being mostly ex members and family members of members).
An error occurred while saving the comment Robin Sapiro commented
While only the original post and 3 comments - there are already 20 votes for this.
However no comments from anyone on the WA team as yet.
I cannot imagine that it would be that difficult or big a code change to count contacts and members separately and to set separate maximums for each for each account.
Nor should it require any code changes to allow for incremental changes to numbers of contacts or members.
Maybe to make it really simple - just change the current contact limits on each of the existing plans to be member limits (ie contact assigned to a membership level) and then just allow unlimited contacts (contact NOT assigned to a membership level).
An error occurred while saving the comment Robin Sapiro commented
How about implementing a form of 2 tier billing in each plan.
For example Community plan allows for 500 Members - a member is someone who is in a member level and has the ability to sign in on the site and access pages that are restricted to membership levels/groups
In addition also allow say 5000 Contacts - a contact is just an email address (with additional custom fields for selection criteria) that cannot sign in at all - ie has same access to as members of the public.
Also now that all plans (besides free) allow the same number of admins, storage and other features etc, make the billing levels more granular, ie do away with the 'Plans' and allow customers to buy memberships in increments of say 50 or 100 members with the ability to increase the blocks of members at any time and be billed accordingly for the remainder of the billing period.
Also allow 'contacts' to be bought in blocks (at a much lower rate than members, but by default allow 10 contacts for each member purchased
-
85 votes
An error occurred while saving the comment Robin Sapiro commented
Pretty easy if you do not mind using Integromat.
Set up a web hook in Integromat that is linked to your WA account (covered in various documentation).
Configure that for which WA fields you want to receive if any contact is changed. You will get a copy of the new data at that time, so obviously before starting, you will need a snapshot of all current data.
Easiest way to get the snapshot is to just export the relevant contact/member records to a spreadsheet.
Would of course suggest that you copy this spreadsheet to a Google sheet.
Then whenever a change is made to the WA record - your webhook is triggered and the associated Integromat scenario is triggered.
Would suggest that in this scenario, you do all (or just a few if you prefer) of the following.
Write the changed data to the Google sheet and send someone (as many people as you like) a notification that the record has been changed. Optionally include the details of certain fields.
Now you can look at the Google sheet and if you sort the data by Contact ID and date - then you will see all updates for each contact in date sequence and can decide if any (such as the address in this case) need to be corrected.
Personally I would think that seen as that member paid for something through PayPal (maybe membership) and gave home address as credit card billing address, that when PayPal confirmed back to WA that the funds had been received, that the billing address was also passed and WA so kindly updated that for you.
In my mind I would consider that to be a defect, but good luck convincing WA of that. Probably more likely to be working as designed, but just badly designed. It should be a user (administrator) defined option as to whether any payment processing system (PayPal, Stripe, WA Payments or anything else can update contact data of not other than the fact that a payment related to that contact was received and for which invoice.
If you would like any assistance in implementing this - feel free to contact me.
An error occurred while saving the comment Robin Sapiro commented
So while you wait for this 6 year old request to be implemented, consider the following options.
If you implement WA integration with Integromat you can catch each and every update to the membership data base as it happens. Assuming that you have initially captured an external snapshot of your WA membership into a Google sheet, as these new updates arrive you can post the full record/row to your sheet. Now you can sort sheets in all sorts of ways and even use the features of Excel (you may have to download the sheet to do this) to highlight any columns/cells where the member number in 2 consecutive rows is the same but any column data has changed.
Also consider looking at https://www.newpathconsulting.com/2019/09/introducing-the-wild-apricot-reports-manager.html - it may give you the function that you are looking for.
I have no relationship with Newpath other than having spoken to Alex on a few occassions.
An error occurred while saving the comment Robin Sapiro commented
Why not simplify this and instead of sending an admin an email saying that Member A changed this field from Value A to Value B etc, just implement a simple journaling process for all member/contact creates/updates/deletes.
Write the journal records to a CSV file. In the CSV file as well as the full record (ie ALL contact and member fields defined for the system) include the ID of the person making the change and the date and time of the change. Flag each journal record as create/delete/update. For create, the record is the new member/contact created, for delete the record is the member/contact deleted, for update there are 2 records in the journal - a before and after copy of the member/contact being updated.
This approach then allows the admin to download the CSV to a spreadsheet daily, weekly, monthly or as required and determine what changes were made, by whom and when.
Once downloaded - consider deleting the journal CSV or renaming so that going forward from that date journal entries are written to a new copy of the CSV file.
An error occurred while saving the comment Robin Sapiro commented
Notify an administrator when a member unsubscribes from email blasts
Robin Sapiro supported this idea ·
-
45 votes
An error occurred while saving the comment Robin Sapiro commented
My solution to this was to move all my invoicing out of WA and into Wave. However I am still using my WA data base to initiate invoicing. We do all our membership invoicing once a year.
I have 2 Integromat scenarios:
#1 runs through my WA Membership level that needs to be invoiced and updates the 'customer' details in Wave with current information or if a new member, creates the Wave customer record.#2 then generates the invoices in Wave and sends these to the members.
Our treasurer now only needs access to Wave and none of the other admins have Wave access.
An additional benefit of this process (besides not being held hostage to WA with the 20% surcharge for not using WA Payments) is that as we offered a discount last year due to Covid, I was able to generate invoices that showed the regular full membership amount as well as the discount
While we only do annual invoicing, it is quite possible to invoice some members annually and other say 2x a year or monthly or whatever while still having them all in the same membership level (just have a field in the record that indicates invoicing frequency). This means that I still only have to authorize web pages etc to a single membership level.
Wave allows for payment from either a credit card or direct withdrawal from a bank account.
Unfortunately bank account integration (both payments and transferring funds) is only available in Canada and the USA (Wave is a Canadian company).
I could also (if it was applicable) do invoicing for different Membership levels into different Wave instances, each of which can pay into different accounts. This effectively supports multi currency and multi chapter support from a financial perspective.
I just happened to choose Wave, but you could really do this with any payment processor where you can access it from Integromat (either with available Integromat modules or by using HTTP or Webhook calls from Integromat.
An error occurred while saving the comment Robin Sapiro commented
Instead of predefined administrator categories, site Full Admin should have the ability to define site specific Admin categories.
In these categories, the full admin would be able to select from various modules. eg: financial data, other membership data, for which membership levels and so on.
As configured now, some of the predefined configurations provide too much access for a specific organization, while others not enough. So either the person sees too much or not enough to do their job.
Robin Sapiro supported this idea ·
-
378 votes
An error occurred while saving the comment Robin Sapiro commented
So the workaround referenced in the last post, does actually work pretty well and is quite easy to implement (for a simple Contact US).
However what does NOT work at all well is the Captcha implementation and as such leaves you open to various bots being easily able to post all sorts of garbage.
Sadly the folks at WA consider fixing this to be an enhancement request rather than a defect issue - so just guess how long you will wait for that to be fixed.
Now if you are using the Contact US or Feedback 'form' for just your membership - consider putting it on a membership only page (so user has to be logged on to the site to access).
If you want to make this open to the public - well then use one of the available external form tools or live with the spam. Or consider looking for an alternative to WA.
An error occurred while saving the comment Robin Sapiro commented
If you have any HTML and JavaScript skills (or the $$$ to pay someone with those) - have a look at the sample code at: https://benalexkeen.com/autofilling-forms-with-javascript/
It really took me about 3 minutes to:
Create a new test page on my WA site
Add a Custom HTML gadget
Pate the sample code from that page
Save the pageAnd I have a working form.
Now obviously if you want to prefill that form with some member data - you are also going to have some JavaScript to call the applicable WA contact API and extract what you need and then once the user clicks a 'Save or Submit' button - some more JavaScript to extract the data entered by the user and either plug that back into the WA database (WA Contact API) or do whatever else you want with the data.
Real point is - while this request is extremely popular - it is 'only almost 3 years old' - pretty young for WA requests. Additionally to design a form feature that will meet the requirements for each and every person who voted for this enhancement - is just flat out going to be impossible.
All you have to do is read through a few of the 70 comments and see just how many variations of requirements are there:
Report expenses
Contact Us
Health & Safety forms
Accident Forms
Athlete Declarations
Suggestion box
Volunteer signup
Maintenance requests
Information requests
Submit violations
Submit ideas for beatificationAnd that list is just from the first of 4 pages of comments
There is also a lot of great documentation on HTML and JavaScript on the web for those of you who like myself do this for a not for profit and are always cash strapped.
An error occurred while saving the comment Robin Sapiro commented
For a basic 'contact us' form (ie allow a visitor to send a selected contact an email without revealing the recipients address) have a look at my site: HODToronto.com - down at the bottom you will see my name in the footer - click on it and you will see the Captcha protected option to email me.
Although I must say that of late some of the content that I have been receiving makes me think that the Captcha schema being used by WA (the very original design) is being hacked by a robot. WA does need to update this to more current type of Captcha like those where yo select all images with a car in them or even better where you just click the check box that says 'I am human' - the logic behind those is really interesting.
I have just BTW had this running since the site first went live in 2013.
It is out of the box WA functionality
An error occurred while saving the comment Robin Sapiro commented
So while not actually implementing forms in WA, consider the following.
With a free GMail account you can create forms (https://docs.google.com/forms). Log on with you GMail ID.
Data entered into a form is stored in a Google sheet in this account.
Integromat has a function that will pick up any new rows added to a Google sheet, so you even have the option of adding the data added through the Google form to a WA contact record.
For access to the Google form, you can either embed this in a WA web page or provide a link to a stand alone copy of the Google form.
If you are using the standalone version - consider customizing the form with your WA web page banner.
Also of interest is that you are using the standalone method, you can also create a URL that that will prefill any fields that you select. So for example if sending out the URL in an email from WA, you can use the email macros to embed any of the existing membership data into that URL
An error occurred while saving the comment Robin Sapiro commented
Just 1 thing to consider about allowing anonymous submissions.
You open yourself that way to spamming.
Any anonymous option should be something that each site admin can turn on/off. Default should be off.
Anonymous submissions should also have the option of requiring a captcha - captcha option by default to be enabled
Robin Sapiro supported this idea ·
-
275 votes
Evgeny Zaritovskiy responded
Please review results of our analysis and design:
https://docs.google.com/presentation/d/1aBh3RKOIAbC-YOkpQtRJ8kv9kH3ZlXSID7Ezl1bCAlg/pub?start=false&loop=false&delayms=3000Post your comments/ideas right here. Until we see major disapproval, this is what we will develop in one of future releases.
An error occurred while saving the comment Robin Sapiro commented
Just thinking that rather ironically whatever platform this Wishlist is built on would be a great solution.
Every time someone other that myself posts to a topic that I have voted for - I get an email with the full details of the post. Only if I want to respond to I need to click on the topic.
An error occurred while saving the comment Robin Sapiro commented
Hi Glen,
I face the same issue that you have in that my membership is just not interested in going to the website daily/weekly to see what updates there are in a forum and added to that the notifiers that something has been posted are so generic.
Additionally - there is no way for an admin to add a user to a forum - even with some default setting. Really sucks and clearly the dev team at WA (who actually originally started this thread in 2008 and then proposed a solution in 2016) really have no intent of ever implementing anything other than some vague comments about implementing it on mobile about 3 years ago. That will not resolve for many of the 262 who have voted for this.That aside - you mention that for 1 of your associations you created an email list on another service. Could you please elaborate on that. Maybe it was something like Yahoo Groups? Of course something like that also means that you have to maintain a duplicate set of email addresses on that service.
I have actually been thinking of using the Groups feature of WA as my 'forum list' and then from my domain registrar settings redirecting inbound emails addressed to *@mydomain to an Integromat webhook. Then a scenario in Integromat strips out the forum part of forum@mydomain - uses that to retrieve all the members in that group and then forwards the original email to all the members of that group. At least that eliminates the need for duplicate address lists. But it does not give me any form of daily/weekly summaries unless I figure out some other process for the summaries. Responding to a specific item in a summary would also be tricky.
An error occurred while saving the comment Robin Sapiro commented
So original post of this idea was from a WA team member in 2008 (almost 12 years ago). Then a proposed solution by another WA team member in 2016 (about 8 years later) and about 4 years ago.
Walt - do not hold your breath for anything here.
What I would suggest is that to create a free workspace on Slack.
You control who is invited to that workspace and can have any number of channels on different areas of interest. You can have public channels (public within the workplace) that any member can follow or private (that only explicitly invited members can follow).Anyone can post/view in channels that they are members of and responses to individual posts are threaded below the original post.
Slack can be accessed from any device (mobile or desktop) or thru a browser, but the actual App works better than a browser. If anyone is already using the Slack App - just add in the additional workspace.
I already have my groups Slack workspace and have added a few trial members. Today is the day that I will be adding in my remaining members
BTW - some folks might suggest using a Whatsapp group. However Slack is a corporate grade application and much more robust than Whatsapp (and who wants to be using a Facebook owned app anyway and still expect any sort of privacy)
An error occurred while saving the comment Robin Sapiro commented
Full details of forum post should be in notification email for daily/weekly summaries as well as for immediate notifications.
Having to click through a link and maybe even sign on is a big show stopper in getting my users to look at forum posts. Also getting immediate updates is annoying to my members who complain about too many emails and would prefer to receive daily/weekly summaries.
Finally - this design was published over 2 years ago. When can we expect to see it being delivered?
An error occurred while saving the comment Robin Sapiro commented
What is the current status of this? I read the article referenced by Apricot Kernel on Feb 12, 2016. Design looks great. But 2 years later - when will it be implemented?
Robin Sapiro supported this idea ·
-
25 votes
An error occurred while saving the comment Robin Sapiro commented
So what you really need is 1 of those short form URLs to replace the whole long string. However you do not want to be using 1 of the generic such services like tinyurl as you still get a random sort of string.
The answer is to use rebrandly.com
What is cool about this site is that besides creating generic links using rebrandly.com/xxxxx - where if you want you can actually specify the xxxxx if you choose, you can also use your own doman name for these links - or even a subdomain name - so you get either of the following: mydomain.com/membername or subname.mydomain.com/membername
Personally I prefer to go with the subname method (just head over to your domain registrar site and create a subdomain of say 'Members" - then on Rebrandly you register the domain as members.mydomain.com
Now you add a new shortcut on Rebrandly like members.mydomain.com/JohnSmith that points to Johns profile page on WACheck their actual pricing https://www.rebrandly.com/pricing
Your main choice between the free plan and the next plan will be the number of links that you require. Do not worry too much about the clicks tracked limit in the free plan - that is just logging - you get unlimited click throughs in all plans.Robin Sapiro supported this idea ·
-
60 votes
Evgeny Zaritovskiy responded
We’re collecting comments and votes for now, no actual development is planned so far
An error occurred while saving the comment Robin Sapiro commented
So as noted, this 'Wish' has been around for about 8 years and to date no action. Not at all a surprise (sadly).
That being said, whatever solution to this that might be developed one day, you can be sure that it will not meet everyone's needs. So I tend to look at a lot of the missing features in Wild Apricot from a perspective of not so much when (if ever) will WA deliver these, but rather from a perspective of what tools can I utilize to achieve the desired results myself.
A quick look at Integromat shows that there are already 2 WA invoice related modules there (among others) that can retrieve a list of all unpaid invoices (optionally from a specific start date and/or for a specific member) and another that can retrieve the invoice details (such as the invoice date, the member being invoiced and each line item detail and so on). Assuming that you also have mailing addresses on file for each member, you can pull this information in Integromat as well and now use this information to build your invoices and/or statements which you can then email or mail to your members. Potentially many options available to construct these documents. If your choice is to send by mail - have a look at ClickSend (their send to post module was recently added to Integromat). You can schedule your Invoice Reminder/Statement scenario to run on a scheduled basis (monthly or whatever).
Is Integromat an easy platform to develop scenarios on? Really depends on the users skills. having spent many years in IT (starting out as a programmer), there was a learning curve - but not too steep and there is a great Facebook Group where you can get a lot of help. While you do not need to be actually able to write code, you do need to understand a fair amount of programming concepts and so on. You can of course always engage with some of the WA partners who can do this for you (for a few $$). I would think that for someone who has Integromat experience and also understands WA and depending on what exactly you want to get out of it, this could probably be designed and built in give or take a week.
Should WA provide such a solution - ideally yes - they would deliver all the open wishes by the end of 2021. But even though pot is legal here in Canada (where WA is based) - there is not enough of it available for all the WA users to believe that this might happen.
So why not invest a week or 2 and do this yourself. Or maybe 1 of those partners will read this and decide to deliver this as a paid for add on.
Is Integromat easy to
Robin Sapiro supported this idea ·
-
2 votes
An error occurred while saving the comment Robin Sapiro commented
Problem resolved - amazing what a good night's sleep and my morning espresso can do.
In HTML string copied from an original email sent from WA, converted all " to ', %20 to just a space and then added in the macros by just typing in {macroname}.
I can even embed my site banner and any other images stored in WA in the email.
I am now a happy camper and only need to determine the Saved Search ID so that I can send to a specified set of recipients
An error occurred while saving the comment Robin Sapiro commented
Successfully sending an email with the API from the https://api.wildapricot.org/ui/home/RequestOAuthToken page.
Works great when my Body is just plain text.
However SwaggerHub documentation for the SendEmail parameters says that this can be HTML and include macros (see attached screenshot).
However all attempts to include HTML result in error message: invalid JSON: Unexpected token in JSON at position NN.
Is there any sample code available that would show how to insert the HTML code?
Additionally - how would a macro be included - or is it as simple as typing in {macroname} inside the text or HTML.Robin Sapiro supported this idea ·
-
5 votes
Robin Sapiro supported this idea ·
An error occurred while saving the comment Robin Sapiro commented
What we recently did (so far only in respect of membership renewals - which is really all that we were invoicing from WA) was to totally disable this in WA. We made the membership level free and with no renewal period.
Then we set up an account with the Wave App (free) although it may not support invoicing in South East Asia - but you could probably use the same concept with your payment service.
Next step was on our scheduled invoicing date to use Integromat to extract the applicable details from WA for the members who needed to be invoiced and for each of these load them as a 'customer' in Wave and then generate the invoice for the applicable amount. Now the total invoicing process is handled in Wave including the tracking of outstanding payments and follow ups.
The other advantage of this process is that it also positions us for multi chapter support on our WA site as with this concept we can direct the invoices for different chapters to different Wave instances (each instance is associated with it's own bank account) and also allows for multiple currencies.
While Omise may not be supported by Integromat if you have already developed the API calls to Omise for invoicing etc, you could easily enough port those to Integromat and call the API from there.
Future steps will be to develop options to handle Event billing and also Shop sales and Donations.
-
2 votes
An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
And the change access setting is resolved as well.
From the Settings page - select Privacy under Members.
Then click Edit and next to the field that you do not want users to change the privacy of - check the Lock checkbox. Now user cannot make the field visible to other users.An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
The loop concept worked great - but just wondering if you actually had it working as you typed it or if it was just a concept. I had to make a few syntax changes to actually get it to work. Following is what I eventually built in order to evaluate how the various field attributes effected what I was able to see with different viewing options:
<html>
<body>
<p id="demo3"></p>
<script>
$(document).ready(function(){
$.ajax(
{
url: "/sys/api/publicview/v1/accounts/1111111/contacts/me?includeDetails=true",
type: "GET",
dataType: "json",
cache: false,
async: true,
headers: { "clientId": "1z1z1z1z1z1z1" },
success: function (data, textStatus, jqXhr) {
var d = new Date()
var textblock = "Me - "
var newline = (d + "<br>")
var textblock = (textblock + newline)
var i;
for (i= 0; i < data.FieldValues.length; i++) {
var fname = data.FieldValues[i].FieldName
var fvalue = data.FieldValues[i].Value
var newline = (i + ": " + fname + " - " + fvalue + "<br>")
var textblock = (textblock + newline)
};document.getElementById("demo3").innerHTML = textblock;},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus + " (" + jqXHR.status + ") : " + errorThrown);}
});
});
</script></body>
</html>Using the above gave me a list on my page of the various field names and their content.
I also set up a specific set of fields covering all the combinations of access to a field (both for the member to view/edit their own data and also for other members to view/edit a members data).
I then looked at the data for a specific set of members (in a member level that used these specific fields only) and observed the following:
The only problem that exists with this is that if a member views their profile, then selects Edit and then Privacy is that they can then make this field visible to other members. I would even think that this is a defect in WA in that if a member has only view access to a field (which means that they cannot edit the content) that they should also not be able to edit the access to that field either.An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
Thanks for the loop suggestion - that will actually work great for me. Certainly if I am only looking to extract a single variable. If I need a few variables however it will need some tweaking to pick them all up with a single pass through the data (as opposed to looping through once for each variable needed).
Re your 'hidden' fields - something interesting that I noticed was that when I run the API for /me or if I run it with /12345 (where 12345 is my Contact ID) - I get back a different number of fields in the FieldValues array.
I have not looked yet to see what the differences in the field lists are and therefore obviously what the attributes are of any fields that appear in 1 list versus the other.
But it might just be possible that 1 version of the API returns fields that otherwise would be hidden with the other version.
So speculating that if the /12345 version of the API call brings back fields that are hidden with the /me version - then first make a call with /me - retrieve the actual Contact ID and then call with /12345
It is worth looking into.Your comment about international members is also interesting.
Do you have multiple chapters?
How do you manage the collection of membership dues and also possible multiple currencies?
How do you manage administrators of 1 chapter not accessing membership data of other chapters?
These are all things that I am working on as we also are an international organization. At the moment we have 6 chapters in Canad and the USA each with their own WA site. It makes it a whole lot more expensive than having everyone on a single site. With the current WA pricing structure we could bring everyone onto 1 site at a lesser cost than we have today combined and still have capacity to bring on board our remaining chapters in the USA, UK, South Africa and Israel.
From a membership perspective, I already have a solution based on the WA database using Integromat and the Wave App.
I am also looking into using this API to be able to manage the access of the membership records such that each chapter membership admin can only access their own membership records.An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
Thanks for the loop suggestion - that will actually work great for me. Certainly if I am only looking to extract a single variable. If I need a few variables however it will need some tweaking to pick them all up with a single pass through the data (as opposed to looping through once for each variable needed).
Re your 'hidden' fields - something interesting that I noticed was that when I run the API for /me or if I run it with /12345 (where 12345 is my Contact ID) - I get back a different number of fields in the FieldValues array.
I have not looked yet to see what the differences in the field lists are and therefore obviously what the attributes are of any fields that appear in 1 list versus the other.
But it might just be possible that 1 version of the API returns fields that otherwise would be hidden with the other version.
So speculating that if the /12345 version of the API call brings back fields that are hidden with the /me version - then first make a call with /me - retrieve the actual Contact ID and then call with /12345
It is worth looking into.Your comment about international members is also interesting.
Do you have multiple chapters?
How do you manage the collection of membership dues and also possible multiple currencies?
How do you manage administrators of 1 chapter not accessing membership data of other chapters?
These are all things that I am working on as we also are an international organization. At the moment we have 6 chapters in Canad and the USA each with their own WA site. It makes it a whole lot more expensive than having everyone on a single site. With the current WA pricing structure we could bring everyone onto 1 site at a lesser cost than we have today combined and still have capacity to bring on board our remaining chapters in the USA, UK, South Africa and Israel.
From a membership perspective, I already have a solution based on the WA database using Integromat and the Wave App.
I am also looking into using this API to be able to manage the access of the membership records such that each chapter membership admin can only access their own membership records.An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
So I think that I am closing in on my solution (which is slightly different from yours in that I do not need to hide the specific field contents from other members or stop the member from editing the field).
By using the API: url: "/sys/api/publicview/v1/accounts/NNNNN/contacts/me?includeDetails=true",
I get back all the visible fields inside the JSON string.
Following is still theory - but based on the details at: https://www.w3schools.com/js/js_string_methods.asp
(I have found that w3schools.com is a great source for any information on HTML, JavaScript and any other cool web stuff).That assuming I am looking for a Home Phone in the return results - which in the JSON string looks like this:
{"FieldName":"Home Phone","FieldType":"String","FieldOrder":13,"SystemCode":"custom-3107385","Value":"+1 416 123 1234"},
I would first use the 'indexof" function to locate the position of the value: {"FieldName":"Home Phone", in the JSON string.
Then from that offset locate the position of the value: "Value":
These 2 allow me to calculate the start position of my actual data: +1 416 123 1234
Then again from the last offset locate the position of the value: "},
This allows me to determine the length of my data
The using the data start offset and the data lengthThen use 1 of
slice(start, end)
substring(start, end)
substr(start, length)
to actually extract the data that I want - and so we are off to the races.For you given the need to make the 1 field in particular inaccessible to all other than a membership admin - you will have to play around with the field attributes such that you can restrict standard access but still retrieve with the API - night be a challenge.
So some possible solutions for you might be what is known as 'Security by Obscurity' in that you do something like splitting the key across multiple fields and with obscure field names and then concatenate these fields in your java script, or insert some dummy characters into the field which you then remove as you retrieve the field. Obviously to do this - the administrators will have to know how to do this.
I am also considering to use this function as a form of 'Site Macro' where I will be able to dynamically display certain information that can change frequently - like 'Next Member Meeting Date' or 'Next Board Meeting Date' on the site by simply updating the values of these fields in a specific 'SiteMacro' membership record and then use the API on the form of: url: "/sys/api/publicview/v1/accounts/NNNNN/contacts/12345678?includeDetails=true",
Where 12345678 is the membership ID of my 'Macro' record.Seen as that we keep our meeting dates in a GMail Calendar - I will just run a scenario in Integromat say once a week to pull this data from GMail and update the WA Member record.
An error occurred while saving the comment Robin Sapiro commented
Just out of curiosity what sort of data do you want to display that is so private?
An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
No time for any API testing today.
But for the membership field access - I have been considering some process of replicating all the WA fields that I am willing to allow a member to edit to a Google Sheet and then from a member page use the API to retrieve their ID and use that to load the Google Sheet data to a form where they can view/edit whatever.
Then the updated row is replicated back to WA. All this replication with Integromat.My underlying for an approach like this is that I want to move to a multi chapter environment and only want to allow the chapter admin to only be able to edit their own chapter member data.
With an approach like that I then have to do something to disable the view my profile option out of the sign on gadget.
An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
So some good progress from one of those flashes of inspiration that one sometimes has as you wake up.
When you call the API and specify 'me' (which is the current user), you only get back in the JSON string (per console dump) the rather short set of data as you previously mentioned (and that I was able to recreate).
However if instead of 'me' you run the API with an explicit Contact ID number - eg 12345678 - then the JSON string dump shows ALL the fields and their related data.
So this is a step forward. I would think that to implement this for the current user, that you would first have to call the API with 'me' - then extract the ID data and call the API again using the explicit ID.
So that will at least bring back everything and now we just need to figure out how to extract the custom field content from the JSON string.
I will let you know how I progress with that (but due to workload of my day time job - probably will not move on that until tonight).
Let me know if you make any progress.
An error occurred while saving the comment Robin Sapiro commented
Might be easier to switch to FB Messenger - looked for you and found 9 of you.
If interested - look for me - I am unique.An error occurred while saving the comment Robin Sapiro commented
So on my web page - I also dumped the JASON string to the console and agree with your earlier comments from yesterday.
However when I run the exact same API from: https://api.wildapricot.org/ui/home/RequestOAuthToken - I get back ALL the fields in my membership record.
On the page above - just enter your API key and click Submit. Then on the next screen enter the API and click GO.
Just remember that you have to use an actual ID # as opposed to 'me' when testing as above.
It would be interesting to be able to dump the JASON string from there as well - but no real idea how to do that.An error occurred while saving the comment Robin Sapiro commented
I just pulled a list of the System Codes for a few of the System fields. Cannot say that I actually tried to retrieve more than a few of them.
Sorry if I misled you.An error occurred while saving the comment Robin Sapiro commented
I see what you mean by the restrictions of the System fields.
If you make them Admin only - then the user will not be able to see their own data either and if you let the user see that data, then any other user can see when viewing their profile - assuming you provide profile access at all to other users.The Phone field is a System field so it can be retrieved using the code you referenced. The code that I am using is based on that anyway.
I just changed the Alert.... string to instead be 'document.getElementById' instead of 'Alert' and then it appears as text on the page instead of as the popup.
For the data.values you can replace 'values' with any of these:
"Email"
"FirstName"
"LastName"
"Organization"
"Id"
"Phone"
"PendingRenewal"This will build you a clickable link based on the Contact ID
document.getElementById("demo").innerHTML =("<a href=https://www.w3schools.com/" + data.Id + ">Click here to go somewhere</a>");},An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
For whatever data that you want to retrieve and display, would it be a viable option for you at all to re-purpose 1 of the current System fields. I would suspect that other than ID, email, First and Last Names you could always use any of the remaining fields for whatever you want. phone number for example could be recreated as a custom field.
If that works for you, I can give you my custom code (based on a sample from Dmitri) that I have so far. Still trying however to figure out how to also do this with the custom fields.
Robin Sapiro supported this idea ·
An error occurred while saving the comment Robin Sapiro commented
Hi Curtis,
Did you ever make any progress with this. I am trying to achieve exactly the same.
While I can retrieve and display any of the standard WA provided system fields (such as email, contact ID, first and last name), custom fields still defeat me. -
2 votes
Robin Sapiro supported this idea ·
-
5 votes
Robin Sapiro supported this idea ·
-
2 votes
Robin Sapiro supported this idea ·
An error occurred while saving the comment Robin Sapiro commented
It is doable with the API embedded into your javascript running on a WA page in an HTML gadget.
I can provide sample code if you need
-
101 votes
An error occurred while saving the comment Robin Sapiro commented
Just a thought, but with Integromat you can trigger a scenario whenever a membership record is added/updated. In this way you could potentially grab the fields that need to be formatted and/or validated and either by using regex within Integromat or by passing the data off to some other application do the validation and formatting and then update the applicable member record with the correct data.
Robin Sapiro supported this idea ·
-
5 votes
Dmitry Smirnov responded
You cannot host server-side code on Wild Apricot servers. But if you plug some JS code into pages of WA website, then this JS can access API.
Robin Sapiro supported this idea ·
An error occurred while saving the comment Robin Sapiro commented
Dmitry Smirnov - I followed the link to House of Bamboo below - it works great.
Copied the sample at https://gist.github.com/DmitriySmirnov/0beda14e93bed7b5dc2f back to my site.
Edited the ClientID in that sample to match 1 setup on my siteNo errors when I click on the Who Am I link - but nothing happens either.
I suspect that I may have to edit the line
<script type="text/javascript" src="https://rawgit.com/WildApricot/ApiSamples/master/JavaScript/waPublicApi.js"></script>
But to what?
Or is there anything that I need to download and save on my site?
If so - from where and where does it need to be saved.Thanks
-
4 votes
An error occurred while saving the comment Robin Sapiro commented
Setup a GMail calendar.
Add the recurring event on whatever basis
Use Integromat to read the calendar for events due in the next N days.
Get contacts from WA (as applicable)
Now send the email from the GMail account (with Integromat) with the calendar data to the selected members.
Schedule the scenario to run as and when you want (daily/weekly etc)Robin Sapiro supported this idea ·
-
43 votes
An error occurred while saving the comment Robin Sapiro commented
This idea had been around now for 8 and a half years and commented as a good idea by WA over 5 years ago.
You already have the {MACRO NAME} function embedded in the email editor - how difficult would it be to embed same into the web page editor.
And while that is being done - also add the ability to add site variables as Macros.
A really simple way to do that would be to have a specific contact/member that is designated as the SiteMacro and then have all the fields in that contact defined as {SITE_FIELD_NAME} and these could be added into any web page or email. The Site macros would resolve whether a user is logged on or not.An error occurred while saving the comment Robin Sapiro commented
While rather limited in function - you can try the following either in an HTML gadget or also in an HTML Snippet within a regular text gadget.
<script type="text/javascript">(function() { var container = document.querySelector('.loggedName') || document.querySelector('.loginBoxProfileLink'); if (container) { document.write(container.innerText.replace(/[\n\r]/g, '') || 'Guest'); } else { document.write('<div class="userClass_FirstName"></div>');
WA.PageParsed(function() { var container = document.querySelector('.loggedName') || document.querySelector('.loginBoxProfileLink'), out = document.querySelector('.userClass_FirstName'); if (out) { out.innerHTML = (container ? container.innerText.replace(/[\n\r]/g, '') || 'Guest' : 'Guest'); }}, window);}})();</script>
For a signed on member it will show their full name.
Not at all sure where I found this or if it can be tweaked to show any other data relating to the memberRobin Sapiro supported this idea ·
-
35 votes
An error occurred while saving the comment Robin Sapiro commented
Hi Karl,
I am not at all sure if I am understanding the problem here at all.
For years now, when adding a link to whatever text you have on a page (just a regular text gadget), you have been able to add a link to internal pages, external URLs and files in the WA File structure.
From a file perspective however the pain has been that as you add a new file to the directory, you have to add a new link to the page.
What is really required here is a Library Gadget - where you can link to all the files in a directory and optionally any sub-directories.
See: https://forums.wildapricot.com/forums/308932-wishlist/suggestions/8825557-document-library-gadget
Now an additional idea that I have implemented for about 3 years now is that you can add files to a forum article (maximum of 20 files).
So I have a Meeting Minutes Forum and each year I start a new article (members can only read and cannot even comment). Than as we go through the year, I just edit that article and add in the most recent applicable file(s).
I also do the same thing for my news letters (save the PDF file of these into the applicable post).
From an administrative perspective - just edit the post, take the add file option and select the file from your PC. save the post. Under the covers, WA stores these files in the File system (there is some funky naming system).
My email to members when a new file is added just tells them that whatever has now been posted and here is the link to the actual forum.
I have found that getting members to subscribe to the forums is a total pain and of course WA does not provide any support for Admins to subscribe members to a forum (only to change or remove a subscription once a member has subscribed)Robin Sapiro supported this idea ·
-
146 votes
An error occurred while saving the comment Robin Sapiro commented
@Rosemary, have you thought about the following as a way of using Mail Chimp without having to maintain a duplicate data base which most certainly will get out of sync over time.
Probably the best thing that WA did in the last few years was to deliver the function to access your WA data base from Integromat. Integromat also integrates with MailChimp and supports numerous operations. I am not at all familiar with MailChimp, so cannot comment on the interface as to if it would work.
But the concept is that while you probably still design your newsletter in MailChimp, you trigger the actual send of these through Integromat. In this way prior to sending - you sync any needed information from WA to MailChimp using Integromat. Then when that step is complete - initiate the send. Looks like you can also get statistics back from MailChimp and you could then use those to update custom fields in WA if you so desired.You could also (with Integromat) capture any changes to the WA data base (including adds and deletes and propagate these in real time to MailChimp.
So - yes - you are keeping a copy of your WA data in MailChimp - but the replication is automatic and hence it is always in sync
Beyond that all that Alex says is absolutely correct
Robin Sapiro supported this idea ·
Did you perhaps see that email from Phil Dolan
Chief Marketing Officer
Personify Corporation
today at about 11:48 EDT telling us all how wonderful things are going to be?
(Sort of sounded like a politician telling us what he would do if we elected him - 'stretch goals for those of you who live in ON').
Anyway suggest replying to him with all the concerns.
Now sadly the reply to address is a generic address so who knows if he will see any responses.
Just a pity that a C suite executive hides behind a generic email address