Η EMDI εκδίδει και ακυρώνει voucher ταχυμεταφορών καλώντας το script που ορίζεις στο αρχείο courier.ini (κύριος φάκελος EMDI/ρυθμίσεις courier).

Στον τρόπο αποστολής του παραστατικού συμπλήρωσε συντομογραφία εταιρίας (courier), χρήστη, κωδικό και sender id. Άνοιξε παραστατικό πωλήσεων και πάτησε το κουμπί voucher: αν το πεδίο voucher είναι κενό γίνεται δημιουργία· αν έχει αριθμό, ανοίγει παράθυρο κατάστασης (εκτύπωση/ακύρωση). Με δεξί κλικ στο κουμπί επιλέγεις επωνυμία αποστολέα, αν θα σταλούν είδη, και από ποια καρτέλα διεύθυνσης παίρνει τον παραλήπτη (πελάτης/αποστολή/παραλήπτης).

Πριν την κλήση η EMDI ελέγχει διεύθυνση+πόλη/περιοχή, ΤΚ, στοιχεία courier και βάρος > 0 (άθροισμα γραμμών ειδών, αν υπάρχει όγκος/εμβαδόν, χρησιμοποιεί το μεγαλύτερο από βάρος και ογκομετρικό βάρος = εμβαδόν/5000).
Γραμμές υπηρεσιών ρυθμίζουν επιπροσθέτως: παράδοση Σάββατο, προκαθορισμένη ώρα, ειδική διαχείριση, δέματα, παραλαβή από κατάστημα, χρέωση παραλήπτη, αντικαταβολή.

Παράδειγμα courier.ini:

script = βασική διεύθυνση κλήσεων. temp = URL φακέλου PDF (η EMDI κατεβάζει {courier}_{voucher}.pdf). Προαιρετικά pdf_software / pdf_attributes για τοπική εκτύπωση. Με check_payment=1, αν το παραστατικό δεν είναι εξοφλημένο, η αντικαταβολή γίνεται ίση με το σύνολο· διαφορετικά 0 (εκτός αν υπάρχει γραμμή αντικαταβολής).

Η εκτύπωση ετικέτας δεν διαβάζει πλέον ενότητα [print] ανά εταιρία: μετά τη δημιουργία καλείται πάντα {script}?action=print+συντομογραφία+&voucher=…&cppass=…. Τοπικό exe μπορεί ακόμα να χρησιμοποιεί placeholders:

Placeholder Περιγραφή
#senderid Κωδικός αποστολέα
#courieruser/#courierpass Σύνδεση courier
#cpuser/#cppass Χρήστης/κωδικός εφαρμογής
#voucherno Αριθμός voucher

Endpoints

Μέθοδος Όνομα Παράδειγμα
POST print (δημιουργία) {script}?…&action=print&… + form body
GET view {script}?…&action=view&…
GET cancel{courier} …&action=cancelspeedex&…
GET print{courier} {script}?action=printspeedex&voucher=…

Δημιουργία = POST hybrid (παράμετροι στο URL + σώμα company_data, products, προαιρετικά pdf). Άνοιγμα/ακύρωση/εκτύπωση ετικέτας = GET. Στην ELTA τα κουμπιά εκτύπωσης/ακύρωσης στο παράθυρο voucher κρύβονται.

POSTprint· δημιουργία voucher · text/plain
{script}?courier=&rec_date=&courieruser=&courierpass=&cpuser=&cppass=&senderid=&rec_name=&rec_company=&rec_floor=&rec_address=&rec_area=&rec_zip=&rec_telephone=&rec_mobile=&quantity=&weight=&notes=&cashondelivery=&relateddoc=&rec_country=&sendername=&action=print&emdiuser=&saturday=&exact=&special=&office=&recipientbilling=

Απάντηση: αριθμός_voucher|μήνυμα. Αν λείπει ο αριθμός (ή περιέχει αλλαγή γραμμής), η EMDI δείχνει το μήνυμα μετά το | και σταματά.

