Good Afternoon,
I'm attempting to send built in notifications to group members via collector using the arcgis.gis.Group.notify function.
I created a test group, and added a single member to the group to test. When I run the code block below, I get the following exception: I don't see anywhere in our organizational configuration, or documentation online where users can be configured to receive notifications. Does anyone know how to allow users to receive notifications, or potentially offer insight as to why this error is happening?
from arcgis.gis import GIS, Group, GroupManager
gis = GIS("home")
group = gis.groups.search('title: notify test group')
group = group[0]
group
members = group.get_members()
for user in members['users']:
print (user)
group.notify(user, 'Notice!','Message Body', method = 'builtin', client_id= None)
Exception: Unable to send notification.
One or more users in the list are not allowed to receive notifications.
(Error Code: 400)
When you added the member to the group, did you use an email that could have security block from unknown sender? You may have to get your IT staff to allow this member to receive email from the server.
We had the same issue using the Python Group.notify() api on an AGOL notebook. The error messages seem to be misleading as I didn't have to change any user settings (AGOL or email) to get this working via the RESTful api.
I couldn't find the ArcGIS REST API documented for groups/createNotification. Looking at the ArcGIS JS REST library on github, I found the undocumented rest endpoint and called it directly via Python.
Here's the python:
import requests
from arcgis.gis import GIS
gis = GIS("home")
group = gis.groups.search(query='MyNotifyGroup')[0];
token = gis._con.token
url = 'https://www.arcgis.com/sharing/rest/community/groups/{}/createNotification'.format(group.groupid)
parms = {'f' : 'json',
'users' : 'some.user@somedomain.com_somedomain',
'subject' : 'The subject line...',
'message' : 'This is the message body.',
'method' : 'email',
'token' : token
}
response = requests.post(url, data = parms)
JSON response:
{
"success": true
}
The notification shows in the alert area on the user's AGOL banner:
In theory, SMTP is blocked from Python notebooks, so maybe the missing email is related to that restriction.
Calling REST directly is not necessary. The users parameter must be a list not a string.