Files
Facilitor/UTILS/PutOrders/puo_sendapp.js
Alex Tiehuis 95d95cd57d FCLT#57249 Push berichten komen niet aan
svn path=/Website/branches/v2019.2/; revision=45729
2020-02-06 10:50:07 +00:00

167 lines
7.9 KiB
JavaScript
Raw Blame History

// ******************************************
// * $Id$
// *
// * sendAPP()
// *
// * sendAPP function is used to send APP push notifications
// *
// * arguments:
// * p_perslid_key: Send the notificatie to this perslid
// * p_msg: APP message to send.
// *
// ******************************************
function sendAPP( p_perslid_key
, p_msg
, p_url
, noti_json
)
{
var APPsend = false;
var sql = "SELECT aut_client_perslid_key "
+ " , aut_client_perslid_pushtoken "
+ " , aut_client_perslid_device_id "
+ " , aut_client_id"
+ " , prs_perslid_naam_friendly"
+ " , ba.*"
+ " FROM aut_client_perslid acp"
+ " , aut_client ac"
+ " , prs_bedrijf b"
+ " , prs_bedrijfadres ba"
+ " , prs_v_perslid_fullnames p"
+ " WHERE acp.aut_client_key = ac.aut_client_key"
+ " AND acp.prs_perslid_key = " + p_perslid_key
+ " AND acp.prs_perslid_key = p.prs_perslid_key"
+ " AND ac.prs_bedrijf_key = b.prs_bedrijf_key(+)" // outer join alleen omdat FCLTAPP1 hardcoded is
+ " AND b.prs_bedrijf_key = ba.prs_bedrijf_key(+)"
+ " AND ba.prs_bedrijfadres_type(+) = 'N'"; // Notificatie
var oRs = Oracle.Execute(sql);
while (!oRs.Eof)
{ // Let op: lang niet alles wordt (al) ondersteund
var bedrijfadres = { key: oRs("prs_bedrijf_key").value,
url: oRs("prs_bedrijfadres_url").value,
encoding: oRs("prs_bedrijfadres_encoding").value,
ordermode: oRs("prs_bedrijfadres_ordermode").value,
typeopdr_key: oRs("mld_typeopdr_key").value,
certificateName: oRs("prs_bedrijfadres_certificate").value || "",
extension: oRs("prs_bedrijfadres_ext").value||"",
flexfiles: oRs("prs_bedrijfadres_flexfiles").value,
AttachFile: oRs("prs_bedrijfadres_attachfile").Value,// E<>n vaste bijlage ('algemene voorwaarden') om bij te sluiten
XSLbedr: (oRs("prs_bedrijfadres_xsl").value||"").toLowerCase(),
username: oRs("prs_bedrijfadres_username").value,
password: oRs("prs_bedrijfadres_password").value,
authmethod: oRs("prs_bedrijfadres_authmethod").value || 0,
soapversion: oRs("prs_bedrijfadres_soapversion").value,
soapaction: oRs("prs_bedrijfadres_soapaction").value,
locksecret: oRs("prs_bedrijfadres_locksecret").value,
loglevel: oRs("prs_bedrijfadres_loglevel").value
};
if (!bedrijfadres.key && oRs("aut_client_id").Value == 'FCLTAPP1') // NWNX is de enige die we hardcoded ondersteunen
{
bedrijfadres.url = S("puo_apppushurl"); // "http://facilitordev.azurewebsites.net/api/Notification/SendNotification"; Ooit ook uit een kanaal
//bedrijfadres.XSLbedr = '../appl/shared/fcltapp1.xsl';
if (!bedrijfadres.url)
{
Log2File(1, "APP bericht: '" + p_msg + "' *niet* verzonden naar " + p_perslid_key + " want puo_apppushurl niet geconfigureerd.");
oRs.MoveNext()
continue;
}
}
if (!bedrijfadres.url)
{
oRs.MoveNext()
continue;
}
if (!oRs("aut_client_perslid_pushtoken").Value)
{
Log2File(1, "APP bericht: '" + p_msg + "' *niet* verzonden naar " + p_perslid_key + " want aut_client_perslid_pushtoken is leeg");
oRs.MoveNext()
continue;
}
// Dit zou ik het liefst doen met een stylesheet achtige oplossing en dan een XML2JSON
// Enerzijds wil je echter gewoon de volledige standaard xml_content gebruiken
// maar anderzijds zit daar in het bijzonder het pushtoken niet in
// Bovendien kan ik me ook goed een APP voorstellen waarbij het pushtoken in de url moet komen,
// dat red je ook weer niet echt met een stylesheet.
// Welbeschouwd moet er misschien beter een plugin achtige constructie komen?
// Praktijk afwachten maar
if (bedrijfadres.url == "https://fcm.googleapis.com/fcm/send")
{
var json = { "notification":
{
"title" : "Facilitor",
"body" : p_msg
},
"to" : oRs("aut_client_perslid_pushtoken").Value,
"data" : {
"title" : "Facilitor",
"body" : p_msg
}
};
if (S("puo_forceapppushtoken"))
{
json.notification.to = S("puo_forceapppushtoken");
}
if (p_url)
{
json.data["url"] = p_url;
json.data["fullurl"] = S("puo_fclt_web_url") + p_url; // als de APP een webclient van FACILITOR is kan hij hier 'naar toe' springen
}
}
else
{
var json = {
"Title" : "Facilitor",
"Message" : p_msg,
"Tag" : oRs("aut_client_perslid_pushtoken").Value,
"notification" : noti_json
};
if (S("puo_forceapppushtoken"))
{
json.Tag = S("puo_forceapppushtoken");
}
if (p_url)
{
json["Url"] = p_url;
json["FullUrl"] = S("puo_fclt_web_url") + p_url; // als de APP een webclient van FACILITOR is kan hij hier 'naar toe' springen
}
}
var body = JSON.stringify(json);
var forcemsg = "APP bericht: '{0}' wordt via {1} verzonden naar: {2}/{3}".format(p_msg, oRs("aut_client_id").Value,
oRs("prs_perslid_naam_friendly").Value,
oRs("aut_client_perslid_device_id").Value);
forcemsg += "\n Registered pushtoken: " + oRs("aut_client_perslid_pushtoken").Value;
if (S("puo_forceapppushtoken"))
{
forcemsg += "\n (effective to pushtoken: " + json.Tag + ")";
}
Log2File(1, forcemsg);
Log2File(1, "Payload: " + body);
var params = bedrijfadres;
params.data = body;
params.headers = { "Content-Type": "application/json" };
if (bedrijfadres.url == "https://fcm.googleapis.com/fcm/send")
{
params.headers["Authorization"] = "key={0}".format(bedrijfadres.certificateName); // let op: bedrijfadres.password is natuurlijk logischer maar die is met DB37 te klein
}
var xmlHTTP = doHTTP(bedrijfadres.url, params);
if (xmlHTTP.status >= 200 && xmlHTTP.status <= 299)
{
APPsend = true;
}
else
{ // errors blijven status 200 opleveren en zijn door doHTTP nog niet gelogged
Log2File(0, "APP push xmlHTTP error "
+ xmlHTTP.status + "/ " + xmlHTTP.statusText
+ "/" + xmlHTTP.responseText);
}
oRs.MoveNext()
}
oRs.Close();
return APPsend;
}