Query Περιγραφή
courier Συντομογραφία (speedex, acs, elta, dhl, …)
rec_date Ημ/νία αποστολής yyyymmdd (παράδοση ή ημ/νία παραστατικού)
courieruser/courierpass Στοιχεία σύνδεσης
cpuser/cppass Χρήστης/κωδικός εφαρμογής
senderid Κωδικός αποστολέα
rec_* Παραλήπτης: όνομα, εταιρία, όροφος (ΤΘ), διεύθυνση, περιοχή+πόλη, ΤΚ, τηλ., κινητό, χώρα
quantity Δέματα (προεπιλογή 1· από γραμμή «ΔΕΜΑΤΑ ΑΠΟΣΤΟΛΗΣ»)
weight Υπολογισμένο βάρος
notes Σχόλιο παραστατικού (# → κενό)
cashondelivery Αντικαταβολή (βλ. check_payment/γραμμές)
relateddoc Σειρά + αριθμός παραστατικού
sendername Επωνυμία αποστολέα (εταιρία ή επιλογή μενού)
action Πάντα print
emdiuser Χρήστης άδειας EMDI
saturday Παράδοση Σάββατο: 1/0
exact Ώρα HH:nn αν υπάρχει «ΠΡΟΚΑΘΟΡΙΣΜΕΝΗ ΩΡΑ»
special Ειδική διαχείριση (1 ή κείμενο μετά τον τίτλο)
office Παραλαβή από κατάστημα: 1/0
recipientbilling Χρέωση παραλήπτη: 1 ή κενό

Σώμα POST (form fields):

Field Περιγραφή
company_data Στοιχεία εταιρίας EMDI: διεύθυνση|ΤΚ|πόλη|χώρα|τηλέφωνα|ΑΦΜ
products Γραμμές ειδών αν ενεργό «είδη στο voucher» ή courier=dhl. Μορφή ανά γραμμή: κωδικός|περιγραφή|ποσότητα|σύνολο_με_ΦΠΑ|βάρος και προαιρετικά |taric· τέλος γραμμής \n. Σε DHL με είδη ξεκινά με _.
pdf Base64 PDF παραστατικού — υποχρεωτικό αρχείο για DHL εκτός ΕΕ (ζώνη παραλήπτη ≠ EU)· αλλιώς παραλείπεται αν δεν υπάρχει αρχείο.
GETview· άνοιγμα και ιχνηλάτηση
{script}?courier=&rec_date=&courieruser=&courierpass=&cpuser=&cppass=&senderid=&relateddoc=&voucher=&action=view&emdiuser=&lang=

Καλείται όταν υπάρχει ήδη αριθμός voucher. Η EMDI ανοίγει τον σύνδεσμο και δείχνει το HTML στο παράθυρο voucher.

GETcancel{courier}· ακύρωση
{script}?courier=&…&voucher=&action=cancel{courier}&emdiuser=&lang=

Από το URL του view αντικαθιστά το action=view με action=cancel + συντομογραφία (π.χ. cancelspeedex). Όχι σκέτο action=cancel. Μετά καθαρίζει το πεδίο voucher στο παραστατικό.

GETprint{courier}· ετικέτα PDF
{script}?action=print{courier}&voucher=#voucherno&cppass=#cppass

Μετά επιτυχή δημιουργία η EMDI καλεί αυτόν τον σύνδεσμο, κατεβάζει το PDF στο files\vouchers\{courier}_{voucher}.pdf και αν έχει οριστεί πρόγραμμα PDF το εκτυπώνει.
Αλλιώς ανοίγει απευθείας το URL εκτύπωσης.

Ενδεικτικό παράδειγμα σε PHP (ανά εταιρία δικό της include):

Η μορφή απάντησης πρέπει να είναι voucher|μήνυμα ώστε η EMDI να αποθηκεύει τον αριθμό στο παραστατικό.