Bestellabwicklung per Asterisk-AGI - Mithilfe gesucht

HobbyStern

Aktives Mitglied
Mitglied seit
5 Dez 2005
Beiträge
1,844
Punkte für Reaktionen
0
Punkte
36
Hallo Gemeinde,

ich habe eine etwas größere Aufgabe vor mir - teils steht das Gerüst - teils stehe ich etwas ratlos da

:confused:

Ich möchte gerne für dezentralisierte Standorte eine Bestellabwicklung per Asterisk lösen.

Asterisk soll sich einen Datensatz aus einer Liste holen, spielt per Cepstral (Text2Speech-System) den Artikelnamen und zus. Infos ab, fragt danach nach einer Menge und speichert diese wieder zurück.

Die Lösung soll möglichst so dynamisch sein wie es geht - so kann ich die Lösung nachher auf alles anwenden was ich will.

Meine große Frage besteht darin :

Woher hole ich mir meine Daten - also eine ArtNr, ArtikelName und eine Mengenvorgabe.

Es wäre ideal wenn ich * dazu bringen könnte eine Liste abzuarbeiten, also zBsp. eine CSV Datei per IFS auszulesen, Datensatz für Datensatz und danach dorthin die Mengeneingabe abspeichern lasse, ein MSSQL 2005 ist vorhanden, dort würde ich mir die Daten herholen, jedoch würde ich sie ungerne dorthinein direkt zurückladen, sondern dieses lieber über eine offiz. Schnittstelle zur Warenwirtschaft (CSV) machen.

Puhh...das ist kompliziert ausgedrückt. Schlichtweg würde ich gerne:

Daten abrufen,
vorlesen,
Menge abfragen,
Menge zurückspeichern oder schlichtweg eine Neue Liste mit den Mengen erstellen.

Ich hoffe das war halbwegs verständlich.

Ich würde mich freuen wenn jemand mit mir denken würde...
Das System existiert bereits, allerdings mit einer statischen Fragenanzahl und einer statischen Listenrücksendung - jedoch wird es schwierig wenn sich die Listenlänge verändert.

LG Stefan
 
Warum nicht per AGI PHP Script mit FreeTDS den MSSQL in Echtzeit abfragen und die Daten in mySQL speichern (cachen).
Die Bestellung dann ebenfalls in mySQL speichern und dann per cron/PHP regelmäßig eine csv Datei erzeugen die dann in das WWS eingelesen wird.
Man konnte danach noch kontrollieren ob das auch angekommen ist.

Mit FreeTDS habe ich zumindest mit MSSQL2000 gute Erfahrungen gemacht.
 
Hallo,

nur als kleine Anmerkung, PHP kann CSV bequem mit fputcsv schreiben. Während das Skript läuft, kann man die Daten in ein (mehrdimensionales) Array legen. Da brauchts den Umweg über mySQL nicht.

Svenja
 
@Thomas

Mit FreeTDS arbeite ich hier auch - ebenfalls mit einem MSSQL 2005 - "works like a shame" - jedoch frage ich dort nur ab - meine letzten Gehversuche mit "richtigen" Datenbankarbeiten (nicht nur SELECT) sind einfach zu lange her als das ich mich "mal eben" trauen würde.

Warum nicht per AGI PHP Script mit FreeTDS den MSSQL in Echtzeit abfragen und die Daten in mySQL speichern (cachen)

So in der Art (allerdings ohne Cache, da zu dynamisch und am einfachsten direkt in eine TEMP DB des MSSQL05) hatte ich das auch vor.

Was mir gedanklich noch schwer fällt ist das abrufen der einzelnen Artikel, so dass ich Asterisk in einer Art Schleife laufen lassen kann...

Vielleicht denke ich aber auch zu viel und die Lösung ist eigentlich ganz einfach...?!

@Svenja

Uff, das wusste ich nicht - wäre aber wahrscheinlich auch nicht den Weg des MySQL Caches gegangen, da MySQL bei mir nicht redundant ist und somit Gefahr laufen "könnte" auszufallen, MSSQL ist redundant angelegt, Asterisk ebenfalls.

LG Stefan
 
Was mir gedanklich noch schwer fällt ist das abrufen der einzelnen Artikel, so dass ich Asterisk in einer Art Schleife laufen lassen kann...

Stichwort: Transaktionsverarbeitung, sollte MSSQL aber auch können.

Du wirst mit Reservierungen arbeiten müssen die Du bei finaler Bestellbestätigung in verfügbarkeitsmindernde Buchungen überführst.
 
Okay, hast Du da jemanden der das im kleineren Gewerbe ausführen kann? Es geht ja theoretisch "nur" um ein paar Zeilen stimmigen PHP konformen Code, das Gesamtkonstrukt muss ich eh herumbauen.

LG Stefan
 
Hallo,

