geplaatst door: Cenobyte
Ik heb eigenlijk voor een zelf ontwikkelde CRM applicatie een simpel script nodig die een brug vormt tussen mijn CRM applicatie en onze VOIP software. Ik heb een script gemaakt, maar krijg het niet werkend.

Als onze telefoon rinkelt kan ik onze VOIP software een commando laten uitvoeren met het telefoonnummer als argument erachter, bijvoorbeeld: GEEFDOOR %telefoonnummer%. Op dit moment is GEEFDOOR een klein programma dat het telefoonnummer in een tekstbestand wegschrijft zodat mijn CRM applicatie dit nummer op kan pakken en aan de gebruiker de erbij behorende NAW gegevens toont. Op dit moment is GEEFDOOR een veel te zware app (gecompileerd 17MB groot) die dan opstart, het telefoonnummer als tekstbestand wegschrijft en daarna meteen sluit. De app loopt echter regelmatig vast/sluit niet af waardoor het systeem dan stopt met werken totdat je de app geforceerd afsluit.

Mijn idee was dan ook om i.p.v. de GEEFDOOR app een simpel AppleScript te schrijven. Dit is gelukt en in theorie werkt het, maar in de praktijk niet. Blijkbaar pakt AppleScript wel externe argumenten aan, maar alleen als het als script wordt uitgevoerd. Zodra ik het script compileer tot app, werkt dit niet meer. En ik kan het script vanuit de VOIP software alleen aanroepen als app, niet als script.  :dontgetit:

Iemand een idee/oplossing hiervoor?

use scripting additions
on run args
set the text item delimiters to linefeed
try
set theArgs to quoted form of args as text
on error
set theArgs to "error"
end try
set this_story to theArgs & return & ((current date) as string) & return
set theFile to ((("Macintosh HD:Users:mariovanginneken:Library:Application Support:Comos:") as string) & "wieheeftgebeld.txt")
writeTextToFile(this_story, theFile, true)
end run

on writeTextToFile(theText, theFile, overwriteExistingContent)
try

-- Convert the file to a string
set theFile to theFile as string

-- Open the file for writing
set theOpenedFile to open for access file theFile with write permission

-- Clear the file if content should be overwritten
if overwriteExistingContent is true then set eof of theOpenedFile to 0

-- Write the new content to the file
write theText to theOpenedFile starting at eof

-- Close the file
close access theOpenedFile

-- Return a boolean indicating that writing was successful
return true

-- Handle a write error
on error

-- Close the file
try
close access file theFile
end try

-- Return a boolean indicating that writing failed
return false
end try
end writeTextToFile

Groetjes,
Mario  -
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 11:05    reactie #1
geplaatst door: Jakko W
echo "%telefoonnummer%" > "/Users/mariovanginneken/Library/Application Support/Comos/wieheeftgebeld.txt"
Aangenomen dat de software die dit aanroept, %telefoonnummer% vervangt door het nummer, schrijft dit commando het nummer naar het bestand.

Daarbij wordt wel elke keer het bestand overschreven, dus er staat nooit meer dan één nummer in. Wil je ook oude nummers behouden, vervang dan > door >> — daarmee wordt elk nummer op een nieuwe regel in het bestand gezet.
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 11:21    reactie #2
geplaatst door: Cenobyte
Ik had die methode ook al geprobeerd inderdaad en vanuit Terminal werkt die, maar het probleem is dat de VOIP software volgens mij alleen een applicatie toestaat en daarbij een argument. Ik heb al ECHO als applicatie en de rest van de regel als argument geprobeerd maar daar trapt ie niet in....
Groetjes,
Mario  -
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 11:28    reactie #3
geplaatst door: mcmt
Volgens deze link kan je de argumenten opvragen via NSProcessInfo.
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 14:23    reactie #4
geplaatst door: Cenobyte
Bedankt, dat werkt inderdaad. Hij haalt nu als app wel de argumenten mee  :worship:
Pff, ik zit er volgens mij erg dicht tegenaan, maar krijg hem toch niet werkend, blijft een "false" geven in de writeTextToFile...  :shocked:

Deze heb ik nu (en ja, veel onnodige string transfers  :happy: ):

use framework "Foundation"
use scripting additions

