Ehrlich gesagt habe ich lange darüber nachgedacht, ob ich dieses Material veröffentlichen soll. Für diejenigen, die wissen, wie man mit AMI Asterisk arbeitet, gibt es hier nichts Interessantes. Für diejenigen, die gerade erst anfangen, etwas zu tun, ist es unwahrscheinlich, dass sie meinen Code verstehen (obwohl ich versucht habe, klar zu schreiben). Ich wang Kommentare wie: "Warum Habr für Ihre Notizen verwenden?". Andererseits kann das unter dem Schnitt gezeigte Skript der Ausgangspunkt einer Person sein. Das Skript führt nur alle Ereignisse vom AMI an die Konsole aus und kann sie filtern. Zum Beispiel zeige ich in der Konsole alle Aufrufe, die in einen der Kontexte "zadarma-in" oder "sibseti_in" fallen. Bei Interesse frage ich unter dem Schnitt:
In Echtzeit musste überprüft werden, von welcher Amtsleitung der Anruf kam, welche Tasten der Benutzer drückte, wer den Anruf entgegennahm usw. Lange wollte ich versuchen, mit AMI von Python zu arbeiten, hatte vorher ein wenig Erfahrung mit Bash und organisierte dann einen Rückruf.
Nachdem ich in verschiedenen vorgefertigten Bibliotheken gestöbert hatte, wurde mir schnell klar, dass keine von ihnen zu mir passt. Als Ergebnis wurde sein eigenes „Fahrrad“ in Form eines Skripts erfunden, das alle Informationen von AMI an json sendet. Standard-Python-Bibliotheken werden verwendet. Das Plus ist, dass es in dieser Form einfach ist, Ereignisse zu empfangen und zu analysieren, ohne die Verbindung zu einem bestimmten Anruf zu verlieren.
Das erste Skript druckt nur die Ereignisse aus, die in einen der Kontexte "zadarma-in" oder "sibseti_in" fallen.
Skript№1import telnetlib import json import re
Und das zweite Skript, das alle Ereignisse in die Konsole schreibt und beide Skripte betrachtet, macht deutlich, was geändert werden muss, um das gewünschte Ergebnis zu erzielen. Wenn es nicht ganz klar ist, müssen Sie json "string [mes]" in der Funktion "def telnet_for_string (string)" analysieren:
Skript Nummer 2 import telnetlib import time import json import re