Reservierungen hört sich nett an. Diese würde man jeweils nach Eingabe der Menge anlegen. Idealerweise wird am Ende noch einmal alles vorgelesen - inklusive bestellter Mengen und genau dann bestätigt "ja will ich haben" sowie eine Bestellung generiert. Ist die Frage ob Reservierungen zwingend notwendig sind, da man dann diese in die Datenbank eintragen muss. Da fehlt es teilweise an Doku zur Datenbank der Warenwirtschaft und man sollte dann auf entsprechende Schnittstellen zurückgreifen.

Wie wird denn überhaupt festgelegt wer bestellt/an wen geliefert werden soll? Das würde ich auch noch einbauen - oder ist das ausreichend hier die Numer des Anrufers festzuhalten?

Falls sich noch keiner gefunden hat der das umsetzt -> PN.

Gruß
 
Hey,

um das ganze nochmals kurz zu umreißen - es geht um eine innerbetriebliche Bestellung, also keine externen Kunden. Vorlesen ist nett - ich würde es auf "Nachfrage" einbauen, s.h. "Möchten Sie Ihre Eingaben nochmals hören? 1 für.."

Aktuell wird per Fax bestellt, das Problem an Fax ist - die Vergangenheitsbestellungen müssen manuell berücksichtigt werden (mit einem Wochenjournal für 4 Wochen der Vergangenheit) - hier kann ich mir jetzt bereits eine Durchschnittszahl AVG "mal eben" holen und somit vorlesen lassen.

Beispiel : "Sie hatten in den letzten 4 Wochen durchschnittlich 4 Stück 'Baumstamm'. Wieviele möchten Sie heute?"

Oder in Real-Kurzform : "Artikel Baumstamm, Durchschnitt 4. Bestellmenge?"

Wie gesagt - ich kann an diesem Projekt das TTS, die Datenabfragen und auch das Zusammenspiel stellen, das habe ich schon einige Male hier verbaut. Ich habe nur leider keine Ahnung von solchen Datenbank ab- und Rückfragen wie ich sie hier benötige.

Vielleicht findet sich hier ein Weg zu einem öffentlichen Projekt - einer WinWin Situation durch Entgelt oder was weiss ich.

Größtes Nebenziel - das Kind soll so dynamisch sein wie es nur geht, wer weiss ob es nicht auch "Remissionen (Zeitungen)" oder "Retouren (Lebensmittel)" oder Hotelbuchungen zu "ver-asterisken" gibt, so könnte man mit einer AGI Routine alles abhandeln.

Die Übergabe an die jeweilige WaWi Schnittstelle sehe ich ebenfalls so - lieber sauber als ASCii oder CSV anbieten, den Import sollte dann der jeweilige Anbieter stellen.

Reicht das bereits als PN ? ;)

LG Stefan
 
Hallo,
...kann man die Daten in ein (mehrdimensionales) Array legen. Da brauchts den Umweg über mySQL nicht.
Svenja

Will man Transaktionsverarbeitung braucht man eine SQL Datenbank die das unterstützt.


OK, so etwas wird immer wieder gebraucht. Aber auch die Anforderungen sind individuell. Einer will nur reservieren und die p/o annehmen wenn Lager da ist oder sich Ware innerhalb von x-Tagen im Zulauf befindet, der andere nimmt alles an Bestellungen rein. Man muss verhindern das der Anrufer den Lagerbestand ausforschen kann oder durch eine Spassbestellung das ganze Lager reserviert, usw. usw.
Die Anforderungen sind dann doch schon sehr speziell, so dass ein universelles Paket doch relativ mächtig werden würde, und dann würde ich das auch nicht mit MSSQL machen wollen :)

Wo hängt es denn nun konkret: An den MS SQL-statements, PHP oder Asterisk code?
 
Zuletzt bearbeitet:
NAbend Thomas,

sitze gerade hier, genieße das schöne Wetter und habe einem Stück Papier nochmals sehr deutlich gemacht wie das ganze wohl ablaufen muss ... :

Im einfachsten Fall :

<Anforderung einer ArtNr> <Eingabe durch Nutzer> (Asterisk Dialplan, keinThema)

<Weitergabe der ArtNr als Variable an eine AGI> <AGI ruft live MSSQL ArtNr ab und erhält Artikelname und letzte Bestellwerte als SUM> (FreeTDS Abfrage, kein Thema, AGI - Übergabe der Variablen Asterisk<AGI>PHP mehr oder weniger Neuland)

<Cepstral spricht ArtName und Schnitt-Menge aus und bittet um Ordermenge>

<Asterisk nimmt Bestellmenge entgegen> <Speichert in ..?.. CSV>

Das ganze beginnt von vorne

Fragestellungen:

- Wie verfahre ich mit den Übergaben der Variablen AGI<>PHP
(Habe in den 5 (!) Jahren Asterisk immer einen Weg um AGI herum gefunden ;))