on run
set the text item delimiters to linefeed
set arguments to (current application's NSProcessInfo's processInfo's arguments) as list
if first item of arguments contains "osascript" then set arguments to rest of arguments -- skip osascript path
if (count arguments) is 1 then set end of arguments to "no arguments"
repeat with anItem in rest of arguments -- skip the main executable path

set theArgs to quoted form of anItem as text
set this_story to theArgs & return & ((current date) as string) & return
set theFile to (path to home folder as text) & "Library:Application Support:Comos:wieheeft1.txt"
writeTextToFile(this_story, theFile, true)
--display dialog this_story
--display dialog theFile

end repeat
# osascript still returns the last result
end run

on writeTextToFile(theText, theFile, overwriteExistingContent)
try

-- Convert the file to a string
set theFile to theFile as string

-- Open the file for writing
set theOpenedFile to open for access file theFile with write permission

-- Clear the file if content should be overwritten
if overwriteExistingContent is true then set eof of theOpenedFile to 0

-- Write the new content to the file
write theText to theOpenedFile starting at eof

-- Close the file
close access theOpenedFile

-- Return a boolean indicating that writing was successful
return true

-- Handle a write error
on error

-- Close the file
try
close access file theFile
end try

-- Return a boolean indicating that writing failed
return false
end try
end writeTextToFile

Bewerkt: 23 juni 2023 - 14:37 door Cenobyte
Groetjes,
Mario  -
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 15:18    reactie #5
geplaatst door: mcmt
Probeer eens

on writeTextToFile(theText, theFile, overwriteExistingContent)
try
...
-- Open the file for writing
tell current application
set theOpenedFile to open for access file theFile with write permission
end tell
...
end writeTextToFile

(volgens ShaneStanley in deze link).
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 16:35    reactie #6
geplaatst door: Cenobyte
Ik had zelf deze al in elkaar gedokterd en die lijkt nu te werken!

Bedankt voor het duwtje in de goede richting  :thumbs-up:

use scripting additions
use framework "Foundation"

on run
set the text item delimiters to linefeed
set arguments to (current application's NSProcessInfo's processInfo's arguments) as list
if first item of arguments contains "osascript" then set arguments to rest of arguments -- skip osascript path
if (count arguments) is 1 then set end of arguments to "no arguments"
repeat with anItem in rest of arguments -- skip the main executable path

set theText to anItem as text
set filename to "wieheeftgebeld.txt"
set thepath to (path to home folder as text) & "Documents:"
set myFile to thepath & filename

writeTextToFile(theText, myFile)
--display dialog this_story
--display dialog theFile

end repeat
# osascript still returns the last result
end run

on writeTextToFile(theText, theFilew)
try

-- Convert the file to a string
set theFilew to theFilew as string

-- Open the file for writing
set theOpenedFile to open for access theFilew with write permission

-- Clear the file if content should be overwritten
set eof of theOpenedFile to 0

-- Write the new content to the file
write theText to theOpenedFile starting at eof

-- Close the file
close access theOpenedFile

-- Return a boolean indicating that writing was successful
return true

-- Handle a write error
on error

-- Close the file
try
close access file theFile
end try

-- Return a boolean indicating that writing failed
return false
end try
end writeTextToFile

Groetjes,
Mario  -
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 18:59    reactie #7
geplaatst door: het ModeratorTeam
van het ModeratorTeam De titel van dit draadje is aangepast (was “Simpel script nodig”), zodat het duidelijker is waar het om gaat en beter vindbaar is.
met vriendelijke groet, het ModeratorTeam
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 19:38    reactie #8
geplaatst door: Jakko W
Ik had die methode ook al geprobeerd inderdaad en vanuit Terminal werkt die, maar het probleem is dat de VOIP software volgens mij alleen een applicatie toestaat en daarbij een argument.
Maar een AppleScript kun je wel aanroepen? Dan kun je een heel eenvoudig AppleScript maken dat niet veel meer doet dan (let op: dit is niet getest!):
on run
do shell script "echo \"" & args &"\" > \"/Users/mariovanginneken/Library/Application Support/Comos/wieheeftgebeld.txt\""
end run
Simpel script nodig tussen CRM applicatie en VoIP software
23 juni 2023 - 20:27    reactie #9
geplaatst door: Cenobyte
Maar een AppleScript kun je wel aanroepen? Dan kun je een heel eenvoudig AppleScript maken dat niet veel meer doet dan (let op: dit is niet getest!):
Nee, een AppleScript zelf kon ik niet aanroepen, alleen een gecompilede versie ervan ("Exporteer als app"). Blijkbaar gelden er dan ook ineens andere regels, dus moest ik de manier met NSProcessInfo toepassen en dat werkte wel, na enkele uren knutselen  :withstupid:
Groetjes,
Mario  -
Simpel script nodig tussen CRM applicatie en VoIP software
24 juni 2023 - 10:22    reactie #10
geplaatst door: mcmt
Hieronder een klein test scriptje uitgevoerd in Swift Playgrounds.

import Foundation

let homeURL = FileManager.default.homeDirectoryForCurrentUser
let commandURL = URL(fileURLWithPath: "Desktop/LogCallerID.app/Contents/MacOS/applet", relativeTo: homeURL)
//let commandURL = URL(fileURLWithPath: "Desktop/LogCallerID.sh", relativeTo: homeURL)

for i in 1...100 {
    try Process.run(commandURL, arguments: ["callerid: \(i)"]).waitUntilExit()
}

Het script roept (sequentieel) 100 keer een "caller id log" commando aan, en wacht telkens tot het uitgevoerd is. De eerste variant is de AppleScript app. Resultaat: ca. 10 calls per seconde.

De tweede variant is onderstaand executable shell script.

#!/bin/sh

echo $1 > ~/Desktop/CallerIDLog.txt

Dit script krijgt de caller ID parameter binnen en geeft die door aan het echo commando. (Maar of de VoIP software deze variant kan uitvoeren is mij niet duidelijk.) Resultaat: ca. 20 calls per seconde. Sneller dan de AppleScript variant, maar niet dramatisch in deze test opstelling.
Bewerkt: 25 juni 2023 - 10:18 door mcmt