- Wenn wegspeichern in eine CSV, muss ich mich mit dem IFS in der Praxis vertraut machen - das wäre aber sicherlich gut, hier laufen einige Schnittstellen über CSV, so wäre Wissen in und um IFS sicher nicht schlecht.

- Ist ein live-Abruf aus der DB und live-konvertieren in ein wav/gsm file bei ca. 50 Bestellpositionen noch prickelnd? (Stichwort "Wartezeit"?) Minimieren könnte man die Wartezeit durch 2 Abfragen (also 1x ArtName holen und texten und dann aussprechen und parallel die Schnittmenge holen und danach sprechen)

Ich denke mal - alles andere ist schnick-schnack und nachher optional.

Was hälst Du davon - das ganze Ding *könnte* in einem 40-Zeilen-Skript und ~30 Zeilen Asterisk Dialplan enden...

LG Stefan
 
<Weitergabe der ArtNr als Variable an eine AGI> <AGI ruft live MSSQL ArtNr ab und erhält Artikelname und letzte Bestellwerte als SUM> (FreeTDS Abfrage, kein Thema, AGI - Übergabe der Variablen Asterisk<AGI>PHP mehr oder weniger Neuland)

OK, zwei Tabellen bestellkopf und bestellpos
Übergabe Var. in/aus PHP AGI ist auch zuverlässig


<Asterisk nimmt Bestellmenge entgegen> <Speichert in ..?.. CSV>
besser in SQL Tabelle bestellpos speichern und erst csv erzeugen wenn Kunden p/o bestätigt hat, so kann man auch anbieten das der Kunde sich die ganze Order noch mal vorlesen lässt oder einzelne Pos. ändert oder löscht wenn es ihm doch zu teuer ist.
Du hast nichts dazu geschrieben ob reserviert werden soll. Das würde die Sache aufwendiger machen.

- Wie verfahre ich mit den Übergaben der Variablen AGI<>PHP
(Habe in den 5 (!) Jahren Asterisk immer einen Weg um AGI herum gefunden ;))
ist auch kein Hexenwerk und funktioniert zuverlässig

- Wenn wegspeichern in eine CSV, muss ich mich mit dem IFS in der Praxis vertraut machen - das wäre aber sicherlich gut, hier laufen einige Schnittstellen über CSV, so wäre Wissen in und um IFS sicher nicht schlecht.
wie schon oben geschrieben, besser in SQL speichern und CSV erst erzeugen wenn Kunde p/o bestätigt hat. Mit shell Sripten würde ich nicht noch zusätzlich hantieren wollen. PHP reicht...

- Ist ein live-Abruf aus der DB und live-konvertieren in ein wav/gsm file bei ca. 50 Bestellpositionen noch prickelnd? (Stichwort "Wartezeit"?) Minimieren könnte man die Wartezeit durch 2 Abfragen (also 1x ArtName holen und texten und dann aussprechen und parallel die Schnittmenge holen und danach sprechen)
einmal erzeugten Text könnte man cachen und so Rechenzeit bei wiederholten Gebrauch sparen, auch wieder in eine SQL Datenbank speichern, evtl. noch einen cron job der files nach Nichtgebrauch nach x-Monaten löscht um Speicherplatz zu sparen.
 
Kunden p/o bestätigt hat
Wie geschrieben - hier geht es "nur" um interne Kunden - also eine interne Leistungsverrechnung von 15 x 60 Positionen am Tag (Aussenstellen bestellen Bedarfs und Verbrauchsmaterialien der tgl. Logistik) (Positionen rollen, verändern sich also - aber nur 1 x tgl.)

Eine Bestätigung wird nicht wirklich gebraucht, einfacher wäre eine "#" um die letzte Pos nochmals einzugeben - das geht ja locker über Ast.

LG Stefan
 
Zuletzt bearbeitet:
Wie geschrieben - hier geht es "nur" um interne Kunden - also eine interne Leistungsverrechnung von 15 x 60 Positionen am Tag (Aussenstellen bestellen Bedarfs und Verbrauchsmaterialien der tgl. Logistik) (Positionen rollen, verändern sich also - aber nur 1 x tgl.)

OK, trotzdem würde ich den ganzen Job in einer mySQL Datenbank speichern und erst am Ende einmal PHP aufrufen und csv für die WWS erzeugen.
 
Hey Thomas,

erstmal wünsche ich einen schönen Sonntag.

Könntest Du mir denn dabei helfen? Und wenn - in welchem Rahmen. MySQL + PHP + AGI - das sind alles eher basisorientierte Wissensgebiete bei mir.

LG Stefan
 

Zurzeit aktive Besucher

Statistik des Forums

Themen
246,512
Beiträge
2,253,338
Mitglieder
374,331
Neuestes Mitglied
darkgeta1973
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.